CocoaPods와 Swift Package Manager 중 무엇을 고를지는 새 프로젝트인지, 이미 배포 중인 앱인지에 따라 달라집니다. 새 프로젝트이고 핵심 의존성이 Swift Package Manager를 지원한다면 이를 먼저 선택하십시오. 기존 프로젝트에 Pod 전용 SDK, 복잡한 스크립트 또는 민감한 배포 일정이 있다면 CocoaPods를 유지하고, 혼합 프로젝트는 한 번에 전환하지 말고 이중 구성을 검증하는 편이 안전합니다.

이 글은 다음과 같은 개발자를 위한 내용입니다.

  • 새 Swift iOS 또는 macOS 프로젝트의 기본 의존성 관리 방식을 정하려는 독립 개발자
  • CocoaPods, 사설 컴포넌트, 바이너리 SDK가 있는 기존 앱을 운영하는 개발자
  • 원격 Mac 또는 지속적 통합 환경에서 의존성을 복원하고 Archive까지 완료해야 하는 소규모 팀
01

프로젝트 상태별 선택 기준

먼저 도구의 인지도보다 현재 프로젝트의 배포 경로를 기록해야 합니다. 의존성 해결에 성공했다고 해서 소스 다운로드, 컴파일, 테스트, Archive까지 성공한 것은 아닙니다. 이 다섯 단계를 분리해서 판단해야 합니다.

프로젝트 상태 우선 검토할 방식 선택 조건 바로 이전하지 말아야 할 조건
새 네이티브 앱 Swift Package Manager 핵심 SDK가 공식 패키지를 제공하고 리소스와 바이너리 타깃이 정상 작동함 필요한 SDK가 Pod만 제공하거나 설치 스크립트가 필수임
안정적으로 운영 중인 CocoaPods 앱 CocoaPods 유지 Podfile, Podfile.lock, 워크스페이스와 자동화가 이미 안정적임 지원 중단이 공식적으로 확인됐거나 반복적인 설치 장애가 있음
CocoaPods와 패키지가 섞인 앱 단계적 이중 구성 라이브러리별 담당 방식을 구분하고 중복 연결을 차단함 같은 라이브러리를 두 방식으로 가져오고 있음
원격 Mac 기반 CI 두 방식 모두 가능 잠금 파일, 인증, 캐시 삭제 후 복원, Archive를 검증함 개발자 컴퓨터에서만 성공하고 깨끗한 환경에서 재현하지 못함

Swift Package Manager는 Xcode에 직접 연결되는 흐름이 장점입니다. Apple의 Swift Packages 안내와 Swift 공식 문서는 패키지 선언, 의존성 해결, 제품과 타깃 연결의 기본 동작을 설명합니다. 따라서 새 프로젝트에서는 별도 설치 계층을 추가하기 전에 이 방식을 먼저 평가할 이유가 있습니다.

다만 “공식 통합이 더 깊다”는 사실만으로 모든 앱의 즉시 이전을 결정해서는 안 됩니다. 필요한 SDK가 실제로 패키지를 제공하는지, 리소스가 번들에 포함되는지, 바이너리 타깃이 현재 프로젝트의 빌드 설정과 맞는지 확인해야 합니다. Swift Package Manager의 패키지 설명 문서Apple의 Swift Packages 통합 안내를 함께 확인하십시오.

02

새 프로젝트는 Swift Package Manager를 기본값으로 검토합니다

새로운 앱이라면 먼저 저장소에 필요한 의존성 목록을 만드십시오. 이름만 적지 말고 다음 정보를 붙여야 합니다.

  • 제공 방식이 Swift Package인지 Pod인지
  • 소스 패키지인지 바이너리 SDK인지
  • 리소스 파일을 포함하는지
  • 사설 저장소 인증이 필요한지
  • 설치 뒤 실행해야 하는 스크립트가 있는지
  • 앱 타깃 외에 확장 타깃이나 테스트 타깃에도 연결되는지

