본문 바로가기
개발 모바일 보안

iOS 앱용 Privacy Manifest

Capacitor iOS 앱의 PrivacyInfo.xcprivacy에 대한 2026 준수 및 트러블슈팅 가이드: 필수 사유 API, ITMS-91053 및 ITMS-91061, 서드파티 SDK manifest.

iOS 앱을 위한 Privacy Manifest Capgo 블로그 일러스트

App Store 업로드에는 Apple privacy manifest가 필수입니다: 모든 앱에는 PrivacyInfo.xcprivacy 앱의 데이터 수집, 트래킹 도메인 및 모든 필수 사유 API 앱의 code 호출. 서드파티 SDK는 Apple 필수 목록 자체 매니페스트(바이너리 배포 시 서명 포함)를 반드시 포함해야 합니다. 이 가이드는 다음 사항에 집중합니다: 2026년 규정 준수 및 트러블슈팅 위해 Capacitor iOS 앱: 선언 항목 및 해결 방법 ITMS-91053 및 ITMS-91061, 그리고 제출 전 검증 방법까지 알아봅니다.

프라이버시 매니페스트가 다루는 내용

Privacy manifest는 앱 또는 SDK에 포함되는 property list입니다. Xcode는 아카이브 시 모든 manifest를 수집하여 하나의 privacy report로 통합합니다.

항목 목적
NSPrivacyTracking Apple이 정의한 트래킹 목적으로 앱 또는 SDK이 데이터를 사용하는지 여부
NSPrivacyTrackingDomains 트래킹에 관여하는 도메인
NSPrivacyCollectedDataTypes 수집된 데이터 유형 및 사용 방식
NSPrivacyAccessedAPITypes 사용 중인 필수 reason API 직접 code에서 사용하는 승인된 reason code

Apple 개요: 앱 또는 서드파티 SDK에 개인정보 보호 매니페스트 추가하기.

임베디드 SDK를 포함하여 바이너리에 포함된 모든 code에 대한 책임은 개발자에게 있습니다. 매니페스트에는 본인의 앱에 대한 정보만 기술해야 합니다. 다른 SDK의 데이터 처리 관행을 파일에 그대로 복사하지 마세요.

필수 사유 API 카테고리

이후 2024년 5월 1일 앱이 나열된 API를 사용하면서 승인된 사유를 명시하지 않으면 App Store Connect에서 업로드가 거부됩니다. NSPrivacyAccessedAPITypes Apple은 API 및 승인된 사유를 다음에서 문서화하고 있습니다: 필수 사유 API 사용 설명.

Apple의 TN3183, 카테고리가 명시되어 있습니다 값은 다음과 같습니다:

NSPrivacyAccessedAPIType 값 하이브리드 앱의 일반적인 트리거
NSPrivacyAccessedAPICategoryUserDefaults 설정, 플러그인 상태, 소량의 영구 데이터
NSPrivacyAccessedAPICategoryFileTimestamp 파일 메타데이터, 캐시, 업데이트 번들
NSPrivacyAccessedAPICategoryDiskSpace 다운로드 전 여유 공간 확인
NSPrivacyAccessedAPICategorySystemBootTime 경과 시간, 타이머 또는 절대 타임스탬프
NSPrivacyAccessedAPICategoryActiveKeyboards 키보드 확장 프로그램 또는 입력 감지

사용하는 각 카테고리마다 다음을 포함하는 딕셔너리를 하나 추가하세요 NSPrivacyAccessedAPIType 및 NSPrivacyAccessedAPITypeReasons. 선택하세요 오직 해당 카테고리에서 Apple이 나열한 reason code만 사용하세요. 잘못된 코드는 심사 실패로 이어집니다.

예시 코드 조각 (개인정보 보호 보고서를 확인한 후 앱에 맞게 카테고리와 코드를 조정하세요):

<key>NSPrivacyAccessedAPITypes</key>
<array>
  <dict>
    <key>NSPrivacyAccessedAPIType</key>
    <string>NSPrivacyAccessedAPICategoryUserDefaults</string>
    <key>NSPrivacyAccessedAPITypeReasons</key>
    <array>
      <string>CA92.1</string>
    </array>
  </dict>
</array>

Capacitor 자체가 Apple의 서드파티 SDK 요구 사항 목록에 포함되어 있으므로, 프레임워크는 Capacitor 자체의 API 사용을 위한 매니페스트를 제공합니다. 여전히 앱 레벨 매니페스트가 필요합니다: 여러분의 네이티브 및 JavaScript 레이어, 플러그인, 그리고 의존성에서 다루지 않는 모든 API.

ITMS-91053: API 선언 누락

ITMS-91053 App Store Connect가 빌드에서 필수 사유 API를 감지했지만, 병합된 프라이버시 매니페스트에 일치하는 항목이 없다는 뜻입니다.

해결 방법:

  1. 거절 이메일이나 업로드 로그를 확인하세요. 거기에 API 카테고리가 명시되어 있습니다 (예를 들어 NSPrivacyAccessedAPICategoryDiskSpace).
  2. Xcode에서 아카이브 개인정보 보호 보고서를 열어 (Product > Archive, 그 다음 개인정보 보호 보고서 생성 아카이브 내에서) 해당 차이가 앱 타겟에 있는지 아니면 의존성(dependency)에 있는지 확인하세요.
  3. 만약 API이(가) 여러분의 code 또는 직접 소유한 플러그인에 카테고리와 승인된 사유를 추가하세요. ios/App/PrivacyInfo.xcprivacy.
  4. 만약 API이(가) 다음에서 가져온 것이라면 의존성, pod 또는 SPM 패키지를 매니페스트가 포함된 버전으로 업그레이드하거나, 플러그인을 패치하여 포크(fork)한 버전에서 실제로 호출하는 항목만 선언하세요.
  5. 다시 업로드하기 전에 아카이브를 재실행하여 리포트에 해당 카테고리가 나타나는지 확인하세요.

사용하지 않는 카테고리는 선언하지 마세요. Apple의 정적 분석은 바이너리 내 심볼과 연결됩니다.

ITMS-91061: 서드파티 개인정보 보호 매니페스트 누락

ITMS-91061 은 개인정보에 영향을 미치는 SDK이(가) 앱 번들에 포함되어 있지만 매니페스트가 없음을 PrivacyInfo.xcprivacy의미합니다. Apple은 새 앱을 출시하거나 목록에 있는 SDK을(를) 추가하는 업데이트를 출시할 때, 해당 SDK에는 매니페스트가 포함되어야 한다고 명시합니다. 바이너리 SDK 역시 유효한 서명 이 SDK 공급업체로부터 제공되어야 합니다.

해결 방법:

  1. 이메일에서 framework 경로를 복사하세요 (예: Frameworks/FirebaseCore.framework/FirebaseCore).
  2. CocoaPods, SPM 또는 vendored binary 패키지를 확인하세요.
  3. 다음이 포함된 vendor 릴리스로 업그레이드하세요: PrivacyInfo.xcprivacy framework 루트에 위치합니다.
  4. 파일을 clean, rebuild한 후 다음 경로에서 확인하세요: .xcarchive 업로드 전에.

하지 마세요 SDK의 컬렉션이나 API 선언을 앱 매니페스트로 옮기세요. Apple은 앱 매니페스트에 앱 자체에 대한 정보만 기술해야 한다고 명시적으로 경고합니다. 만약 SDK가 관리되지 않는다면, 교체하거나 규정을 준수하는 빌드를 사용하세요.

목록에 포함된 SDK에는 일반적인 모바일 스택(Firebase, Flutter, Capacitor, shared_preferences_ios등이 포함됩니다). 배포 전마다 Apple 사이트에서 최신 목록을 확인하세요.

서드파티 SDK 매니페스트 및 서명

의존성을 업데이트할 때 Xcode는 바이너리 프레임워크가 이전 릴리스와 동일한 개발자에 의해 서명되었는지 검증합니다. 이는 매니페스트가 변경될 때 공급망을 보호합니다.

실무 워크플로우:

  • 로컬에서 pod install 또는 SPM을 해결할 때는 검색 ios/ 위해 PrivacyInfo.xcprivacy 파일.
  • 아카이브 및 사용 개인정보 보호 보고서 생성 전체 그림을 파악하려면.
  • 보고서를 App Store 개인정보 보호 설문 답변과 비교하세요.

live update 도구를 사용할 때는 업데이터가 실제로 사용하는 필수 사유 API(예: 디스크 공간, 파일 타임스탬프, user defaults)를 선언해야 합니다. 네트워크 액세스는 필수 사유 API 카테고리가 아닙니다. 업데이터가 개인 데이터를 수집한다면 App Store 개인정보 보호 라벨과 설문 답변에 해당 데이터를 공개해야 합니다. HTTPS로 업데이트를 가져오는 것만으로는 새로운 공개 카테고리가 생기지 않습니다. 유지하세요 Capgo live update 준수 OTA 동작을 문서화할 때 염두에 두세요.

