English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

IOS CocoaPods 고급 사용 설명

1. Podfile.lock 파일
이전에 설명한 것처럼, CocoaPods를 사용하기 시작하고 pod install을 실행한 후 Podfile.lock 파일이 생성됩니다. 이 파일은 우리와 관계가 없는 것처럼 보일 수 있지만, 실제로는 절대 무시해선 안 됩니다.
이 파일은 설치된 Pods 의존성 라이브러리 버전을 저장하는 데 사용됩니다. CocoaPods를 통해 SBJson, AFNetworking, Reachability 세 개의 Pods 의존성 라이브러리를 설치한 후 해당 Podfile.lock 파일의 내용은 다음과 같습니다:

PODS:
 - AFNetworking (2.1.0):
  - AFNetworking/NSURLConnection
  - AFNetworking/NSURLSession
  - AFNetworking/Reachability
  - AFNetworking/Security
  - AFNetworking/Serialization
  - AFNetworking/UIKit
 - AFNetworking/NSURLConnection (2.1.0):
  - AFNetworking/Reachability
  - AFNetworking/Security
  - AFNetworking/Serialization
 - AFNetworking/NSURLSession (2.1.0):
  - AFNetworking/NSURLConnection
 - AFNetworking/Reachability (2.1.0)
 - AFNetworking/Security (2.1.0)
 - AFNetworking/Serialization (2.1.0)
 - AFNetworking/UIKit (2.1.0):
  - AFNetworking/NSURLConnection
 - Reachability (3.0.0)
 - SBJson (4.0.0)
DEPENDENCIES:
 - AFNetworking (~> 2.0)
 - Reachability (~> 3.0.0)
 - SBJson (~> 4.0.0)
SPEC CHECKSUMS:
 AFNetworking: c7d7901a83f631414c7eda1737261f696101a5cd
 Reachability: 500bd76bf6cd8ff2c6fb715fc5f44ef6e4c024f2
 SBJson: f3c686806e8e36ab89e020189ac582ba26ec4220
COCOAPODS: 0.29.0

Podfile.lock 파일은 여러 사람이 개발하는 경우에 가장 큰 도움이 됩니다. Podfile에서 Pods 의존성 라이브러리 버전을 지정하지 않은 문법은 다음과 같습니다:

pod 'SBJson'

이 문장은 현재 SBJson 이라는 Pods 의존성 라이브러리의 최신 버전을 가져오기 위해 사용됩니다。
팀 중의 누군가가 pod install 명령어를 실행한 후, 생성된 Podfile.lock 파일은 그때 최신 Pods 의존성 라이브러리 버전을 기록합니다. 이제 팀의 다른 사람이 이 포함된 Podfile.lock 파일의 프로젝트를 check out 한 후 pod install 명령어를 다시 실행하면, 다운로드한 Pods 의존성 라이브러리 버전은 최초 사용자가 얻은 버전과 일치합니다. Podfile.lock 파일이 없다면, 이후 모든 사용자가 pod install 명령어를 실행할 때마다 최신 버전의 SBJson을 다운로드하게 되며, 이는 팀이 사용하는 의존성 라이브러리 버전이 일치하지 않을 가능성이 있어 팀 협업에绝对的 재앙이 될 수 있습니다!
이 경우, 팀이 현재 최신 버전의 SBJson 의존성 라이브러리를 사용하고자 한다면, 두 가지 방안이 있습니다:
Podfile을 변경하여 최신 버전의 SBJson 의존성 라이브러리를 지정합니다;
pod update 명령어를 실행합니다;
Podfile.lock 파일이 팀 협업에 이렇게 중요하다면, 이를 버전 관리에 추가해야 합니다.

2. Podfile 파일
일반 사용자에게는 CocoaPods를 사용할 때 가장 많이 접하는 것은 Podfile 파일입니다. CocoaPods는 Ruby로 구현되었기 때문에 Podfile 파일의 문법은 Ruby의 문법입니다. 다음 몇 가지 면에서 Podfile을 소개합니다:
1、Podfile 파일 저장 위치
이는 이전 기사에서 남겨둔 문제입니다. 일반적으로 Podfile 파일을 프로젝트 루트 디렉토리에 두는 것을 추천합니다. 다음 그림을 참조하세요:

실제로 Podfile 파일은 어떤 디렉토리에든지 위치할 수 있습니다. 할 일은 Podfile에서 프로젝트 경로를 지정하는 것입니다. 원래와 달리, Podfile 파일은 가장 시작 부분에 추가된 줄입니다. 구체적인 내용은 다음과 같습니다:

xcodeproj "/Users/wangzz/Desktop/CocoaPodsTest/CocoaPodsTest.xcodeproj
platform :ios 
pod 'Reachability', '~> 3.0.0' 
pod 'SBJson', '~> 4.0.0' 
platform :ios, '7.0' 
pod 'AFNetworking', '~> 2.0' 

지정된 경로는 xcodeproj 키워드를 사용합니다.
그런 다음, Podfile 파일이 있는 경로로 이동하여 pod install 명령어를 실행하면 이전과 같이 이러한 Pods 의존성 라이브러리를 다운로드하고, 생성된 관련 파일은 Podfile가 있는 디렉토리 아래에 저장됩니다. 아래 그림을 참조하세요:

이전과 같이, 여기서 생성된 workspace 파일을 사용하여 프로젝트를 열어야 합니다.

2Podfile와 target
Podfile은 원래 Xcode 프로젝트의 targets를 설명하는 데 사용됩니다. Podfile에 해당하는 target을 명시적으로 지정하지 않으면, CocoaPods는 이름이 default인 잠재적인 target을 생성하고, 프로젝트의 첫 번째 target과 일치하게 됩니다. 다시 말해, Podfile에 target을 지정하지 않으면, 프로젝트에서만 Podfile에 설명된 Pods 의존성 라이브러리를 사용할 수 있습니다.
Podfile에서 프로젝트의 여러 target을 동시에 설명하고자 한다면, 요구 사항에 따라 다양한 구현 방식이 가능합니다. 문제를 설명하기 위해 원래 프로젝트에 Second라는 이름의 새로운 target을 추가하면, 현재 프로젝트에 포함된 target은 다음과 같습니다:

① 여러 target에서 공통된 Pods 의존성 라이브러리 사용
예를 들어, CocoaPodsTest라는 이름의 target과 Second의 target 모두가 Reachability, SBJson, AFNetworking 세 가지 Pods 의존성 라이브러리를 사용해야 한다면, link_with 키워드를 사용하여 Podfile을 다음과 같은 방식으로 작성할 수 있습니다:

link_with 'CocoaPodsTest', 'Second'
platform :ios 
pod 'Reachability', '~> 3.0.0' 
pod 'SBJson', '~> 4.0.0' 
platform :ios, '7.0' 
pod 'AFNetworking', '~> 2.0' 

이 방식으로 CocoaPodsTest와 Second 두 개의 target이 동일한 Pods 의존성 라이브러리를 공유할 수 있습니다.
② 다른 target은 완전히 다른 Pods 의존성 라이브러리를 사용합니다
CocoaPodsTest 이라는 target은 Reachability, SBJson, AFNetworking 세 가지 의존성 라이브러리를 사용하지만, Second 이라는 target은 단지 OpenUDID 하나의 의존성 라이브러리만 사용합니다. 이 경우 target 키워드를 사용할 수 있습니다. Podfile의 설명 방식은 다음과 같습니다:

target :'CocoaPodsTest' do
platform :ios 
pod 'Reachability', '~> 3.0.0' 
pod 'SBJson', '~> 4.0.0' 
platform :ios, '7.0' 
pod 'AFNetworking', '~> 2.0'
end
target :'Second' do
pod 'OpenUDID', '~> 1.0.0'
end

그 중에서/end를 시작과 끝으로 사용합니다.
3Podfile로 Pods 의존 라이브러리 버전을 관리합니다.
의존 라이브러리를 다시 포함할 때, 명시적으로나 암시적으로 의존 라이브러리 버전을 지정해야 합니다. 구체적인 작성 방법과 의미는 다음과 같습니다:

