iOS SDK 설정 시 CocoaPods 프레임워크 서명 오류 해결 방법

opoinstall
2026-11-12
5 min read

iOS SDK를 연동할 때 발생하는 CocoaPods 프레임워크 서명 오류는 어떻게 해결할까요? 개발팀(Development Team) 오류를 유발하는 비실행형 리소스 번들 타깃을 진단한 후, 모든 번들에 걸쳐 전역으로 서명을 비활성화하는 대신 타깃 범위를 지정한 CocoaPods post_install 재정의를 적용합니다.

영향을 받는 CocoaPods/Xcode 구성에서는 생성된 리소스 번들 타깃이 서명 설정을 상속받아 Xcode가 개발팀을 요구하게 만들 수 있습니다. 이러한 빌드 실패를 해결하려면 비실행형 리소스 하위 타깃에 대한 서명 요구사항을 비활성화하는 사용자 정의 Podfile post_install 빌드 훅을 구성하거나, 수동 XCFramework 임베딩 프로토콜을 실행해야 합니다.

용어 정의 관련 엔티티 검색 의도 역할
iOS SDK iOS에서 모바일 어트리뷰션과 딥 링크를 활성화하는 컴파일된 프레임워크입니다. Xcode 프레임워크 타깃 정보 제공 / 기술적
CocoaPods Swift 및 Objective-C 프로젝트를 위한 애플리케이션 수준의 의존성 관리자입니다. Podfile 빌드 훅 기술적 / 정보 제공
프라이버시 매니페스트 앱 또는 프레임워크의 개인정보 보호 관행을 상세히 기술한 구조화된 매니페스트입니다. PrivacyInfo.xcprivacy 기술적 / 규정 준수

Xcode 15 및 16 코드 서명 규칙으로 인해 iOS SDK CocoaPods 빌드가 깨지는 이유

Xcode 빌드 툴체인과 리소스 번들 서명

Xcode 15부터 시작하여 Xcode 16까지 이어지면서, Xcode 빌드 시스템의 변경으로 인해 코드 서명 설정이 생성된 하위 타깃으로 전파되는 방식이 바뀌었습니다. 영향을 받는 Xcode 및 CocoaPods 구성에서는 PrivacyInfo.xcprivacy, 에셋 카탈로그, 현지화된 문자열 등의 리소스를 패키징하는 비실행형 리소스 번들 타깃이 Xcode에 개발팀 입력을 요구하는 코드 서명 설정을 상속받을 수 있습니다.

이 문제는 모든 독립 실행형 비실행형 리소스 번들에 독립적인 코드 서명이 필수적이라는 엄격한 Apple 정책 때문이 아니라, CocoaPods 타깃 생성 과정에서 발생하는 빌드 시스템 연동 불일치에 가깝습니다.

컴파일 오류의 분석: 타깃 서명에 개발팀이 필요한 경우

CocoaPods를 사용하여 의존성을 통합할 때, 의존성 관리자는 각 팟과 관련 리소스 번들을 위한 고립된 타깃을 포함하는 별도의 Pods.xcodeproj 프로젝트를 생성합니다. 아카이브 생성이나 시뮬레이터 컴파일 과정에서 Xcode는 libOpoInstallSDK-OPPrivacy 또는 Pods-YourApp-resource-bundle과 유사한 이름을 가진 타깃을 평가합니다.

이때 다음과 같은 특징적인 빌드 오류와 함께 컴파일이 실패합니다.

Signing for "libOpoInstallSDK-OPPrivacy" requires a development team.
Select a development team in the Signing & Capabilities editor.

CocoaPods는 pod install이 실행될 때 이러한 하위 타깃을 동적으로 생성하므로, Xcode GUI 내에서 수동으로 개발팀을 설정하는 방법은 일시적입니다. pod install을 다시 실행하거나 클린 CI/CD 워커에서 빌드하면 프로젝트 파일이 덮어쓰여져 빌드 오류가 다시 발생합니다.

실행 가능한 프레임워크 서명과 격리된 iOS 리소스 번들 서명 오류.

CocoaPods 하위 타깃이 프라이버시 매니페스트 번들에 대한 서명되지 않은 속성을 상속받는 방식

일부 CocoaPods 팟스펙은 (예: resource_bundles 선언을 통해) 생성된 리소스 번들 하위 타깃을 통해 프라이버시 매니페스트를 패키징하는 반면, 다른 팟스펙은 벤더드 프레임워크나 직접 리소스 선언 내에 매니페스트를 포함하여 제공합니다.

영향을 받는 CocoaPods 구성에서는 생성된 리소스 번들 하위 타깃에 사용할 수 있는 DEVELOPMENT_TEAM 값이 없거나, Xcode가 개발팀 지정을 요구하도록 만드는 서명 설정을 상속받을 수 있습니다. 결과적으로 메인 애플리케이션 타깃은 유효한 프로비저닝 프로필로 빌드되지만, 중첩된 리소스 번들 하위 타깃이 Xcode의 코드 서명 사전 검사(pre-flight check)를 유발할 수 있습니다. 이 문제를 해결하려면 Podfile 수준에서 타깃팅된 해결책을 적용하거나 수동 프레임워크 임베딩으로 전환해야 합니다.

프레임워크 번들 서명 오류를 해결하기 위해 Podfile 빌드 훅을 구성하는 방법

CocoaPods post_install 실행 훅 이해하기

CocoaPods는 Podfile 내에서 post_install이라는 Ruby 기반 라이프사이클 훅을 제공합니다. 이 훅은 CocoaPods가 Pods.xcodeproj 프로젝트 파일 생성을 완료한 직후, 디스크에 쓰기 전에 실행됩니다. 이 단계에서 프로젝트 생성을 가로채면 개발자는 프로그램 방식으로 생성된 타깃을 순회하고, 제품 유형을 검사하며, Xcode가 컴파일을 시작하기 전에 빌드 구성 설정을 수정할 수 있습니다.

리소스 번들 하위 타깃에 대한 범위 지정 빌드 설정 오버라이드 자동화

로컬 개발 머신과 원격 CI/CD 빌드 에이전트 모두에서 번들 서명 오류를 해결하기 위해, post_install 훅은 타깃 이름과 제품 유형을 검사할 수 있습니다. 서드파티 의존성 전반에 보안 위험을 유발할 수 있는 모든 CocoaPods 리소스 번들에서 전역으로 코드 서명을 비활성화하는 대신, 개발자는 영향을 받는 타깃 번들에만 국한되도록 오버라이드 범위를 지정해야 합니다.

타깃이 Apple의 리소스 번들 제품 유형(com.apple.product-type.bundle)과 지정된 타깃 이름에 일치할 때, 스크립트는 CODE_SIGN_IDENTITY 빌드 지정을 지우고 CODE_SIGNING_ALLOWED를 NO로 설정합니다. 특별히 영향을 받는 비실행형 리소스 번들 타깃의 경우, 최종 아카이브된 앱 및 App Store 제출 워크플로에 대해 검증을 거친다면 타깃 수준의 코드 서명을 비활성화하는 것이 타깃팅된 빌드 시스템 우회 방법으로 작용합니다.

아래의 Ruby 스크립트는 프로젝트 Podfile 내에서 이 범위 지정 오버라이드를 구현하는 방법을 보여줍니다.

# Podfile - 리소스 번들 서명을 위한 범위 지정 빌드 설정 오버라이드
# 프로젝트 Podfile 하단에 이 post_install 훅을 배치하세요

post_install do |installer|
  # 서명 면제가 필요한 특정 타깃 번들 이름 정의
  affected_bundle_targets = [
    'libOpoInstallSDK-OPPrivacy'
  ]

  installer.pods_project.targets.each do |target|
    next unless target.respond_to?(:product_type)
    next unless target.product_type == 'com.apple.product-type.bundle'
    next unless affected_bundle_targets.include?(target.name)

    target.build_configurations.each do |config|
      # 지정된 리소스 번들에 대해 코드 서명 ID를 지우고 서명 비활성화
      config.build_settings['CODE_SIGNING_ALLOWED'] = 'NO'
      config.build_settings['CODE_SIGN_IDENTITY'] = ''
    end
  end
end

범위가 지정된 CocoaPods post install 훅이 영향을 받는 리소스 번들만 수정합니다.

