호댕의 iOS 개발

[iOS] Privacy Manifests 대응 본문

Software Engineering/iOS

[iOS] Privacy Manifests 대응

호르댕댕댕 2024. 3. 29. 21:17

 

갑자기 이런 메일을 받았다면...?

24년 3월 13일 이후로 배포 시 프로덕트에 Privacy Manifests가 누락되어 있다면 애플에서 메일을 보내게 된다. 

 

Hello, We noticed one or more issues with a recent submission for App Store review for the following app: {앱 이름}

Version {현재 배포 버전}
Build {등록해놓은 빌드 버전}

Although submission for App Store review was successful, you may want to correct the following issues in your next submission for App Store review. Once you’ve corrected the issues, upload a new binary to App Store Connect.

ITMS-91053: Missing API declaration - Your app’s code in the
{어디에 어떤 API에 대한 Privacy Manifest가 누락되었는지 설명}

May 1, 2024, when you upload a new app or app update, you must include a NSPrivacyAccessedAPITypes array in your app’s privacy manifest to provide approved reasons for these APIs used by your app’s code. For more details about this policy, including a list of required reason APIs and approved reasons for usage, visit:
https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api
. Apple Developer Relations

 

24년 5월 1일까지 이에 대한 대응을 반드시 해야 한다고 하고 있기 때문에 대응은 필수적이다.

 

이에 대한 내용은 이미 23년 WWDC Get Started with privacy manifests에서 다룬 적이 있어 해당 내용을 정리하면서 어떤 식으로 대응하고 있는지를 기록하고자 한다. 

 

https://developer.apple.com/videos/play/wwdc2023/10060

 

Get started with privacy manifests - WWDC23 - Videos - Apple Developer

Meet privacy manifests: a new tool that helps you accurately identify the privacy practices of your app's dependencies. Find out how...

developer.apple.com

 

Get Started with privacy manifests

개인 정보 보호는 개인의 권리로써 잘 보장되어야 하기 때문에 Apple에선 이를 좀 더 투명하고 잘 관리하기 위해 Privacy Nutrition Label과 App Tracking Transparency를 잘 관리하기 위한 Privacy Manifests를 도입했다. 

 

물론 기존에도 앱 스토어 상에 Privacy Nutrition Labels를 제공하고 있었고 App Tracking Transparency를 사용해 데이터를 추적하는 것을 사용자가 제어할 수 있도록 했다. 

 

AppTrackingTransparency의 경우 AppTrackingTransparency를 import하여 

ATTrackingManager.requestTrackingAuthorization

요 함수를 통해 사용자에게 제어할 수 있는 Alert를 보여준다.

 

그런데 요걸 좀 더 투명하게 관리하기 위해 Privacy Manifests가 등장한 것이다. 

사용자의 개인 정보를 써드파티 라이브러리를 통해 관리하는 경우가 꽤 있는데 이제는 써드파티 라이브러리에서 App Privacy 파일을 통해 어떤 데이터를 수집하고 있는지 명확히 밝히도록 해야 한다.

여기서 사용하는 데이터 타입 / 데이터 타입이 사용되는 방식 / 사용자에게 연결되어 있는 데이터인지 / App Tracking Transparency 정책에 정의된 대로 데이터를 추적하고 있는지 등을 기재해야 한다.

 

아래처럼 말이다.

 

이러한 정보는 Xcode15부터 아카이빙을 하고 난 이후 Generate Privacy Report를 통해 한 눈에 확인할 수 있다. 

 

여기서 앱 전체적으로 어떤 Privacy Nutrition Label을 사용했는지 한 번에 PDF 형식으로 report를 만들어서 보여준다. 

 

Privacy Nutrition Label의 경우 아래 문서에서 리스트를 확인할 수 있다. 

https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_data_use_in_privacy_manifests

 

Describing data use in privacy manifests | Apple Developer Documentation

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

developer.apple.com

 

