iOS

[iOS] Privacy Manifest ์ •๋ฆฌ ( feat.privacy_scanner )

๊ฒฝํ‘ธ 2024. 8. 5. 18:30
๋ฐ˜์‘ํ˜•

Privacy Manifest ๋Œ€์‘์„ ์œ„ํ•ด ๊ฐ„๋‹จํžˆ ์ •๋ฆฌํ•ด ๋ณด๊ณ ์ž ํ•œ๋‹ค.

์šฐ์—ฐํžˆ ์ฐพ์•˜๋˜ techinpark๋‹˜์˜ privacy manifest scanner

์–ด๋– ํ•œ ํ•ญ๋ชฉ์— ๋Œ€ํ•ด ์ž‘์„ฑํ•ด์•ผ ํ• ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค๋ฉด ํ•œ ๋ฒˆ ์‚ฌ์šฉํ•ด ๋ณด๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.

 

GitHub - techinpark/ios_privacy_manifest_scanner: scan your Xcode Swift project for required reason API usage

scan your Xcode Swift project for required reason API usage - techinpark/ios_privacy_manifest_scanner

github.com

 

 


Privacy Manifest File

์ˆ˜์ง‘ํ•˜๋Š” ๋ฐ์ดํ„ฐ์™€ Required Reason API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋ฅผ ๋ช…์‹œํ•œ ํŒŒ์ผ์ด๋‹ค.

Property List๋กœ ๊ฐœ์ธ์ด ๋งŒ๋“  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํƒ€์‚ฌ SDK์—์„œ๋„ ์ˆ˜์ง‘ํ•œ ๋ฐ์ดํ„ฐ์™€ API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ์— ๋Œ€ํ•ด์„œ ๋ช…์‹œํ•ด์•ผ ํ•œ๋‹ค.๋˜ํ•œ, ์™ธ๋ถ€ SDK ์š”๊ตฌ์‚ฌํ•ญ์— ‘Privacy Manifest์™€ ์„œ๋ช…์ด ํ•„์š”ํ•œ SDK(SDKs that require a privacy manifest and signature)’๋ผ๊ณ  ์ ํ˜€์žˆ๋‹ค๋ฉด ์™ธ๋ถ€ SDK์— Privacy manifest ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

๊ฐœ์ธ ์•ฑ์˜ Privacy Manifest File๊ณผ ์‚ฌ์šฉํ•˜๋Š” ์™ธ๋ถ€ SDK์˜ Privacy Manifest File์„ ํ†ตํ•ฉํ•˜์—ฌ Privacy Report๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค. Privacy Report๋ฅผ App Store Connect์— ํ•จ๊ป˜ ๋“ฑ๋กํ•˜๋ฉด ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

1. Privacy Manifest File ์ƒ์„ฑํ•˜๊ธฐ

- App Privacy ํŒŒ์ผ์„ ์ƒ์„ฑํ•˜๊ธฐ + ํƒ€๊ฒŸ ์„ค์ •

- ์ƒ์„ฑํ•˜๊ฒŒ ๋˜๋ฉด PrivacyInfo.xcprivacy๋ผ๋Š” ํŒŒ์ผ์ด ์ƒ์„ฑ๋œ๋‹ค.

2. PrivacyInfo.xcprivacy

4๊ฐ€์ง€์˜ ์†์„ฑ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

(1) NSPrivacyTracking

- App Tracking Transparency framework์— ์ •์˜๋œ ๋Œ€๋กœ ์ถ”์ ์„ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” Boolean๊ฐ’์ด๋‹ค.

 

User Privacy and Data Use - App Store - Apple Developer

The App Store is designed to be a safe and trusted place for users to discover apps created by talented developers around the world.

developer.apple.com

(2) NSPrivacyTrackingDomains

- ์ถ”์ ์— ์‚ฌ์šฉ๋˜๋Š” ์ธํ„ฐ๋„ท ๋„๋ฉ”์ธ์„ ๋‚˜์—ดํ•œ String ๋ฐฐ์—ด์ด๋‹ค. ๋งŒ์•ฝ ์œ ์ €๊ฐ€ App Tracking Transparency framework๋ฅผ ํ†ตํ•ด ์ถ”์  ๊ถŒํ•œ์„ ์ฃผ์ง€ ์•Š์œผ๋ฉด ์ด๋Ÿฌํ•œ ๋„๋ฉ”์ธ์— ๋Œ€ํ•œ ๋„คํŠธ์›Œํฌ ์š”์ฒญ์ด ์‹คํŒจํ•˜๊ณ  ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

