일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- privacyinfo.plist
- requirenativecomponent
- launch screen
- native
- ios
- 리액트 네이티브
- Android
- react-native-fast-image
- 라이브러리 없이
- 리액트
- 스플래시스크린
- 360도 뷰어
- 360도 이미지
- 스켈레톤 UI
- boilerplate 제거
- 스켈레톤 통합
- 리엑트 네이티브
- Privacy manifest
- 네이티브
- 360도 이미지 뷰어
- react
- Skeleton UI
- 3b52.1
- React Native
- launchscreen
- React-Native
- panorama view
- 파노라마 뷰
- 앱 성능 개선
- Native Module
- Today
- Total
Neoself의 기술 블로그
React Native에서 PrivacyInfo.xcprivacy 대응하기 본문
어느 순간부터 React Native에서 라이브러리들을 업데이트하고, pod install을 실행할때 아래와 같이 PrivacyInfo.xcprivacy 파일이 슬며시 ios 폴더 내부에 생성되는 것을 확인할 수 있다.
이는 2024년 5월 1일부터 변경된 Apple의 개인정보 보호 정책 내용에 따라 앱스토어 등록 시 같이 지참해야하는 파일이며, 앱으로 수집하는 사용자 데이터의 유형, 그리고 데이터 수집 사유의 명시를 위한 파일이다. 해당 파일의 위치는 iOS 프로젝트의 경우 프로젝트 루트, React Native 프로젝트의 경우 ios 폴더 내부여야 인식이 가능하다. 5월 1일부터 해당 파일 없이, 사용자 데이터를 수집하는 앱을 등록하려 할 경우, 앱 스토어에서 심사가 거부될 수 있다고 하니, 그저 을인 앱 개발자들은 따라야하는듯 싶다.
여기서 유의해야할 점은 제3자가 배포한 sdk들도 PrivacyInfo.xcprivacy 파일로 명시가 필요하다는 것이다. 즉, 데이터를 수집하는 메서드가 포함되어있는 제 3자 SDK를 deps에 추가하기만 하여도, 실제 사용여부과 관계없이 PrivacyInfo 파일에 반영해야한다. 이로 인한 혼란을 피하기 위해 현재 애플 공식 문서 상에 PrivacyInfo.xcprivacy 기재가 필요한 SDK들을 하기 리스트와 같이 명시해놓고 있다.
PrivacyInfo 파일이 필요한 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
다행히도 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
추가적으로 앞서 설명했던 라이브러리 외에도 @react-native-firebase 라이브러리 또한 GA를 통해 사용자의 사용 기록 데이터를 수집하기에 최신버전으로 pod install할 경우, PrivacyInfo.plist에 자동반영된다.
결론
5월 1일부터 아무런 변수 없이 앱스토어에 React Native 앱을 등록하려면, 사용자 데이터를 활용한다고 판단되는 라이브러리들을 시작으로 가능한 모든 라이브러리에 대한 일괄 업데이트가 필요하다.
Reference
https://developer.apple.com/support/third-party-SDK-requirements/
'개발지식 정리 > React Native' 카테고리의 다른 글
React Native 라이브러리 없이 SplashScreen 구현하기(iOS 네이티브 모듈) (0) | 2024.07.12 |
---|---|
React Native 라이브러리 없이 SplashScreen 구현하기(iOS) (0) | 2024.07.09 |
React Native 스켈레톤 UI 모듈 구현 및 최적화 (0) | 2024.06.26 |
React Native 네이티브 모듈 연결하기 - 파노라마 뷰(iOS) (0) | 2024.06.20 |
React Native 네이티브 모듈 연결하기 - 파노라마 뷰(Android 3/3) (1) | 2024.06.10 |