추가 PrivacyInfo.xcprivacy Capacitor iOS 프로젝트에서

  1. 네이티브 프로젝트 동기화: bunx cap sync ios.
  2. 아래 경로의 Xcode workspace를 엽니다 ios/App.
  3. 파일 > New > File, 다음을 선택합니다: 앱 개인정보 보호 (또는 빈 PrivacyInfo.xcprivacy plist를 추가합니다).
  4. 파일을 아래 경로에 저장합니다 ios/App (다음과 동일한 폴더 AppDelegate 괜찮습니다).
  5. 타겟에서 Build Phases > Copy Bundle Resources, 확인하세요 PrivacyInfo.xcprivacy 목록에 있습니다.
  6. 앱과 플러그인에 따라 추적, 수집 데이터 유형, Required Reason API를 입력하세요.
  7. Archive를 실행하고 개인정보 보고서를 생성한 뒤, App Store Connect에 업로드하기 전에 누락된 카테고리를 수정하세요.

디스크에서 plist를 XML로 편집한 경우, target membership이 올바르게 유지되도록 Xcode를 다시 여세요.

각 앱 또는 SDK 타겟은 자체 privacy manifest를 유지합니다 PrivacyInfo.xcprivacy. Archive할 때 Xcode가 해당 manifest들을 하나의 개인정보 보고서로 통합합니다. 의존성 plist를 앱 파일에 수동으로 병합할 필요는 없습니다.

커스텀 Capacitor 플러그인의 경우 별도의 iOS framework로 배포되므로, 추가하려면 PrivacyInfo.xcprivacy 해당 플러그인의 ios/Plugin/ 폴더(또는 그에 준하는 위치)에 넣고 플러그인 타겟의 Bundle 리소스 복사앱 타겟뿐만 아니라 해당 위치에도 포함해야 합니다.

시기 NSPrivacyTracking 내용이 사실이거나 광고 또는 분석 SDK를 포함하는 경우, 매니페스트를 App Store 개인정보 보호 라벨과 일치시키고 iOS에서 요구할 때 App Tracking Transparency prompt를 표시해야 합니다. @capgo/capacitor-app-tracking-transparency Capacitor 앱의 ATT 플로우를 다룹니다.

제출 전 검증 체크리스트

  • 앱 타겟에 포함된 항목 PrivacyInfo.xcprivacy 에서 Bundle 리소스 복사.
  • 거절 또는 리포트에 있는 모든 필수 사유 카테고리에 승인된 사유 코드가 있습니다.
  • 빌드에 나열된 각 서드파티 SDK는 예상 경로에 자체 매니페스트를 포함합니다.
  • 개인정보 리포트가 분석, 광고, 인증 SDK에 대한 이해와 일치합니다.
  • App Store 개인정보 라벨이 병합된 리포트와 일치합니다.

자주 묻는 질문

Capacitor 플러그인에도 자체 개인정보 매니페스트가 필요한가요?

플러그인이 레포지토리에 소스 형태로 배포된다면, 해당 API 사용은 앱 바이너리의 일부가 됩니다. 플러그인이 호출하는 API를 앱 manifest에 선언하거나, 별도 프레임워크로 배포되는 경우 플러그인 타겟 내에 manifest를 포함해야 합니다. 바이너리 pod는 Apple의 서드파티 SDK 규칙을 준수해야 합니다.

앱의 PrivacyInfo.xcprivacy 파일만 수정해서 ITMS-91061 오류를 해결할 수 있나요?

아니요. SDK 자체에 manifest가 포함되어 있어야 합니다. 앱의 파일은 앱 자체의 데이터 처리 방식만 문서화해야 합니다.

Apple의 정책 적용 날짜는 어디에서 확인할 수 있나요?

필수 이유 API(Required reason APIs) 적용 시점: 2024년 5월 1일. 나열된 SDK에 대한 서드파티 manifest 및 서명 규칙은 다음에서 확인할 수 있습니다. 서드파티 SDK 요구 사항.

iOS 앱용 Privacy Manifest 다음 글 보기

사용 중이라면 iOS 앱용 Privacy Manifest 보안 및 컴플라이언스 계획을 세우려면, 다음 항목과 연결하세요: 암호화 암호화 구현 상세 정보: 컴플라이언스 컴플라이언스 구현 상세 정보: Capgo 보안 스캐너 Capgo Security Scanner 제품 워크플로우: Capgo 보안 Capgo Security 제품 워크플로우 및 Capgo 신뢰 센터 Capgo Trust Center 제품 워크플로우:

Capacitor 앱용 Live updates

웹 레이어 버그가 라이브 상태라면, 앱 스토어 승인을 며칠씩 기다리지 말고 Capgo를 통해 수정 사항을 배포하세요. 네이티브 변경 사항은 정상 리뷰 절차를 그대로 따르는 반면, 사용자는 백그라운드에서 업데이트를 받습니다.

블로그 최신 글

Capgo는 정말 프로페셔널한 모바일 앱을 만드는 데 필요한 최고의 인사이트를 제공합니다.