Swift Package Manager를 사용하면 Xcode 프로젝트 안에서 패키지를 추가하고 버전을 관리할 수 있습니다. 해결된 버전은 Package.resolved에 기록되므로, 이 파일을 저장소에 포함할지 팀 규칙으로 정해야 합니다. CI가 개발자 컴퓨터와 다른 버전을 선택하지 않게 하려면 잠금 파일을 무시하지 않는 것이 중요합니다.

여기서 확인할 것은 “패키지가 추가됐는가”가 아닙니다. 실제 앱 타깃이 올바른 제품을 링크하는지, 리소스 번들이 실행 시점에 포함되는지, 시뮬레이터와 Archive 환경에서 바이너리가 모두 열리는지를 확인해야 합니다.

주의할 점은 Swift로 작성된 SDK라고 해서 자동으로 Swift Package Manager를 지원하는 것은 아니라는 사실입니다. 제공자가 공식적으로 패키지 선언과 배포 절차를 안내하는지 확인해야 합니다.

03

기존 CocoaPods 앱은 안정성을 먼저 계산합니다

배포 중인 CocoaPods 프로젝트는 단순히 Podfile만 보고 판단할 수 없습니다. 실제 구성에는 Podfile.lock, 워크스페이스 파일, Ruby 실행 환경, 플러그인, 사용자 정의 설치 스크립트와 여러 타깃의 빌드 설정이 함께 들어 있을 수 있습니다.

CocoaPods의 공식 안내에서 pod installpod update는 서로 다른 목적을 가집니다. 설치 명령은 잠금된 의존성 상태를 복원하는 흐름에 가깝고, 업데이트 명령은 새로운 버전 해결을 유발할 수 있습니다. 이 차이를 CI 스크립트에서 구분하지 않으면 개발자 컴퓨터에서는 통과한 변경이 원격 빌드에서 다른 의존성 조합으로 재현될 수 있습니다. CocoaPods 설치와 업데이트 차이를 기준으로 현재 스크립트를 점검하십시오.

다음 조건이라면 당장 이전하지 않고 CocoaPods를 유지할 수 있습니다.

  • 핵심 SDK가 공식 Swift Package를 제공하지 않습니다.
  • 여러 앱 타깃과 확장 타깃이 동일한 Pod 설정에 의존합니다.
  • 설치 과정에서 헤더, 빌드 플래그 또는 스크립트를 수정합니다.
  • 긴급 출시 기간이라 검증용 변경을 받아들일 여유가 없습니다.
  • 현재 Podfile.lock 기반 복원이 원격 Mac에서도 반복됩니다.

반대로 설치 단계가 자주 깨지고, 유지해야 할 스크립트가 많으며, 주요 의존성이 이미 공식 패키지를 제공한다면 단계적 이전의 경제성이 생깁니다. 여기서 경제성은 라이선스 가격이 아니라 빌드 담당자가 고장 난 의존성 경로를 복구하는 시간과 출시 지연 위험을 뜻합니다.

04

사설 의존성과 바이너리 SDK는 전달 방식을 기준으로 봅니다

사설 소스 저장소, 내부 컴포넌트, XCFramework, 리소스가 포함된 제3자 SDK는 같은 기준으로 묶으면 안 됩니다. 인증 방식과 배포 파일의 형태가 다르기 때문입니다.

사설 CocoaPods 구성은 별도 Spec Repo와 접근 권한을 사용할 수 있습니다. CocoaPods 사설 Spec Repo 가이드는 사설 의존성의 배포 구조를 설명하지만, 실제 인증 토큰과 저장소 권한은 제공자 정책을 따라야 합니다.

Swift Package Manager 쪽도 사설 저장소 접근, 버전 태그, 바이너리 아카이브의 무결성 확인이 필요합니다. 명령과 해결 결과만 통과해도 인증 정보가 개발자 컴퓨터에만 저장되어 있으면 원격 Mac에서 재현되지 않습니다. 저장소 주소, 사용자 이름, 토큰, 프로젝트 이름은 문서와 스크립트에 직접 넣지 말고 환경 변수나 비밀 저장소의 자리 표시자로 관리하십시오.

