Repository navigation
research(ios): adopt the UIScene life cycle for iOS 27 SDK builds - #1265
Draft
AnthonyRonning wants to merge 4 commits into
Draft
AnthonyRonning wants to merge 4 commits into
AnthonyRonning wants to merge 4 commits into
Conversation
AnthonyRonning
force-pushed
the
research/ios-scene-lifecycle
branch
from
October 25, 2026 00:40
df76b74 to
7df88b2
Compare
Apps built with the iOS 27 SDK must adopt the scene-based life cycle or UIKit aborts at launch (_UIApplicationEvaluateRuntimeIssueForNoSceneLifecycleAdoption). tauri-cli merges src-tauri/Info.ios.plist into the generated iOS plist, so the manifest stays out of the shared Info.plist that macOS also uses. One scene only: tao 0.37 creates a single WebView window, and any extra scene iPad or iPhone Duo opened would have no WebView and render black. The delegate is tao's TaoSceneDelegate. iOS 26 SDK builds behave the same with the manifest, so this lands before the Xcode 27.1 bump. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Patch it from an in-tree copy so the next commit can fix its Swift entry point for Xcode 27. The copy omits the crate's pnpm lockfile, the Gradle cache files it ships and its build-generated permission files, which are ignored the same way as in plugins/tauri-plugin-iap. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Xcode 27 release builds need @_cdecl plugin entry points to be public for the Rust bindings to link; Tauri 2.12.3 did the same for its own Swift package (tauri-apps/tauri#16130). Covers the in-tree IAP plugin and the vendored Sign in with Apple plugin. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
With the scene life cycle, UIKit hands a launch URL to the connecting scene's connection options and never calls scene:openURLContexts: for it. tao 0.37 ignores those options, so a deep link that starts Maple (for example an OAuth callback after iOS killed the app) never reached tauri-plugin-deep-link. Backports tauri-apps/tao#1376 onto the vendored tao 0.37.1 (only the import context differs from upstream dev). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
AnthonyRonning
force-pushed
the
research/ios-scene-lifecycle
branch
from
October 29, 2026 03:12
7df88b2 to
ddd929b
Compare
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
Apps built with the iOS 27 SDK must adopt UIKit's scene-based life cycle, or UIKit aborts them at launch before any app code runs (
EXC_BREAKPOINTin_UIApplicationEvaluateRuntimeIssueForNoSceneLifecycleAdoption). Reproduced with today's Research build stamped as iOS 27.1 SDK on the iPhone Duo simulator. App Store Connect requires the iOS 27 SDK from April 2027, and the iPhone Duo only runs apps full screen when they are built with the iOS 27.1 SDK. So this has to land before the Xcode 27.1 bump in the next PR.What
src-tauri/Info.ios.plistaddsUIApplicationSceneManifestwith a single scene and tao'sTaoSceneDelegate. tauri-cli merges it into the generated iOS plist, so macOS's sharedInfo.pliststays untouched.UIApplicationSupportsMultipleScenesisfalse: tao 0.37 creates one WebView window, and an extra scene on iPad or the Duo's inner display would render black.public, which Xcode 27 release builds need to link (Tauri 2.12.3 made the same change for its own Swift package, [bug] [ios] Release build fails to link on Xcode 27: SwiftPM's default build system gives non-public@_cdeclfunctions local visibility tauri-apps/tauri#16130).tauri-plugin-sign-in-with-apple1.0.2, vendored unmodified first, then the one-word fix. It has had no release since 2024.Openedfor URLs delivered on cold start tauri-apps/tao#1376. In the scene life cycle, a URL that cold-launches the app arrives in the scene connection options, which tao 0.37 ignores. Without it, an OAuth callback that relaunches Maple never reachestauri-plugin-deep-link. Backported onto 0.37.1; only the import context differs from upstreamdev.Validation
Built with today's Xcode 26.5 pin through
scripts/ci/ios-pr.sh. The bundle carries the merged manifest (UISceneDelegateClassName = TaoSceneDelegate).ci-okpasses. A one-offci:ioslabel addedresearch-ios, which built the iOS app with this change on today's Xcode 26.5; the label is removed again. None of this PR's files selected that lane. PR #1266 adds them toresearch-ios's paths.cloud.opensecret.maple://…URL that cold-launches it reaches the deep-link plugin (getCurrent()returns it).deep-link-received.nullfor the cold-start URL, while the shipped, scene-less build received it.Still needs a real device: Sign in with Apple and StoreKit purchase/manage flows under the scene life cycle.
Notes
🤖 Generated with Claude Code