AppStore Connnect에서 앱의 개인 정보 보호 세부 정보를 제공할 때 해당 보고서를 참고하면 써드파티에서 사용 중인 개인정보까지 누락없이 작성하는데 도움이 될 것이다. 

 

그리고 일부 써드파티 SDK의 경우 사용자 추적 권한을 부여하지 않더라도 개인정보를 추적할 수 있다. 이때 수동으로 앱 추적을 비활성화해야 하는데 iOS 17부턴 요런 도메인을 Privacy Manifest에 등록해놓으면 AppTrackingTransparency를 거절한 경우 자동으로 해당 도메인에 대한 연결을 차단하여 이런 엣지 케이스를 방지할 수도 있다. 

 

이는 개발자가 인지하지 못하고 있을 수 있기 때문에 Xcode Instrument의 Network에서 Points of Interest를 통해 이를 찾을 수 있도록 도와준다. 

 

https://developer.apple.com/documentation/xcode/detecting-when-your-app-contacts-domains-that-may-be-profiling-users

 

Detecting when your app contacts domains that may be profiling users | Apple Developer Documentation

Use Instruments to assess whether your app or its third-party SDKs connect to domains that may profile users.

developer.apple.com

 

위 문서에서 어떻게 이런 도메인을 찾을 수 있는지에 대한 방법이 좀 더 자세하게 나와있다. 

(내가 확인했을 때에는 우리 앱에선 발견하지 못했다. 그래서 정확히 어떤 상황일 때, Network instrument에 잡히는지는 확인하지 못했다)

 

그리고 Apple에선 필수로 사용 이유를 밝혀야 하는 API 목록에 대해서도 언급을 했다. 

https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/describing_use_of_required_reason_api

 

Describing use of required reason API | Apple Developer Documentation

Ensure your use of covered API is consistent with policy.

developer.apple.com

 

이는 알게 모르게 앱 내에서 사용하고 있는 경우가 많아 왠만하면 전부 이를 밝혀야 했다. 

위 문서에선 아래 API 리스트를 언급하고 있다. 

  • File timestamp APIs
  • System boot time APIs
  • Disk space APIs
  • Active keyboard APIs
  • User defaults APIs

해당 API를 사용했다면 반드시 App Privacy를 만들어서 어떤 API를 사용했는지 밝히고 사용한 이유를 기재해야 한다. 

 

그런데 여기서 이유가 다양했는데 실제로 Xcode 상에선 해당 이유가 전부 있진 않았다. 최대한 사용한 이유에 부합하게 작성을 해놓긴 했는데 만약 리젝을 당한다면 다음 콘텐츠에 이를 작성해보고자 한다. 

 

그래서 어떻게 대응을 해야 하는데?

이 부분이 가장 중요하고 궁금한 부분일 것이다. 

 

현재 대응 중이고 아직 애플에서 명확한 피드백을 받지 못해서 이렇게 대응하는 것이 불확실하긴 하다. 

 

일단 애플에선 앱 개발자는 다음과 같은 대응이 필요하다고 했다. 

  • 써드파티 SDK에 privacy manifests 요청
  • App Store Connnect에서 Xcode Privacy Report를 통해 정확한 Privacy Nutrition Labels 제공
  • tracking domain을 선언하고 required reason API를 사용하고 있는지 확인 후 사용한다면 이를 Privacy Manifest에 기재

 

써드파티 SDK에 privacy manifests 요청

일단 애플에서 아래 링크에 기재된 라이브러리는 요청이 필요하다고 기재를 해놨다. 

https://developer.apple.com/support/third-party-SDK-requirements/

 

Upcoming third-party SDK requirements - Support - Apple Developer

Feedback Assistant Submit feedback, report bugs, and request enhancements to APIs and developer tools. Send us feedback

developer.apple.com

 

생각보다 흔히 사용되는 라이브러리들 대부분 이름이 올라가 있다. 

