-
[iOS] Cocoapods, Carthage, Swift Package ManagerApple🍎/iOS 2024. 4. 15. 13:47
라이브러리 설치 시에 한번쯤은 고민하는 cocoapods, spm 같은 Dependency Management에 대해 알아보려 한다!
한번 설치된 내 라이브러리가 업데이트 된 경우, 내 프로젝트에서도 해당 라이브러리를 최신 버전으로 업데이트 해야할 경우, 등등
이렇게 프로젝트 내의 외부 라이브러리를 관리해주는 것을 Dependency Management 라고 한다.Dependency Management를 하는 방법은 총 3가지 이다.
- Cocopapods (코코아팟)
- Carthage (카르타고)
- Swift Package Manager (SPM)
Cocoapods란?
Cocoapods 설치 방법
크게 Podfile, Pods, Podfile.lock 이렇게 3가지를 중점으로 본다.
- Cocoapods 설치
sudo gem install cocoapods // 설치 위치 상관 없음
- Podfile 생성위 명령어를 치면 Podfile이 생성된다
Pod init // 여기서부턴 프로젝트 경로에 설치
- Podfile에 추가하고 싶은 라이브러리를 작성한다.
vi Podfile
- Podfile을 기준으로 installPodfile을 기준(~> 5.2)으로 맞는 버전 라이브러리들을 설치한다. 그 후에 실제로 설치한 버전에 대해 Podfile.lock에 적어놓는다.
pod install
즉, 정리하면
Podfile - 설치하고 싶은 라이브러리 작성(버전)
Podfile.lock - 실제 다운 받은 버전을 명시, 다른 사람이 clone하면 동일한 버전을 받을 수 있어, 협업 시 버전 관리에 좋다.
Pods - 설치된 팟이 실제로 저장되는 공간
그러므로 협업 시엔 Pods 파일은 무거우니, Podfile, Podfile.lock 만 공유된다!Cocoapods의 장단점
장점
- 외부 라이브러리를 쉽게 추가 / 제거 할 수 있다.
- 어떤 의존성이 있는지, 버전 정보를 알 수 있다.
- 대부분의 라이브러리가 코코아 팟을 지원한다.
단점
- 기존 Xcode 작업 공간과 통합하기 어렵다. (.xcworkspace로 작업해야함)
- 라이브러리를 다운받고 설치하는 pod install / pod update 에 시간이 오래 걸린다.
- pod install: Podfile.lock 파일이 없는 경우, Podfile을 기준으로 설치.
- pod update: Podfile 버전 기준으로 업데이트된 게 있는 것만 재설치
- 프로젝트 빌드때마다 Pods에 있는 모든 팟이 같이 빌드되어 빌드 시간이 느리다.
Carthage(카르타고)
코코아팟은 라이브러리 코드를 통째로 설치해버리기 때문에, 프로젝트 빌드를 하면, 해당 라이브러리들도 모두 빌드가 된다.
그러므로 팟이 많아질 수록 클린 빌드 시간이 늘어난다...
또한 .xcworkspace 확장자로 열어야 하는 번거로움이 있는데.. 이러한 단점을 보완한게 "Carthage"이다!라이브러리를 프레임워크(framework)로 사용하는 것이다! (iOS 8 이후만 가능)
프레임워크는 프로젝트에 라이브러리 소스 코드를 통으로 추가하는게 아닌,
이미 컴파일 된 바이너리를 프로젝트에 등록하는 방식이다.
즉, 프로젝트를 컴파일 할 때마다 라이브러리를 매번 컴파일 하는 작업이 필요 없어진 것!때문에, 빌드 속도가 빨라지고 기존 .xcodeproj 확장자로 개발을 진행할 수 있음!
Carthage 설치 방법
- touch Cartfile - Cartfile 생성
- Pod file 처럼 Cartfile에 라이브러리 입력
vi Carfile >> GitHub “Alamofire/Alamofire” ~> 5.2
- Carthage update - Cartfile을 가지고 프레임워크를 만드는 것(ex. pod install)
- CarthageTest 파일이 생김
Podfile.lock 파일 처럼 현재 설치된 라이브러리 버전을 저장하는 파일 - 또한 framework 파일이 생성됨.
이 파일을 spm처럼 target -> frameworks에 추가해준다.
- 라이브러리를 연결만 했으므로, 마지막으로 컴파일러가 라이브러리 위치를 찾을 수 있게 작성해줘야한다.
이렇게 Build Phases에서 + 버튼을 누르고 New Run Script Phase를 눌러서
RunScript가 추가되는데,, 이 부분을 아래처럼 바꿔주면 끝이다.하지만, 만약 프레임워크가 여러개면 그 만큼 여러개 작성해야한다..
Carthage 장단점
장점
- Carthage update를 실행할 때만 프레임워크를 빌드하므로, 코코아팟에 비해 빌드 속도가 빠르다.(가장 큰 장점)
- .xcodeproj로 개발 가능하다
단점
- 카르타고를 지원하지 않는 라이브러리의 경우 못쓴다.
- 여러 라이브러리를 사용하는 경우, 코코아팟보다 귀찮다..(설치가 번거롭다)
Swift Package Manager(SPM)
코코아팟이나 카르타고처럼 3rd party tool이 아닌 1st party tool이다.
지금까지의 코코아팟, 카르타고는 애플 자체적으로 지원하는게 아니기 때문에 따로 설치가 필요했다.하지만 SPM은 애플에서 지원하기 때문에 따로 무언가 설치할 필요가 없고, Xcode 내에서 사용이 가능하다.
SPM 설치 방법
- 사용할 외부 라이브러리 URL을 가져와 설치한다.
2. 버전, 커밋, 브랜치를 확인한다.
3. 이렇게 설치 후 바로 사용이 가능하다.
설치하면 package.resolved 파일에 다운받은 버전이 들어 있어 협업 시 버전 관리에 편하다.SPM 장단점
장점
- apple 지원으로 쉽고 설정할 것도 적다. 별도의 설치 없이 Xcode 내에서 가능
단점
- 아직은 지원하지 않는 라이브러리가 많다.
- 현 시점, 해결되지 않은 버그 이슈가 458건이 있다
실무에선, 이러한 이슈로 아직은 꺼리는 회사들도 있지만 점차 나아질 것이라 생각한다.
Cocoapods, Carthage, SPM의 비교
이 차이점이 프로젝트 선택 시 어떤 영향을 미칠 수 있나요?
특정 상황에서 한 도구를 다른 도구보다 선호하는 이유는 무엇인가요?이러한 질문에서 dependency management를 선택하는 내 기준은 이렇다.
- SPM을 우선적으로 사용하되, 메인 기능의 라이브러리가 없다면 Cocoapods를 사용하자.
- Carthage는 Cocoapods보다 빠르지만, 사용하는 라이브러리의 갯수가 적을 때 사용하자. (많으면 일일이 다 설정해줘야함..)
- Cocoapods가 느리고 다른 실행파일로 인해 불편하지만,,,,
그래도 아직까진 지원하는 라이브러리와 버전관리가 잘 되어 있으므로,
많은 라이브러리를 사용하고, SPM에서 지원하지 않는 라이브러리가 있다면, Cocoapods를 선택한다.
'Apple🍎 > iOS' 카테고리의 다른 글
[iOS/OS] 메모리 구조 (2) 2024.08.23 [iOS/UIKit] UICollectionViewLayout 정리 (1) 2024.05.17 [iOS] CoreData vs UserDefaults (0) 2024.04.15 [iOS/SwiftUI] Kakao Local API - 키워드로 내 주변 장소 탐색 (0) 2024.04.02 [iOS] Xcode Playground (0) 2023.09.27