RN에서 프로젝트를 빌드할때 Android보다 iOS 시뮬레이터를 켜는 편인데,
$pod install을 상당히 자주 하고 있는 나를 발견했다.
처음 App개발을 접했을때 동작에 대한 이해없이 어떻게든 시뮬레이터를 켜는 방법 같은 걸 익혔던것같다. 빌드가 되야 업무를 시작할텐데, 워낙에 의존성과 종속성이 많은 환경이라 시뮬레이터가 켜지기 까지 오만가지 에러를 만났다. 입사 한달정도 까지는 빌드가 되고나서 시계를 보면 퇴근인 경우도 더러 있었다. 이제는 요령이 생겼지만 그럼에도 RN에서 제일 어려운게 App build 라는 말이 공감된다.
언제가 원리를 이해하면 쉬울 수도 있지않을까 생각이 들기 시작했고
무심코 입력했던 명령어들을 제대로 이해해보고 싶어졌다.
- CocoaPods는 iOS & macOS 의 종속성 관리 도구이다.
pod install은 iOS 프로젝트의 종속성을 설치하는 명령어다.- 구체적으로는 PodFile에 적혀있는 종속성 라이브러리를 프로젝트에 설치한다.
위 정의대로라면 PodFile이 업데이트 되어야 pod install도 의미가 있을것 같은데, (package.json이 업데이트 되어야 $yanr 이 의미가 있는것과 같다.) 오히려 pod install을 한 후에 PodFile이 업데이트 되는 상황을 여러번 봤다. RN 프로젝트에서 yarn add로 새로운 라이브러리를 설치한 후에 repo에 생기는 변화를 점검해봤다. yarn add 명령어를 실행 후 변경이 발생한 파일은 package.json 과 yarn.lock 파일이였고, pod install 실행 후 비로소 Info.plist와 Podfile이 변경되는걸 확인할 수 있다.이건 어떻게 이해하면 좋을까 ?
| $yarn add | $pod install |
|---|---|
![]() | ![]() |
Package.json에 추가된 라이브러리가 네이티브 종속성을 포함하고 있다면, CocoaPods가 이를 처리하고 관련 파일을 업데이트 하게됨
이 과정에서 이 과정에서 Podfile이나 Podfile.lock, Info.plist 등의 파일들이 업데이트되기도 함.
native iOS 프로젝트
Podfile 작성 / 수정
→ $pod install 실행
→ Pod 폴더 업데이트
react native 프로젝트
$yarn add 실행
→ Package.json & yarn.lock 업데이트
→ $pod install 실행
→ Podfile & Podfile.lock (종속성 포함 라이브러리 확인)
→ Pod 폴더 업데이트
→ 필요한 경우 Info.plist 업데이트
본래 Podfile 자체는 pod install 명령어에 의해 변경되지않는다.
그러나 react native 프로젝트의 경우 Package.json을 기반으로 네이티브에서 사용할 종속성을 확인하기 때문에, Podfile & Podfile.lock 그리고 Pods 폴더와 Info.plist 까지 업데이트 되기도 한다.
React native에서의 상황이 특수하기 때문인것같다.
그렇다면 RN에서의 $pod install은 그 정의가 달라질 수 있다.
현 repo의 변동사항을 ios 디바이스에 전달하기 위한 스위치 역할을 감당한다는 느낌이 든다.
정리하자면 RN에서는 Javascript 코드와 네이티브 코드간에 연결을 관리하기 위해서 CocoaPods이 사용되는데, 이 연결을 관리하는 명령어가 $pod install 이라고 이해할 수 있을 것 같다.
다음에는 위 내용을 토대로 Pod install 이 필요한 상황과
명령어의 실행이 실패하는 상황에 대해서 다뤄 볼 예정이다.
lock 파일은 빌드시 사용한 서드파티의 버전을 명시해놓기 위한 파일이라고 생각하시면 될 것 같습니다
보통은 package.json에 ^ 표시로 최신 버전을 설치하도록 지정을 하는데
이럴 경우 API가 바뀌거나 하면 빌드 에러가 날 수 있죠
혼자 개발한다면 큰 영향이 없을지도 모르지만 여럿이서 같은 프로젝트를 개발할 경우 환경 설정부터 골머리를 앓게 됩니다
최근에 npm 부터 yarn까지 변천사를 잘 정리한 글을 발견해서 공유합니다
https://velog.io/@devdam/패키지-매니저