먹고 기도하고 코딩하라

[iOS] 실무에 Privacy manifest를 적용하자 본문

앱/Swift

[iOS] 실무에 Privacy manifest를 적용하자

사과먹는사람 2024. 3. 28. 20:10
728x90
728x90

 

작년 WWDC 23에서 Privacy Manifest 소개 영상이 발표됐다.

당초 2024년 4월 28일쯤까지로 예정되었던 privacy manifest 작성 강제가 5월 1일로 날짜가 픽스되면서 요즘 여기저기서 얘기가 나오고 있는 privacy manifest에 대해 알아보고, 어떻게 적용해야 리젝을 피할 수 있을지 알아보자. 

 

privacy manifest는 무엇인가?

문서에 따르면, 앱이나 써드파티 SDK에서 수집하는 데이터와 API 사용 등에 대한 사유를 기술한 파일이다.

 

왜 중요한가? 

심사 리젝을 회피하기 위해서이다.

privacy manifest 작성이 필요한 앱은 2024년 5월 1일 이후 manifest를 작성하지 않고 심사를 등록했을 때 이 사유로 리젝당할 수 있다. 이는 앱스토어에 앱 심사 제출을 할 때 날아오는 이메일로 알 수 있으며, 개발자 뉴스에서도 확인할 수 있다.

 

어떻게 생성할까?

프로젝트 루트 디렉터리 밑에 App Privacy 파일을 만든다. File > New File 해서 privacy를 검색해보면 App Privacy가 결과로 나오는데, 이름 변경하지 않고 그냥 만들면 된다. 기본 이름이 PrivacyInfo로 설정된다.

 

Privacy Manifest에는 어떤 것을 작성하게 되는가?

크게 4가지를 작성할 수 있다.

  • NSPrivacyTracking
    • 앱이나 써드파티 SDK가 ATT 프레임워크로 유저 데이터를 수집하는지 나타내는 값으로, Bool 값이다. ATT로 유저 데이터를 수집한다면 True로 설정하면 된다.
  • NSPrivacyTrackingDomains
    • 앱이나 써드파티 SDK가 트래킹에 관여하는 도메인 리스트를 작성한다. 만약 NSPrivacyTracking이 false라면 작성하지 않아도 되고, true라면 적어도 1개 이상의 도메인을 작성해야 한다.
  • NSPrivacyCollectedDataTypes
    • 앱이나 써드파티 SDK가 수집하는 데이터를 기술한 배열이다. nutrition labels와 비슷하게 사용되며, 실제로 아카이브한 다음에 generate privacy report했을 때는 이 배열에 담긴 것들이 나타나게 된다.
  • NSPrivacyAccessedAPITypes
    • 앱이나 써드파티 SDK가 특정 API를 접근할 때, 그 API와 사유를 기술한 배열이다. 적절히 작성하지 않았을 때 이메일이 날아오는 주요 원인이 된다.

이 글에서는 3, 4번째 항목인 NSPrivacyCollectedDataTypes와 NSPrivacyAccessedAPITypes에 대해 다룬다.

 

필요한 것 채워넣기

글을 작성하는 2024년 3월 하순 기준으로, 앱스토어에 심사를 제출했을 때 이메일이 오는 기준은 Privacy Accessed API Types 배열에 적절하게 Reasons가 적용되지 않았을 때(아예 없거나, 사유가 틀렸거나)이다.

먼저 NSPrivacyAccessedAPITypes에 해당하는 API들을 살펴보자. 다음과 같다.

  • File timestamp
    • 파일의 creationDate, modificationDate 등
  • System boot time
    • systemUptime, mach_absolute_time()
  • Disk space
    • systemFreeSize, systemSize 등
  • Active Keyboard
    • activeInputModes
  • User defaults

아마 많은 앱에서 UserDefaults는 사용하고 있지 않을까 한다. 이 항목을 필수로 작성해줘야 한다.

사유는 문서에서 확인할 수 있으며, 가장 적당한 사유 1가지를 넣으면 되지 않을까 싶다.

이런 식으로 작성해주면 된다.

 

참고로 모든 것을 수기로 작성할 필요는 없다. API Types 아래 아이템을 생성하게 되면, API Type과 API Reasons는 xcode가 미리 제공해준 것들 중에서 드롭박스로 선택할 수 있게 되어 있다.

Privacy Accessed API Reasons 드롭박스에 모든 사유가 포함되어 있지는 않다. 이 때는 위와 같이 간단하게 사유 코드만 적으면 된다.

그리고 가장 중요한 것… 이 파일의 Target Membership을 설정해줘야 한다. 앱 타겟을 선택해줘야 한다.

 

Privacy Report에 들어가는 것

API Types를 적고 아카이브한 다음에 Privacy Report를 생성해보면 비어 있는 경우도 있다. API Types는 엄밀히 따지면 privacy report에 들어가는 것이 아니라서 그렇지 않을까 싶다.

privacy report를 채우려면 NSPrivacyCollectedDataTypes를 추가로 작성해야 한다. 문서에서 작성해야 하는 항목을 제시하고 있는데, 양이 꽤 있고 체크해야 할 것들도 있다. 꼼꼼하게 보고 앱에서 수집하는 데이터가 있다면 작성해줘야 한다. 사실, 기존에 앱스토어에 제출할 때 수집하는 개인정보 항목들(Nutrition Labels)을 작성한 적이 있다면 무난하게 작성할 수 있으리라고 본다.

이 부분을 작성하고 나면 아카이브 후 privacy report를 생성했을 때 적절하게 레포트가 생성된다.

 

써드파티 라이브러리에 대해

참고로 써드파티 라이브러리를 사용하고 있다면, 라이브러리 최신 버전 혹은 사용하고 있는 버전에 privacy manifest 파일이 적용되어 있는지 확인해야 한다. 간접적이긴 하지만 이 역시 리젝의 사유가 될 수 있을 것으로 예상된다.

적용 중인 써드파티 라이브러리가 필수로 privacy manifest를 작성해야 하는 라이브러리인지 알고 싶다면 다음 문서 참고를 권장한다. 만약 라이브러리의 최신 버전에도 privacy manifest가 없다면, GitHub repo에서 privacy manifest 관련 이슈가 있는지 확인한다. 없다면 이슈 오픈으로 필요성을 적극 어필하는 것도 하나의 방법이 될 수 있을 것이다.

 

 

 

 

References

 

 

728x90
반응형
Comments