CocoaPods 기본 명령어 정리

1. pod install

  • 프로젝트에서 처음 CocoaPods을 설정할 때 사용

  • Podfile에서 의존성을 추가, 수정, 삭제한 후 실행

  • 새로운 pod을 다운로드하고 Podfile.lock에 버전을 기록

  • 기존에 설치된 pod은 Podfile.lock에 기록된 버전 그대로 설치

  • Podfile.lock에 없는 새로운 pod은 Podfile의 버전 조건에 맞춰 다운로드

예제

pod install

2. pod update

  • 특정 pod을 최신 버전으로 업데이트할 때 사용

  • Podfile.lock을 무시하고 Podfile의 버전 조건에 맞는 최신 버전 설치

  • 모든 pod을 업데이트하려면 pod update만 실행

  • 특정 pod만 업데이트하려면 pod update {특정 pod} 실행

예제

pod update Alamofire

"bundle exec"과 함께 사용했을 때와 안 했을 때의 차이

CocoaPods 관련 명령어(pod install, pod update)에서 bundle exec을 사용하는 이유는 팀원 간 동일한 CocoaPods 버전을 보장하기 위함이다.

1. "bundle exec"을 붙였을 때와 안 붙였을 때의 핵심 차이

명령어
동작 방식
사용하는 버전 기준
Podfile.lock 사용 여부
팀원 간 일관성 유지

pod install

Podfile.lock 기반으로 로컬 CocoaPods로 설치

로컬에 설치된 CocoaPods 버전

✅ Podfile.lock 참고

❌ CocoaPods 버전 차이 가능

bundle exec pod install

Podfile.lock 기반으로 Gemfile.lock에 명시된 CocoaPods 버전으로 설치

Gemfile.lock의 CocoaPods 버전

✅ Podfile.lock 참고

✅ 동일한 버전 유지

pod update

최신 버전의 Pod을 설치하며 Podfile.lock 업데이트

로컬에 설치된 CocoaPods 버전

❌ Podfile.lock 무시

❌ CocoaPods 버전 차이 가능

bundle exec pod update

최신 버전의 Pod을 설치하며 Podfile.lock 업데이트

Gemfile.lock의 CocoaPods 버전

❌ Podfile.lock 무시

✅ 동일한 버전 유지


정리

  • 팀원 간 CocoaPods 버전을 맞추고 안정적인 환경을 유지하려면 bundle exec을 붙여서 사용해야 한다.

  • pod installpod update로컬 CocoaPods 버전에 따라 다르게 동작할 가능성이 크다.

  • 가장 안전한 방법

    • pod을 설치할 때: bundle exec pod install

    • pod을 업데이트할 때: bundle exec pod update


3. pod outdated

  • Podfile.lock에 기록된 버전보다 새로운 버전이 존재하는 pod을 확인

  • 업데이트 가능한 pod 리스트를 출력

예제

pod outdated

4. pod repo update

  • CocoaPods 저장소에 있는 podspec 파일을 최신 상태로 업데이트

  • 특정 pod이 제대로 설치되지 않을 때 해결 방법으로 사용

예제

pod repo update

pod repo update vs pod update

명령어

기능

pod repo update

CocoaPods 저장소의 podspec 정보를 최신 상태로 업데이트

pod update

Podfile.lock을 무시하고 지정된 pod을 최신 버전으로 업데이트

  • pod repo update는 CocoaPods 저장소의 정보를 최신 상태로 유지하는 것이고, pod update는 실제 프로젝트의 pod 버전을 최신으로 업데이트하는 차이가 있음.


5. CocoaPods 저장소 구조

CocoaPods 저장소는 로컬과 원격 두 곳에 존재함.

1. 로컬 저장소

  • 위치: ~/.cocoapods/repos

  • pod install 또는 pod update 실행 시, 로컬 저장소의 podspec 정보를 참고하여 pod을 설치

  • pod repo update를 실행하면 로컬 저장소가 최신 원격 정보로 업데이트됨

2. 원격 저장소

즉, pod installpod update는 로컬 저장소(~/.cocoapods/repos)의 podspec을 참고하지만, 이 정보가 오래되었을 경우 pod repo update로 최신 원격 저장소와 동기화해야 함.


6. podspec이란?

  • podspec(Pod Specification)은 CocoaPods에서 사용하는 설정 파일로, 특정 라이브러리(Pod)에 대한 메타데이터를 포함

  • pod의 이름, 버전, 소스 코드 저장소, 종속성 등을 정의함

  • .podspec 파일은 CocoaPods 저장소에 저장되며, pod install 또는 pod update 시 참조됨

podspec 예시

Pod::Spec.new do |spec|
  spec.name         = "Alamofire"
  spec.version      = "5.4.4"
  spec.summary      = "Elegant HTTP networking in Swift"
  spec.homepage     = "https://github.com/Alamofire/Alamofire"
  spec.source       = { :git => "https://github.com/Alamofire/Alamofire.git", :tag => spec.version.to_s }
  spec.ios.deployment_target = "10.0"
end
  • spec.name : pod 이름

  • spec.version : pod 버전

  • spec.source : pod의 소스 코드가 저장된 Git 저장소

  • spec.ios.deployment_target : 최소 iOS 지원 버전

podspec과 pod update의 관계

  • pod update를 실행하면 CocoaPods은 podspec 파일을 참고하여 최신 버전을 찾음

  • podspec에 정의된 source에서 최신 태그를 확인하고, Podfile의 버전 조건에 맞는 최신 버전으로 업데이트

  • pod repo update를 실행하지 않으면, 로컬 저장소의 오래된 podspec을 사용하여 최신 버전을 찾지 못할 수도 있음


7. Podfile.lock이란?

  • Podfile.lock은 설치된 pod의 버전 정보를 기록하여 유지하는 역할을 함

  • pod 버전 변경 시 CHECKSUM 값도 변경됨

Podfile.lock 예시

PODS:
  - Alamofire (4.8.2)
  - Crashlytics (3.13.2)
  ...

PODFILE CHECKSUM: 567f647c0698abc31d48952ce58077we758abse2
  • CHECKSUMPodfile.lock의 유일성을 보증하는 해시값

  • Podfile.lock이 변경되면 CHECKSUM 값도 변경됨


8. Podfile.lock을 커밋해야 하는 이유

  • 팀원 간 동일한 pod 버전을 유지하기 위해 Podfile.lock을 반드시 공유해야 함

  • Podfile 수정 후 pod install을 실행하여 의존성을 일관되게 유지

  • 만약 버전 불일치 문제가 발생하면 다음 명령어로 해결 가능

해결 방법

rm -rf Pods && pod install

이렇듯 CocoaPods을 활용하여 안정적으로 iOS 프로젝트의 의존성 관리

Last updated