{
  "$comment": "Maps each entry on Apple's third-party SDK requirements list to the npm packages that pull it into a React Native or Expo project. Apple's list transcribed 2026-09-06 from developer.apple.com/support/third-party-SDK-requirements/ in a real browser. The npm mapping is compiled by Baker Ventures LLC and is offered under CC BY 4.0 with attribution to shipcheck.bakerventuresstudio.com. Verify against Apple's list and your own Podfile.lock before relying on it.",
  "source": "https://developer.apple.com/support/third-party-SDK-requirements/",
  "transcribed": "2026-09-06",
  "compiled_by": "Baker Ventures LLC",
  "license": "CC BY 4.0",
  "canonical_url": "https://shipcheck.bakerventuresstudio.com/rejections/apple-sdk-to-npm-package-map",
  "note": "reached_via values marked transitive are not installed directly. They arrive under another package and are the most common cause of ITMS-91061.",
  "sdks": [
    {"sdk": "hermes", "what": "React Native's default JavaScript engine", "npm": ["react-native"], "reached_via": "direct", "note": "In virtually every React Native app. The single most overlooked entry on Apple's list."},
    {"sdk": "Abseil", "what": "Google C++ common libraries", "npm": ["@react-native-firebase/firestore", "@react-native-firebase/app"], "reached_via": "transitive", "note": "Under gRPC, under Firebase."},
    {"sdk": "AFNetworking", "what": "Objective-C HTTP", "npm": [], "reached_via": "transitive", "note": "Older native modules only."},
    {"sdk": "Alamofire", "what": "Swift HTTP", "npm": [], "reached_via": "transitive", "note": "Pulled in by various Swift native modules."},
    {"sdk": "AppAuth", "what": "OAuth / OpenID Connect", "npm": ["@react-native-google-signin/google-signin", "react-native-app-auth"], "reached_via": "transitive"},
    {"sdk": "BoringSSL / openssl_grpc", "what": "TLS", "npm": ["@react-native-firebase/firestore"], "reached_via": "transitive", "note": "Under gRPC."},
    {"sdk": "Capacitor", "what": "Hybrid app framework", "npm": ["@capacitor/core"], "reached_via": "direct", "note": "Hybrid apps only."},
    {"sdk": "Charts", "what": "iOS charting", "npm": ["react-native-charts-wrapper"], "reached_via": "transitive"},
    {"sdk": "Cordova", "what": "Hybrid app framework", "npm": ["cordova"], "reached_via": "direct", "note": "Hybrid apps only."},
    {"sdk": "DKImagePickerController", "what": "Image picker", "npm": ["react-native-image-crop-picker"], "reached_via": "transitive"},
    {"sdk": "DKPhotoGallery", "what": "Photo gallery", "npm": ["react-native-image-crop-picker"], "reached_via": "transitive"},
    {"sdk": "FBAEMKit", "what": "Meta aggregated event measurement", "npm": ["react-native-fbsdk-next"], "reached_via": "transitive"},
    {"sdk": "FBLPromises", "what": "Promises support lib", "npm": ["react-native-fbsdk-next", "@react-native-firebase/app"], "reached_via": "transitive"},
    {"sdk": "FBSDKCoreKit", "what": "Meta SDK core", "npm": ["react-native-fbsdk-next"], "reached_via": "direct"},
    {"sdk": "FBSDKCoreKit_Basics", "what": "Meta SDK basics", "npm": ["react-native-fbsdk-next"], "reached_via": "transitive"},
    {"sdk": "FBSDKLoginKit", "what": "Facebook Login", "npm": ["react-native-fbsdk-next"], "reached_via": "direct"},
    {"sdk": "FBSDKShareKit", "what": "Facebook sharing", "npm": ["react-native-fbsdk-next"], "reached_via": "direct"},
    {"sdk": "FirebaseABTesting", "what": "A/B testing", "npm": ["@react-native-firebase/remote-config"], "reached_via": "transitive"},
    {"sdk": "FirebaseAuth", "what": "Authentication", "npm": ["@react-native-firebase/auth"], "reached_via": "direct"},
    {"sdk": "FirebaseCore", "what": "Firebase core", "npm": ["@react-native-firebase/app"], "reached_via": "direct"},
    {"sdk": "FirebaseCoreDiagnostics", "what": "Firebase diagnostics", "npm": ["@react-native-firebase/app"], "reached_via": "transitive"},
    {"sdk": "FirebaseCoreExtension", "what": "Firebase core extension", "npm": ["@react-native-firebase/app"], "reached_via": "transitive"},
    {"sdk": "FirebaseCoreInternal", "what": "Firebase core internal", "npm": ["@react-native-firebase/app"], "reached_via": "transitive"},
    {"sdk": "FirebaseCrashlytics", "what": "Crash reporting", "npm": ["@react-native-firebase/crashlytics"], "reached_via": "direct"},
    {"sdk": "FirebaseDynamicLinks", "what": "Deep links", "npm": ["@react-native-firebase/dynamic-links"], "reached_via": "direct"},
    {"sdk": "FirebaseFirestore", "what": "Document database", "npm": ["@react-native-firebase/firestore"], "reached_via": "direct"},
    {"sdk": "FirebaseInstallations", "what": "Install identity", "npm": ["@react-native-firebase/app"], "reached_via": "transitive"},
    {"sdk": "FirebaseMessaging", "what": "Push notifications", "npm": ["@react-native-firebase/messaging"], "reached_via": "direct"},
    {"sdk": "FirebaseRemoteConfig", "what": "Remote config", "npm": ["@react-native-firebase/remote-config"], "reached_via": "direct"},
    {"sdk": "Flutter", "what": "Cross-platform framework", "npm": [], "reached_via": "direct", "note": "Only in hybrid apps embedding Flutter."},
    {"sdk": "flutter_inappwebview", "what": "Flutter webview", "npm": [], "reached_via": "transitive", "note": "Flutter only."},
    {"sdk": "flutter_local_notifications", "what": "Flutter notifications", "npm": [], "reached_via": "transitive", "note": "Flutter only."},
    {"sdk": "fluttertoast", "what": "Flutter toasts", "npm": [], "reached_via": "transitive", "note": "Flutter only."},
    {"sdk": "FMDB", "what": "SQLite wrapper", "npm": ["react-native-sqlite-storage"], "reached_via": "transitive"},
    {"sdk": "geolocator_apple", "what": "Flutter geolocation", "npm": [], "reached_via": "transitive", "note": "Flutter only."},
    {"sdk": "GoogleDataTransport", "what": "Google telemetry transport", "npm": ["@react-native-firebase/app"], "reached_via": "transitive"},
    {"sdk": "GoogleSignIn", "what": "Google sign-in", "npm": ["@react-native-google-signin/google-signin"], "reached_via": "direct"},
    {"sdk": "GoogleToolboxForMac", "what": "Google support lib", "npm": ["@react-native-firebase/app", "@react-native-google-signin/google-signin"], "reached_via": "transitive"},
    {"sdk": "GoogleUtilities", "what": "Google support lib", "npm": ["@react-native-firebase/app", "@react-native-google-signin/google-signin"], "reached_via": "transitive"},
    {"sdk": "grpcpp", "what": "gRPC C++", "npm": ["@react-native-firebase/firestore"], "reached_via": "transitive"},
    {"sdk": "GTMAppAuth", "what": "Google OAuth helper", "npm": ["@react-native-google-signin/google-signin"], "reached_via": "transitive"},
    {"sdk": "GTMSessionFetcher", "what": "Google HTTP fetcher", "npm": ["@react-native-google-signin/google-signin", "@react-native-firebase/storage"], "reached_via": "transitive"},
    {"sdk": "connectivity_plus", "what": "Flutter connectivity", "npm": [], "reached_via": "transitive", "note": "Flutter only."},
    {"sdk": "device_info_plus", "what": "Flutter device info", "npm": [], "reached_via": "transitive", "note": "Flutter only."},
    {"sdk": "file_picker", "what": "Flutter file picker", "npm": [], "reached_via": "transitive", "note": "Flutter only."},
    {"sdk": "image_picker_ios", "what": "Flutter image picker", "npm": [], "reached_via": "transitive", "note": "Flutter only."},
    {"sdk": "IQKeyboardManager", "what": "Keyboard handling", "npm": ["react-native-keyboard-manager"], "reached_via": "transitive"},
    {"sdk": "IQKeyboardManagerSwift", "what": "Keyboard handling (Swift)", "npm": ["react-native-keyboard-manager"], "reached_via": "transitive"},
    {"sdk": "Kingfisher", "what": "Image loading (Swift)", "npm": [], "reached_via": "transitive"},
    {"sdk": "leveldb", "what": "Key-value store", "npm": ["@react-native-firebase/firestore"], "reached_via": "transitive"},
    {"sdk": "Lottie", "what": "Vector animations", "npm": ["lottie-react-native"], "reached_via": "direct"},
    {"sdk": "MBProgressHUD", "what": "Progress indicator", "npm": [], "reached_via": "transitive"},
    {"sdk": "nanopb", "what": "Protocol Buffers (embedded C)", "npm": ["@react-native-firebase/app", "@react-native-firebase/crashlytics"], "reached_via": "transitive", "note": "Nobody installs this deliberately. It is the classic surprise entry."},
    {"sdk": "OneSignal", "what": "Push notifications", "npm": ["react-native-onesignal"], "reached_via": "direct"},
    {"sdk": "OneSignalCore", "what": "OneSignal core", "npm": ["react-native-onesignal"], "reached_via": "transitive"},
    {"sdk": "OneSignalExtension", "what": "OneSignal notification extension", "npm": ["react-native-onesignal"], "reached_via": "transitive"},
    {"sdk": "OneSignalOutcomes", "what": "OneSignal outcomes", "npm": ["react-native-onesignal"], "reached_via": "transitive"},
    {"sdk": "OpenSSL", "what": "Crypto", "npm": [], "reached_via": "transitive"},
    {"sdk": "OrderedSet", "what": "Swift collection", "npm": [], "reached_via": "transitive"},
    {"sdk": "package_info", "what": "Flutter package info", "npm": [], "reached_via": "transitive", "note": "Flutter only."},
    {"sdk": "package_info_plus", "what": "Flutter package info", "npm": [], "reached_via": "transitive", "note": "Flutter only."},
    {"sdk": "path_provider", "what": "Flutter paths", "npm": [], "reached_via": "transitive", "note": "Flutter only."},
    {"sdk": "path_provider_ios", "what": "Flutter paths (iOS)", "npm": [], "reached_via": "transitive", "note": "Flutter only."},
    {"sdk": "Promises", "what": "Promises support lib", "npm": ["@react-native-firebase/app"], "reached_via": "transitive"},
    {"sdk": "Protobuf", "what": "Protocol Buffers", "npm": ["@react-native-firebase/firestore"], "reached_via": "transitive"},
    {"sdk": "Reachability", "what": "Network reachability", "npm": ["@react-native-community/netinfo"], "reached_via": "transitive", "note": "Version-dependent."},
    {"sdk": "RealmSwift", "what": "Mobile database", "npm": ["realm", "@realm/react"], "reached_via": "direct"},
    {"sdk": "RxCocoa", "what": "Reactive UI bindings", "npm": [], "reached_via": "transitive"},
    {"sdk": "RxRelay", "what": "Reactive relays", "npm": [], "reached_via": "transitive"},
    {"sdk": "RxSwift", "what": "Reactive extensions", "npm": [], "reached_via": "transitive"},
    {"sdk": "SDWebImage", "what": "Image loading and caching", "npm": ["react-native-fast-image"], "reached_via": "transitive"},
    {"sdk": "share_plus", "what": "Flutter share", "npm": [], "reached_via": "transitive", "note": "Flutter only."},
    {"sdk": "shared_preferences_ios", "what": "Flutter preferences", "npm": [], "reached_via": "transitive", "note": "Flutter only."},
    {"sdk": "SnapKit", "what": "Auto Layout DSL", "npm": [], "reached_via": "transitive"},
    {"sdk": "sqflite", "what": "Flutter SQLite", "npm": [], "reached_via": "transitive", "note": "Flutter only."},
    {"sdk": "Starscream", "what": "WebSockets", "npm": [], "reached_via": "transitive"},
    {"sdk": "SVProgressHUD", "what": "Progress indicator", "npm": [], "reached_via": "transitive"},
    {"sdk": "SwiftyGif", "what": "GIF rendering", "npm": [], "reached_via": "transitive"},
    {"sdk": "SwiftyJSON", "what": "JSON parsing", "npm": [], "reached_via": "transitive"},
    {"sdk": "Toast", "what": "Toast messages", "npm": [], "reached_via": "transitive"},
    {"sdk": "UnityFramework", "what": "Embedded Unity", "npm": ["@azesmway/react-native-unity"], "reached_via": "direct"},
    {"sdk": "url_launcher", "what": "Flutter URL launcher", "npm": [], "reached_via": "transitive", "note": "Flutter only."},
    {"sdk": "url_launcher_ios", "what": "Flutter URL launcher (iOS)", "npm": [], "reached_via": "transitive", "note": "Flutter only."},
    {"sdk": "video_player_avfoundation", "what": "Flutter video", "npm": [], "reached_via": "transitive", "note": "Flutter only."},
    {"sdk": "wakelock", "what": "Flutter wakelock", "npm": [], "reached_via": "transitive", "note": "Flutter only."},
    {"sdk": "webview_flutter_wkwebview", "what": "Flutter webview", "npm": [], "reached_via": "transitive", "note": "Flutter only."}
  ]
}
