개발지식 정리/React Native

React Native에서 PrivacyInfo.xcprivacy 대응하기

Neoself 2024. 6. 28. 14:10

어느 순간부터 React Native에서 라이브러리들을 업데이트하고, pod install을 실행할때 아래와 같이 PrivacyInfo.xcprivacy 파일이 슬며시 ios 폴더 내부에 생성되는 것을 확인할 수 있다.

(좌) VSCode, (우) XCode

 

이는 2024년 5월 1일부터 변경된 Apple의 개인정보 보호 정책 내용에 따라 앱스토어 등록 시 같이 지참해야하는 파일이며, 앱으로 수집하는 사용자 데이터의 유형, 그리고 데이터 수집 사유의 명시를 위한 파일이다. 해당 파일의 위치는 iOS 프로젝트의 경우 프로젝트 루트, React Native 프로젝트의 경우 ios 폴더 내부여야 인식이 가능하다. 5월 1일부터 해당 파일 없이, 사용자 데이터를 수집하는 앱을 등록하려 할 경우, 앱 스토어에서 심사가 거부될 수 있다고 하니, 그저 을인 앱 개발자들은 따라야하는듯 싶다.

 

여기서 유의해야할 점은 제3자가 배포한 sdk들도 PrivacyInfo.xcprivacy 파일로 명시가 필요하다는 것이다. 즉, 데이터를 수집하는 메서드가 포함되어있는 제 3자 SDK를 deps에 추가하기만 하여도, 실제 사용여부과 관계없이 PrivacyInfo 파일에 반영해야한다. 이로 인한 혼란을 피하기 위해 현재 애플 공식 문서 상에 PrivacyInfo.xcprivacy 기재가 필요한 SDK들을 하기 리스트와 같이 명시해놓고 있다.

 

PrivacyInfo 파일이 필요한 SDK 리스트

더보기
  1. Abseil
  2. AFNetworking
  3. Alamofire
  4. AppAuth
  5. BoringSSL / openssl_grpc
  6. Capacitor
  7. Charts
  8. connectivity_plus
  9. Cordova
  10. device_info_plus
  11. DKImagePickerController
  12. DKPhotoGallery
  13. FBAEMKit
  14. FBLPromises
  15. FBSDKCoreKit
  16. FBSDKCoreKit_Basics
  17. FBSDKLoginKit
  18. FBSDKShareKit
  19. file_picker
  20. FirebaseABTesting
  21. FirebaseAuth
  22. FirebaseCore
  23. FirebaseCoreDiagnostics
  24. FirebaseCoreExtension
  25. FirebaseCoreInternal
  26. FirebaseCrashlytics
  27. FirebaseDynamicLinks
  28. FirebaseFirestore
  29. FirebaseInstallations
  30. FirebaseMessaging
  31. FirebaseRemoteConfig
  32. Flutter
  33. flutter_inappwebview
  34. flutter_local_notifications
  35. fluttertoast
  36. FMDB
  37. geolocator_apple
  38. GoogleDataTransport
  39. GoogleSignIn
  40. GoogleToolboxForMac
  41. GoogleUtilities
  42. grpcpp
  43. GTMAppAuth
  44. GTMSessionFetcher
  45. hermes
  46. image_picker_ios
  47. IQKeyboardManager
  48. IQKeyboardManagerSwift
  49. Kingfisher
  50. leveldb
  51. Lottie
  52. MBProgressHUD
  53. nanopb
  54. OneSignal
  55. OneSignalCore
  56. OneSignalExtension
  57. OneSignalOutcomes
  58. OpenSSL
  59. OrderedSet
  60. package_info
  61. package_info_plus
  62. path_provider
  63. path_provider_ios
  64. Promises
  65. Protobuf
  66. Reachability
  67. RealmSwift
  68. RxCocoa
  69. RxRelay
  70. RxSwift
  71. SDWebImage
  72. share_plus
  73. shared_preferences_ios
  74. SnapKit
  75. sqflite
  76. Starscream
  77. SVProgressHUD
  78. SwiftyGif
  79. SwiftyJSON
  80. Toast
  81. UnityFramework
  82. url_launcher
  83. url_launcher_ios
  84. video_player_avfoundation
  85. wakelock
  86. webview_flutter_wkwebview

다행히도 react-native는 0.74.0 업데이트를 통해 현재 사용하는 iOS SDK들에 맞춰 PrivacyInfo.plist 파일을 자동생성 및 작성하는 로직을 추가하였으며, 0.74.1 업데이트를 통해 자동생성된 PrivacyInfo.plist 파일을 XCode 상에 연결하는 작업도 자동화하여 이를 대응하였다. 또한, 위 리스트에 포함되는 SDK를 사용하는 React Native 개인 라이브러리들도 각자 긴급 업데이트를 통해 pod install 실행 시 자동으로 PrivacyInfo 파일을 갱신해주는 로직을 추가하고 있다.

 

물론 React Native 라이브러리를 최신버전으로 업데이트하여도, 정작 사용자 데이터를 수집하는 RN 라이브러리가 구버전을 사용하고 있을 경우, pod install 단계에서 PrivacyInfo.plist 자동 반영이 완벽히 되지 않을 수 있다.

 

대표적인 예시로 필자가 겪은 react-native-image-crop-picker가 있다. 

기존 0.40.3 버전에서 0.41.3 버전으로 업데이트를 한 후 pod install을 재실행하면 NSPrivacyAccessedAPITypeReasons 카테고리에 3B52.1 값이 추가되는데, 이는 해당 라이브러리가 타임스탬프처럼 파일의 metadata를 접근할 경우 추가되는 값이다. 만약 업데이트를 진행하지 않았다면, 카메라 및 갤러리 접근 기능 사용 시 사용자 데이터를 수집한다는 사전명시를 진행하지 않았다는 이유로 앱 스토어 심사 거부를 당했을 수도 있었을 것이다.

 

https://github.com/ivpusic/react-native-image-crop-picker/releases/tag/v0.41.0

 

Release v0.41.0 · ivpusic/react-native-image-crop-picker

What's Changed fix(ios): replace UIGraphicsBeginImageContext in Compression.m by @remarkablemark in #2055 Add Privacy manifest by @ujeon in #2045 add Dutch (nl) as a translation for iOS by @Hosten...

github.com

 

추가적으로 앞서 설명했던 라이브러리 외에도 @react-native-firebase 라이브러리 또한 GA를 통해 사용자의 사용 기록 데이터를 수집하기에 최신버전으로 pod install할 경우, PrivacyInfo.plist에 자동반영된다.

 

결론

 

5월 1일부터 아무런 변수 없이 앱스토어에 React Native 앱을 등록하려면, 사용자 데이터를 활용한다고 판단되는 라이브러리들을 시작으로 가능한 모든 라이브러리에 대한 일괄 업데이트가 필요하다.

Reference
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

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

 

Describing use of required reason API | Apple Developer Documentation

Ensure your use of covered API is consistent with policy.

developer.apple.com

https://developer.apple.com/documentation/bundleresources/privacy_manifest_files/adding_a_privacy_manifest_to_your_app_or_third-party_sdk

 

Adding a privacy manifest to your app or third-party SDK | Apple Developer Documentation

Report the data you collect and required reasons API you use in your app or third-party SDK.

developer.apple.com