의존성 관리 툴 비교정리
CocoaPods / Carthage
- 오픈소스
- 코코아팟은 중앙집중식 저장소를 사용하고, 카르타고는 별도의 저장소가 없음
- SPM이 나오기 전까지 가장 많이 사용됐기 때문에 오래된 코드베이스에는 많이 사용됨
Swift Package Manager
- 2019년에 출시
- Package.swift라는 스위프트 파일에 타겟들이 정의됨
- 깃 저장소를 통해 쉽게 배포가능
Tuist
- SPM에서 한발짝 더 나아가서 프로젝트에 대한 모든 configuration을 스위프트 코드로 관리할 수 있게 해줌
- 고객사를 위한 수많은 앱을 개발해야 하는 회사나 화이트 라벨 프로그램을 만드는 곳에서 유용
Bazel / Buck2
- 우버, 어도비, 메타 등 대규모 프로젝트에서 사용
- 빠르고 자유도가 높음
- C++, Swift, Objective-C 등등 여러 언어로 된 프로젝트를 통합할 수 있음
- 복잡하기 때문에 전담 개발자나 팀이 있을 경우 사용 추천 (큰 회사)
왜 대부분의 경우 SPM으로 충분한가?
- Xcode에 내장되어 있음
- 폴더 구조로 되어있고 Package.swift 파일을 통해 프로젝트를 설정 값들을 간단하게 정의하기 때문에 쉽게 이해할 수 있음
- pbxproj 머지 충돌을 피할 수 있음 (폴더 구조로 되어있기 때문에)
- 모듈화를 정말 쉽게 할 수 있음: 타겟 정의를 쉽게 할 수 있고 폴더로 소스파일을 관리해주면 됨
왜 모듈화를 해야하는가?
- 접근 제어자를 사용하게 강제 됨
- 모듈화가 안되어있다면 모든게 public이나 다름 없기 때문에 유지보수가 어려움
- 기능들을 어떻게 사용하는지 더 쉽게 이해할 수 있음
- 개발 과정이 훨씬 빨라짐
- 전체 프로젝트를 빌드할 필요 없이 모듈만 빌드하면 됨
- 독립된 테스트를 만들 수 있음
- 원하는 기능과 설정 값으로 별도의 프리뷰 앱을 띄울 수 있음
Tags: dependency management, modularization