shipcheck

Which of your dependencies need a privacy manifest?

Updated September 4, 2026 · compiled from Apple's published SDK list

Apple lists 86 commonly used third-party SDKs that require both a privacy manifest and a signature. The table below is that list filtered to the entries that actually turn up in React Native and Expo dependency trees.

Start with the first row. hermes is on Apple's list, and Hermes is React Native's default JavaScript engine — so this affects almost every RN app, and almost nobody knows it.

The RN/Expo-relevant entries

SDKWhat it isHow it gets into your project
hermesReact Native's default JS engineShips in virtually every RN app. The one nobody expects.
FlutterCross-platform frameworkOnly if embedded in a hybrid app.
FBSDKCoreKit / FBSDKLoginKit / FBSDKShareKitFacebook SDKPulled in by react-native-fbsdk-next.
FBAEMKit / FBLPromises / FBSDKGamingServicesKitFacebook SDK support libsTransitive dependencies of the above.
Firebase (13 listed entries)Firebase suiteAnalytics, Crashlytics, Messaging, Firestore etc. via @react-native-firebase/*.
GoogleSignInGoogle sign-inVia @react-native-google-signin/google-signin.
GoogleUtilities / GTMSessionFetcher / GTMAppAuthGoogle support libsTransitive under Firebase and GoogleSignIn.
OneSignal / OneSignalCore / OneSignalOutcomesPush notificationsVia react-native-onesignal.
OpenSSL / BoringSSL / openssl_grpcCryptoTransitive under Firebase and gRPC.
Protobuf / nanopbSerialisationTransitive under Firebase.
SDWebImageImage loadingTransitive under several image libraries.
LottieAnimationsVia lottie-react-native.
RealmSwiftDatabaseVia realm.
RxSwift / RxCocoa / RxRelay / RxLibraryReactiveTransitive under various native modules.
Alamofire / AFNetworkingHTTPTransitive under older native modules.
KingfisherImage loadingOccasional transitive dependency.
ReachabilityNetwork statusVia @react-native-community/netinfo in some versions.
SnapKit / Starscream / SwiftyJSON / ToastAssorted iOS libsTransitive under various native modules.
leveldb / FMDBStorageTransitive under Firebase and SQLite modules.
ChartsChartingVia charting wrappers.
Capacitor / CordovaHybrid frameworksOnly in hybrid apps.
UnityFrameworkUnityEmbedded Unity content.

Compiled from Apple's third-party SDK requirements page, which is the authoritative list and changes over time. Check it directly before you rely on this table — and note that Apple's requirement triggers when you submit a new app, or an update that adds a listed SDK.

Why the "how it gets in" column matters most

Look at how many of those rows say transitive. You did not install nanopb. You installed Firebase, which installed gRPC, which installed nanopb. You did not install GTMSessionFetcher — GoogleSignIn did.

This is the actual shape of the problem. Apple's rule is per-bundle: from the privacy manifest documentation, "For each executable or dynamic library in an app that uses a required reason API, the bundle that includes the executable or dynamic library needs to include a privacy manifest file." Your app's manifest does not cover your dependencies, and your dependencies were mostly not chosen by you.

What Expo tells you to do about it

Expo's Apple privacy guide states that "Apple does not correctly parse all the PrivacyInfo files included by static CocoaPods dependencies," and recommends manually walking node_modules for PrivacyInfo.xcprivacy files and aggregating the values yourself.

That is the honest state of the art: hand-auditing a tree of several hundred packages, against a list Apple updates, before every submission. Expo also flags its own guide as still in development.

A rough first pass you can run yourself

This won't replace a real audit, but it tells you in a few seconds which of your installed packages already ship a manifest:

find node_modules -name "PrivacyInfo.xcprivacy" | sed 's|node_modules/||' | cut -d/ -f1 | sort -u

Then compare that against Apple's list. The gap between "on Apple's list" and "ships a manifest in your tree" is where your submission fails.

The deadline, and what it means now

From Apple's documentation: "Starting May 1, 2024, apps that don't describe their use of required reason API in their privacy manifest file aren't accepted by App Store Connect." This is not upcoming — it has been enforced for over two years. If you are shipping an RN app today without having audited this, you are relying on your dependencies having sorted it out for you.

We deliberately do not list reason codes on this site. Apple renders those tables client-side, and secondary copies circulate with errors. A wrong reason code produces a rejection that looks like a fixed problem — the worst possible failure mode. Read them from Apple's page directly.

Related

The full privacy manifest explainer — the four manifest keys, the five required-reason categories, and how Expo config handles it.

Verify against Apple before you act. Every guideline quotation here is linked to Apple's own page. The guidelines are a living document that Apple changes without notice — read the source, don't trust a cached copy.
Cite this pageshipcheck. "Which of your dependencies need a privacy manifest?." Baker Ventures LLC, September 4, 2026. https://shipcheck.bakerventuresstudio.com/rejections/react-native-sdks-needing-privacy-manifests