Apple's required-manifest SDKs, mapped to npm packages
Apple publishes which SDKs need a privacy manifest. Nobody publishes which npm packages pull them in. This page does.
All 86 entries on Apple's third-party SDK requirements list, transcribed 6 September 2026 in a real browser, each mapped to the React Native and Expo packages that bring it into an iOS binary.
The headline numbers:
- 50 of the 86 have a common React Native or Expo route into an app
- 18 arrive directly — you installed the package
- 32 arrive transitively — you installed something else, and this came with it
- 20 reach iOS only through Flutter
hermes, React Native's default JavaScript engine, is on the list — which makes this close to a universal React Native concern rather than a Firebase one
The 32 transitive entries are where ITMS-91061 rejections come from. You installed Firebase; Firebase installed gRPC; gRPC installed nanopb, Abseil, Protobuf and BoringSSL. All four are on Apple's list, and none of them appear anywhere in your package.json.
Download the full mapping as JSON — CC BY 4.0, attribution to shipcheck.bakerventuresstudio.com.
Why this did not already exist
Apple's list is authoritative and framework-agnostic: 86 SDK names, no context. It is a correct answer to a question React Native developers are not asking, because they do not think in pod names. They think in package.json.
The translation layer between the two is the whole difficulty, and it is why an ITMS-91061 email is so frustrating — it can name GTMSessionFetcher, which you have never heard of, installed by GoogleSignIn, which was installed by a login button you added eight months ago.
Everything below is that translation.
How to use it in thirty seconds
# 1. What do you actually ship?
grep -oE '"(@?[a-z0-9@/._-]+)": "' package.json | tr -d '":' | sort
# 2. What already carries a manifest?
find node_modules -name "PrivacyInfo.xcprivacy" | sed 's|node_modules/||' | cut -d/ -f1 | sort -u
# 3. What resolved into the iOS build, transitives included?
grep -E '^\s+- ' ios/Podfile.lock | sed 's/[ -]*//' | cut -d' ' -f1 | sort -uStep 3 is the important one. Podfile.lock is the ground truth, because it contains what was actually resolved rather than what you asked for. Intersect it with the tables below.
The direct dependencies (18)
These arrive because you installed them. If one of these is in your package.json, the SDK is in your app.
| Apple's listed SDK | What it is | Installed as | Note |
|---|---|---|---|
Capacitor | Hybrid app framework | @capacitor/core | Hybrid apps only. |
Cordova | Hybrid app framework | cordova | Hybrid apps only. |
FBSDKCoreKit | Meta SDK core | react-native-fbsdk-next | |
FBSDKLoginKit | Facebook Login | react-native-fbsdk-next | |
FBSDKShareKit | Facebook sharing | react-native-fbsdk-next | |
FirebaseAuth | Authentication | @react-native-firebase/auth | |
FirebaseCore | Firebase core | @react-native-firebase/app | |
FirebaseCrashlytics | Crash reporting | @react-native-firebase/crashlytics | |
FirebaseDynamicLinks | Deep links | @react-native-firebase/dynamic-links | |
FirebaseFirestore | Document database | @react-native-firebase/firestore | |
FirebaseMessaging | Push notifications | @react-native-firebase/messaging | |
FirebaseRemoteConfig | Remote config | @react-native-firebase/remote-config | |
GoogleSignIn | Google sign-in | @react-native-google-signin/google-signin | |
hermes | React Native's default JavaScript engine | react-native | In virtually every React Native app. The single most overlooked entry on Apple's list. |
Lottie | Vector animations | lottie-react-native | |
OneSignal | Push notifications | react-native-onesignal | |
RealmSwift | Mobile database | realm, @realm/react | |
UnityFramework | Embedded Unity | @azesmway/react-native-unity |
The transitive ones (32) — where the rejections come from
You did not install any of these. They arrived under something else, and they are the usual cause of an ITMS-91061 that names a framework you have never heard of.
| Apple's listed SDK | What it is | Arrives under | Note |
|---|---|---|---|
Abseil | Google C++ common libraries | @react-native-firebase/firestore, @react-native-firebase/app | Under gRPC, under Firebase. |
AppAuth | OAuth / OpenID Connect | @react-native-google-signin/google-signin, react-native-app-auth | |
BoringSSL / openssl_grpc | TLS | @react-native-firebase/firestore | Under gRPC. |
Charts | iOS charting | react-native-charts-wrapper | |
DKImagePickerController | Image picker | react-native-image-crop-picker | |
DKPhotoGallery | Photo gallery | react-native-image-crop-picker | |
FBAEMKit | Meta aggregated event measurement | react-native-fbsdk-next | |
FBLPromises | Promises support lib | react-native-fbsdk-next, @react-native-firebase/app | |
FBSDKCoreKit_Basics | Meta SDK basics | react-native-fbsdk-next | |
FirebaseABTesting | A/B testing | @react-native-firebase/remote-config | |
FirebaseCoreDiagnostics | Firebase diagnostics | @react-native-firebase/app | |
FirebaseCoreExtension | Firebase core extension | @react-native-firebase/app | |
FirebaseCoreInternal | Firebase core internal | @react-native-firebase/app | |
FirebaseInstallations | Install identity | @react-native-firebase/app | |
FMDB | SQLite wrapper | react-native-sqlite-storage | |
GoogleDataTransport | Google telemetry transport | @react-native-firebase/app | |
GoogleToolboxForMac | Google support lib | @react-native-firebase/app, @react-native-google-signin/google-signin | |
GoogleUtilities | Google support lib | @react-native-firebase/app, @react-native-google-signin/google-signin | |
grpcpp | gRPC C++ | @react-native-firebase/firestore | |
GTMAppAuth | Google OAuth helper | @react-native-google-signin/google-signin | |
GTMSessionFetcher | Google HTTP fetcher | @react-native-google-signin/google-signin, @react-native-firebase/storage | |
IQKeyboardManager | Keyboard handling | react-native-keyboard-manager | |
IQKeyboardManagerSwift | Keyboard handling (Swift) | react-native-keyboard-manager | |
leveldb | Key-value store | @react-native-firebase/firestore | |
nanopb | Protocol Buffers (embedded C) | @react-native-firebase/app, @react-native-firebase/crashlytics | Nobody installs this deliberately. It is the classic surprise entry. |
OneSignalCore | OneSignal core | react-native-onesignal | |
OneSignalExtension | OneSignal notification extension | react-native-onesignal | |
OneSignalOutcomes | OneSignal outcomes | react-native-onesignal | |
Promises | Promises support lib | @react-native-firebase/app | |
Protobuf | Protocol Buffers | @react-native-firebase/firestore | |
Reachability | Network reachability | @react-native-community/netinfo | Version-dependent. |
SDWebImage | Image loading and caching | react-native-fast-image |
Flutter-only entries (20)
On Apple's list, but they reach an iOS binary through Flutter rather than React Native. Listed for completeness — if you are not embedding Flutter, ignore them.
| SDK | What it is |
|---|---|
connectivity_plus | Flutter connectivity |
device_info_plus | Flutter device info |
file_picker | Flutter file picker |
flutter_inappwebview | Flutter webview |
flutter_local_notifications | Flutter notifications |
fluttertoast | Flutter toasts |
geolocator_apple | Flutter geolocation |
image_picker_ios | Flutter image picker |
package_info | Flutter package info |
package_info_plus | Flutter package info |
path_provider | Flutter paths |
path_provider_ios | Flutter paths (iOS) |
share_plus | Flutter share |
shared_preferences_ios | Flutter preferences |
sqflite | Flutter SQLite |
url_launcher | Flutter URL launcher |
url_launcher_ios | Flutter URL launcher (iOS) |
video_player_avfoundation | Flutter video |
wakelock | Flutter wakelock |
webview_flutter_wkwebview | Flutter webview |
On Apple's list, no common RN route (16)
These are on Apple's list and can appear in an RN app through a bespoke or less common native module, but there is no widely-used npm package that reliably pulls them in. If one of these turns up in your build, look at your least-common native dependency.
| SDK | What it is |
|---|---|
AFNetworking | Objective-C HTTP |
Alamofire | Swift HTTP |
Flutter | Cross-platform framework |
Kingfisher | Image loading (Swift) |
MBProgressHUD | Progress indicator |
OpenSSL | Crypto |
OrderedSet | Swift collection |
RxCocoa | Reactive UI bindings |
RxRelay | Reactive relays |
RxSwift | Reactive extensions |
SnapKit | Auto Layout DSL |
Starscream | WebSockets |
SVProgressHUD | Progress indicator |
SwiftyGif | GIF rendering |
SwiftyJSON | JSON parsing |
Toast | Toast messages |
The four fixes, in order of preference
1. Update the package. Most maintained libraries added PrivacyInfo.xcprivacy during 2024. Check the changelog for "privacy manifest" and bump.
2. Update the transitive pod, not the wrapper. If nanopb is the problem, bumping @react-native-firebase/app may not move it. Check Podfile.lock for the resolved version and pin the pod explicitly in the Podfile if you have to.
3. Replace the package. For an abandoned library this is the only real answer. A package that will never ship a manifest is now a shipping blocker rather than technical debt.
4. Remove it. Frequently the fastest. A charting library used on one screen, a keyboard manager from 2022, an analytics SDK nobody reads — each removal deletes a whole class of rejection.
What does not work: adding entries for someone else's framework to your app's PrivacyInfo.xcprivacy. Apple's requirement is per-bundle, and states a third-party SDK "can't rely on the privacy manifest files for apps that link the third-party SDK." It will upload and fail identically.
Caveats, stated plainly
Apple's list changes. It is transcribed here on 6 September 2026 and Apple updates it. The date is on this page and in the JSON for that reason.
The npm mapping is compiled by us, not by Apple. Apple publishes the SDK names; the routes into React Native projects are our work, drawn from how these packages resolve in practice. Verify against your own Podfile.lock. It is the only source that knows what your build actually contains.
Package internals change between versions. A library that vendored a listed SDK last year may not now, and vice versa.
Absence from these tables is not safety. Sixteen entries are on Apple's list with no common RN route, and a bespoke native module can pull in any of them.
Reuse it
The JSON is CC BY 4.0. Use it in your own tooling, your own CI check, your own article — attribute it to shipcheck.bakerventuresstudio.com and keep the transcription date attached, because a stale copy of this data is worse than none.
If you find a wrong or missing mapping, that is genuinely useful to know — the whole point of publishing it as data is that it can be corrected.
What shipcheck does with it
shipcheck runs this intersection automatically: it reads package.json, Podfile.lock, node_modules and every PrivacyInfo.xcprivacy in the tree, and reports which listed SDK is missing a manifest — before you build, inside the Claude Code session you already have open, with nothing uploaded anywhere.
ITMS-91061 in detail. · ITMS-91053 in detail. · Every required-reason category and code.
Questions and answers
Which npm packages require an Apple privacy manifest?
Fifty of the 86 SDKs on Apple's list have a common React Native or Expo route into an app. Eighteen arrive directly from a package you installed, and 32 arrive transitively under something else. The full mapping is on this page and downloadable as JSON.
Why does ITMS-91061 name a framework I have never installed?
Because 32 of the SDK entries with an RN route are transitive. You installed Firebase; Firebase installed gRPC; gRPC installed nanopb, Abseil, Protobuf and BoringSSL. All four are on Apple's list and none of them appear in your package.json.
Does react-native itself need a privacy manifest?
hermes, React Native's default JavaScript engine, is on Apple's list. That makes the requirement close to universal for React Native apps regardless of which other libraries they use.
Which Firebase packages pull in listed SDKs?
Effectively all of them. @react-native-firebase/app alone brings FirebaseCore, FirebaseCoreInternal, FirebaseCoreExtension, FirebaseCoreDiagnostics, FirebaseInstallations, GoogleUtilities, GoogleDataTransport, GoogleToolboxForMac, Promises, FBLPromises and nanopb. Adding firestore adds gRPC, Abseil, Protobuf, BoringSSL and leveldb.
Can I download this mapping as data?
Yes. It is published as JSON under CC BY 4.0 with attribution to shipcheck.bakerventuresstudio.com. Apple's list changes, so check the transcription date and verify against Apple's page before relying on it.
shipcheck. “Apple's required-manifest SDKs, mapped to npm packages.” Baker Ventures LLC, September 6, 2026. https://shipcheck.bakerventuresstudio.com/rejections/apple-sdk-to-npm-package-map/