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