예를 들어 문서에는 다음처럼 작성할 수 있습니다.

https://[사설저장소주소]/[조직명]/[패키지명].git
[비밀저장소의토큰]
[앱프로젝트명]

실제 값은 팀의 비밀 관리 시스템에서 주입해야 합니다. 바이너리 SDK라면 다음 항목을 별도로 확인하십시오.

  • 현재 플랫폼과 시뮬레이터용 바이너리가 모두 제공되는지
  • 리소스 번들이 패키지 제품에 포함되는지
  • Archive 시 필요한 서명 또는 임베드 설정이 자동으로 적용되는지
  • 공급자가 제시한 버전 잠금과 체크섬 규칙이 저장소에 남는지
05

혼합 프로젝트는 이중 구성으로 작게 이전합니다

하나의 Xcode 프로젝트에서 CocoaPods와 Swift Package Manager를 함께 사용할 수는 있습니다. 그러나 같은 라이브러리를 두 번 가져오면 링크 충돌, 중복 심볼, 서로 다른 전이 의존성, 리소스 이름 충돌이 생길 수 있습니다.

이전 순서는 위험도가 낮은 구성부터 시작하십시오.

  • 앱 핵심 경로와 무관한 개발 도구
  • 테스트 전용 또는 내부 유틸리티
  • 공식 패키지가 확인된 주변 컴포넌트
  • 마지막으로 앱 실행과 결제, 로그인, 네트워크에 직접 연결된 핵심 SDK

각 배치가 끝날 때마다 이전 상태를 태그하거나 별도 브랜치로 보관하십시오. 한 번에 여러 라이브러리를 바꾸면 실패 원인을 구분하기 어렵습니다. 패키지 추가가 완료된 뒤에는 일반 빌드만 실행하지 말고 테스트와 Archive를 이어서 확인해야 합니다.

경험상 이전 완료의 기준은 프로젝트가 한 번 열리는 것이 아닙니다. 새 개발자 또는 새 원격 Mac이 잠금 파일과 비밀 설정만으로 같은 결과를 재현하는지까지 확인해야 합니다.

06

원격 Mac에서는 의존성 복원 자체를 배포 시험으로 취급합니다

원격 Mac이나 지속적 통합 환경에서는 캐시가 성공을 숨길 수 있습니다. 따라서 다음 흐름을 별도 작업으로 기록하십시오.

깨끗한 환경 복원 절차

  • [ ] 저장소를 새 작업 디렉터리에 체크아웃하고 커밋 상태를 기록합니다.
  • [ ] Package.resolved 또는 Podfile.lock이 저장소에 존재하는지 확인합니다.
  • [ ] 사설 저장소 인증을 대화형 입력 없이 주입합니다.
  • [ ] 의존성 캐시를 사용하지 않거나 삭제한 상태에서 복원을 실행합니다.
  • [ ] 해결된 소스와 바이너리 파일이 실제로 내려받아졌는지 확인합니다.
  • [ ] 앱의 일반 빌드를 실행하고 모든 타깃의 컴파일 결과를 확인합니다.
  • [ ] 테스트를 실행한 뒤 서명 설정을 적용해 Archive를 만듭니다.
  • [ ] Mac을 재시작하거나 새 작업 환경으로 바꿔 같은 절차를 반복합니다.
  • [ ] 실패했을 때 이전 잠금 파일과 구성을 되돌리는 경로를 확인합니다.

Apple은 CI에서 패키지 의존성을 구성할 때 인증, 해결, 빌드 환경을 명시적으로 다루도록 안내합니다. Apple의 CI 의존성 구성 문서를 기준으로 작업 환경을 문서화하십시오. Swift Package Manager의 해결 명령은 공식 패키지 해결 문서에서 확인할 수 있습니다.

