CocoaPods / Carthage

  • 오픈소스
  • 코코아팟은 중앙집중식 저장소를 사용하고, 카르타고는 별도의 저장소가 없음
  • SPM이 나오기 전까지 가장 많이 사용됐기 때문에 오래된 코드베이스에는 많이 사용됨

Swift Package Manager

  • 2019년에 출시
  • Package.swift라는 스위프트 파일에 타겟들이 정의됨
  • 깃 저장소를 통해 쉽게 배포가능

Tuist

  • SPM에서 한발짝 더 나아가서 프로젝트에 대한 모든 configuration을 스위프트 코드로 관리할 수 있게 해줌
  • 고객사를 위한 수많은 앱을 개발해야 하는 회사나 화이트 라벨 프로그램을 만드는 곳에서 유용

Bazel / Buck2

  • 우버, 어도비, 메타 등 대규모 프로젝트에서 사용
  • 빠르고 자유도가 높음
  • C++, Swift, Objective-C 등등 여러 언어로 된 프로젝트를 통합할 수 있음
  • 복잡하기 때문에 전담 개발자나 팀이 있을 경우 사용 추천 (큰 회사)

왜 대부분의 경우 SPM으로 충분한가?

  • Xcode에 내장되어 있음
  • 폴더 구조로 되어있고 Package.swift 파일을 통해 프로젝트를 설정 값들을 간단하게 정의하기 때문에 쉽게 이해할 수 있음
  • pbxproj 머지 충돌을 피할 수 있음 (폴더 구조로 되어있기 때문에)
  • 모듈화를 정말 쉽게 할 수 있음: 타겟 정의를 쉽게 할 수 있고 폴더로 소스파일을 관리해주면 됨

왜 모듈화를 해야하는가?

  • 접근 제어자를 사용하게 강제 됨
    • 모듈화가 안되어있다면 모든게 public이나 다름 없기 때문에 유지보수가 어려움
    • 기능들을 어떻게 사용하는지 더 쉽게 이해할 수 있음
  • 개발 과정이 훨씬 빨라짐
    • 전체 프로젝트를 빌드할 필요 없이 모듈만 빌드하면 됨
    • 독립된 테스트를 만들 수 있음
    • 원하는 기능과 설정 값으로 별도의 프리뷰 앱을 띄울 수 있음