(3) NSPrivacyCollectedDataTypes

- Dictionary ๋ฐฐ์—ด๋กœ ์ˆ˜์ง‘ํ•˜๋Š” ๋ฐ์ดํ„ฐ ํ•ญ๋ชฉ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. 

- ์ƒ๋‹นํžˆ ๋งŽ์€ ์ข…๋ฅ˜์˜ ํ‚ค๊ฐ’์ด ์กด์žฌํ•œ๋‹ค. ์—ฐ๋ฝ์ฒ˜ ์ •๋ณด๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด ๊ฑด๊ฐ•, ๊ฒฐ์ œ, ์œ„์น˜ ๋“ฑ๋“ฑ ์•„๋ž˜์˜ ๋งํฌ์—์„œ ํ•„์š”ํ•œ ๊ฒƒ์ด ์–ด๋–ค ๊ฒƒ์ธ์ง€ ์ฐพ์•„๋ณด์ž

 

Describing data use in privacy manifests | Apple Developer Documentation

Declare the data collected by your app or by third-party SDKs.

developer.apple.com

(4) NSPrivacyAccessedAPITypes

- Dictionary ๋ฐฐ์—ด๋กœ ์ ‘๊ทผํ•˜๋Š” API ํƒ€์ž…์„ ๋‚˜ํƒ€๋‚ธ๋‹ค. API ํƒ€์ž…์€ Required Reason API๋กœ ์ง€์ •๋˜์–ด ์žˆ๋‹ค.

3. ์ˆ˜์ง‘ ํ•ญ๋ชฉ ๋‚˜ํƒ€๋‚ด๊ธฐ (NSPrivacyCollectedDataTypes)

- ์ˆ˜์ง‘ํ•œ ๋ฐ์ดํ„ฐ ํ•ญ๋ชฉ๊ณผ Required Reason API์— ๋Œ€ํ•œ ์ด์œ ๋ฅผ ๋ช…์‹œํ•ด์•ผ ํ•œ๋‹ค๊ณ  ํ–ˆ์œผ๋‹ˆ ์ˆ˜์ง‘ํ•œ ๋ฐ์ดํ„ฐ ํ•ญ๋ชฉ์„ ๋ช…์‹œํ•˜๋Š” ๋ฐฉ๋ฒ•๋ถ€ํ„ฐ ์•Œ์•„๋ณด์ž.

- ์ˆ˜์ง‘ํ•ญ๋ชฉ์€ Privacy Manifest File์˜ NSPrivacyCollectedDataTypes๋ฅผ ํ†ตํ•ด ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ๋”•์…”๋„ˆ๋ฆฌ ๋ฐฐ์—ด ํƒ€์ž…์œผ๋กœ, ํ‚ค๊ฐ’์œผ๋กœ๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ ํ•ญ๋ชฉ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

(1) NSPrivacyCollectedDataType: ์ˆ˜์ง‘ํ•˜๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” String์ด๋‹ค. ์•„๋ž˜์˜ ๋ฐ์ดํ„ฐ ์œ ํ˜• ํ•ญ๋ชฉ์—์„œ ์•ฑ ๋˜๋Š” ํƒ€์‚ฌ SDK๊ฐ€ ์ˆ˜์ง‘ํ•˜๋Š” ๋ฐ์ดํ„ฐ์™€ ์ผ์น˜ํ•˜๋Š” ๊ฐ’์„ ์„ ํƒํ•ด์•ผ ํ•œ๋‹ค. ์•ž์„œ ์„ค๋ช…ํ–ˆ๋˜ ์—ฐ๋ฝ์ฒ˜ ์ •๋ณด, ๊ฒฐ์ œ, ๊ฑด๊ฐ• ๋“ฑ์— ๋Œ€ํ•œ ํ‚ค๊ฐ’๊ณผ ์„ค๋ช…์„ ํ™•์ธํ•˜๋ฉด ๋œ๋‹ค.

(2) NSPrivacyCollectedDataTypeLinked: ๋ฐ์ดํ„ฐ ์œ ํ˜•์„ ์‚ฌ์šฉ์ž์˜ ID์— ์—ฐ๊ฒฐํ•˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” Boolean ๊ฐ’์ด๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๊ด‘๊ณ ์™€ ๊ด€๋ จ๋œ SDK๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์„ ๊ฒฝ์šฐ, ๊ด‘๊ณ  SDK์—์„œ ํ˜„์žฌ ์‚ฌ์šฉ์ž๋ฅผ ํŠน์ •ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ ์œ ํ˜•์ด ์žˆ๋‹ค๋ฉด True, ์—†๋‹ค๋ฉด False๋กœ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋œ๋‹ค.

 

