iOS

iOS) Privacy Manifest(PrivacyInfo.xcprivacy) 작성기

kangwook 2024. 4. 1. 17:36

Apple이 본격적으로 개인정보에 관한 부분에 제동을 걸기 시작했다

이때까지는 크게 문제가 되지 않았으나, 3월13일 부터 배포를 위해 appstoreconnect에 올리고 심사를 제출하는 순간 해당 버전에 대한 xcprivacy 파일의 규격이 맞지 않는다고 메일을 보내온 것이다.

이메일로 날라온 warning의 일부

이 privacy manifest라는게 이번에 적용이 되는거라 생각보다 정보도 많이 없었고, 어떻게 작성해야하는지도 몰랐던 상황이기에 답답했지만, 애플 개발자 문서를 참고하며 하나씩 작성함으로써 해결을 했다.


결론부터 말하자면, 일단 메일을 확인한 순간, 메일의 warning에 대해서 조치를 취해주면 대부분 해결된다.

내 경우에는 Describing Use of Required Reason API에 대해 작성방법이 틀렸거나 작성하지 않았던 것이었는데, 예를 들어 위 이미지의 맨 첫 번째 이유같은 경우, File Timestamp API를 앱에서 사용함에도 불구하고, 작성하지 않았던 것이다.

 

그럼, 본격적으로 privacy manifest를 작성하는 방법을 알아보자.

파일은 Command + N을 눌러서 새로운 파일을 만들 때와 동일하다.

이 때, App Privacy를 선택해주고 생성해주면 파일은 만들어진다.

 

그 후, 흔히 보던 info.plist와 같은 key - value를 저장하는 xcprivacy파일이 만들어지는데, 여기서 이제 Apple이 요구하는 정보에 대해 작성해주면 된다.

 

App Privacy Configuration에서 + 버튼을 통해 필요한 항목에 대해 추가해준 후, 작성을 해주어야한다.

내가 배포하는 앱의 경우 Privacy Nutrition Label TypesPrivacy Accessed API Types를 추가해줬는데, 여기서 Privacy Nutrition Label Types의 경우 Appstore Connect를 들어갔을때 앱이 수집하는 개인정보에서 확인할 수 있다.

 

예를 들어 내 앱이 충돌 데이터를 수집하는데, User와 연결되어있는지, 또는 추적을 위해 사용하는지, 그리고 목적이 무엇인지에 대해서 각각 작성해 주면 되는 것이다.

Privacy Nutrition Label Types의 하위항목 작성의 예

Appstore Connect에 들어가서 앱이 수집하는 개인정보를 확인한 후, 해당 부분들에 대해서 모두 작성해주면 Privcay Nutrition Label Types와 관련된 Privacy Info는 완료된다.

 

그 다음 이제 중요한 Privacy Accessed API Types!

이건 이제 아까 링크에서 설명한 Required Reason API에 관련된 부분이다.

많은 앱들이 UserDefaults를 사용하고 있을텐데, 이 또한 Required Reason API에 해당되기 때문에, 웬만하면 이 부분에 대해 작성을 해야한다고 생각하면된다,,

 

사실 이 부분도 그렇게 어렵지 않다.

Privacy Accessed API Type에는 작성할 타입을, Reasons에는 이유를 넣어주면 되는데, 이 .xcprivacy파일이 처음에는 선택하는게 아니라 하나씩 적는거였어서 조금 빡셌던 것 같았다. 지금이야 각각의 타입이나 이유에 대해서 선택해서 기입해주기만 하면 완료된다.

Privacy Accessed API Types의 하위항목 작성의 예

참고로, 위 이미지의 CA92.1과 같은 코드는 Describing Use of Required Reason API에 모두 적혀져 있기 때문에, 자세한 설명을 읽고 자신의 앱에 해당되는 부분에 대해 기입해주면 된다.

 


이렇게 privacy manifest 작성을 완료하고, 앱 심사를 제출하게 되면 (정상적으로 모두 작성한게 맞다면) 더 이상 이메일로 경고 메일이 오지 않게된다.

물론 지금은 계도기간(?)이지만 미리미리 작성해서 적용해두는게 좋기 때문에 그냥 바로 해버렸다..

(5월 1일부터는 심사가 거절될 예정)

 

아무튼, 혹시나 이 부분에 대해서 생소하거나 처음 적용해야되서 어려움을 겪는 분이 계신다면 이글을 읽고 잘 해결하셨으면 좋겠다.

 

 

틀린 부분이나 궁금한점이 있으면 댓글 달아주세요!