RxSwift, Snapkit, Alamofire, Firebase 등등 말이다.

 

이미 다양한 외국 개발자들이 요청을 해놓은 경우가 많다. 

내가 찾아본 지원 현황은 아래와 같다. 

 

지원 현황 (2024.03.27 기준)

  • Firebase : v 10.22.0에 대응
  • Google Sign in : 이슈(링크)만 올라오고 아직 대응 X
 

Support App Privacy Manifest · Issue #341 · google/GoogleSignIn-iOS

Is your feature request related to a problem you're having? Please describe. Apple required App Privacy manifests until 2025. So GoogleSignIn-iOS SDK that contains an app privacy manifest must be s...

github.com

  • KakaoOpenSDK : 추후 업데이트 시 공지사항(링크)을 남겨주겠다는 게시글만 존재 (제공 예정이라 함) -> v2.22.0 이상부터 지원
 

App Store 앱 제출을 위한 개인정보 보호 관련 업데이트(매니페스트) 대응 문의

안녕하세요~ 카카오로그인API를 사용중인 개발자 입니다. 애플에서 “App Store 앱 제출을 위한 개인정보 보호 관련 업데이트(매니페스트)” 공지를 하였는데요~ https://developer.apple.com/kr/news/?id=3d8a9y

devtalk.kakao.com

  • Kingfisher : v 7.9.0에 대응
  • Moya : Moya는 따로 대응 예정이 없다고 했고 Alamofire는 v 5.9.0에 대응
    • Alamofire를 추상화한 라이브러리인 만큼 Alamofire만 지원하면 되나 싶긴 한데 요 부분도 배포 후 피드백을 받아 추가 진행 예정
  • Facebook : 이슈(링크)만 올라오고 아직 대응 X
  • SnapKit : v 5.7.0에 대응
  • SwiftyJSON : 3/20 대응 커밋이 올라왔으나 아직 배포 X
  • Swinject : 3/27 대응 커밋이 올라왔으나 아직 배포 X
  • Then : 이슈(링크)만 올라오고 답변 X

 

일단 리스트에 없는 써드파티 라이브러리들도 사용 중인 것들은 찾아봤다. 

Firebase, Kingfisher, Alamofire, Snapkit은 이미 대응을 해줬고 아직 대응 예정이라는 답글만 달아놓은 곳들도 꽤나 많았다. 

 

지원 현황을 트래킹하면서 라이브러리 업데이트가 필요할 것 같다. 

 

따로 정리한 페이지도 존재한다!

 

https://apnspush.com/privacy-manifest-sdks#all-86-required-sdks-and-status-in-supporting-privacy-manifest

 

Apple's Privacy Manifest: 86 third-party SDKs required to add Privacy Manifest and Signature | APNsPush

Apps uploaded to App Store Connect must be built with Xcode 15 for iOS 17, iPadOS 17, tvOS 17, or watchOS 10, starting April 29, 2024. Starting in spring 2024, you must include the privacy manifest for any SDK listed below when you submit new apps in App S

apnspush.com

 

앱 내 대응

이미 메일을 받은 경우 해당 required reason APIs를 사용한 이유와 어떤 API를 사용했는지를 App Privacy 파일에 기재해주면 된다. 

그리고 Network Instrument를 통해 tracking domain으로 등록할 도메인이 있는지 확인해주고 어떤 개인정보를 어떤 목적으로 사용했는지 Privacy Nutrition Label에 기재를 해주면 된다. 

 


아직 1차 대응만 진행한 예정이고 요렇게 대응해도 부족한 부분이 있을 수 있기 때문에 추후 상황에 따라 필요한 내용을 추가로 정리해볼 예정입니다.

 

적어놓은 업데이트된 라이브러리 및 앱 내 대응만 했는데도 현재 관련 메일은 오지 않고 있는 상황입니다! 

(라이브러리에 모두 대응할 필요는 없는건가...?)

Comments