CocoaPods를 계속 사용한다면 설치 명령과 업데이트 명령을 CI에서 구분하고, 필요한 워크스페이스를 정확히 열어야 합니다. CocoaPods 명령 참고 문서도 함께 확인하십시오. Swift Package Manager를 선택했다면 Package.resolved의 변경을 코드 리뷰 대상으로 만들고, 의도하지 않은 버전 변경이 Archive에 들어가지 않았는지 검토해야 합니다.

07

최종 결정은 세 가지 중 하나로 고정합니다

CocoaPods를 계속 사용하는 선택

다음 항목이 많으면 유지 쪽으로 기울입니다.

  • 핵심 의존성이 Pod 전용입니다.
  • 사용자 정의 설치 스크립트가 앱 빌드에 필수입니다.
  • 여러 타깃의 현재 구성이 이미 안정적으로 배포됩니다.
  • 가까운 출시 일정 때문에 구조 변경의 검증 비용이 큽니다.

Swift Package Manager로 이전하는 선택

다음 조건이 동시에 확인될 때 이전을 시작하십시오.

  • 핵심 의존성이 공식 Swift Package를 제공합니다.
  • 리소스와 바이너리 타깃이 현재 앱 환경에서 정상 작동합니다.
  • 사설 저장소 인증을 원격 환경에서 재현할 수 있습니다.
  • 일반 빌드, 테스트, Archive를 깨끗한 Mac에서 통과시켰습니다.
  • 실패 시 CocoaPods 상태로 되돌릴 수 있습니다.

당분간 두 방식을 함께 사용하는 선택

모든 의존성을 한 번에 바꾸기 어렵지만 일부 컴포넌트의 이전 효과를 확인하고 싶을 때 적합합니다. 단, 각 라이브러리의 소유 방식을 문서로 고정하십시오. 같은 라이브러리의 중복 유입을 검사하고, 잠금 파일 변경을 검토하며, 배포 브랜치에서는 검증된 조합만 허용해야 합니다.

의존성 선택 후에는 원격 Mac iOS 빌드 환경 검증 방법을 참고해 깨끗한 환경의 복원 절차를 따로 점검하는 것이 좋습니다. 기존 개발 컴퓨터를 건드리지 않고 검증용 환경을 분리해야 한다면 맥 미니 렌탈 조건 비교에서 프로젝트 기간과 필요한 접속 방식을 먼저 확인하십시오.

현재 로컬 환경만 사용하는 방식은 디스크 공간 부족, 다른 개발자와의 환경 차이, 항상 켜 둘 빌드 장비의 관리 부담이 생깁니다. 사내 장비를 직접 마련하면 초기 구매와 업데이트, 원격 접근 설정까지 직접 책임져야 합니다. 이전 검증처럼 짧은 기간에 깨끗한 macOS 환경이 필요한 경우에는 KVMNODE의 원격 Mac을 별도 검증 장비로 사용해 의존성 복원, 테스트, Archive를 실행한 뒤 생산 빌드로 옮기는 방식이 더 현실적입니다. 장기적으로 물리 장비가 필요하거나 특수 포트와 로컬 주변 기기가 필수라면 직접 Mac을 준비하는 편이 맞지만, 임시 CI 검증과 출시 전 확인이 목적이라면 프로젝트 일정에 맞춘 렌탈이 관리 부담을 줄일 수 있습니다. 자세한 접속 방식은 KVMNODE 원격 Mac 환경에서 확인할 수 있습니다.

08

자주 묻는 내용

위 FAQ는 새 프로젝트, 기존 CocoaPods 앱, 혼합 구성, 원격 Mac 복원이라는 실제 선택 상황을 기준으로 정리했습니다. 핵심은 특정 도구의 승리를 선언하는 것이 아니라, 잠금 파일과 깨끗한 환경에서 반복 가능한 Archive 경로를 확보하는 것입니다.