반응형

이번 포스팅은 App Store에 심사 요청하였으나 심사 거절을 당하였는데 거절의 원인은 아래와 같이 ITMS-91055였습니다. 따라서 원인부터 해결방법까지 한 번에 알아보도록 하겠습니다. 

 

목차

1. PrivacyInfo.xcprivacy의 정의

2. ITMS-91055: Invalid API reason declaration 원인

3. ITMS-91055: Invalid API reason declaration 해결 방법

4. 마무리

 


 

#1.PrivacyInfo.xcprivacy의 정의

에러의 원인에 대해 알아보기 전에 먼저 PrivacyInfo.xcprivacy에 대하여 알고 문제를 해결해야 하므로 PrivacyInfo.xcprivacy에 대해 알아보도록 하겠습니다.

Apple에서 공지한 게시글 '(23.12.7) App Store 앱 제출을 위한 개인정보 보호 관련 업데이트''(24.2.29) App Store 앱 제출을 위한 개인정보 보호 관련 업데이트'를 살펴보면 아래와 같은 부분이 있습니다.

2024년 봄부터 App Store Connect에 새로운 앱 또는 앱 업데이트를 업로드하려면 앱의 개인정보 보호 매니페스트에 앱이 API를 사용하는 방식을 정확하게 반영하는 허용된 사유를 하고 있어야 합니다.

다시 말해 2024.05.01일 이후 XCFrameworks, Swift 패키지 또는 XCode 프로젝트로 배포되는 앱과 Third-Party SDK에는 PrivacyInfo.xcprivacy라는이름의 Privacy Manifest 파일이 포함되어야 합니다.

이 PrivacyInfo 파일은 마치 info.plist와 같은 Dictionary 구조의 소스코드를 Property List로 볼 수 있도록 만든 파일입니다. 다만 info.plist와 다른 점은 PrivacyInfo 내부에 정의된 값은 앱 또는 앱 내부 Third-Party SDK에 사용하고 있는 Privacy 정보들을 모두 정의해서 어떤 용도로 사용하고 있는지 나타내주는 역할을 합니다.

PrivacyInfo.xcprivacy =

앱 내부에서 개인정보를 사용하는 방식을 어떤 용도로 사용하는지 정의한 목록

 

PrivacyInfo.xcprivacy에 들어가는 목록에 들어가야 하는 정보는 아래의 총 4 가지입니다.

1. Privacy Tracking Enabled : 앱 및 SDK가 추적을 위해 데이터를 사용하는 지 여부

  • 추적 사용 : YES
  • 추적 미사용 : NO

출처: https://kemikim.medium.com

2. Privacy Tracking Domains : 앱 및 SDK 추적을 위해 사용하는 Domain

  • 추적에 사용되는 Domain을 입력하면 됩니다 ex) tracking.domain.example

출처: https://kemikim.medium.com

3. Privacy Nutrition Label Types : 수집하는 정보가 추적과 관련되어 있는 경우 상세 설명 기재

  • 보통 userId, name 등등이 추적에 포함된다면 추가하시면 될 것 같습니다.

출처: https://kemikim.medium.com

4. Privacy Accessed API Types : 개인정보 Access 이유가 필요한 API로 지정된 앱 또는 Third-Party SDK가 Access 하는 API 유형을 설명하는 사전 배열


 

#2. ITMS-91055: Invalid API reason declaration 원인

PrivacyInfo.xcprivacy 파일은 앱 내부에서 개인정보를 사용하는 방식을 어떤 용도로 사용하는지 정의한 목록이라고 정의하였습니다. 정의된 내용을 토대로 에러의 원인에 접근하면 쉽게 알 수 있습니다.

에러가 발생한 아래의 에러메시지를 다시 살펴보겠습니다.

위의 PrivacyInfo.xcprivacy의 Privacy Accessed API Types의 DiskSpace, FileTimestamp주에서 API를 사용하기 위한 유효한 이유(Privacy Accessed API Reasons)가 기입이 되어 있지 않았습니다.  

