지난 포스팅에서 iOS와 Andorid의 SDK에 대해서 공부했던 내용에 이어서 이번에는 iOS의 SDK에 초점을 맞춰서 포스팅을 업로드한다.
iOS SDK의 중심에 있는건 코코아터치 프레임워크이다. 터치기반의 App을 제작하기 위한 핵심 프레임워크의 모음이다. iOS 운영체제와 App의 사이를 중계하는 인터페이스이기때문에, Apple 생태계에서 App을 만든다는건 코코아터치 프레임워크를 어떻게 다루는가와 동일한 의미라고 봐도 무방하다.iOS 앱을 개발하는데 필수적인 내장프레임워크를 제공한다.
구성요소
프레임워크 역할 Foundation Framework 핵심 객체와 네트워크, 문자열 처리 UIkit Framework 유저 인터페이스 GameKit Framework 게임센터 연동 및 근거리 P2P 연결 MapKit Framework 위치 정보나 지도 관련 서비스 Address Book UI Framework 주소록앱의 인터페이스와 기능을 연결 EventKit UI Framework 이벤트 처리에 필요한 유저 인터페이스 제공 Message UI Framework 메세지 앱의 인터페이스와 기능을 연결 UserNotifications Framework 사용자 알림 처리 WebKit Framework 웹 관련 기능 제공
코코아터치에서 제공하는 프레임워크만으로는 코드의 가독성이 떨어지거나 기능적인 보완이 요구될때는 외부라이브러리가 필요하다. 외부라이브러리는 Third Party라고도 부른다. 그리고 외부라이브러리는 Dependency Manager를 통해서 관리된다. 의존성 관리도구는 여러가지가 있는데 그중 가장 널리 사용되는 개념이 Swift Package Manager와 cocoaPods이다. 그리고 각각의 방법은 iOS 앱개발에서 다른 접근방식을 제공한다.
$pod install은 왜 매번 해야하는 걸까.. ?
RN 프로젝트에서 라이브러리를 추가하면, iOS 번들에도 추가된 내용이 적용되어야하는데 자동으로 되지않는다.vscode의 Source control을 관찰하면, yarn add로 라이브러리를 설치 후 pod install을 실행해야 iOS 관리 파일인인 Info.plist와 Podfile이 변경되는걸 확인할 수 있다..
| $yarn add | $pod install |
|---|---|
![]() | ![]() |
SPM은 swift 프로젝트에서 사용해본 경험이 있고, 큰규모가 아니여서 일수도 있지만
Dependency Manager로 인한 오류가 거의없었던걸로 기억한다.
의존성에대해서 크게 신경쓰지 않아도 됬으니 프로젝트를 빌드할때 쾌적하다는 생각이 들었다.
반대로 CocoaPods은 현재 RN 프로젝트에서 사용하고 있는 의존성관리 도구이다.추가가 안되는 대부분의 라이브러리가 설치 가능하다는 점은 꽤나 큰 장점으로 다가온다.
설치할 또한 수월했었다.하지만 꽤 자주 $cd ios & pod install을 해줘야한다는 점과
빌드 도구와의 호환성 문제로 App build에 브레이크가 걸리는 상황이 많다.
프로젝트가 생성될때 셋팅되기 때문에 Dependency Manager의 선택지가 없다는 생각이들지만 좀 더 찾아봐야겠다.
개인적으로는 Swift Package Manager가 훨씬 쾌적하다고 느끼지만 Swift 프로젝트에서만 사용이 가능하다는점은 많이 아쉬운것같고, CocoaPods의 경우 build error를 없앨 수는 없으니 애증을 가지고 더 공부해야겠다는 생각이 든다.
SPM은 빌드 파일만 가지고 와서 사용하는 방식이라 클린할 때마다 싹 다 다시 빌드해야 하는 cocoapods 보다 더 편리한 거 같아요
SPM은 빌드할 소스를 프로젝트 외부에 저장하는 방식이더라고요
ObjC는 앞으로도 평생 같이해야 할 것 같은 느낌이...
React Native에서 iOS 네이티브 코드를 건드려야 할 일이 잦나요?