iOS & Swift

iOS CocoaPods 설치 및 사용법 정리

그리다웍스 2017. 2. 10. 17:26

iOS 오픈소스 라이브러리를 관리해주는 CocoaPods 에 대해서 정리한다.

써야지 써야지 하면서도 그냥 넘기게 되고, 또 잊고 넘기기도 하고..
고개를 끄덕끄덕하면서 읽어도 돌아서면 까먹는 기억력이란...;;;
당장 사용하게 될 때 참조하기 위해서 정리를 한다. 

[CocoaPods 설치]

CocoaPods는 Ruby 기반으로 제작되었으며, 기본 Ruby는 macOS 에 이미 설치되어 있다.
CocoaPods 의 설치는 직접적인 다운로드 과정은 없으며 터미널에서 아래와 같이 하면 된다.

$ sudo gem install cocoapods (CocoaPods 를 업데이트하려면 gem 를 다시 install 해주면 된다)
$ pod setup

최초 설치시에만 하면 된다. 
설치 버전은 아래와 같이 확인 가능하다.

설치된 cocoapod 버전 확인
$ pod —version

설치된 모든 cocoapods 버전을 보여줌
$ sudo gem list cocoapods

제거
$ sudo gem uninstall cocoapods

 

[프로젝트 설정]

CocoaPods 를 적용할 XCode Project 화일이 있는 폴더로 이동. Podfile 를 생성한다.

$ pod init

사용할 라이브러리를 podfile 에 기입 (또는 파인더에서 더블클릭한다)

$ open -e podfile

 

아래와 같은 형태이다.

platform :ios, '9.0'
target 'MyApp' do
pod 'AFNetworking', '~> 3.0'
pod 'Realm', '~> 2.6.2'
pod 'ORStackView', '~> 3.0'
pod 'SwiftyJSON', '~> 2.3' end

 

[CocoaPods 지원 라이브러리 찾으려면]

https://cocoapods.org 에서 검색하여, podfile 화일을 구성에 필요한 명령을 Copy 할 수 있다.

 

https://cocoapods.org 에서 위와 같이 검색이 되지 않을 때가 있다.

https://status.cocoapods.org 에서 현재의 Status 를 확인 할 수 있다.

 

install 명령을 통해 Podfile 을 참조하여 CocoaPods 가 해당 라이브러리를 다운로드 하고,
Podfile 에 추가된 라이브러리로 구성된 프로젝트를 생성한 후, 이를 포함하는 Workspace 화일을 생성한다.
CocoaPods 를 사용하면 Workspace 기반으로 재구성된다는 점이 흥미롭다.

$ pod install

이렇게 포함된 라이브러리는 #import " " 가 아닌,
#import <> 를 이용해서 시스템 라이브러리를 참조하듯 사용할 수 있다.

 

[Podfile 업데이트]

의존성 조정을 위해 Podfile 설정 화일을 변경 한 이후에는 update 문을 실행해준다.

$ pod update

 

[CocoaPods 의 최신의 라이브러리를 인식]

https://github.com/CocoaPods/Specs 의 master repository 를 pull 한다.

 

새롭게 등록되거나 업데이트된 라이브러리 정보를 갱신한다.

 

$ pod repo update 

업데이트 후 install 해준다. 
$ sudo gem install cocoapods

코멘트 추가)
Ignoring ffi-1.x.x because its extensions are not built. Try: gem pristine ffi --version 1.x.x
와 같은 오류시에도 위 $ sudo gem install cocoapods 명령을 먼저 수행 후 진행하도록 한다.

[예외 상황]

Podfile.lock: No such file or directory
Manifest.lock: No such file or directory
The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation

 

빌더시 위와 같은 오류가 발생한다면,

 
터미널을 통해 해당 프로젝트 위치에서

$ rm -rf Pods
$ rm -rf Podfile.lock
$ pod install


을 차례로 실행하도록 하자.

 

 
[Podfile.lock]
이 파일은 pod install 을 처음 실행 한 후에 생성되며 설치된 각 Pod의 버전을 관리한다. 
pod install을 실행하면 Podfile 화일에 지정된 버전의 라이브러리가 설치되고,
정확한 버전이 설치되었음을 나타내는 Podfile.lock이 생성된다. 
Podfile.lock 에 의해서 다른 컴퓨터에서 pod install을 실행하면 최신 버전을 사용할 수 있더라도Podfile.lock 에 지정된 버전이 설치된다.  
Podfile.lock에서 종속성이 업데이트되지 않거나 pod update 가 호출되지 않으면 CocoaPods는Podfile.lock의 Pod 버전에 따른다.
 

[Pod Install vs Pod Update]

Pod install 의 경우 최초 podfile.lock 을 생성된다. 
Pod update 도 podfile.lock 을 생성되는 것은 동일하다.

  • 차이점)
    다음에 pod Install 을 할 경우 podfile.lock을 기준으로 라이브러리를 업데이트 한다.

    Pod update 는 podfile.lock 을 참조하지 않고
    새로운 버전으로 라이브러리를 업데이트 하고 podfile.lock 화일도 새로운 버전으로 업데이트 한다.

  • 특정 버전만 업데이트 하고 싶다면 pod update Alamofile 와 같이 하면 된다.
  • 새로운 업데이트를 하기 전에 라이브러리의 목록을 확인하려면
    Pod outdated 와 같이 하면 된다.

  • Lock 화일의 중요성
    공동작업시 개발자간의 install, update 등을 사용하다보면 설치되는 라이브러리의 버전의 차이로 인한 오류가
    발생할 수 있다. Podfile.lock 화일을 공유하고 Pod Install 을 함으로서 동일한 라이브러리 버전이 된다.

https://guides.cocoapods.org/using/pod-install-vs-update.html
https://eso0609.tistory.com/96
https://tttap.tistory.com/227

 
Podfile 버전지정
  • = 0.1 Version 0.1.
  • > 0.1 Any version higher than 0.1.
  • >= 0.1 Version 0.1 and any higher version.
  • < 0.1 Any version lower than 0.1.
  • <= 0.1 Version 0.1 and any lower version.
  • ~> 0.1.2 Version 0.1.2 and the versions up to 0.2, not including 0.2. This operator works based on the last component that you specify in your version requirement. The example is equal to>= 0.1.2 combined with < 0.2.0 and will always match the latest known version matching your requirements.
  • ~> 0.1.3-beta.0 Beta and release versions for 0.1.3, release versions up to 0.2 excluding 0.2. Components separated by a dash (-) will not be considered for the version requirement.

 

[참고 URL]
https://cocoapods.org
http://d2.naver.com/helloworld/444849
http://www.shako.net/blog/224/
https://calyfactory.github.io/xcode-dependency-Manager/

 

'iOS & Swift' 카테고리의 다른 글

가중치 적용  (0) 2020.02.06
Realm 요약 정리 (작성중)  (0) 2017.04.28
Objective-C #import와 @import의 차이점(Module이란?)  (0) 2016.03.18
XCode 에서 Provisioning profile 삭제하기  (0) 2016.03.18
오픈 소스 몇가지  (0) 2015.09.02