Skip to content

refactor: drop iOS deep-link overrides handled by Expo SDK 58 - #7854

Open
diegolmello wants to merge 1 commit into
chore/upgrade-react-native-0.88-expo-58from
refactor/drop-ios-deep-link-overrides
Open

diegolmello wants to merge 1 commit into
chore/upgrade-react-native-0.88-expo-58from
refactor/drop-ios-deep-link-overrides

Conversation

@diegolmello

@diegolmello diegolmello commented Oct 27, 2026 •

Copy link
Copy Markdown
Member

Proposed changes

Removes four methods from ios/AppDelegate.swift that Expo SDK 58 makes redundant under the scene life cycle:

  • application(_:open:options:) and application(_:continue:restorationHandler:), which called RCTLinkingManager. With a scene delegate, UIKit no longer calls these app-delegate methods. ExpoAppSceneDelegate (our SceneDelegate subclasses it) handles cold-start URLs and user activities from connectionOptions, plus warm scene(_:openURLContexts:) and scene(_:continue:). It sends both kinds of event through SceneEventForwarder, which notifies RCTLinkingManager unless the app delegate already did (notifyLinkingManagerUnlessAlreadyNotified). It also rebuilds launch options so that Linking.getInitialURL() sees cold-start links.
  • application(_:configurationForConnecting:options:) and application(_:didDiscardSceneSessions:). Info.plist already declares the Default Configuration scene with SceneDelegate, so UIKit resolves it without these.

AppDelegate now matches the SDK 58 bare template (expo-template-bare-minimum@58), which has none of the four. After the change, nothing in ios/ outside Pods references RCTLinkingManager.

Issue(s)

https://rocketchat.atlassian.net/browse/NATIVE-1779

How to test or reproduce

Custom scheme, on any iOS simulator:

  1. Log in, then send the app to the background.
  2. Run xcrun simctl openurl booted "rocketchat://room?host=<server>&path=channel/<room>".
  3. The app opens the room once.
  4. Kill the app and repeat. It cold-starts into the room.

Universal link, on a non-slimmed simulator or a device (simctl openurl https://… always opens Safari, so tap the link instead):

  1. In Safari, open a page on another domain that links to https://go.rocket.chat/room?host=<server>&path=channel/<room>.
  2. With the app in the background, tap the link. The app opens the room once.
  3. Kill the app and tap the link again. It cold-starts into the room.

Checked on an iPhone 17 simulator (iOS 27) with all four cases. Temporary JS logging recorded exactly one url event (warm) or one getInitialURL value (cold), and one DEEP_LINKING_OPEN dispatch, for each link.

Screenshots

Custom scheme, warm (app in background):

custom-scheme-warm.mp4

Custom scheme, cold (app killed):

custom-scheme-cold.mp4

Universal link go.rocket.chat/room?host=…, warm (tapped in Safari):

universal-link-warm.mp4

Universal link, cold (tapped in Safari):

universal-link-cold.mp4

Types of changes

  • Bugfix (non-breaking change which fixes an issue)
  • Improvement (non-breaking change which improves a current function)
  • New feature (non-breaking change which adds functionality)
  • Documentation update (if none of the other choices apply)

Checklist

  • I have read the CONTRIBUTING doc
  • I have signed the CLA
  • Lint and unit tests pass locally with my changes
  • I have added tests that prove my fix is effective or that my feature works (if applicable)
  • I have added necessary documentation (if applicable)
  • Any dependent changes have been merged and published in downstream modules

Further comments

The apple-app-site-association file on go.rocket.chat claims /room/*, /auth/*, /mention/* and /channel/*, and the go.rocket.chat/room?… links still open the app as universal links. This PR doesn't change either.

Summary by CodeRabbit

  • Behavior Changes
    • iOS no longer forwards incoming URLs or universal links through the app’s previous linking handlers. Links that relied on this handling may no longer open or navigate within the app.
    • Scene configuration and discarded-scene callbacks are no longer handled by the app.

@coderabbitai

coderabbitai Bot commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

No actionable comments were generated in the recent review.

Recent review info
Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: fd0d35e2-5c66-46a9-a7ea-5a2f4d21adf8
Commits

Reviewing files that changed from the base of the PR and between 4b353ce and a9fe2a2.

Files selected for processing: 1
  • ios/AppDelegate.swift
Files with no reviewable changes: 1
  • ios/AppDelegate.swift

Included review availability: This review used your included allowance. Your plan provides up to 8 included reviews per hour; 5 remain after this review.

Recent review details
Context from checks skipped due to timeout: 2
  • GitHub Check: ESLint and Test / run-eslint-and-test
  • GitHub Check: E2E Shard Preflight

Walkthrough

AppDelegate no longer implements URL-opening or universal-link forwarding, scene-configuration, or discarded-scene callbacks.

Changes

iOS AppDelegate callbacks

Layer / File(s) Summary
Remove AppDelegate callbacks
ios/AppDelegate.swift
Removes URL and universal-link forwarding to RCTLinkingManager, plus the scene-configuration and discarded-scene callback overrides.

Priority: Low

Estimated code review effort: 2 (Simple) | ~10 minutes

Change: Refactor

Possibly related PRs

Merge Risk: Minimal · up to a9fe2

Deep links remain routed through the scene delegate, and no actionable merge-blocking risk was found.

Pre-merge checks: Passed 4
Check name Status Explanation
Description Check Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check Passed The title clearly and concisely describes the main change: removing iOS deep-link overrides because Expo SDK 58 handles them.
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.
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Warning

Errors were encountered while retrieving linked issues.

Errors: 1
  • JIRA integration encountered authorization issues. Please disconnect and reconnect the integration in the CodeRabbit UI.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

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

@github-actions

Copy link
Copy Markdown

@github-actions

Copy link
Copy Markdown

iOS Build Available

Rocket.Chat 4.78.0.110113

This branch is waiting to be deployed

2 active, 1 inactive, and 1 waiting deployments
upload_android — a9fe2a23 Waiting Oct 27, 2026 by diegolmello via Build Android / Upload Hold #7571
android_build — a9fe2a23 Deployed Oct 27, 2026 by diegolmello via Build Android / Hold #7571
ios_build — a9fe2a23 Deployed Oct 27, 2026 by diegolmello via Build iOS / Hold #7571
approve_e2e_testing — a9fe2a23 Deployed Oct 27, 2026 by diegolmello via E2E Hold #7571
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant