[iOS] 타사 SDK 요구 사항 변경 예정
Upcoming third-party SDK requirements
24년 5월 1일부터 앱스토어 커넥트에 제출되는 앱은 privacy manifest 가 제공되지 않으면 리젝됨.
타사 SDK는 개발자나 사용자도 모르게 개인정보 보안을 취약하게 만들 수 있음.
타사 SDK 를 대상으로 한 개인정보 보호 매니페스트 및 서명 기능 도입
Privacy manifests
타사 코드가 앱에서 개인정보를 어떻게 처리하는지 하나의 표준 형식으로 요약한 파일
외부 SDK 와 이를 사용하는 앱에서 수집되는 데이터 목록을 공개하고 개인정보 처리 방침을 기재해야 함.
PrivacyInfo.xcprivacy 파일 생성
- Choose File > New File > select App Privacy File type
이 파일은 속성 목록으로서 SDK 가 수집하는 데이터 유형과 데이터 유형의 사용 방법, 사용자와의 연결 여부, 앱 추적 투명성 정책에 정의된 대로 추적에 사용되는지를 선언함.
Privacy Manifest 파일에 기재할 수 4가지 하위 분류가 있음.
- NSPrivacyTracking
- 앱 또는 타사 SDK가 ATT 프레임워크에 정의된 대로 추적에 대해 데이터를 서용하는지 여부를 나타내는 Bool 값
- NSPrivacyTrackingDomains
- 앱 또는 타사 SDK 가 추적에 참여하는 인터넷 도메인을 나열한 문자열 배열(an array of strings)
- 사용자가 추적 권한을 부여하지 않으면 도메인으로의 네트워크 요청이 실패함.
- NSPrivacyCollectedDataTypes
- 앱 또는 타사 SDK가 수집하는 데이터 유형을 설명하는 사전 배열(an array of dictionaries)
- Xcode 는 이 값을 사용해서 App Store Connect Privacy Nutritio Labels 답변에 참고하기 쉬운 보고서를 생성함.
- NSPrivacyAccessedAPITypes
- 앱 또는 타사 SDK가 액세스하는 API를 설명하는 사전 배열(an array of dictionaries)이며, 이는 액세스에 사유가 필요한 API로 지정되어 있음.
Privacy report
앱 및 포함된 SDK 에 대한 Privacy Manifest 파일에 작성된 값을 기반으로 Xcode에서 생성할 수 있는 PDF 파일
이 개인정보 리포트는 PDF 파일이며 App Store Connect Privacy Nutritio Labels 을 제공할 때 쉽게 참조할 수 있음.
앱과 앱의 종속성에 대한 개인정보 처리방침을 검토, 이해 및 설명하는 데 도움이 됨.
개인정보 리포트가 생성되지 않는다면, SDK를 embed 로 변경
SDK 서명
Xcode 는 앱 종속성(타사 SDK)이 유효한 코드 서명과 함께 제공되는지 확인함.
개인정보 보호에 영향을 주는 목록에 있는 SDK일 때, Apple 은 해당 SDK에 SDK개발자의 서명을 요구함.
아래 목록에 포함된 SDK는 privacy manifest 파일과 SDK 개발자의 코드 서명을 무조건 포함해야 함.
개인정보 보호 매니페스트 및 서명을 필요로 하는 SDK
- Abseil
- AFNetworking
- Alamofire
- AppAuth
- BoringSSL / openssl_grpc
- Capacitor
- Charts
- connectivity_plus
- Cordova
- device_info_plus
- DKImagePickerController
- DKPhotoGallery
- FBAEMKit
- FBLPromises
- FBSDKCoreKit
- FBSDKCoreKit_Basics
- FBSDKLoginKit
- FBSDKShareKit
- file_picker
- FirebaseABTesting
- FirebaseAuth
- FirebaseCore
- FirebaseCoreDiagnostics
- FirebaseCoreExtension
- FirebaseCoreInternal
- FirebaseCrashlytics
- FirebaseDynamicLinks
- FirebaseFirestore
- FirebaseInstallations
- FirebaseMessaging
- FirebaseRemoteConfig
- Flutter
- flutter_inappwebview
- flutter_local_notifications
- fluttertoast
- FMDB
- geolocator_apple
- GoogleDataTransport
- GoogleSignIn
- GoogleToolboxForMac
- GoogleUtilities
- grpcpp
- GTMAppAuth
- GTMSessionFetcher
- hermes
- image_picker_ios
- IQKeyboardManager
- IQKeyboardManagerSwift
- Kingfisher
- leveldb
- Lottie
- MBProgressHUD
- nanopb
- OneSignal
- OneSignalCore
- OneSignalExtension
- OneSignalOutcomes
- OpenSSL
- OrderedSet
- package_info
- package_info_plus
- path_provider
- path_provider_ios
- Promises
- Protobuf
- Reachability
- RealmSwift
- RxCocoa
- RxRelay
- RxSwift
- SDWebImage
- share_plus
- shared_preferences_ios
- SnapKit
- sqflite
- Starscream
- SVProgressHUD
- SwiftyGif
- SwiftyJSON
- Toast
- UnityFramework
- url_launcher
- url_launcher_ios
- video_player_avfoundation
- wakelock
- webview_flutter_wkwebview
Tracking domains
많은 타사 SDK 는 사용자를 추적하기 전에 추적 권한 상태를 확인하지만,
사용자가 권한을 부여하지 않은 경우인데도 일부 타사 SDK 는 추적을 할 수 있으므로 수동으로 비활성해야 하는 이슈
- 개인정보 보호 목록에 지정된 추적 도메인을 통해 iOS 17은 자동으로 추적 도메인 연결을 끊음.
- 핑거프린팅은 절대 허용되지 않음.
추가적으로, 사용자의 허가 없이 추적을 하지 않도록 추적을 선언한 개인정보 보호 목록에는 추적 도메인을 포함해야 함.
Apple 은 추적 여부에 따라 도메인을 분리하는 것을 권장함. (tracking.example.com 또는 non-tracking.exapmle.com)
앱 네트워크 연결
the Points of Interest instruments 를 통해 추적되고 있는 도메인을 확인 할 수 있고
해당 도메인을 개인정보 보호 목록에 추가하여 사용자에게 허가받지 않은 추적을 차단함.
자세한 내용은 여기 참조
Required reson APIs
Apple 은 기존 플랫폼 API 중 오남용될 가능성(핑거프린팅)을 식별하였음.
이러한 API가 필요한 앱 및 SDK 는 액세스에 대한 승인된 사유를 작성해야 함.
예를 들어 NSFileSystemFreeSize(파일 시스템 여유 공간 양)를 호출하는 데 승인된 사유 중 하나는 디스크에 파일을 쓰기 전에 충분한디스크 공간이 있는지 확인하는 것임.
사유는 프라이버시 매니페스트 파일을 통해 명시하며 필수 사유를 명시해야 하는 API들을 여기에서 안내함.
각 카테고리에는 승인된 사유 목록이 있고 앱은 승인된 사유가 있어야만 해당 필수 사유 API에 액세스할 수 있음.
해당 사유는 사용자에게 노출되며 API 를 사용하는 기능과 일치되어야 함.
타사 SDK 요구사항 변경 대응
공통
- 추적 도메인 및 필수 사유 API 사용을 앱이나 SDK 개인정보 보호 목록에 포함
App 개발자
- SDK 개인정보 보호 목록 확인 및 없을 시에는 타사 SDK 개발자에게 요청
- 심사 제출 전 개인정보 리포트를 확인하여 Privacy Nutritio Labels 작성
SDK 개발자
- 개인정보 보호 목록 및 서명 제공
Privacy-scanner 이용하기
프로젝트에서 사용 중인 Required Reason API 를 확인하여 보고서 형태로 확인이 가능함.
아래 블로그 및 깃허브 링크 참고
Ref.