CocoaPod이 돌아가는 구조 #fromscratch

Young Bin Lee·2022년 6월 30일
0

Swift 배포

목록 보기
1/2

제목은 거창하지만 그냥 CocoaPod의 코드가 아닌 뒷단에서의 동작이 궁금해서 쓰게 된 글이다. 사용법은 도큐먼트 보면 되니까.

References

Appendix

Brief summary

CocoaPod은 한마디로 중앙화(centralised)된 의존성 관리도구다. 개발자는 프로젝트의 종속성과 프레임워크 버전을 파악 및 관리하기 위해 Podfile을 사용한다. Pod 프로젝트는 .xcworkspace에 생성되며 CocoaPods은 이를 통해 implicit dependency를 구현한다.

Pod의 관리방법

CocoaPod은 이를 실제 어떻게 관리, 구현하고 있을까?
일단 프레임워크 제작자는 podspec이라는 파일을 반드시 구현하게 되어있다(문서). 이 파일은 종속성, subspec과 같은 프레임워크에 대한 메타 정보를 포함한다. podspec의 가장 중요한 부분은 소스가 호스팅되는 위치를 CocoaPod에 알려주는 부분인 source이며 이 위치에 존재하는 소스코드가 Pod 프로젝트로 다운로드 된다.

Behind the scene

CocoaPod은 workspace를 사용하여 빌드 프로세스를 자동화하고 implicit dependency를 구현한다고 말했다. 이를 통해 개발자는 필요한 모든 소스를 프로젝트에 가져오고 프로젝트를 빌드할 때 Xcode는 Pod에서 필요한 소스를 같이 컴파일 한다.

그렇다면 CocoaPod이 갖는 장점은 뭘까? 편리하다는 것 외에 중앙화된 관리방법에서 몇가지 이점을 찾을 수가 있다.

podspec 파일의 dependency라는 항목에 주목해보자. 이를 통해 개발자는 우리의 프레임워크가 다른 프레임워크에 종속된다는 것을 알릴 수 있다. 그렇다면 개발자가 직접 종속된 소스를 넣어줘야 하는 것인가? 다행히도 CocoaPod은 개발자가 그런 수고를 할 필요 없이 중앙화의 힘으로 해당 프레임워크를 찾아 넣어준다.

Pod은 어디에 있을까

그렇다면 수많은 Pod들은 어디에 저장되어 관리되고 있는 것일까. 일종의 클라우드처럼 중앙화된 서버가 이를 관리하고 있을 것 같지만 사실 우리가 사용할 수 있는 Pod들, 정확히 말하면 Pod들의 목록은 github의 Spec라는 저장소에서 관리되고 있다.

CocoaPod 블로그에 따르면(링크) 과거에 Pod을 등록하기 위해선 CocoaPod/Spec 레포에 PR을 날려야 했고 이를 레포 마스터들이 하나하나 리뷰했다고 한다. 하지만 규모가 커짐에 따라 인력으로 PR들을 머지하는 것은 곧 불가능해졌고 그 결과 배포를 해봤다면 한번쯤은 들어봤을 Trunk 웹서비스(aka. pod trunk push)라는 CLI툴이 등장하게 된 것이다.

동작 이미지

PodSpec은 이를 가능하게 해준 도구이자 프로토콜이었다.

With regards to ensuring that a podspec works properly, you, the ‘owner’, and only you are responsible for a podspec working properly.

from CocoaPods blog, CocoaPods Trunk

그동안 번거로웠던 PR & Merge 작업들을 자동화시키는 동시에 PodSpecTrunk를 이용해 검증받은 작성자가 최소한의 자격요건을 갖추게끔 만들어 패키지 배포에 신뢰성을 더한 셈이다.

이렇게 CocoaPod에 대해 알아보았다.

What's next?

  • Local pods
  • Dynamic, static library, xcframework
profile
I can make your dream come true

0개의 댓글