## iOS 환경에서 활용할 수 있는 의존성 관리도구의 종류에는 무엇무엇이 있을까? - 코코아팟 - 카르타고 - 스위프트 패키지 매니저 ### 각각의 의존성 관리도구의 장단점도 알아봅시다 - 코코아팟 장점 - pod outdated 명령어로 쉽게 새로운 버전이 있는지 체크할 수 있다. - 거의 대부분의 라이브러리가 코코아팟을 지원한다. 👍 - 코코아팟 단점 - 라이브러리를 다운받아 설치(pod install or update)하는데 오랜 시간이 걸린다. - 프로젝트를 빌드 할 때마다 모든 팟 라이브러리가 같이 빌드되므로 다른 도구를 사용할 때 보다 프로젝트 빌드 시간이 느리다. - 카르타고 장점 - carthage outdated 명령어로 쉽게 새로운 버전이 있는지 체크할 수 있다. - carthage update 를 실행할때만 한 번 프레임워크를 빌드하므로 코코아팟에 비해 프로젝트 빌드 속도가 빠르다. - 처음에 프레임워크를 추가하는 것 외에 프로젝트 설정이 바뀌지 않는다. - 카르타고 단점 - 의존성이 추가될 때마다 해줘야 하는 번거로운 작업이 있다. - 사용자나 인기가 많은 라이브러리가 아니라면 카르타고를 지원하지 않을 수도 있다. - 스위프트 패키지 매니저 장점 - 애플이 지원한다. - 스위프트 언어에 built-in 되어있어 별다른 설치가 필요없다. (Swift 3 이상) - 스위프트 언어에 built-in 되었기 때문에 Xcode Project 파일이 꼭 필요한 것이 아니므로 리눅스에서도 사용할 수 있다. - Package.swift 파일 이외에 수행할 설정이 없다. - Xcode의 GUI 환경에서 관리가 가능하다 (11.0 버전 이상) - 스위프트 패키지 매니저 장점 - 아직은 지원하지 않는 라이브러리가 많다. - 현 시점, 해결되지 않은 이슈가 270건이 있다. (참조: SPM 이슈 목록) ## 의존성 관리도구를 사용하는 이유는? - 만들어진 오픈소스, 즉 외부 라이브러리를 직접 프로젝트에 적절히 포팅하는 작업을 일일이 다 해줘야하며, 외부 라이브러리의 버전이 올라가면, 라이브러리 또한 새로운 버전으로 일일이 교체해주는 작업이 필요하다. - 휴먼 에러가 생기기 쉽상이다. - 이런것을 쉽게 관리하기 위해 의존성 관리도구를 사용해야 한다. ## 의존성 관리도구와 Git을 함께 사용할 때 주의할 점은? - 일반적으로 의존성을 Git에 올리지 않고 버전만 명시하여 올린다고 하기 때문에, 협업하는 팀원이 모두 같은 버전의 라이브러리를 적용하고 있는지 확인해야 한다. - 협업 시 동일한 의존성 관리도구를 사용해야 한다. 코코아팟은 라이브러리 코드를 통째로 설치해버리기 때문에, 프로젝트 빌드를 하면, 해당 라이브러리들도 모두 빌드가 됨 뭐, 좋게 보자면 팟에 직접 브레이크포인트를 걸어 디버깅을 할 수 있다!!! 가 되겠지만, 실제 그런 일은 많지 않고, 또 팟이 많아질 수록 클린 빌드 시간이 .......ㅎ;; 또한, 기존 .xcodeproj 확장자가 아닌, .xcworkspace 확장자로 열어야 하는 번거로움이.. 따라서, 이러한 코코아팟의 단점을 극복한 게 바로 카르타고임ㅎㅎ 그럼 카르타고는 위 코코아팟의 단점들을 어떻게 극뽁한 것일까? 라이브러리를 프레임워크(framework)로 사용하는 것임 (프로젝트가 iOS8 이후 버전을 지원해야 한다고 하네영) 프레임워크는 프로젝트에 라이브러리 소스코드를 통으로 추가하는 것이 아닌, 이미 컴파일된 바이너리(프레임워크)를 프로젝트에 등록하는 방식이라, 프로젝트를 컴파일 할 때마다 라이브러리를 매번 컴파일하는 작업이 필요가 없는 것임!!! 때문에, 빌드 속도가 빨라지고, 기존 .xcodeproj 확장자로 개발을 진행할 수 있음 :)