CocoaPods 사용법과 파일구조
코코아팟은 배포와 사용 두가지 측면으로 나누어집니다. 누군가 라이브러리를 배포했기 때문에 우리가 사용할 수 있습니다. 이번 글에서는 사용에 대해서 알아보겠습니다.
사용법
gem을 통해 cocoapods를 설치합니다. gem은 ruby 프로그램들의 의존성 관리 도구 입니다. cocoapods 자체도 지속적으로 업데이트 되고 있기 때문에 gem을 통해서 설치하는 것이 좋습니다.
sudo gem install cocoapods
설치가 완료되면 코코아팟을 활용할 프로젝트 파일 경로로 들어갑니다. 우리가 사용하고 싶은 모듈과 버전에 대한 설계도를 만들 차례입니다.
pod init
Podfile이 생성되었습니다. Podfile은 텍스트 편집기로 열어서 수정하면 됩니다.
Podfile 내부는 다음과 같습니다. 자세한 내용은 잠시 후에 살펴보겠습니다.
target 'MyApp' do
use_frameworks!
pod 'SnapKit'
end
다시 터미널에서
pod install
을 입력해주면 xcworkspace 파일이 프로젝트 폴더에 생성됩니다. xcworkspace 파일을 열어서 원하는 라이브러리를 사용할 수 있습니다.
import SnapKit
대부분의 경우에는 이렇게 설치해서 사용하기만 하면 됩니다. 막상 해보면 간단하게 되어 있습니다.
Podfile
앞선 과정에서 잠깐 봤던 것 처럼 CocoaPods는 우리가 원하는 라이브러리를 주문서에 써두면, 알아서 설치해주는 작업을 해줍니다. Podfile은 주문서에 해당합니다.
Podfile에는 지켜야할 규칙이 있습니다. 앞에서는 하나의 타겟에 하나의 라이브러리를 설치했기 때문에 단순했는데요.
target 'MyApp' do
use_frameworks!
pod 'SnapKit'
end
이번에는 조금 더 디테일하게 사용해보겠습니다.
source 'https://github.com/CocoaPods/Specs.git' // (1)
source 'https://github.com/Artsy/Specs.git' // (2)
platform :ios, '9.0' // (3)
inhibit_all_warnings! // (4)
target 'MyApp' do
pod 'GoogleAnalytics', '~> 3.1' // (5)
# Has its own copy of OCMock
# and has access to GoogleAnalytics via the app
# that hosts the test target
target 'MyAppTests' do
inherit! :search_paths
pod 'OCMock', '~> 2.0.1' // (6)
end
end
post_install do |installer| // (7)
installer.pods_project.targets.each do |target|
puts target.name
end
end
(1) CocoaPods는 PodSpec을 통해서 라이브러리를 인식하고 분류합니다. 그러한 PodSpec이 있는 주소를 알아야 제대로 작동합니다. https://github.com/CocoaPods/Specs.git
는 따로 적지 않아도 기본값으로 세팅되어 있습니다.
(2) 원하는 Specs 저장소를 연결 할 수 있습니다. 기업에서 사용할 때 private한 Specs 저장소로 사용하곤 했습니다.
(3) platform :ios, '9.0'
해당 플랫폼, 버전에 맞춰서 설치합니다. 해당 라이브러리가 지원하는 경우에만 설치하게 됩니다.
(4) inhibit_all_warnings!
를 써두면 빌드 시에 라이브러리에서 발생하는 warning을 무시합니다. 불필요한 warning이 너무 많으면 필요한 정보를 놓칠 수 있습니다.
(5) pod 'GoogleAnalytics', '~> 3.1'
최소 3.1 이상 4.0 미만 버전을 사용 합니다. 버전 지정에 관해서는 이 링크에서 보다 자세히 설명하고 있습니다.
해당 depth에 라이브러리를 적어두면 ‘MyAppTests
’ 타겟도 해당 라이브러리를 공통으로 사용하게 됩니다.
(6) pod 'OCMock', '~> 2.0.1'
최소 2.0.1 이상 2.1 미만 버전을 사용합니다. MyAppTests
타겟에서는 GoogleAnalytics
, OCMock
둘 다 사용 가능합니다.
(7) ‘post_install’ hook은 마지막에 Xcode project를 변경하거나, 원하는 추가동작을 할 수 있도록 해줍니다. 이 예제에서는 project 안에 있는 모든 타겟 이름을 출력하게 됩니다. 실제로 사용할 때는 라이브러리의 속성을 변경하는데 많이 사용했습니다.
설치 과정
프로젝트로 이동해서 pod install 을 입력하는 것 만으로 새로운 파일이 생성되고, 모듈을 import 해서 사용할 수 있게 되었습니다. 어떻게 이런 일이 가능했을까요? 코코아팟 홈페이지에서는 이 숨겨진 과정을 순서대로 설명하고 있습니다. 코코아팟이 우리를 위해서 해주는 일들을 한번 살펴봅시다.
- xcworkspace를 생성하거나 업데이트 합니다.
- 필요한 경우 당신의 project를 workspace에 추가합니다.
- 필요한 경우 CocoaPods static library를 workspace에 추가합니다.
4. libPods.a를 targets => build phases => link with libraries 에 추가합니다. (그런데 직접 해봤을 때는 libPods.a 파일은 없고 Pods_{AppName}.framework 가 있었습니다. 설정에 따라 다른 것인지, 지금은 framework 파일로 변경된 것인지 좀 더 찾아봐야겠습니다.)
5. Xcode configuration file을 app project에 추가합니다.
6. App Target의 Configuration을 CocoaPods 기반으로 수정합니다.
7. pod들로 부터 resource를 복사하기 위해서 build phase를 추가합니다. MyApp > Build Phases 에 가보면 제일 하단에 [CP] Embed Pods Frameworks 스크립트가 생성된 것을 알 수 있습니다.
참고하면 좋은 글
https://www.codementor.io/blog/swift-package-manager-5f85eqvygj