Skip to content

chore(expo): Revert iOS Google Sign-In Expo module registration#8908

Open
wobsoriano wants to merge 1 commit into
mainfrom
rob/revert-google-registration
Open

chore(expo): Revert iOS Google Sign-In Expo module registration#8908
wobsoriano wants to merge 1 commit into
mainfrom
rob/revert-google-registration

Conversation

@wobsoriano

@wobsoriano wobsoriano commented Jun 18, 2026

Copy link
Copy Markdown
Member

Description

Reverts the iOS Google Sign-In module registration added in #8901

The Expo module registration caused iOS builds to compile ClerkGoogleSignInModule.swift as an Expo module, which introduced build failures for apps that do not use native Google Sign-In:

node_modules/@clerk/expo/ios/ClerkGoogleSignInModule.swift:1:8: error: no such module
'ExpoModulesCore'
import ExpoModulesCore

This restores the previous React bridge setup for the iOS Google Sign-In module and removes
the added Google pod dependencies that were part of the Expo module registration change.

The follow-up behavior fixes from #8903/#8905 are intentionally kept.

Checklist

  • pnpm test runs as expected.
  • pnpm build runs as expected.
  • (If applicable) JSDoc comments have been added or updated for any package exports
  • (If applicable) Documentation has been updated

Type of change

  • 🐛 Bug fix
  • 🌟 New feature
  • 🔨 Breaking change
  • 📖 Refactoring / dependency upgrade / documentation
  • other:

Summary by CodeRabbit

  • Bug Fixes

    • Restored iOS Google Sign-In module registration to fix iOS build behavior and re-enable sign-in, account creation, and sign-out functionality on iOS.
  • Chores

    • Released patch update to @clerk/expo package.

@changeset-bot

changeset-bot Bot commented Jun 18, 2026

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 909702b

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 1 package
Name Type
@clerk/expo Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@vercel

vercel Bot commented Jun 18, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
clerk-js-sandbox Ready Ready Preview, Comment Jun 18, 2026 12:55am
swingset Ready Ready Preview, Comment Jun 18, 2026 12:55am

Request Review

@coderabbitai

coderabbitai Bot commented Jun 18, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

📝 Walkthrough

Walkthrough

The iOS ClerkGoogleSignIn module is reverted from ExpoModulesCore back to React Native's RCTBridgeModule. A new ClerkGoogleSignInModule.m file provides RCT_EXTERN_MODULE/RCT_EXTERN_METHOD declarations. The Swift implementation is rewritten to use @objc methods with promise blocks. The podspec, expo-module.config.json, and TypeScript spec are updated to match.

Changes

iOS Google Sign-In RCTBridgeModule Revert

Layer / File(s) Summary
TypeScript TurboModule spec update
packages/expo/src/specs/NativeClerkGoogleSignIn.ts, .changeset/tall-cameras-laugh.md
Spec interface is exported as extending TurboModule, method param/return types change from Record<string, unknown> to UnsafeObject, and module loading switches from requireOptionalNativeModule to TurboModuleRegistry.get. Changeset records a patch-level @clerk/expo entry.
Expo module config and podspec wiring
packages/expo/expo-module.config.json, packages/expo/ios/ClerkGoogleSignIn.podspec
The iOS apple.modules block is removed from expo-module.config.json. The podspec adds ClerkGoogleSignInModule.m to source_files and removes the GoogleUtilities and RecaptchaInterop pod dependencies.
Objective-C bridge declarations and Swift RCTBridgeModule implementation
packages/expo/ios/ClerkGoogleSignInModule.m, packages/expo/ios/ClerkGoogleSignInModule.swift
New ClerkGoogleSignInModule.m declares RCT_EXTERN_MODULE and RCT_EXTERN_METHOD entries for configure, signIn, createAccount, presentExplicitSignIn, and signOut. The Swift class is converted from ExpoModulesCore.Module to NSObject/RCTBridgeModule with @objc promise-block methods, main-queue dispatch, clientId validation, and handleSignInResult emitting SIGN_IN_CANCELLED or GOOGLE_SIGN_IN_ERROR codes.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Possibly related PRs

  • clerk/javascript#8901: Directly the PR being reverted — introduced the ExpoModulesCore-based iOS registration that this PR reverts back to RCTBridgeModule.
  • clerk/javascript#8903: Touches the same ClerkGoogleSignInModule.swift configure/signIn logic including filterByAuthorizedAccounts and clientId defaults.
  • clerk/javascript#8905: Also modifies ClerkGoogleSignInModule.swift's signIn method, specifically reverting the filterByAuthorizedAccounts default value.