ITMS-91055: Invalid API reason declaration - The PrivacyInfo.xcprivacy for the “Frameworks/libswiftDispatch.dylib” file contains “CA92.1:Acess Info from same app, per documentation” as the value for a NSPrivacyAccessedAPITypeReasons key instead of a valid reason code for using an API in the NSPrivacyAccessedAPICategoryDiskSpace category. Values for NSPrivacyAccessedAPITypeReasons keys in any privacy manifest must be valid reason codes for the corresponding API category. For more details about this policy, including a list of required reason APIs and approved reasons for usage, visit: https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api.

ITMS-91055: Invalid API reason declaration - The PrivacyInfo.xcprivacy for the “Frameworks/libswiftObjectiveC.dylib” file contains an empty string as the value for a NSPrivacyAccessedAPITypeReasons key instead of a valid reason code for using an API in the NSPrivacyAccessedAPICategoryFileTimestamp category. Values for NSPrivacyAccessedAPITypeReasons keys in any privacy manifest must be valid reason codes for the corresponding API category. For more details about this policy, including a list of required reason APIs and approved reasons for usage, visit: https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api.

 


 

#3. ITMS-91055: Invalid API reason declaration 해결 방법

원인은 Privacy Accessed API Reasons 이 기입이 되어 있지 않아서 발생하였으므로 제가 맡고 있는 앱의 성격에 맞게 아래와 항목을 정의하였습니다.

Privacy Accessed API Type

  • Privacy Accessed API Type : DiskSpace
  • Privacy Accessed API Reasons : CA92.1:Acess Info from same app, per documentation
  • Privacy Accessed API Type : FileTimestamp 
  • Privacy Accessed API Reasons : C617.1:Inside app or group container, per documentaion

참고로 앱의 Privacy.xcprivacy를 손 쉽게 만들어 주는 사이트를 소개합니다. 저도 여기에서 항목을 선택 후 Privacy.xcprivacy 파일을 다운로드 받아 프로젝트에 적용하였습니다.

https://wemakeapps.net/manifest-maker

 

Generate your iOS privacy manifest file

Generate the Privacy Manifest, PrivacyInfo.xcprivacy file, for your iOS app.

wemakeapps.net

 

 


 

#4. 마무리

아주 중요한 내용인데 글을 자세히 작성하면 글이 너무 길어져 최대한 쉽게 설명하려고 하였습니다. 이 PrivacyInfo의 핵심은 개인정보 보호인데 앱 내부에 있는 모든 개인정보 사용 API 즉, Firebase 및 Alamofire, Kingfisher 등 자주 사용하는 Third-Party SDK에도 사용하는 개인정보를 사용하는 이유를 모두 작성해야 한다는 것입니다. 앱 내부의 SDK의 흐름을 이해하고 최종 배포하는 것이 개발자 이므로 개발자가 이 흐름을 이해하고 Privacy.xcprivacy에 작성해야 한다는 것입니다.

긴 글 읽어 주셔서 감사합니다.

끝.

 

 

 

Reference : https://kemikim.medium.com/2024-05-01%EC%A0%81%EC%9A%A9-appstore-privacyinfo-xcprivacy-%EC%A0%81%EC%9A%A9%ED%95%98%EA%B8%B0-d3d23a1f5fe7

 

[2024.05.01 이후] AppStore PrivacyInfo 적용하기.

2024년 5월 1일부터 B2C앱 앱스토어 심사 시 애플의 개인정보방침에 따라, PrivacyInfo.xcprivacy 파일을 필수로 추가해야합니다.

kemikim.medium.com

Reference : https://h1guitar.tistory.com/323

 

ios 개인정보 보호 매니페스트 PrivacyInfo.xcprivacy 만들기

애플에서 공지한 게시글 (23.12.7)App Store 앱 제출을 위한 개인정보 보호 관련 업데이트와 (24.2.29)App Store 앱 제출을 위한 개인정보 보호 관련 업데이트 를 살펴보면 아래와 같은 부분이 있다. 2024년

h1guitar.tistory.com

Reference : https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api

 

Describing use of required reason API | Apple Developer Documentation

Ensure your use of covered API is consistent with policy.

developer.apple.com

 

 

 

반응형

+ Recent posts