Xcode 아카이브 및 시뮬레이터 빌드 타깃 간 CI/CD 호환성 검증

Podfile에 범위 지정 빌드 훅을 추가한 후, pod install을 실행하여 업데이트된 구성을 Pods.xcodeproj에 적용합니다. 시뮬레이터 빌드는 장치 아카이브보다 배포 서명 요구사항이 덜 엄격한 경우가 많지만, 엔지니어링 팀은 로컬 시뮬레이터 실행, CI/CD 자동화 테스트 실행 및 Xcode 릴리스 아카이브 구성 전반에서 영향을 받는 타깃 설정을 각각 검증해야 합니다.

코드 서명 검증을 위한 진단 검사 명령어

타깃 빌드 설정 및 코드 서명 ID 검사

빌드 서버에서 간헐적인 서명 실패를 진단할 때, 개발자는 터미널 명령어를 통해 Xcode의 빌드 구성을 직접 조회할 수 있습니다. 이를 통해 Podfile post_install 훅이 영향을 받는 하위 타깃에 대한 코드 서명 요구사항을 성공적으로 지웠는지 확인할 수 있습니다. 빌드 설정은 Xcode의 Pods.xcodeproj 내 개별 타깃에서 직접 검사하여 타깃별 유효 값을 확인할 수도 있습니다.

프로젝트 루트 디렉터리에서 다음 명령어를 실행하세요.

# 타깃 워크스페이스에 대한 코드 서명 빌드 설정 검사
xcodebuild \
  -workspace YourApp.xcworkspace \
  -scheme YourApp \
  -configuration Release \
  -showBuildSettings | grep -E "(CODE_SIGN|DEVELOPMENT_TEAM)"

Xcode 아카이브 번들 및 서명 무결성 감사

아카이브 생성 후, 컴파일된 애플리케이션 패키지를 검사하여 프라이버시 매니페스트가 올바른 위치에 있고 프라이버시 바이너리가 서명 무결성을 유지하는지 확인합니다.

추출된 IPA(Payload/YourApp.app 내) 또는 Xcode .xcarchive 경로(Products/Applications/YourApp.app) 내에서 다음 진단 터미널 명령어를 실행하세요.

# 추출된 IPA 패키지 내부의 프라이버시 매니페스트 존재 여부 검사
find Payload/YourApp.app -name "PrivacyInfo.xcprivacy" -print

# 동적으로 임베디드된 프라이버시의 경우 codesign 서명 무결성 검증:
codesign -dv --verbose=4 Payload/YourApp.app/Frameworks/OpoInstallSDK.framework

# 최종 컴파일된 애플리케이션 번들에 대한 심층 서명 검증 실행
# 참고: --deep은 검증 검사 목적으로만 엄격히 사용하고, 코드 서명 실행 중에는 사용하지 마세요
codesign --verify --deep --strict --verbose=2 Payload/YourApp.app

이 검사 시퀀스를 실행하면 릴리스 빌드가 App Store Connect 유효성 검사를 충족하는지 확인하기 위한 완전한 진단 루프(재현 → 검사 → 패치 → 검증)가 구축됩니다.

iOS 아카이브 검증은 프라이버시 매니페스트 배치와 임베디드 프라이버시 서명을 확인합니다.

CocoaPods 의존성 관리자를 통해 iOS SDK를 임포트하는 방법

pod 'libOpoInstallSDK'로 타깃 프로젝트 Podfile 구성하기

모바일 어트리뷰션 및 딥 링크 플랫폼인 OpoInstall을 CocoaPods를 통해 통합하는 것은 iOS 앱을 위한 표준 의존성 관리 접근법을 나타냅니다. 현재 CocoaPods 배포는 팟스펙에 따라 SDK의 링키지와 패키징된 리소스를 처리합니다. SDK의 현재 CocoaPods 통합 또는 프로젝트 아키텍처에 필요한 경우 use_frameworks!를 포함하세요.

의존성을 추가하려면 루트 Podfile을 열고 타깃 의존성을 지정합니다.

target 'YourAppTarget' do
  use_frameworks!
  
  # OpoInstall iOS 어트리뷰션 SDK 임포트
  pod 'libOpoInstallSDK'
end