App Privacy Details - App Store - Apple Developer

Learn about providing your app’s privacy practice details in App Store Connect for display on your App Store product page.

developer.apple.com

(3) NSPrivacyCollectedDataTypePurposes: ๋ฐ์ดํ„ฐ๋ฅผ ์ˆ˜์ง‘ํ•˜๋Š” ์ด์œ ๋ฅผ ๋‚˜์—ดํ•˜๋Š” ๋ฌธ์ž์—ด ๋ฐฐ์—ด์ด๋‹ค.

4. Required Reason API ์‚ฌ์šฉ ๋ชฉ์  ๋‚˜ํƒ€๋‚ด๊ธฐ

- API์˜ ์‚ฌ์šฉ ๋ชฉ์ ์€ NSPrivacyAccessedAPITypes์—์„œ ๋ช…์‹œํ•  ์ˆ˜ ์žˆ๋‹ค.

(1) Key ๊ฐ’

- NSPrivacyAccessedAPIType: ์•ฑ์ด ์‚ฌ์šฉํ•˜๋Š” ํ•„์ˆ˜ API์˜ ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๋ฌธ์ž์—ด์ด๋‹ค.

- NSPrivacyAccessedAPITypeRasons: ์•ฑ์ด API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๋ฌธ์ž์—ด ๋ฐฐ์—ด์ด๋‹ค.

(2) UserDefaults๋„ ์‚ฌ์šฉ ๋ชฉ์ ์„ ๋ช…์‹œํ•˜์—ฌ์•ผ ํ•œ๋‹ค.

- ์•„๋ž˜์˜ ์ด๋ฏธ์ง€๋Š” ์‚ฌ์šฉ ์ด์œ ๋“ค์— ๋Œ€ํ•œ ๊ฐ’๋“ค์ด๋‹ค.

- ์‹ค์ œ๋กœ UserDefaults์™€ ๊ด€๋ จํ•ด ์•ฑ ๋‚ด์—์„œ ๋‹จ์ˆœํ•œ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉ ์ค‘์ด๊ธฐ์— ์•„๋ž˜์™€ ๊ฐ™์ด ์„ ํƒํ•˜์—ฌ ์ œ์ถœํ–ˆ๋‹ค.

[ ์ฃผ์˜ ์‚ฌํ•ญ ]

- ์ˆ˜์ง‘๋œ ๋ฐ์ดํ„ฐ ํ•ญ๋ชฉ๊ณผ ์‚ฌ์šฉ๋ชฉ์ ์„ ๋ช…์‹œํ•  ๋•Œ๋Š” ๊ณต์‹ ๋ฌธ์„œ์—์„œ ์ œ๊ณต๋œ ํ•ญ๋ชฉ๋งŒ์„ ํ‚ค & ๋ฐธ๋ฅ˜๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ปค์Šคํ…€ํ•  ๊ฒฝ์šฐ, ๋ฆฌ์ ์‚ฌ์œ ๊ฐ€ ๋  ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•„๋‘์ž.

5. Privacy Report

- ๋งˆ์ง€๋ง‰์œผ๋กœ ์™ธ๋ถ€ SDK์™€ ์•ฑ ๋‚ด์˜ Privacy Manifest File์„ ๊ฐ€์ง€๊ณ  Privacy Report๋ฅผ ๋งŒ๋“ค๋ฉด ๋œ๋‹ค.

(1) Product → Archive ์ง„ํ–‰

(2) Organizer์—์„œ Archive๋ฅผ ์šฐํด๋ฆญํ•˜์—ฌ Generate Privacy Report๋ฅผ ์„ ํƒํ•˜์ž.

์ด์ œ ์ €์žฅํ•  ์œ„์น˜๋ฅผ ์„ ํƒํ•˜๊ณ , ์•ฑ์Šคํ† ์–ด ์ปค๋„ฅํŠธ์—์„œ ์•ฑ์ด ์ˆ˜์ง‘ํ•˜๋Š” ๊ฐœ์ธ์ •๋ณด๋ฅผ ์ฑ„์›Œ์ฃผ๋ฉด ๋œ๋‹ค.

 

๋ฐ˜์‘ํ˜•