꼼꼼한 재은씨의 Swift 책을 읽다가 한문장에서 눈이 멈췄다.
이 글을 읽고 두가지 생각이 들었다. 먼저는 개발을 조금만 더 빨리 만낫으면 좋았겠다라는 생각과 SDK Error가 떠올랐다
초기에 iOS에는 사용자가 개발한 앱을 추가할 수 없었습니다. 사용할 수 있었던 것들은 단지 애플에서 제공하는 기능들과 기본적이 시스템 앱뿐이였죠. 그러나 2008년 6월 이후 iOS용 소프트웨어를 개발할 수 있는 도구인 SDK가 공개되면서 일반 사용자가 개발한 앱도 iOS에 설치하여 사용할 수 있게 되었습니다. 현재에는 애플의 앱 스토어를 통해 사용자가 자유롭게 애플리케이션을 제공하고 판매할 수 있습니다.
RN으로 개발을 하면서 요즘 가장 괴로운건 Build 에러이다. Android와 iOS를 한꺼번에 개발할수 있다는 장점이 크지만, 다르게 동작할 가능성을 고려해서 Android와 iOS기기를 하나하나 크로스체크해야한다. 그런데 UI를 화면에 띄우는 build 작업에서 수십가지 에러를 만난다. 그렇게 코드에만 집중할수 없는 괴로운 시간들을 거치게 된다.
이때 만나는 Error 중 한 부류가 SDK 에러이다. 주로 Android Emulator에서 발생하기 때문에 iOS의 SDK에 대해서는 깊이 생각해본적이 없었다.매번 구글링으로 해결책만 가져오다보니 SDK가 구체적으로 뭔지 알지 못한다는 생각이들었다.
Software development kit
SDK는 앱을 개발하고 실행하는데 필요한 도구와 화면을 모두 포함한다. 소프트웨어 개발에 사용되는 도구와 라이브러리의 집합이라고 할수있다. SDK가 제공되지 않는다는건 특정 OS에서 동작하는 앱을 만들도록 허용하지 않는다는 뜻이기도하다.
아래 이미지는 iOS 프레임워크의 계층 구조이다
아래쪽으로 내려갈수록 하드웨어에 가까운개념이다.
각 단계에 대한 설명은 블로그에 잘 정리되어있는 관계로 이 포스팅에서는 SDK에 대해서 좀더 집중하려한다.

위에서 SDK가 소프웨어개발에 필요한 모든것이라고 언급한바 있다.
이미지 가장 하단에 있는 Core OS 부터 프레임워크 하나까지도 SDK의 구성요소라고 할 수 있다. 개발도구인 Xcode와 시뮬레이터도 SDK의 범주안에 포함된다.
RN으로 프로젝트를 생성하면, RN으로 구성된 폴더외에, iOS 폴더와 Android 폴더가 각각 생성 된다. 당연하게만 생각했는데 각 플랫폼의 개발환경을 구성하기 위한 폴더였고 거기에는 각각의 고유한 SDK 구성이 포함되어있었다는 사실을 인지하게 되었다.
크로스 플랫폼은 하나의 언어로 iOS와 Android를 모두 대응하는 App을 만들수 있다는 편리함이 있지만, iOS 프레임워크 계층구조를 살펴보면 UIKit 이상의 영역부터 통일 되는듯하다. 그외의 영역은 각각 별개의 SDK로 동작하기에 두 플랫폼의 특성을 이해하고 Control 해야한다.
| - | 개발환경(IDE) | 라이브러리 관리 | 가상기기 | 프레임워크 |
|---|---|---|---|---|
| iOS | Xcode | CocoaPods | 시뮬레이터 | Cocoa Touch 프레임워크 |
| Android | Android Studio | Gradle | 에뮬레이터 | Android SDK |
그동안 동일한 코드로 실행한 프로젝트가
iOS에서 빌드 되지않는문제,
Android에서는 기능이 동작하지 않았던 문제,
특정 Device에서만 UI가 깨지는 문제라던가
무수한 Bug들로 고통받았던 지난 시간들이 있었고
똑같은 코드인데 왜 ?! 라는 생각에 이해가 되지 않았고 괴로웠다.
오늘 이 포스팅을 통해서 코드가 앱의 기능으로 동작하기까지 여러 구성요소들을 거쳐야한다는 점을 고려하니, 그동안 발생했던 Bug에 대해서 어느 정도 수긍이 되었고, iOS Bug / Andorid Bug 라고만 분류했던 것을 넘어서 세분화된 접근이 필요하다는 것을 알게되었다.
iOS Cocoapods 라이브러리에 관해서 포스팅 예정
React Native는 JS 코드를 안드로이드, iOS의 SDK에 브릿징을 통해 각 플랫폼에 구동을 시키는 것으로 알고 있어요
그래서 같은 JS 코드여도 각 플랫폼의 네이티브 코드의 작동이 다르면 UI가 다르게 보이거나 다르게 작동할 수 있는 거죠
저는 RN으로 개발할 때 그림자 적용하다 정신이 나갈 뻔 했었죠..
안드로이드랑 iOS 다르고, 안드로이드는 기기별로 다르고..
SDK하니까 생각나는건데 아이폰의 '시계' 앱을 보면 초침이 움직이는 것을 볼 수 있습니다
이 기능은 내장 '시계' 앱에만 가능하고 외부 개발자는 이 기능을 사용할 수 없어요
애플이 SDK에 이 기능을 사용할 수 있는 API를 제공하지 않기 때문이죠
다음 주제로 CocoaPods이랑 Swift Package Manager까지 같이 다뤄보시는 거 어떤가요?
CocoaPods 혹은 Carthage가 대세인 상황에서 애플이 Swift Package Manager를 제공하기로 결정한 배경이 무엇인지 알아보면 좋을 것 같습니다