Suggested labels

expo

🐇 Hopped back to bridges of old,
The Expo path was brave but cold.
RCT bridge now carries the sign,
Objective-C draws the line!
With resolve and reject in paw,
The bunny restores what came before. 🍀

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 55.56% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately and concisely describes the main change: reverting iOS Google Sign-In Expo module registration to restore prior build behavior.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch

Comment @coderabbitai help to get the list of available commands and usage tips.

@wobsoriano

Copy link
Copy Markdown
Member Author

!snapshot

@github-actions

Copy link
Copy Markdown
Contributor

API Changes Report

Generated by Break Check on 2026-06-18T00:58:02.572Z

Summary

Metric Count
Packages analyzed 19
Packages with changes 0
🔴 Breaking changes 0
🟡 Non-breaking changes 0
🟢 Additions 0

No API Changes Detected

All packages have stable APIs with no detected changes.


Report generated by Break Check

Last ran on 909702b.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
packages/expo/ios/ClerkGoogleSignInModule.swift (1)

20-33: ⚠️ Potential issue | 🟠 Major | ⚡ Quick win

hostedDomain is currently a no-op in iOS configuration.

Line 24 stores hostedDomain, but the value is never applied when building the sign-in configuration (Lines 27-30). This breaks the configure({ hostedDomain }) behavior contract and makes domain restriction ineffective on iOS.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@packages/expo/ios/ClerkGoogleSignInModule.swift` around lines 20 - 33, The
configure method in ClerkGoogleSignInModule is storing the hostedDomain
parameter in self.hostedDomain but never applying it to the GIDConfiguration
object. To fix this, when creating the GIDConfiguration instance (between the
opening and closing of the GIDConfiguration initializer), include the
hostedDomain value that was extracted earlier. Set the hostedDomain property on
the config object or pass it as a parameter to GIDConfiguration if supported,
ensuring that the domain restriction is actually applied to the sign-in
configuration before assigning it to GIDSignIn.sharedInstance.configuration.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Outside diff comments:
In `@packages/expo/ios/ClerkGoogleSignInModule.swift`:
- Around line 20-33: The configure method in ClerkGoogleSignInModule is storing
the hostedDomain parameter in self.hostedDomain but never applying it to the
GIDConfiguration object. To fix this, when creating the GIDConfiguration
instance (between the opening and closing of the GIDConfiguration initializer),
include the hostedDomain value that was extracted earlier. Set the hostedDomain
property on the config object or pass it as a parameter to GIDConfiguration if
supported, ensuring that the domain restriction is actually applied to the
sign-in configuration before assigning it to
GIDSignIn.sharedInstance.configuration.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Repository YAML (base), Repository UI (inherited)

Review profile: CHILL

Plan: Pro

Run ID: ed41306b-49a1-4a12-a0d3-b56764ffd0d0

📥 Commits

Reviewing files that changed from the base of the PR and between f4488f5 and 909702b.

📒 Files selected for processing (6)
  • .changeset/tall-cameras-laugh.md
  • packages/expo/expo-module.config.json
  • packages/expo/ios/ClerkGoogleSignIn.podspec
  • packages/expo/ios/ClerkGoogleSignInModule.m
  • packages/expo/ios/ClerkGoogleSignInModule.swift
  • packages/expo/src/specs/NativeClerkGoogleSignIn.ts
💤 Files with no reviewable changes (1)
  • packages/expo/expo-module.config.json

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant