[ios] Cocoapods? Carthage?
[ios] Cocoapods? Carthage?
안녕하세요. 많은 분들이 iOS 개발을 시작하실 때 Cocoapods를 통해 라이브러리를 사용하고 관리하실텐데요. 저 역시 아직은 iOS 공부를 시작한지 얼마되지 않아 Cocoapods만 사용하고 있습니다. 하지만 분명 Carthage라는 패키지 관리자도 존재하고 있었고 왜 Carthage가 존재하고 Carthage를 사용하는 이유가 무엇인지 궁금했습니다.
그래서 오늘은 평소에 궁금했던 두 패키지 관리자의 차이점과 용도가 궁금하여 구글링을 하던 중 괜찮은 글이 있어 제가 이해한 것을 바탕으로 몇 가지를 추가하여 소개해드리려 합니다. 원본의 링크가 궁금하시다면 이곳을 클릭하세요!
먼저 느낀점을 말씀드리자면 두 패키지 관리자는 별개의 것이 아니라 용도에 맞게 사용하는 것이며 같이 사용하는 경우도 있다는 것도 알았습니다. 그럼 바로 시작해보도록 하겠습니다.
먼저 두 가지를 소개하기 전에 iOS에는 안드로이드의 Gradle와 같은 공식 패키지 관리자가 존재하지 않았습니다. 최근들어 Apple은 Swift Package Manager를 공식으로 발표했으나 아직까지 사용률은 저조합니다.
Cocoapods
Cocoapods는 iOS 생태계에서 가장 흔한 패키지 관리자입니다. 이 프로젝트는 2011에 시작했으며 현재까지 많은 개발자가 사용하면서 성숙해지고 안정되어왔습니다.
Cocoapods는 pod이라는 라이브러리를 검색할 수 있는 Cocoapods라는 사이트를 제공함으로써 라이브러리를 보다 찾기 쉽게 해주는 중앙 집중형 시스템을 제공합니다. Cocoapods는 Ruby로 만들어졌으며 설치 방법은 다음과 같이 간단합니다.
$ sudo gem install cocoapods
Cocoapods는 커맨드 라인 툴입니다. 그리고 pod init
명령어로 프로젝트 내의 사용할 라이브러리들을 명시할 Podfile
이라는 이름의 파일을 생성합니다. Podfile
의 구조는 다음과 같습니다.
platform :ios, '8.0'
use_frameworks!
target 'PROJECT' do
pod 'Alamofire'
pod 'SVProgressHUD'
end
명시된 라이브러리를 프로젝트 내에 설치하려면 다음과 같이 명령어를 입력해야합니다.
$ pod install
이제 가장 중요한 부분입니다. Cocoapods는 그들만의 Xcode workspace 파일을 생성합니다. 라이브러리와 기존의 프로젝트를 통합한 것으로 Cocoapods를 통해 라이브러리를 설치하였다면 반드시 .xcworkspace
확장자에서 마저 프로젝트를 진행하여야 합니다.
모든 것이 간단해보입니다. 설치는 쉬우며 사용법을 익히는 것은 어렵지 않습니다. 또한 Cocoapods는 iOS 커뮤니티에서 거의 기준으로 통하며 이를 이용하여 사용할 수 있는 라이브러리는 굉장히 많습니다.
장점
- iOS 커뮤니티에서 기준으로 통한다.
- 성숙하고 안정되어있다.
- 모든 설정을 자동으로 해주고 사용하기 쉽다.
단점
- 프로젝트 구성에 대한 직접적인 권한이 존재하지 않습니다.
- 사용하기 쉬우나 내부적으로 어떻게 동작하는지 알 수 없다.
- Ruby로 만들어졌기 때문에 Ruby 버전과 패키지 관리자(Gem, Bundler) 역시 신경써야 한다.
Carthage
Cocoapods와는 다르게 Carthage는 라이브러리만을 관리하고 Cocoapods처럼 직접 프로젝트와 통합하는 행위를 하지 않습니다. Carthage는 라이브러리만을 빌드하고 이를 바이너리 프레임워크의 형태로 제공합니다. 그렇기 때문에 사용자가 직접 Xcode내에서 프로젝트와 연결을 해주는 행위가 필요합니다.
즉 사용자에게 프로젝트 구성의 관한 모든 권한이 있는 것입니다. 대게 깃헙을 기반으로 배포되고 분산형 시스템의 성격을 갖습니다.
Carthage는 HomeBrew를 통해 설치할 수 있습니다.
$ brew install carthage
아래의 명령어를 통해 Cartfile에 원하는 라이브러리를 명시해주었습니다.
github "SwiftyJSON/SwiftyJSON"
그리고 다음의 명령어를 통해 Carthage/Checkout 폴더에 라이브러리를 설치해주고 Carthage/Build 폴더에서 빌드를 진행합니다.
$ carthage update
그리고 Xcode내에서 Carthage/Build에 있는 빌드된 바이너리 형태의 프레임워크를 연결시켜주어야 합니다.
Carthage는 직접적으로 Xcode의 설정이나 프로젝트의 설정을 건드리지 않습니다. 이러한 이유로 프로젝트 구성에 있어서 모든 구성은 사용자에게 있습니다.
장점
- 위에서 언급했던 것처럼 Carthage는 Xcode나 프로젝트의 설정을 건드리지 않습니다. 단순히 라이브러리를 다운로드 받고 이를 빌드만 하며 모든 프로젝트 구성 권한은 사용자에게 있습니다.
- 분산형
단점
- 불안정하며 느리다.
- 커뮤니티가 작다
- 모든 구성 권한이 사용자에게 있어 이로 인한 번거로움이 존재한다.
마무리
오늘은 이렇게 간단하게 Carthage와 Cocoapods의 차이점과 둘의 장단점에 대해 알아보았습니다. 아직은 Cocoapods만을 사용하고 있지만 기회가 되면 Carthage를 직접 사용해보고 이에 대한 느낀점을 기록해보는 시간을 갖도록 하겠습니다. 감사합니다.
참고자료