Dependency Manager(의존성 관리 도구) in iOS

Jee.e (황지희)·2023년 2월 16일
0

프로젝트를 진행하며 의존성 관리 도구로 상황에 따라 CocoaPods, SPM을 번갈아 사용해 왔습니다.
iOS의 의존성 관리 도구에는 Carthage도 있는데, 각각의 차이를 정확히 몰라 이번 기회에 정리해보았습니다.


먼저, Dependency Manager를 왜 써야 하나?

참고 문서에선
프로젝트 진행 시, 사용한 API를 배포에 포함시켜야 할까?,
사용한 API가 완벽하다고 신뢰할 수 있나? 라는 질문을 던지고 있습니다.

모듈을 직접 포함시켜 배포하면, 모듈에 있을 버그의 가능성 + 달라지는 버전에 대응하지 못한 상태로 배포하게 됩니다.

의존성 관리 도구는 위와 같은 문제와 더불어, 보다 원활한 협업을 진행하기 위해 사용됩니다.
우리가 사용하는 모듈(외부 라이브러리)을 일괄적으로 관리해 주죠.
여기에 사용한 라이브러리가 업데이트되어 배포되었을 땐, 개발자가 매번 업데이트 여부를 찾아 볼 필요없이 관리 툴을 통해 의존성 관리 도구로 바뀐게 있나 확인만 하면됩니다.


iOS의 의존성 관리 도구

위에서 언급한 것과 같이, iOS의 의존성 관리 도구는 크게 3가지가 있습니다.
CocoaPods, Carthage, Swift Package Manager(SPM) 로 적힌 순서대로 나왔습니다.


1. CocoaPods

  • Swift와 Objective-C cocoa projects에 사용할 수 있는 중앙 집중식 종속성 관리자로 오픈소스입니다.
  • Ruby로 제작되어있습니다.
  • Main Repository인 Spaces에 중앙화 되어있습니다.
  • Podfile에 사용할 라이브러리만 명시해주면 바로 사용이 가능합니다.
  • 모든 Apple 플랫폼을 지원합니다. (iOS, macOS, tvOS, watchOS)
  • 터미널을 통해 설치 및 사용합니다.
장점단점
설치와 사용이 간편하다.프로젝트 빌드시 Podfile의 모든 라이브러리가 같이 빌드되어, 다른 도구보다 빌드 시간이 오래 걸린다.
Xcode 프로젝트 설정을 자동으로 해준다.
지원하고 있는 라이브러리가 많고, Cocoapods 사이트에서 쉽게 검색해 찾아볼 수 있다.

2. Carthage

  • 카르타고 역시 Swift와 Objective-C cocoa projects에 사용할 수 있으며 Swift로 구축되어있고, 오픈소스입니다.
  • 하지만 분산 종속성 관리자입니다.
  • 따라서, CocoaPods과는 다르게 중앙 specs.git repository가 없습니다.
    (때문에 각 저장소의 업데이트 여부를 확인해야합니다.)
  • 라이브러리명.framework 파일을 만들어서, 프로젝트에 연결 시켜 사용합니다.
    == 이미 컴파일 된 바이너리(프레임워크)를 프로젝트에 등록해 사용하는 것이라, 빌드 시 매번 컴파일 할 필요가 없어 빠릅니다.
장점단점
빌드가 빠르다.지원하는 라이브러리가 적다.(사용성 ↓)
기존 .xcodeproj 확장자로 개발을 진행할 수 있다.Carthage는 직접적으로 Xcode의 설정이나 프로젝트의 않아, 프로젝트의 모든 구성은 사용자에게 있다.(수동으로 설정해야함)

3. SPM(Swift Package Manager)

  • Swift 3.0 부터 사용되었고, Apple이 Xcode 11을 통해 iOS에서 Swift 코드 배포를 관리하기 위한 추가했습니다.
  • Cocoapods이나 Carthage와 같은 3rd party tool이 아닌 1st party입니다.
  • 자체 빌드 시스템이 포함되어 있고, 소프트웨어의 구성과 테스트, 실행까지 포함하고 있습니다.
  • SPM은 내부 모듈에 사용되는 dependency를 자동으로 관리해 주고, dependency를 추가 또는 변경할 때마다 pod install이라는 부가 작업을 하지 않아도 됩니다.
장점단점
Swift용 공식 패키지 관리 도구로, Apple에서 직접 관리한다.커멘드라인 사용법을 실행에 옮길 수 없다.
별 다른 설치 없이, 누구나 쉽게 어떤 의존성이 애플리케이션에 있는지 알 수 있다.CocoaPods에 비해, 지원하지 않는 라이브러리가 많다.
Dynamic, Static 라이브러리를 모두 지원
profile
교훈없는 경험은 없다고 생각하는 2년차 iOS 개발자입니다.

2개의 댓글

comment-user-thumbnail
2023년 10월 5일

안녕하세요! 의존성 관리 도구 spm과 pod 차이점이 궁금했는데 잘 정리해주셔서 감사합니다!
혹시 iOS 라이브러리 제작해보신 적 있으신가요?

1개의 답글