안녕하세여~~
오늘은 Cocoapod, Carthage, SPM을 비교해 보려고 합니다.
공부하다보니 저 세가지의 다른점이 무엇인지 궁금해서 가지고왔어뇽
Cocoapod, Carthage, SPM 은 모두 Package Manager입니다.
라이브러리들을 관리해주는 친구들이죠! (의존성 관리)
저는 Cocoapod이랑 SPM만 사용해 보았어요,, Carthage는 완전 초면이랍니다!
세가지나 비교해야하니, 이 글은 간단한 설명과 장단점에 대해서만 알아보겠습니다 😄
Cocoapod : 코코아팟
Ruby로 만들어졌으며 Pod라는 라이브러리를 검색할 수 있는 사이트를 제공함으로써 라이브러리를 보다 찾기 쉽게해주는 집중형 시스템을 제공합니다.
설치 및 간단한 라이브러리 추가법
1. CocoaPods 설치
sudo gem install cocoapods
2. Pod 추가하기
CocoaPods 라이브러리를 적용하고 싶은 프로젝트 경로로 이동 후,
아래와 같은 명령어를 사용하여 podfile 을 생성합니다.
pod init
아래 명령어 중 하나를 선택하여 Podfile에 들어가줍니다.
$ nano Podfile
$ vi Podfile
$ open -e podfile
원하는 pod를 추가합니다.
pod 'RxSwift', '~> 5.1.3' // 뒤에는 버전 정보 의미
만약, 쓰고 싶은 라이브러리를 어떻게 쓰는지 알고싶거나, 버전을 알고 싶다면? https://cocoapods.org/
3. Pod 설치
pod install
UI를 미리 보고 싶을때는 cocoacontrols.com 를 추천합니다!
장단점
장점
- 사용하기 쉽다
- 거의 대부분의 라이브러리를 지원한다
- 누구나 쉽게 어떤 의존성이 애플리케이션에 있는지 알 수 있다.
- pod outdated 명령어로 쉽게 새로운 버전이 있는지 체크할 수 있다.
단점
- 라이브러리를 다운받아 설치(pod install or update)하는데 오랜 시간이 걸린다
- 프로젝트를 빌드 할 때마다 모든 팟 라이브러리가 같이 빌드되므로 다른 도구를 사용할 때 보다 프로젝트 빌드 시간이 느리다.
Carthage : 카르타고
[ decentralized dependency manager ]
Cocoapods처럼 직접 프로젝트와 통합하지 않아, 라이브러리만 관리 및 빌드하고 이를 바이너리 프레임워크의 형태로 제공합니다. 사용자가 직접 Xcode내에서 프로젝트로 연결해주어야합니다. (즉, 사용자에게 프로젝트 구성의 관한 모든 권한 있음)
대부분 Github을 기반으로 배포되고 분산형 시스템의 성격을 갖습니다.
설치 및 간단한 라이브러리 추가법
carthage는 HomeBrew를 통해 설치할 수 있습니다.
Carthage 설치하기
$ brew install carthage
원하는 라이브러리 추가
github "SwfityJSON/SwfityJSON"
적용하기
Carthage/Checkout 폴더에 라이브러리를 설치해주고 Carthage/Build 폴더에서 빌드를 진행합니다.
$ carthage update
이후, Xcode내에서 Carthage/ Build에 있는 빌드된 바이너리 형태의 프레임워크를 연결시켜주어야 합니다.
Carthage는 직접적으로 Xcode의 설정이나 프로젝트의 설정을 건드리지 않습니다.
이러한 이유로 프로젝트 구성에 있어서 모든 구성은 사용자에게 있습니다.
장단점
장점
- 미리 빌드된 프레임워크를 사용하기 때문에 빌드 속도가 빠르다.
- 모든 프로젝트 구성 권한은 사용자에게 있다.
- 분산형이다.
- 처음에 프레임워크를 추가하는 것 외에 프로젝트 설정이 바뀌지 않는다.
단점
- 의존성이 추가될 때마다 프레임워크로 추가해야 하기 때문에 설정하는 것이 번거롭다.
- 불안정하다.
- 사용자나 인기가 많은 라이브러리가 아니라면 카르타고를 지원하지 않을 수도 있다
SPM (Swift Package Manager)
장점
- 애플이 지원하는 패키지 매니저이다.
- 빠르고 쉽게 라이브러리를 추가할 수 있다.
- 별다른 설치가 필요없다
- Xcode Project 파일이 꼭 필요한 것이 아니므로 리눅스에서도 사용할 수 있다.
- Package.swift 파일 이외에 수행할 설정이 없다.
- Xcode의 GUI 환경에서 관리가 가능하다
단점
- 아직은 지원하지 않는 라이브러리가 많다.