Git, CocoaPods, Xcode, Shell

[iOS - swift] cocoapods 개념, podfile.lock, gemfile.lock, bundle exec pod

jake-kim 2021. 2. 20. 00:46

Cocoapods이란

  • 일반적으로 오픈소스를 관리하는 방법에는 아래 방법 존재, 두 가지 단점을 극복한 오픈소스 관리하는 cocoapods
    - 압축 파일로 소스를 받아서 직접 프로젝트에 넣는 방법 - 버전 업데이트가 어려운 단점
    - 개발하고 있는 저장소에 오픈소스 저장소를 링크시켜 프로젝트에 삽입 - circular dependency 문제 (앱에서 A라이브러리 사용하고 있을 때 A라는 오픈소스 저장소를 또다시 링크시키면 충돌)
  • Cocoapods의 장점
    - 라이브러리 버전 관리
    - 라이브러리 의존성 체크
    - 지원 OS버전 설정에 간편화
  • Cocoapods은 ruby기반으로 제작

Cocoa pods 지원 버전 정의

  • pod ''myFramework', '0.0.1' --> 0.0.1버전
  • pod 'myFramework' , '= 0.0.1' --> 0.0.1버전
  • pod 'myFramework' , '> 0.0.1' --> 0.0.1버전보다 큰 버전
  • pod 'myFramework' , '>= 0.0.1' 
  • pod 'myFramework' , '~> 0.1.2' --> 0.1.2이상0.2 미만 버전
  • pod 'myFramework' , '~> 0.0.1-beta.0' --> 베타는 0.1.3 / 릴리즈버전은 0.2미만

Cocoapods 명령어로 보는 개념

  • $ pod install: podfile.lock에 명시된 버전 정보를 가지고 새로운 pod을 다운받고 설치
    - 각 pod마다 설치된 버전을 podfile.lock에 기록
    - podfile.lock에 명시된 버전이 없으면 podfile에 명시된 버전 조건으로 검색하여 다운
  • $ pod update: podfile.lock을 참조하지 않고 podfile에 명시된 버전 조건으로 검색하여 다운
    - pod update는 결국 podfile.lock을 새로 만드는것
  • $ pod repo update: /Users/{사용자이름}/.cocoapods/repos 에 있는 모든 podspec 파일을 업데이트
    - podspec이란, 해당 프레임워크에 관한 버전과 주소 명시
// podspec
spec.source = { :git => 'https://github.com/Alamofire/Alamofire.git', :tag => 'v3.1.1' }

podfile.lock 개념

  • pod들의 버전을 기록하여, 팀간 동일한 버전을 공유할 수 있도록 하는 개념
  • podfile.lock 구성
PODS:
  - AnyFormatKit (2.4.0)
  ...

DEPENDENCIES:
  - AnyFormatKit
  ...

SPEC REPOS: 
 https://github.com/CocoaPods/Specs.git:
   - AnyFormatKit
   ...
   
SPEC CHECKSUMS: 
  - AnyFormatKit: 2ca2ad3f6fa0f6862a650342141d2bcaa42e9186
  ...
  
PODFILE CHECKSUM: a31069993ade597ec1b7d40966cbea6d3ba29cb9

COCOAPODS: 1.10.1
  • PODS: 프레임워크와 버전 명시
  • DEPENDENCIES: 의존성을 구분하기 위하여 프레임워크들이 나열
    - Moya에서 내부적으로 Alamofire를 쓰는 경우, DEPENDEICES에는 Moya만 존재하고 Alamofire는 나열되지 않음
  • SPEC REPOS: 프레임워크들의 다운받는 주소 명시  
  • SPEC CHECKSUMS: pod 버전에 관한 유일성을 보증하는 값 (pod 버전에 하나라도 변화가 생기면 CHECKSUM값 변함)
    - SPEC CHECKSUMS이 diff로 뜬다는 의미 -> pod 프레임워크중에 버전이 바뀌었다는 의미
    - 버전이 바뀐것을 1.1.1이런 숫자로 판단하는 것이 아닌 Checksum값으로 확인하는 것
  • PODFILE CHECKSUM: podfile에 관해 유일성을 보증하는 값
  • COCOAPODS: 코코아팟 버전

"Bundle exec pod install"과 "pod install"

  • Bundle exec를 사용한다는 것은 gemfile을 사용한다는 것이며, gemfile도 podfile과 동일한 개념
  • gemfile.lock파일이 존재하며, 이곳에는 cocoapod에관한 버전이 명시
  • Bundle exec pod install을 하게되면 팀원끼리 동일한 cocoapods버전을 사용할 수 있게끔 함

"bundle exec pod update"와 "pod update"

  • pod update는 로컬에 설치된 cocoapods버전을 가지고 podfile.lock파일을 참고하지 않으면서 pod 설치
  • bundle exec pod update는 gemfile.lock파일에 참고된 cocoapods파일의 버전 기준으로, podfile.lock파일을 참고하지 않으면서 pod 설치

-> podfile.lock을 업데이트하고 싶을 때 가장 안전한 방법은 bundle exec pod update (팀원들간 동일한 cocoa pod 버전으로 podfile.lock 갱신)

-> pod 정보를 설치하고 싶을 때 가장 안전한 방법은 bundle exec pod install (팀원들간 동일한 cocoa pod 버전으로 pod 설치)

 

* 참고:

guides.cocoapods.org/using/pod-install-vs-update.html

d2.naver.com/helloworld/444849