Summary
@clerk/expo ships a separate ClerkGoogleSignIn.podspec that hard-declares s.dependency 'GoogleSignIn', '~> 9.0'. Because Expo autolinking discovers all podspecs in @clerk/expo/ios/, the Google Sign-In native module — and its transitive chain GoogleSignIn → AppCheckCore → GoogleUtilities + RecaptchaInterop — is compiled into every iOS build, even for apps that never use Google sign-in.
The config plugin (@clerk/expo/app.plugin.js) gates appleSignIn (withClerkExpo(config, { appleSignIn })) and other features, but provides no equivalent flag to disable Google sign-in. Its Google logic only adds an Info.plist URL scheme when EXPO_PUBLIC_CLERK_GOOGLE_IOS_URL_SCHEME is set; the native module/pod itself is always linked.
Why this matters
AppCheckCore is a Swift pod depending on GoogleUtilities and RecaptchaInterop, which don't define modules. With static linking (the Expo SDK 55 default) pod install fails:
The Swift pod `AppCheckCore` depends upon `GoogleUtilities` and `RecaptchaInterop`,
which do not define modules. To opt into those targets generating module maps ...
you may set `use_modular_headers!` globally, or specify `:modular_headers => true`
for particular dependencies.
Consumers who don't use Google sign-in are forced to either add expo-build-properties modular_headers workarounds or carry unused SDKs (extra binary size, an extra third-party SDK in the supply chain, and a higher iOS deployment floor).
Request
Add a googleSignIn prop to the config plugin, symmetric with appleSignIn, e.g.:
[
"@clerk/expo",
{ "appleSignIn": false, "googleSignIn": false }
]
When googleSignIn: false, exclude ClerkGoogleSignIn (and therefore the GoogleSignIn pod chain) from autolinking on iOS, so apps not using Google sign-in don't compile or ship it.
Environment
@clerk/expo 3.2.14
- Expo SDK 55 / React Native 0.83 (New Architecture, static linking)
Current workaround
[
"expo-build-properties",
{ "ios": { "extraPods": [
{ "name": "GoogleUtilities", "modular_headers": true },
{ "name": "RecaptchaInterop", "modular_headers": true }
] } }
]
This makes the build pass but still compiles and ships the unused Google Sign-In SDK.
Summary
@clerk/expoships a separateClerkGoogleSignIn.podspecthat hard-declaress.dependency 'GoogleSignIn', '~> 9.0'. Because Expo autolinking discovers all podspecs in@clerk/expo/ios/, the Google Sign-In native module — and its transitive chainGoogleSignIn → AppCheckCore → GoogleUtilities + RecaptchaInterop— is compiled into every iOS build, even for apps that never use Google sign-in.The config plugin (
@clerk/expo/app.plugin.js) gatesappleSignIn(withClerkExpo(config, { appleSignIn })) and other features, but provides no equivalent flag to disable Google sign-in. Its Google logic only adds an Info.plist URL scheme whenEXPO_PUBLIC_CLERK_GOOGLE_IOS_URL_SCHEMEis set; the native module/pod itself is always linked.Why this matters
AppCheckCoreis a Swift pod depending onGoogleUtilitiesandRecaptchaInterop, which don't define modules. With static linking (the Expo SDK 55 default)pod installfails:Consumers who don't use Google sign-in are forced to either add
expo-build-propertiesmodular_headersworkarounds or carry unused SDKs (extra binary size, an extra third-party SDK in the supply chain, and a higher iOS deployment floor).Request
Add a
googleSignInprop to the config plugin, symmetric withappleSignIn, e.g.:When
googleSignIn: false, excludeClerkGoogleSignIn(and therefore theGoogleSignInpod chain) from autolinking on iOS, so apps not using Google sign-in don't compile or ship it.Environment
@clerk/expo3.2.14Current workaround
This makes the build pass but still compiles and ships the unused Google Sign-In SDK.