의존성 수집 실행 및 워크스페이스 무결성 검증

터미널을 사용하여 프로젝트 루트 디렉터리에서 설치 명령어를 실행합니다.

pod install --repo-update

성공적으로 완료되면 CocoaPods가 .xcworkspace 파일을 생성하거나 업데이트합니다. 개발자는 표준 .xcodeproj 파일을 닫고 Xcode에서 .xcworkspace` 파일을 열어야 합니다. Pods 프로젝트 폴더를 검사하여 libOpoInstallSDK 및 관련 OPPrivacy 번들 타깃이 팟 타깃 목록 아래에 나타나는지 확인합니다.

Swift 프로젝트 아키텍처에서 SDK 엔진 초기화하기

프레임워크를 연결한 후 애플리케이션 라이프사이클 델리게이트 내에서 SDK를 초기화합니다. 정확한 SDK 릴리스에 문서화된 라이프사이클 시점에서 SDK를 초기화하세요. 현재 공개된 예제에서는 콜드 스타트 유니버설 링크(Universal Link) 파라미터와 동적 설치 페이로드를 캡처하기 위해 application(_:didFinishLaunchingWithOptions:)에서 초기화합니다. 배포된 정확한 OpoInstall SDK 버전에 대해 델리게이트 프로토콜 및 데이터 모델 타입 이름(예: OpoinstallData 또는 OpoInstallData)을 확인하세요.

개발자는 상세한 델리게이트 메서드 정의와 동적 파라미터 콜백 서명에 대해 iOS 어트리뷰션 SDK 문서를 검토할 수 있습니다.

아래의 구현 스니펫은 OpoInstallDelegate를 채택하고 최신 Swift 코드베이스 전반에서 SDK 초기화를 트리거하는 방법을 보여줍니다.

// AppDelegate.swift - OpoInstall iOS SDK 초기화
// iOS 애플리케이션 델리게이트 내부에 배치하세요

import UIKit
import libOpoInstallSDK

@main
class AppDelegate: UIResponder, UIApplicationDelegate, OpoInstallDelegate {

    var window: UIWindow?

    func application(
        _ application: UIApplication,
        didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
    ) -> Bool {
        
        // 델리게이트 리스너와 함께 OpoInstall SDK 초기화
        OpoInstallSDK.initWith(self)
        
        return true
    }

    // 콜백 메서드: 딥 링크를 통해 앱이 실행될 때 검색된 파라미터 처리
    func getWakeUpParams(_ appData: OpoinstallData?) {
        if let customData = appData?.data {
            print("OpoInstall SDK: Custom Launch Parameters = \(customData)")
        }
        if let channelCode = appData?.channelCode {
            print("OpoInstall SDK: Channel ID = \(channelCode)")
        }
    }
}

iOS 프로젝트 타깃을 위한 수동 프레임워크 임포트 워크플로

엔터프라이즈 빌드 환경에서 CocoaPods보다 수동 임포트를 선택해야 하는 경우

CocoaPods는 패키지 관리를 단순화하지만, 특정 엔터프라이즈 개발 환경은 엄격한 보안 또는 빌드 환경 제약을 강제합니다. 다음과 같은 경우 수동 프레임워크 통합이 선호됩니다.

  • 저장소 격리: 빌드 시스템이 아웃바운드 인터넷 연결을 제한하여 컴파일 중 pod install 의존성 가져오기를 방지합니다.
  • 빌드 파이프라인 속도: CocoaPods 분석 및 스크립트 실행 단계를 제거하여 CI/CD 컴파일 시간을 단축합니다.
  • 직접 바이너리 제어: 보안 규정 준수 정책에 따라 프로젝트에 포함하기 전에 정확한 .xcframework 아티팩트에 대한 정적 바이너리 분석이 요구됩니다.

XCFramework 아티팩트 다운로드 및 임베딩

의존성 관리자 없이 SDK를 수동으로 임포트하려면 최신 iOS SDK 프레임워크 패키지를 다운로드합니다. 배포 아카이브를 압축 해제하여 컴파일된 OpoInstallSDK.xcframework 디렉터리를 찾습니다.

임베딩하기 전에 XCFramework 슬라이스가 정적(static)인지 동적(dynamic)인지 식별하려면 터미널에서 file 명령어를 실행합니다.

# 바이너리 아키텍처 슬라이스 유형 조회
file OpoInstallSDK.xcframework/ios-arm64/OpoInstallSDK.framework/OpoInstallSDK

바이너리를 Xcode에 통합하려면 다음 단계를 따르세요.

  • 1단계: Xcode에서 메인 애플리케이션 프로젝트를 엽니다.
  • 2단계: OpoInstallSDK.xcframework 디렉터리를 기본 타깃 프레임워크 그룹 아래의 Xcode 프로젝트 내비게이터로 드래그합니다.
  • 3단계: 대화 상자 프롬프트에서 Copy items if needed(필요한 경우 항목 복사)를 체크하고 Add to targets(타깃에 추가) 아래에서 기본 애플리케이션 타깃을 선택합니다.

Link Binary With Libraries 및 프레임워크 검색 경로 구성

Xcode 내에서 애플리케이션의 타깃 구성으로 이동합니다.

  • Build Phases: Link Binary With Libraries 섹션을 확장합니다. OpoInstallSDK.xcframework가 나열되어 있는지 확인합니다.
  • Build Settings: Framework Search Paths(FRAMEWORK_SEARCH_PATHS)를 검색합니다. 수동으로 추가된 프레임워크를 포함하는 디렉터리 경로가 있는지 확인합니다.
  • 시스템 의존성: 통합 중인 정확한 SDK 릴리스에 문서화된 Apple 시스템 프레임워크(예: AdSupport.framework 또는 WebKit.framework)만 추가합니다. 검증되지 않은 레거시 프레임워크는 추가하지 마세요.

동적 바이너리와 정적 바이너리 간 Embed 및 Sign 정책 설정

애플리케이션 타깃을 선택하고 General 탭으로 이동합니다. Frameworks, Libraries, and Embedded Content 섹션을 찾습니다.

정적 및 동적 XCFramework 바이너리는 서로 다른 iOS 임베딩 및 서명 경로를 따릅니다.

  • 동적 프레임워크: 임베드 옵션을 Embed & Sign으로 설정합니다. 동적 프레임워크는 런타임에 동적 링커(dyld)가 로드할 수 있도록 최종 앱 번들의 Frameworks 디렉터리 내에 상주해야 하며, Xcode는 아카이빙 중에 개발팀의 코드 서명을 적용합니다.
  • 리소스가 없는 정적 프레임워크: 바이너리를 연결하는 것으로 충분하며, 정적 코드는 메인 애플리케이션 실행 파일에 직접 컴파일되므로 일반적으로 프레임워크를 임베딩할 필요가 없습니다.
  • 리소스가 포함된 정적 프레임워크(프라이버시 매니페스트 포함): SDK 벤더의 배포 지침을 따릅니다. 임베디드 리소스를 패키징하도록 구축된 Xcode 15+ 정적 프레임워크의 경우, Apple은 Embed & Sign으로 프레임워크를 추가하는 것을 문서화하고 있습니다. Xcode는 이미 정적으로 연결된 실행 파일 바이너리를 생략하면서 프레임워크 번들과 그 임베디드 리소스는 보존하고 서명합니다.

CocoaPods에서 PrivacyInfo.xcprivacy 서명 충돌 문제 해결

서드파티 프레임워크 의존성에 대한 Apple 프라이버시 매니페스트 요구사항

서드파티 SDK는 API 사용량, 데이터 수집 관행, 추적 동작 및 SDK가 명시적 매니페스트 요구사항이 적용되는 Apple의 공개 SDK 목록에 속하는지 여부에 따라 PrivacyInfo.xcprivacy 매니페스트를 포함해야 할 수 있습니다.

현재 OpoInstall 배포판에는 PrivacyInfo.xcprivacy 매니페스트가 포함되어 있습니다. 개발자는 아카이빙하기 전에 배포된 특정 SDK 버전과 Apple의 최신 제출 지침에 대해 해당 선언을 확인해야 합니다.

중복된 프라이버시 매니페스트 리소스 충돌 해결

여러 서드파티 의존성을 통합하는 애플리케이션을 빌드할 때, Xcode는 아카이브된 앱과 연결된 SDK 번들 전반에서 프라이버시 매니페스트를 찾아내며, 통합된 프라이버시 선언을 감시하기 위한 Xcode 프라이버시 보고서를 생성할 때 해당 선언을 집계합니다.

프로젝트가 메인 타깃의 Copy Bundle Resources 단계 내에 중복된 프라이버시 매니페스트 파일을 잘못 포함하는 경우, Xcode가 다음과 같은 빌드 경고나 오류를 발생시킬 수 있습니다.

Multiple commands produce '.../PrivacyInfo.xcprivacy'

이 충돌을 해결하려면:

  • 프라이버시 매니페스트 위치: iOS XCFramework의 경우, PrivacyInfo.xcprivacy는 XCFramework 루트 컨테이너 디렉터리에 배치되는 것이 아니라 각 플랫폼별 프레임워크 변형 내(예: OpoInstallSDK.xcframework/ios-arm64/OpoInstallSDK.framework/PrivacyInfo.xcprivacy)에 위치해야 합니다.
  • 메인 앱 리소스: 호스트 애플리케이션 프라이버시 선언은 메인 타깃 리소스에 유지하고, SDK 프레임워크 변형이 각자의 매니페스트 파일을 내부적으로 관리하도록 허용합니다.

PrivacyInfo.xcprivacy 내의 필수 이유 API 선언 검증

프라이버시 매니페스트의 내용을 검사하여 선언된 모든 API 카테고리가 Apple의 공식 필수 이유 API(Required Reason API) 사양과 일치하는지 확인합니다. Xcode에서 PrivacyInfo.xcprivacy를 속성 목록(Property List) 또는 원본 XML로 엽니다. 선언은 필요한 API 사용량에 엄격히 대응해야 합니다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>NSPrivacyAccessedAPITypes</key>
    <array>
        <dict>
            <key>NSPrivacyAccessedAPIType</key>
            <string>NSPrivacyAccessedAPICategoryUserDefaults</string>
            <key>NSPrivacyAccessedAPITypeReasons</key>
            <array>
                <string>CA92.1</string>
            </array>
        </dict>
    </array>
</dict>
</plist>

SDK의 실제 구현 요구사항에 해당하는 API 카테고리와 승인된 이유 코드만 포함하세요.

최종 App Store Connect IPA 제출물 검증

App Store Connect에 애플리케이션 업데이트를 제출하기 전에 로컬에서 컴파일된 IPA 아카이브를 검증합니다.

  • 1단계: Xcode에서 Product > Archive를 선택합니다.
  • 2단계: 아카이브가 완료되면 Organizer 창에서 Validate App을 클릭합니다.
  • 3단계: Xcode가 임베디드 프라이버시 서명, 프로비저닝 권한 및 프라이버시 매니페스트 스키마를 Apple 유효성 검사 서버와 대조하여 확인합니다.

성공적인 검증은 아카이브가 해당 제출 전 유효성 검사 단계를 통과했음을 나타내며, TestFlight 또는 프로덕션 제출 전 필수 빌드 검증 단계 역할을 합니다.

CocoaPods와 수동 iOS 프레임워크 임포트 비교 분석

유지보수, 서명 격리 및 빌드 자동화 측면의 트레이드오프

CocoaPods와 수동 프레임워크 통합 중 선택하는 것은 팀 워크플로, 빌드 서버 기능, 의존성 유지보수 오버헤드를 평가하는 것과 관련이 있습니다. CocoaPods는 버전 업데이트를 자동화하지만, Xcode 버전 업그레이드는 변경되는 Apple 서명 정책에 맞추기 위해 Podfile post_install 훅 업데이트를 요구할 수 있습니다.

아래 표는 두 임포트 전략에 대한 상세한 기술적 비교를 제공합니다.

기능 차원 CocoaPods 의존성 관리자 수동 프레임워크 임베드 (.xcframework)
버전 유지보수 pod update를 통해 자동화됨 수동 바이너리 다운로드 및 교체
빌드 설정 구성 Ruby Podfile 훅을 통해 스크립팅됨 Xcode 타깃 설정에서 직접 구성
코드 서명 관리 범위가 지정된 post_install 우회 방법이 필요할 수 있음 타깃 프레임워크 설정에서 직접 제어
프라이버시 매니페스트 처리 팟 리소스를 통해 관리됨; Xcode가 발견된 매니페스트를 프라이버시 보고서로 집계함 각 프레임워크 변형 내에서 검증됨
CI/CD 파이프라인 마찰 낮음 (Podfile.lock 동기화 필요) 낮음 (버전 제어에 저장된 프레임워크)

엔터프라이즈 모바일 팀 전반의 의존성 관리 전략 평가

CocoaPods는 Podfile.lock을 통한 자동화된 의존성 해결 및 중앙 집중식 버전 고정 덕분에 Podfile 기반 의존성 관리를 이미 표준화한 팀에게 실용적인 옵션으로 남아 있습니다. 범위가 지정된 Ruby 서명 오버라이드 스크립트를 통합하면 팀 워크스테이션과 CI/CD 빌드 환경 전반에서 타깃 수준의 서명 막힘을 해결하는 데 도움이 됩니다.

자주 묻는 질문 (FAQ)

Xcode가 CocoaPods의 리소스 번들에 대해 서명 오류를 보고하는 이유는 무엇인가요?
일부 Xcode 15/16 및 CocoaPods 구성에서는 생성된 비실행형 리소스 번들 타깃이 서명 설정을 상속받아 Xcode가 개발팀을 요구하게 만들 수 있습니다. 이러한 하위 타깃이 생성된 팟 구성 내에서 불완전한 코드 서명 속성을 상속받으면 서명 오류와 함께 컴파일이 중단됩니다.
원본 Podfile을 수정하지 않고 CocoaPods 프레임워크 서명 충돌을 해결하려면 어떻게 해야 하나요?
메인 `Podfile`을 수정할 수 없는 경우, 개발자는 Xcode의 `Pods` 프로젝트 아래에서 특정 리소스 번들 타깃을 선택하고, `Build Settings`로 이동하여 `Code Signing Identity`를 빈 값(`""`)으로 수동 설정하고 `Code Signing Allowed`를 `NO`로 설정할 수 있습니다. 그러나 범위가 지정된 Podfile `post_install` 훅을 통해 이를 자동화하는 것이 권장되는 장기적인 해결책입니다.
XCFramework 빌드에 PrivacyInfo.xcprivacy를 수동으로 임베딩하는 올바른 방법은 무엇인가요?
XCFramework를 수동으로 임포트할 때 `PrivacyInfo.xcprivacy`는 XCFramework 컨테이너 루트에 배치되는 것이 아니라 각 플랫폼별 프레임워크 변형 내(예: `MySDK.xcframework/ios-arm64/MySDK.framework/PrivacyInfo.xcprivacy`)에 위치해야 합니다. Xcode는 앱 및 연결된 SDK/프레임워크 번들에서 발견된 프라이버시 매니페스트의 선언을 프라이버시 보고서 생성 시 집계합니다.

요약 및 의사결정 프레임워크

iOS SDK를 효율적으로 임포트하려면 프로젝트 툴체인에 적절한 의존성 메커니즘을 선택하는 동시에 Xcode 코드 서명 엄격성을 완화해야 합니다. 범위가 지정된 post_install 훅과 함께 CocoaPods를 활용하면 영향을 받는 리소스 번들 서명 실패를 해결할 수 있으며, 수동 XCFramework 임베딩은 빌드 아티팩트에 대한 직접적인 제어 기능을 제공합니다.

Apple이 App Store Connect 검증 규칙을 계속 다듬어감에 따라, 클라이언트 의존성을 프라이버시 매니페스트 표준에 맞게 준수 상태로 유지하는 것이 중요합니다. 업데이트된 SDK 버전을 배포하고 자동화된 Podfile 훅을 유지 관리함으로써 엔터프라이즈 팀은 반복되는 빌드 막힘을 줄이고 통합 일관성을 향상할 수 있습니다.

프로젝트 키를 초기화할 준비가 된 개발자는 OpoInstall 개발자 콘솔에 등록하거나 추가 플랫폼 지침에 대해 모바일 어트리뷰션 구현 레퍼런스를 검토할 수 있습니다.

관련 자료

Share this article