-
Get started with privacy manifests (feat. WWDC 2023)iOS 2023. 12. 28. 19:20
안녕하세요. 그린입니다 🍏
이번 포스팅에서는 WWDC 23에서 또 하나 나온 Get started with privacy manifests라는 섹션을 학습해보면서 왜 어떻게 적용해야하는지 포스팅해보려고 합니다 🙋🏻
News 📰
애플은 올해 WWDC 2023에서 개인정보 보호 관련하여 새로운 소식을 전달했습니다.
바로, 명확히 몇월 몇일까지는 나오지 않았지만 2024년 봄 (이제 진짜 얼마 안남았네요ㅎㅎ)부터 앱 스토어에 앱을 새롭게 등록하거나 업데이트를 할 때 앱 리뷰 과정에서 개인정보 보호 관련한 몇가지 항목들의 심사가 추가된다고 합니다 🥲
하나씩 알아볼까요?
1️⃣ Privacy Manifest
우선 오늘 이어서 WWDC 23의 Get started with privacy manifests 섹션 영상을 보면서 조금 더 자세히 알아보겠지만, 앱에서 유저들의 개인정보를 다룰때 개인정보를 보호할 수 있도록 하는 조치중 하나입니다.
즉 이제는 Privacy Manifest라는 파일을 만들고 사용하여 앱에서 유저 개인정보 데이터 처리에 대해서 명확히 담고 있어야 합니다.
이건 만약 외부 SDK를 사용한다면 해당 SDK에서도 이루어져야합니다.
즉, 외부 SDK와 이를 담고 있는 앱에서 수집되는 데이터 목록을 공개하고 개인정보가 어떻게 처리되고 있는지 방침을 기재해야 합니다.
Xcode에선 이러한 모든 Privacy Manifest를 통합하여 관련한 보고서를 만들게 됩니다.
결국 우리는 실제적으로 외부 SDK의 업데이트도 중요하겠지만, SDK 외에 우리의 앱에서 애플에서 명시한 개인정보를 취급하거나 하는 목록이 있다면 Privacy Manifest 파일을 구성하여야 되는것이죠!
이 부분은 더 자세히는 이후 바로 아래에서 WWDC 23 섹션을 보면서 어떻게 구성하는지 알아보겠습니다 🙋🏻
2️⃣ Required Reason API
위에서 Privacy Manifest 파일에 명시해야하는 항목들이 어떤것인지 애플에서 명확히 안내하고 있습니다.
즉, 개인정보 보호에 영향을 미칠 수 있는 API들을 애플이 목록화하였습니다.
이 Required Reason API는 기능과 정보에 따라 그에 맞는 카테고리로 나눠지게 되고 각 API에 해당하는 코드와 사유들을 애플에서 안내하고 있습니다.
즉, 우리는 Required Reason API에 해당하는 개인정보 관련한 API를 사용하고 있다면 Privacy Manifest 파일에 기재하여야 하는것이죠!
해당 공식 문서를 보면 어떤 API들이 해당되는지 나와있습니다.
여기서 하나! UserDefaults도 포함이 되어 있어요.
많은 앱에서 아마 이 UserDefaults를 사용하고 있을거라 예상되기에 이번 변경을 잘 알고 대처해야 될거라 생각합니다.
사실, 저도 UserDefaults가 요구하는 API 목록에 있고 앱에서 사용하고 있기에 반영해야되서 학습하는 케이스.. 🥹
3️⃣ SDK
애플은 또한 Required Reason API와 같이 개인정보 보호 관련하여 영향을 끼칠만한 SDK들에 대해 목록화하여 안내하고 있습니다.
목록에 있는 SDK를 사용하고 있다면 SDK에서 서명을 받고 Privacy Manifest를 발행해줘야 하죠.
아마도 이 부분은 해당 외부 SDK를 만든 측에서 해줘야되지 않을까 생각합니다 🤔
어떤 문서에서는 목록에 포함된 외부 SDK는 Privacy Manifest 파일을 필수적으로 포함하고 해당 SDK 개발자가 서명해야 된다고는 하더라구요..!
그럼... 만약 중요하게 사용하고 있는 외부 SDK가 있는데, 작업을 안하면 우리 앱에서 해줘야하는지..? 아님 사용하지 못하는지..?
그건 아직 잘 모르겠네요 😭
혹시 이 부분에 대해 알고 계신분이나 의견을 나눌 분들이 계시다면 조언해주시면 감사하겠습니다 🙇🏻
목록을 보시면 흔히 앱에서 많이들 사용하는 Alamofire, Firebase, Lottie, RxSwift, SnapKit 등이 존재해요!
이걸 사용하고 있다면 꼭 확인해야 될것 같습니다.
자 그럼 이제 WWDC 23 섹션을 보면서 SDK 개발 시 어떻게 이러한 항목들을 Privacy Manifest에 포함시키는지 한번 알아보시죠!
Get started with privacy manifests 🏃🏻
Privacy manifests
애플에서는 개인정보 취급 개오표를 제출하고 있었습니다.
즉 이 개인정보 취급 개오표를 통해 어떤 개인정보들을 사용하고 취급하고 있는지를 명시하는것이죠.
그리고 앱 추적 투명성(ATT)를 통해서 언제 어떻게 유저들의 정보가 쓰이는지 알 수 있도록 했죠.
이제는 더 정확한 개인정보 취급 개오표를 제공하고 앱 추적 투명성을 통합하는것이 더 쉬워졌습니다!
앱에서는 개인정보 보호는 상당 부분 타사 SDK에 의존하는 경우가 많습니다.
기존에는 SDK에 의존하다보니 해당 SDK에서 제공하지 않으면 얻을 수 없었기에 어려움을 겪을때가 있었다고 합니다.
개인정보 보호 목록은 타사 SDK 개발자가 개인정보 처리방침에 대한 정보를 제공하는 새로운 방법이에요.
타사 SDK 개발자는 이제 SDK에 개인정보 보호 목록을 포함할 수가 있습니다.
바로 PrivacyInfo.xcprivacy 파일을 통해서요!
해당 파일은 이렇게 구성이 되어 있는데요.
이 파일은 속성 목록으로 SDK가 수집하는 데이터 방법, 유형, 사용자와의 연결 여부, ATT 정책에 따라 정의된것처럼 추적에 사용되는지를 선언하게 됩니다.
조금 더 디테일하게 볼께요.
이렇게 사용자와 연결된 이름을 수집합니다.
또한 이런 항목들을 기입한다면 SDK에서 사용자와 연결된 사진 및 영상들도 수집한다는걸 알 수 있습니다.
이 Privacy Manifest 파일에 기재할 수 있고 속할 수 있는 네가지의 분류가 있습니다.
1️⃣ NSPrivacyAccessedAPITypes
애플에서 대상이라고 칭해 안내하고 있는 iOS API 목록을 사용하고 있을때 어떤것을 사용하는지와 사유를 지정해야 합니다.
2️⃣ NSPrivacyTracking
추적에 대해 데이터를 사용하고 있는지를 기재합니다.
3️⃣ NSPrivacyTrackingDomains
추적에 사용하는 인터넷 도메인들을 String 배열 타입으로 기재합니다.
즉, 이것을 설정하지 않으면 ATT를 통해도 요청이 실패하게 되죠.
4️⃣ NSPrivacyCollectedDataTypes
수집하는 데이터 유형을 기재하는 딕셔너리입니다.
Xcode는 이 정보들을 바라보면서 개인정보 보고서를 생성하는데 사용하죠.
즉 결국 이러한 SDK에서 명시된것들을 확인하고 앱에서의 사용과 일치하는지 확인해볼 필요가 있습니다 😃
Privacy report
이제 이렇게 적용한 Privacy manifests가 어떻게 작동되는지 알아볼께요.
개인정보 리포트를 통해 이 모든 정보를 한곳에 모으게 되는 과정입니다.
앱스토어에 앱을 제출하기 위해 아카이빙 시, 이렇게 Generate Privacy Report를 선택하게 된다면 Xcode는 앱 프로젝트의 모든 개인정보 보호 목록을 집계하고 선언된 데이터 사용을 요약하는 개인정보 리포트를 생성해줍니다.
요렇게 PDF 파일로 만들어주며 개인정보 취급 개오표와 유사한 방식으로 보여지게 됩니다.
이제 이 정보들을 이용해 앱 스토어 커넥트에서 Privacy Nutrition Label 정보를 넣어주면 되죠!
간혹 해당 SDK를 사용할때 이 개인정보 리포트가 생성되지 않는다면 아마도 Do not embed로 설정되어 있을 수 있습니다.
아직은 애플에서의 버그일 수 있다고 판단되기에 리포트를 생성하고자 한다면, embed로 넣어줘봅니다!
Tracking domains
개인정보 보호 목록의 또 다른 기능은 추적 도메인 관리를 도울 수 있습니다.
앱의 네트워크 연결을 더 쉽게 이해하고 제어할 수 있게 해줍니다.
만약 허가없이 유저들을 추적할 목적이 아닌데도 추적에 사용되는 도메인에 의도치 않게 네트워크 접속을 하게 되는 경우가 충분히 발생할 수 있습니다 🥹
즉, 사용자가 권한을 부여하지 않은 경우에는 일부 외부 SDK는 추적을 수동으로 비활성화 해야 될 경우가 발생할 수 있죠.
그렇기에 사용자의 허가 없이 추적을 하지 않도록 추적을 선언한 개인정보 보호 목록에는 추적 도메인을 포함해야 합니다.
만약 사용자가 추적을 허용하지 않았다면 iOS 17에선 자동으로 추적 도메인 연결을 끊어버립니다.
여기서 추적 도메인은 앱에 포함된 개인정보 보호 목록에 지정된 것입니다.
이렇게 외부 SDK에 포함된 개인정보 보호 목록 외에도 추적 도메인을 포함할 수 있게 앱용 개인정보 보호 목록을 생성하도록 선택할 수 있죠.
예기치 못한 연결을 방지하고 사용자의 허가 없이 사용자를 추적하지 않겠다는 목적입니다.
애플은 SDK에서는 추적과 추적하지 않는 기능들을 서로 다른 도메인명으로 칭해서 사용하는것을 권장하고 있습니다.
App network connections
그렇지만 앱 혹은 타사 SDK가 추적 도메인에 연결되어 있는지 항상 알수가 없습니다.
그렇기에 Xcode 15에선 Instrument를 이용해 테스트 중 이걸 캐치할 수 있습니다.
결국 사용자의 허락이 있다면 추적이 허용됩니다.
다만 핑거 프린팅은 절대 허용되지 않습니다!
핑거 프린팅은 기기의 신호를 이용해 기기 혹은 사용자를 식별하는 것으로 사용자가 앱에 추적 권한을 부여했는지 여부와 상관없이 핑거 프린팅은 허용되지 않아요.
Required reason APIs
기존 플랫폼의 API 중 핑거프린팅에 오용될 가능성이 있는것들이 있습니다.
그렇기에 이번 변화에서 핑거프린팅을 피하면서 사용할 수 있게 애플에선 필수적으로 사용 이유를 소명해야하는 API들을 목록화 했습니다.
그리고 이러한 API들을 기능과 제공하는 정보를 기반으로 카테고리화했죠.
각각의 카테고리엔 승인된 사유 목록이 존재합니다.
사용에 따라 이러한 API에 액세스하기 위한것이죠!
예시로, NSFileSystemFreeSize라는 API는 파일 시스템의 여유 공간을 나타내요.
이 API를 사용할 수 있는 승인된 사유 중 하나는 디스크에 파일을 기록하기 전 공간이 충분한지 확인하는 것입니다.
이런식으로 애플에서 필수 사유를 명시해야하는 API들을 아래 문서에서 안내하고 있습니다.
사용하고 있는 API들이 있으면 꼭 반영해야 합니다.
여기에 앞서 말했지만 UserDefaults도 포함됩니다!
이걸 Privacy Manifest 파일에 기재하기 위해서는 아래와 같이 진행할 수 있습니다.
위의 진행했던 NSFileSystemFreeSize API를 예시로 볼께요.
위 공식문서를 들어가면 아래와 같이 API 타입과 이유에 대한 코드 및 설명이 나옵니다.
보시면 해당 사용하고자하는 기능의 API 타입은 Disk Space이고 이유는 E174.1로 고를 수 있죠.
그렇기에 이렇게 PrivacyInfo 파일에서 API Type과 Reasons에 대해 타입, 코드, 이유를 넣어 기재해야 합니다.
만약 UserDefaults를 사용한다면
Type은 User Defaults가 되며, 사유 코드는 적절히 상황에 맞는것을 택하고 왜 사용되는지 이유를 기재하여 항목을 추가하면 됩니다!
간단한것 같죠? 😁
하나 명심할것은 꼭 승인된 사유 내에서 선택해야되는것입니다 😀
앞으로 우리가 해야할 일 📝
1️⃣ (앱 개발자라면) SDK 개인정보 보호 목록을 확인하고 해당되면 타사 SDK 개발자에게 요청하기
2️⃣ (앱 개발자라면) 앱 제출 시 항상 Xcode의 개인정보 리포트를 참고하여 개인정보 취급 개오표를 최신 상태로 유지하기
3️⃣ (SDK 개발자라면) 서명과 개인정보 보호 목록을 채택
4️⃣ (모든 개발자들은) 추적 도메인 및 필수 사유 API 사용을 앱이나 SDK의 개인정보 보호 목록에 문서화 및 선언하기
마무리
이렇게 내년 봄에 이제 적용해야할 부분들에 대해 알아봤어요 😊
생각보다 신경써야될게 엄~청 많을줄 알았는데 사용하고 있는 외부 SDK가 목록에 해당된다면 SDK가 이러한 변경을 잘 담았는지 체킹하면 될것같고, 유저디폴트같이 SDK 말고 앱에서 필수 사유 API를 사용한다면 이를 Privacy 파일에 녹이기 정도일것 같습니다.
그리고 꼭 개인정보 취급 개오표를 최신 상태로 유지하도록도 신경써야 할것 같구요.
아직 저도 실제 상용되는 앱에 적용은 해보진 않았기에 실제 어떤 리젝을 먹을 수도 있겠지만...
리젝 당하면 또 그때가서 후기를 남겨볼께요 😁
레퍼런스
'iOS' 카테고리의 다른 글
Firebase App Distribution으로 앱 배포하기 (82) 2024.01.11 VoiceOver를 통한 이벤트 전송 (65) 2024.01.04 STT를 이용해 음성을 텍스트로 변환해보자 🗣️ (95) 2023.12.26 UITest에서 accessibilityIdentifier 활용하기 (78) 2023.12.18 앱 지원 언어 추가 및 기본 언어 변경 (feat. Tuist) (68) 2023.12.14