라이브러리 설치 시에 한번쯤은 고민하는 cocoapods, spm 같은 Dependency Management에 대해 알아보려 한다!
한번 설치된 내 라이브러리가 업데이트 된 경우, 내 프로젝트에서도 해당 라이브러리를 최신 버전으로 업데이트 해야할 경우, 등등
이렇게 프로젝트 내의 외부 라이브러리를 관리해주는 것을 Dependency Management 라고 한다.
Dependency Management를 하는 방법은 총 3가지 이다.
크게 Podfile, Pods, Podfile.lock 이렇게 3가지를 중점으로 본다.

sudo gem install cocoapods // 설치 위치 상관 없음
Pod init // 여기서부턴 프로젝트 경로에 설치
위 명령어를 치면 Podfile이 생성된다
vi Podfile

pod install
Podfile을 기준(~> 5.2)으로 맞는 버전 라이브러리들을 설치한다. 그 후에 실제로 설치한 버전에 대해 Podfile.lock에 적어놓는다.
즉, 정리하면
Podfile - 설치하고 싶은 라이브러리 작성(버전)
Podfile.lock - 실제 다운 받은 버전을 명시, 다른 사람이 clone하면 동일한 버전을 받을 수 있어, 협업 시 버전 관리에 좋다.
Pods - 설치된 팟이 실제로 저장되는 공간
그러므로 협업 시엔 Pods 파일은 무거우니, Podfile, Podfile.lock 만 공유된다!
코코아팟은 라이브러리 코드를 통째로 설치해버리기 때문에, 프로젝트 빌드를 하면, 해당 라이브러리들도 모두 빌드가 된다.
그러므로 팟이 많아질 수록 클린 빌드 시간이 늘어난다...
또한 .xcworkspace 확장자로 열어야 하는 번거로움이 있는데.. 이러한 단점을 보완한게 "Carthage"이다!
라이브러리를 프레임워크(framework)로 사용하는 것이다! (iOS 8 이후만 가능)
프레임워크는 프로젝트에 라이브러리 소스 코드를 통으로 추가하는게 아닌,
이미 컴파일 된 바이너리를 프로젝트에 등록하는 방식이다.
즉, 프로젝트를 컴파일 할 때마다 라이브러리를 매번 컴파일 하는 작업이 필요 없어진 것!
때문에, 빌드 속도가 빨라지고 기존 .xcodeproj 확장자로 개발을 진행할 수 있음!
vi Carfile
>>
GitHub “Alamofire/Alamofire” ~> 5.2

이렇게 Build Phases에서 + 버튼을 누르고 New Run Script Phase를 눌러서
RunScript가 추가되는데,, 이 부분을 아래처럼 바꿔주면 끝이다.


하지만, 만약 프레임워크가 여러개면 그 만큼 여러개 작성해야한다..
코코아팟이나 카르타고처럼 3rd party tool이 아닌 1st party tool이다.
지금까지의 코코아팟, 카르타고는 애플 자체적으로 지원하는게 아니기 때문에 따로 설치가 필요했다.
하지만 SPM은 애플에서 지원하기 때문에 따로 무언가 설치할 필요가 없고, Xcode 내에서 사용이 가능하다.


2. 버전, 커밋, 브랜치를 확인한다.
3. 이렇게 설치 후 바로 사용이 가능하다.
설치하면 package.resolved 파일에 다운받은 버전이 들어 있어 협업 시 버전 관리에 편하다.
이 차이점이 프로젝트 선택 시 어떤 영향을 미칠 수 있나요?
특정 상황에서 한 도구를 다른 도구보다 선호하는 이유는 무엇인가요?
이러한 질문에서 dependency management를 선택하는 내 기준은 이렇다.
1. SPM을 우선적으로 사용하되, 메인 기능의 라이브러리가 없다면 Cocoapods를 사용하자.
2. Carthage는 Cocoapods보다 빠르지만, 사용하는 라이브러리의 갯수가 적을 때 사용하자. (많으면 일일이 다 설정해줘야함..)
3. Cocoapods가 느리고 다른 실행파일로 인해 불편하지만,,,,
그래도 아직까진 지원하는 라이브러리와 버전관리가 잘 되어 있으므로,
많은 라이브러리를 사용하고, SPM에서 지원하지 않는 라이브러리가 있다면, Cocoapods를 선택한다.