오랜만에 애플 심사를 요청했는데
메일로 특별한 이슈가 요청이 돼서
상세하게 확인해 보겠다. (2024 5월 1일까지 이 이슈사항을 제공하여야 한다.)
ITMS-91053: Missing API declaration - Your app’s code in the “K_swift” file references one or more APIs that require reasons, including the following API categories: NSPrivacyAccessedAPICategoryUserDefaults. While no action is required at this time, starting May 1, 2024, when you upload a new app or app update, you must include a NSPrivacyAccessedAPITypes array in your app’s privacy manifest to provide approved reasons for these APIs used by your app’s code. 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-91053: Missing API declaration - Your app’s code in the “K_swift” file references one or more APIs that require reasons, including the following API categories: NSPrivacyAccessedAPICategoryDiskSpace. While no action is required at this time, starting May 1, 2024, when you upload a new app or app update, you must include a NSPrivacyAccessedAPITypes array in your app’s privacy manifest to provide approved reasons for these APIs used by your app’s code. 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-91053: Missing API declaration - Your app’s code in the “K_swift” file references one or more APIs that require reasons, including the following API categories: NSPrivacyAccessedAPICategoryFileTimestamp. While no action is required at this time, starting May 1, 2024, when you upload a new app or app update, you must include a NSPrivacyAccessedAPITypes array in your app’s privacy manifest to provide approved reasons for these APIs used by your app’s code. 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.
Apple Developer Relations
요구사항 3가지 PrivacyAccessedAPI를 명시 하면.
- NSPrivacyAccessedAPICategoryUserDefaults.(사용자 기본값에 접근)
- NSPrivacyAccessedAPICategoryDiskSpace.(사용 가능한 디스크 공간에 접근)
- NSPrivacyAccessedAPICategoryFileTimestamp.(파일 타임스탬프에 접근)
요구사항 3가지에 대한 이유 리스트 정렬해보면
-영문
- 35F9.1: Measure time on-device, per documentation
- 3B52.1: Files provided to app by user, per documentation
- 3EC4.1: Custom keyboard app on-device, per documentation
- 54BD.1: Customize Ul on-device, per documentation
- 85F4.1: Display to user on-device, per documentation
- C617.1: Inside app or group container, per documentation
- CA92.1: Access info from same app, per documentation
- DDA9.1: Display to user on-device, per documentation
- E174.1: Write or delete file on-device, per documentation
-한글
- 35F9.1: 문서에 따라 장치 내 시간 측정
- 3B52.1: 문서에 따라 사용자가 제공한 파일
- 3EC4.1: 문서에 따라 장치에 사용자 지정 키보드 앱
- 54BD.1: 문서에 따라 장치에서 UI 사용자 정의
- 85F4.1: 문서에 따라 장치에 사용자에게 표시
- C617.1: 문서에 따라 앱 내 또는 그룹 컨테이너 내부
- CA92.1: 문서에 따라 동일한 앱에서 정보에 액세스
- DDA9.1: 문서에 따라 장치에 사용자에게 표시
- E174.1: 문서에 따라 장치에 파일 작성 또는 삭제
1. NSPrivacyAccessedAPICategoryUserDefaults -사용자 기본값에 액세스
사용자의 기본값에 접근하는 부분에서 명시하는 것으로 보이고
애플 문서에 정의된 예시로 주어진 Reson List 중 이 중에서 하나를 Xcode에서 선택해서 진행한다.
CA92.1- 사용자가 기본적으로 앱 자체에만 액세스 할 수 있는 정보를 읽고 쓰도록 액세스하기 위해 이 이유를 선언합니다.
1C8F.1 - 사용자가 기본적으로 앱 자체와 동일한 앱 그룹에 속한 앱, 앱 확장 프로그램, 앱 클립에만 액세스할 수 있는 정보를 읽고 쓰도록 액세스 하는 이유를 선언합니다.
C56D.1 - 타사 SDK가 앱에서 사용할 사용자 기본 API에 대한 래퍼 함수를 제공하고 앱이 래퍼 함수를 호출할 때만 사용자 기본 API에 액세스하는 경우 이 이유를 선언하세요. 이 이유는 타사 SDK에서만 선언할 수 있습니다. 필수 이유 API를 래핑 하기 위해 타사 SDK가 주로 생성된 경우 이 이유가 선언되지 않을 수 있습니다.
AC6B.1 - Apple 모바일 장치 관리 프로토콜 참조 설명서에 설명된 대로 MDM에서 설정한 관리 앱 구성을 검색하기 위한 키를 읽거나 MDM을 통해 쿼리할 피드백 정보를 저장하기 위한 키를 설정하기 위해 사용자 기본 액세스에 대한 이 이유를 선언합니다.
기본값 정의 : https://developer.apple.com/documentation/foundation/userdefaults
UserDefaults | Apple Developer Documentation
An interface to the user’s defaults database, where you store key-value pairs persistently across launches of your app.
developer.apple.com
해당 부분에서 구글 검색하는 하니 보통 CA92.1 사용하고 있다.
- CA92.1: Access info from same app, per documentation
- CA92.1: 문서에 따라 동일한 앱에서 정보에 액세스
2. NSPrivacyAccessedAPICategoryDiskSpace -사용 가능한 디스크 공간에 접근
애플 문서에 정의된 예시로 주어진 Reson List 중 이 중에서 하나를 Xcode에서 선택해서 진행한다.
85F4.1 - 디바이스를 사용하는 사람에게 디스크 공간 정보를 표시하기 위해 이 이유를 선언합니다. 디스크 공간은 정보 단위(예: 바이트) 또는 미디어 유형과 결합된 시간 단위(예: HD 비디오 분)로 표시될 수 있습니다.
E174.1 - 파일을 쓸 수 있는 디스크 공간이 충분한지 확인하거나, 디스크 공간이 부족할 때 앱이 파일을 삭제할 수 있도록 디스크 공간이 부족한지 확인하기 위해 이 이유를 선언합니다. 앱은 사용자가 관찰할 수 있는 방식으로 디스크 공간에 따라 다르게 작동해야 합니다.
7D9E.1 - 장치를 사용하는 사람이 제출하기로 선택한 선택적 버그 보고서에 디스크 공간 정보를 포함하려면 이 이유를 선언하세요. 디스크 공간 정보는 보고서의 일부로 사람에게 눈에 띄게 표시되어야 합니다.
B728.1 - 앱이 건강 연구 앱이고 이 API 카테고리에 액세스하여 연구 데이터 수집에 영향을 미치는 디스크 공간 부족에 대해 연구 참여자에게 감지하고 알리는 경우 이 이유를 선언하세요.
해당 부분에서 구글 검색하는 하니 보통 85F4.1 사용하고 있다.
- 85F4.1: Display to user on-device, per documentation
- 85F4.1: 문서에 따라 장치에 사용자에게 표시
3. NSPrivacyAccessedAPICategoryFileTimestamp -파일 타임스탬프에 접근
애플 문서에 정의된 예시로 주어진 Reson List 중 이 중에서 하나를 Xcode에서 선택해서 진행한다.
DDA9.1 - 장치를 사용하는 사람에게 파일 타임스탬프를 표시하려면 이 이유를 선언하세요. 이러한 이유로 액세스된 정보 또는 파생된 정보는 장치 외부로 전송될 수 없습니다.
C617.1 - 앱 컨테이너, 앱 그룹 컨테이너 또는 앱의 CloudKit 컨테이너 내부 파일의 타임스탬프, 크기 또는 기타 메타데이터에 액세스하려면 이 이유를 선언하세요.
3B52.1 - 문서 선택기 보기 컨트롤러를 사용하는 등 사용자가 특별히 액세스 권한을 부여한 파일이나 디렉터리의 타임스탬프, 크기 또는 기타 메타데이터에 액세스하려면 이 이유를 선언하세요.
0A2A.1- 타사 SDK가 앱에서 사용할 파일 타임스탬프 API에 대한 래퍼 함수를 제공하고 앱이 래퍼 함수를 호출할 때만 파일 타임스탬프 API에 액세스하는 경우 이 이유를 선언하세요. 이 이유는 타사 SDK에서만 선언할 수 있습니다. 필수 이유 API를 래핑하기 위해 타사 SDK가 주로 생성된 경우 이 이유가 선언되지 않을 수 있습니다.
해당 부분에서 구글 검색하는 하니 보통 C617.1 사용하고 있다.
- C617.1: Inside app or group container, per documentation
- C617.1: 문서에 따라 앱 내 또는 그룹 컨테이너 내부
이렇게 결정을 한 후 Xcode로 돌아가서 개발 세팅을 진행한다.
이 부분 같은 경우 기존에 Privacy 정의하는 info.plist가 아니라
신규로 Xcode - file - new - file -> App Privacy 선택 후 해당 부분을 세팅을 진행 하여야 한다.
App Privacy 선택후
Privacy Tracking Enabled 선택한 후 나의 경우에는 요구사항 3가지 PrivacyAccessedAPI 추가해야 하므로 Item0, Item1, Item2 추가한다.
그 후 PrivacyAccessedAPI Type 와 PrivacyAccessedAPI Reasons를 Item0, Item1, Item2에 각각 추가해 주고
위에서 언급한 Type 과 Reason를 선택해 주면 된다(콤보 리스트로 나오기 때문에 클릭 후 선택 하면 된다.)
그리면 아래와 같이 모두 완료되었다.
이 파일 포함 한 후 빌드를 하면 다음 심사 진행 시 위에 issue가 나올지 않을 것이다.
완료!
'iOS, Swift 개발' 카테고리의 다른 글
iOS 구글 IMA 광고 SDK 장착 하기 (0) | 2024.04.16 |
---|---|
Release Monitoring 적용을 위한 Firebase 업데이트시 에러 'libarclite', 'libarclite_iphoneos.a' 문제 (0) | 2024.04.12 |
스위프트(Swift) UIAlertController 구현 (0) | 2024.03.29 |
아이폰과 아이패드 Alert 리스트 노출시 주의점(Object-C) (0) | 2024.03.28 |
구글 AdMob 과 Ad Manager 차이점, 개발 그리고 수익 결과 (0) | 2024.03.25 |