iOS의 SDK : Cocoa Touch Framework, SPM , CocoaPods

일어나 개발해야지·2024년 4월 12일

iOS 글쓰기모임

목록 보기
6/12

Intro

지난 포스팅에서 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웹 관련 기능 제공

의존성 관리 도구(Dependency Manager)

코코아터치에서 제공하는 프레임워크만으로는 코드의 가독성이 떨어지거나 기능적인 보완이 요구될때는 외부라이브러리가 필요하다. 외부라이브러리는 Third Party라고도 부른다. 그리고 외부라이브러리는 Dependency Manager를 통해서 관리된다. 의존성 관리도구는 여러가지가 있는데 그중 가장 널리 사용되는 개념이 Swift Package Manager와 cocoaPods이다. 그리고 각각의 방법은 iOS 앱개발에서 다른 접근방식을 제공한다.

Swift Package Manager

  • 사용
    Swift로 작성된 패키지를 관리할때
  • 동작방식
    소스 코드를 가져와서 빌드하고 의존성을 관리함.
  • 장점
    ① Swift 네이티브로 구축되어 Swift 앱과의 호환성이 뛰어남
    ② Xcode에 네이티브로 통합되어 있어 설정이 간편하고 프로젝트의 일관성을 유지함.
  • 단점
    ① Objective-C, C 또는 C++와 같은 다른 언어로 작성된 라이브러리를 지원하지 않음.
    ② CocoaPods에 비해 라이브러리의 수와 다양성이 부족함.

CocoaPods

  • 사용
    ① iOS, macOS, watchOS, tvOS를 지원하는 경우
    ② Objective-C 로 작성된 앱 (크로스플랫폼)
  • 동작방식
    Podfile에 의존성에 필요한 정보를 기록하며,Pods폴더에 프레임워크를 저장하는 방식
  • 장점
    ① 추가할 수 있는 라이브러리의 범위가 넓음
    ② 커뮤니티가 활성화 되어있어서 업데이트가 지속적으로 이루어짐
  • 단점
    ① 의존성에 변경사항이 생길시 $pod install이 필요
    ② 다른 빌드 도구와의 호환성 문제가 있을 수 있음

$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를 없앨 수는 없으니 애증을 가지고 더 공부해야겠다는 생각이 든다.

2개의 댓글

comment-user-thumbnail
2024년 4월 13일

SPM은 빌드 파일만 가지고 와서 사용하는 방식이라 클린할 때마다 싹 다 다시 빌드해야 하는 cocoapods 보다 더 편리한 거 같아요
SPM은 빌드할 소스를 프로젝트 외부에 저장하는 방식이더라고요
ObjC는 앞으로도 평생 같이해야 할 것 같은 느낌이...
React Native에서 iOS 네이티브 코드를 건드려야 할 일이 잦나요?

1개의 답글