pod 'AFNetworking'   //의존 라이브러리 버전을 명시적으로 지정하지 않으면, 항상 최신 버전을 가져옵니다.
pod 'AFNetworking', ''2.0'   //사용하려면2.0 버전
pod 'AFNetworking', '>' 2.0'   //사용하려면2.0 버전
pod 'AFNetworking', '>=' 2.0'   //사용하려면2.0 버전
pod 'AFNetworking', '<' 2.0'   //사용하려면2.0 버전
pod 'AFNetworking', '<=' 2.0'   //사용하려면2.0 버전
pod 'AFNetworking', '~> 0.'1.2'   //0 이상의 버전을 사용합니다.1.2하지만 0 이하의 버전2버전
pod 'AFNetworking', '~>0.'1'   //0 이상의 버전을 사용합니다.1하지만1.0 버전
pod 'AFNetworking', '~>0'   //0 이상의 버전은 이 제한을 쓰거나 아무것도 쓰지 않는 것과 같은 효과가 있습니다. 두 경우 모두 최신 버전을 사용합니다.

3. CocoaPods 일반 명령어
1pod install
Podfile 파일에 지정된 내용에 따라 의존 라이브러리를 설치합니다. Podfile.lock 파일이 있고 해당 Podfile 파일이 수정되지 않았다면 Podfile.lock 파일에 지정된 버전으로 설치합니다.
Podfile 파일을 업데이트할 때마다 이 명령어를 다시 실행해야 Pod의 의존 라이브러리를 다시 설치할 수 있습니다.
2pod update
Podfile에 지정된 의존 라이브러리 버전이 고정되어 있지 않으면, 해당 의존 라이브러리가 업데이트되면 Podfile.lock 파일이 있든 없든 Podfile에서 설명된 최신 의존 라이브러리 버전을 가져옵니다.
3、pod search
명령어 형식은 다음과 같습니다:

$ pod search OpenUDID

뒤의 OpenUDID이 매개변수입니다.
명령어 이름에서 쉽게 알 수 있듯이, 이 명령어는 이름으로 사용 가능한 Pods 의존성 라이브러리를 검색하는 데 사용됩니다. 실행 결과는 다음과 같습니다:

-> OpenUDID (1.0.0)
  iOS를 위한 일반적이고 지속 가능한 UDID 솔루션을 위한 오픈 소스 이니셔티브.
  pod 'OpenUDID', '~> 1.0.0'
  - 홈페이지: http://OpenUDID.org
  - 소스:  https://github.com/ylechelle/OpenUDID.git
  - 버전: 1.0.0 [master repo]

여기서 사용 가능한 데이터를 찾았습니다. OpenUDID 라이브러리의 간단한 정보가 포함되어 있습니다. 실제로 필요한 것은 위 결과의 세 번째 줄입니다:

pod 'OpenUDID', '~> 1.0.0'

이 명령어는 Podfile 파일에 추가해야 할 명령어입니다.
이 명령어를 통해 필요한 Pods 의존성 라이브러리를 쉽게 빠르게 찾을 수 있습니다.
4、pod setup
명령어 형식은 다음과 같습니다:

$ pod setup

실행이 완료되면 다음과 같이 출력됩니다:

CocoaPods 마스터 리포 지정
업데이트 중 7cd4668..f3d3ced
Fast-forward

다음으로 많은 업데이트 정보가 출력될 것입니다.
이 명령어는 로컬 컴퓨터에 저장된 Pods 의존성 라이브러리 트리를 업데이트하는 데 사용됩니다. 매일 많은 사람들이 Pods 의존성 라이브러리를 생성하거나 업데이트하므로, 이 명령어가 실행될 때는 좀 더 많은 시간이 걸립니다. 조금 더 참을 수 있기를 바랍니다. 이 명령어를 자주 실행해야 합니다. 그렇지 않으면 새 Pods 의존성 라이브러리가 있을 때 pod search 명령어를 실행하면 검색할 수 없습니다.

4. 참조 문서

http://guides.cocoapods.org/using/index.html