안녕하세요.
이번엔 WWDC23 'Get started with privacy manifests' 세션을 보고 내용 정리해 볼게요.
#개요
앱 사용자는 Privacy Nutrition Labels를 통해 앱 내에서 어떤 데이터가 수집되고 있는지 쉽게 알 수 있습니다.
앱 개발자는 이런 Privacy Nutrition Labels 정보를 App Store Connect에 입력해야 하는데요.
이 정보는 앱 전체에 해당되는 내용이기 때문에, 정확한 Privacy Nutrition Labels 정보를 입력하기 위해선 앱 내에서 사용하고 있는 외부 SDK가 어떤 데이터를 수집하고 있고 어떻게 관리하는지도 알아야 합니다.
Privacy manifests는 외부 SDK의 개인 정보 보호 관행에 대한 정보를 외부 SDK 사용자에게 알려주는 역할을 합니다.
쉽게 말해서 외부 SDK가 어떤 개인 정보를 수집하고 그 정보를 어떻게 사용하는지에 대해 확실하게 알려주는 것이죠.
# Privacy manifests
외부 SDK 개발자는 PrivacyInfo.xcprivacy 파일을 추가함으로 SDK 안에 privacy manifest를 포함시킬 수 있어요.
PrivacyInfo.xcprivacy 파일 안에는 SDK가 어떤 데이터를 수집하며, 어디에 사용되고, 연결에 사용되는지, 추적에 사용하는지에 대해 정의할 수 있어요.
이 항목들은 Privacy Nutrition Label과 동일하고, 항목들에 대한 자세한 내용은 공식 문서인 'App privacy details on the App Store'를 참고해 주세요.
# Privacy report
Xcode에서 앱의 Privacy manifest와 외부 SDK들의 Privacy manifest를 한 곳에서 모아 볼 수 있는 기능이 추가되었습니다.
Xcode 15에서 아카이브 빌드 후 'Generate Privacy Report' 버튼을 누르면 프로젝트 안에 있는 모든 privacy manifests를 통합해서 하나의 문서(PDF)로 보여줍니다.
이 정보를 가지고 App Store Connect에 Privacy Nutrition Label 정보를 입력하면 됩니다ㅎㅎ
(2023.11.21. 추가 정보)
Privacy manifest가 포함된 framework를 넣어도 Privacy Report가 생성이 되지 않아서 Apple 개발자 포럼에 문의했는데요.
https://developer.apple.com/forums/thread/734971
framework를 'embed'로 넣어주면 Privacy Report가 잘 생성됩니다.
다만, Xcode 15 기준으로 아직까진 'Do not embed'로 포함시킨 framework에 대해선 Privacy Report가 생성되지 않는 것 같아요ㅠㅠ
(2024.01.16. 추가 정보)
Privacy Report에는 dynamic library에 있는 Privacy manifest 또는 SDK Bundle 리소스 안에 있는 Privacy manifest만 표시된다고 합니다.
참고: https://developer.apple.com/forums/thread/734971
# Tracking domains
사용자의 허락 없이 추적할 의도는 아니었지만, 추적에 사용되는 특정 domain과 의도하지 않은 네트워크 연결이 되어버리는 예외 상황이 발생할 수 있습니다.
예를 들어, 일반적인 외부 SDK에선 추적하기 전에 추적 허가 상태를 확인하고 사용자를 추적할 텐데요.
하지만 특정 외부 SDK에서는 사용자가 추적을 허가하지 않았음에도 항상 추적이 되어 있다는 것을 전제로 동작할 수도 있어요.
이런 상황을 방지하기 위해서 Privacy manifests에 tracking domain을 설정할 수 있고, 사용자가 허용하기 전까지 해당 domain과의 연결을 차단합니다.
[참고] 특정 도메인이 추적, 비추적 기능 모두를 사용한다면?
만약 특정 도메인에서 추적 기능과 비추적 기능 모두를 사용한다면, 추적 기능은 추적 domain에 호스팅 하고 비추적 기능은 비추적 domain에 호스팅 하도록 분리해 주시고, Privacy manifests에는 추적 domain을 등록하면 됩니다.
'Xcode 15 > Instruments > Network > Points of Interest'을 통해 domain이 추적에 사용되는지 쉽게 볼 수 있습니다.
# Required reason APIs
사용자의 허용 여부에 따라서 추적이 허용되지만, 추적을 허용했다고 해서 fingerprinting이 허용된 것은 아닙니다.
애플은 fingerprinting을 절대로 허용하지 않습니다.
[참고] Fingerprinting?
Fingerprinting은 기기에서 신호를 활용하여 기기나 사용자를 식별하려는 것을 의미합니다.
하지만, Apple이 제공하는 API 중에서 fingerprinting에 오용될 수 있는 API들이 있는데요.
이런 API 중 승인된 사유로만 사용할 수 있는 API들을 'Required reason API'라고 부릅니다.
어떤 API들이 있는지, 승인된 사유에는 뭐가 있는지는 Apple 공식 문서인 'Describing use of required reason API'를 확인해 주세요.
(File timestamp, Disk space, UserDefaults 등)
그리고 승인된 사유로 이런 API들을 사용할 경우, Privacy manifests에 명시해 줘야 합니다.
# Privacy-impacting SDKs
사용자 개인정보에 큰 영향을 주는 몇몇의 외부 SDK가 존재합니다.
이런 외부 SDK를 'Privacy-impacting SDK'라고 부르고 추후 애플이 공개한다고 해요. 애플이 SDK 목록을 공개했습니다ㅎㅎ
(아래 링크 참고해 주세요!)
privacy-impacting SDK를 포함하고 있는 앱은 privacy manifest가 포함되어 있는 SDK의 사본을 포함시켜야 하고 privacy-impacting SDK가 서명된 것을 보장해야 합니다.
(애플 추가 가이드에 따르면 privacy-impacting SDK를 바이너리 종속성으로 사용할 경우에만 서명이 필수인 것 같아요.)
애플은 2023년 가을부터 Required reason API를 사용함에도 privacy manifest에 명시하지 않았거나 privacy-impacting SDK에 privacy manifest 또는 서명이 없을 경우 메일로 알림을 주며 2024년 봄부터 필수 정책으로 될 것 같다고 해요.
(2023.12.07.) 애플이 추가 가이드를 공개했습니다. 아래 문서 참고해 주세요!
# 참고
https://developer.apple.com/kr/news/?id=av1nevon
https://developer.apple.com/kr/news/?id=z6fu1dcu
https://developer.apple.com/app-store/app-privacy-details/
https://developer.apple.com/videos/play/wwdc2023/10060/
https://developer.apple.com/forums/thread/734971
이번 글은 여기서 마무리.
'WWDC' 카테고리의 다른 글
[WWDC20] App essentials in SwiftUI (0) | 2024.01.15 |
---|---|
[WWDC20] Stacks, Grids, and Outlines in SwiftUI (1) | 2024.01.05 |
[WWDC23] Verify app dependencies with digital signatures (0) | 2023.08.16 |
[WWDC22] Explore App Tracking Transparency (0) | 2023.08.05 |
[WWDC22] Create your Privacy Nutrition Label (0) | 2023.07.31 |