Skip to content

fix(ios-runner): adopt the scene lifecycle so the host app launches on the iOS 27 SDK - #2867

Merged
thymikee merged 2 commits into
mainfrom
fix/ios27-runner-scene-lifecycle
Sep 24, 2026
Merged

thymikee merged 2 commits into
mainfrom
fix/ios27-runner-scene-lifecycle

Conversation

@thymikee

@thymikee thymikee commented Sep 24, 2026 •

Copy link
Copy Markdown
Member

Summary

Built with the Xcode 27 SDK, the runner host app trapped at launch in ___UIApplicationEvaluateRuntimeIssueForNoSceneLifecycleAdoption_block_invoke, because it used a legacy app-delegate window with no scene manifest. As a result, every XCTest that launches the host app failed on iOS 27 with "Application … is not running".

  • One scene delegate now owns the window on iOS, tvOS and visionOS; the UIScreen window and the visionOS-only path are gone.
  • A new Info.plist adds a single-scene UIApplicationSceneManifest for the UIKit SDKs. The macOS plist is unchanged.
  • The device-verification doc note is corrected. 4 files changed.

Validation

Tested ad352d39c. The local iOS XCTests ran on bb6a61db8, an unpushed pre-amend commit that differs from cbc713f01 only by where one comment line sits.

  • Xcode 27.1, launch: before, simctl launch trapped on iOS 27.0 and 27.1. After, the app runs with no new crash reports.
  • Xcode 27.1, host-app XCTests on iOS 27.0: 9 of 15 failed before; 15/15 pass after.
  • Xcode 27.1, live session: open, snapshot -i, press, type, back and close pass.
  • Xcode 26.6 (CI iOS Smoke Tests): 109 runner XCTests that launch the host app pass, 0 failures (job).
  • Signed macOS host lane: 242/242 pass on Xcode 27.1. The count includes tests merged to main since; this PR changes no tests.
  • Gates: check:xctest-selection, check:packaged-runner-swift and check:affected --run pass.
  • Not launched: tvOS and visionOS. Their simulator builds pass and carry the manifest, but there are no local runtimes and CI has no launch lane, so their window, focus and keyboard behavior rest on symmetry with iOS.

Review: an adversarial review found no defect; its nits are fixed.

🤖 Generated with Claude Code

thymikee and others added 2 commits September 24, 2026 09:41
…n the iOS 27 SDK

Built with the Xcode 27 SDK, UIKit traps a legacy app-delegate app at launch
in UIApplicationEvaluateRuntimeIssueForNoSceneLifecycleAdoption, so every
XCTest that launched the runner host app failed on iOS 27 runtimes.

The host app now uses one scene delegate that owns the window on iOS, tvOS
and visionOS. A single-scene UIApplicationSceneManifest naming that delegate
is merged into the generated Info.plist for the UIKit SDKs; the macOS AppKit
host is unchanged. The legacy UIScreen-sized app-delegate window and the
visionOS-only configurationForConnectingSceneSession path are removed.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…nd 27.1

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

Size Report

Metric Base Current Diff
Installed (including dependencies) 4.80 MB 4.80 MB +212 B
Package (unpacked) 4.79 MB 4.79 MB +212 B
Package (download) 1.43 MB 1.44 MB +211 B

Startup median (7 runs, lower is better):

Scenario Base Current Diff
CLI --version 24.4 ms 24.6 ms +0.2 ms
CLI --help 70.8 ms 69.7 ms -1.1 ms

@thymikee

Copy link
Copy Markdown
Member Author

Reviewed at ad352d3. The scene-lifecycle change looks correct and well-scoped.

One check must pass before this is ready. The Smoke Tests job in ios.yml launches the host app and runs its XCTests on the current (non-27) SDK. That is the app-delegate, scene-delegate and Info.plist path this PR changes. The job was still queued, so there is no proof yet that the host app still launches on the SDK that all other routes use. If it fails, treat it as a regression from this diff, because the route overlaps directly.

Not blocking: tvOS and visionOS were compiled but not launched, so their window, focus and keyboard behavior relies on symmetry with iOS. Please note that in the validation section. Also, the commit named there as "differing only by a moved comment" could not be resolved. Could you check that reference?

@thymikee

Copy link
Copy Markdown
Member Author

Addressed at ad352d39c:

  • Current-SDK smoke (blocking): passed. The iOS Smoke Tests job built the runner with /Applications/Xcode_26.6.app and ran the targeted runner XCTests that launch the host app: Executed 109 tests, with 0 failures, ** TEST EXECUTE SUCCEEDED ** (job). All other checks are green.
  • tvOS and visionOS: the Validation section now says they were built but not launched. Their window, focus and keyboard behavior relies on symmetry with iOS.
  • bb6a61db8: that was an unpushed pre-amend commit, so GitHub cannot resolve it. git diff bb6a61db8 cbc713f01 is a single moved comment line in AgentDeviceRunnerApp.m, from above the app delegate to above the scene delegate. The body now says this.
  • Also new: the signed macOS host lane now runs with Xcode 27.1 as the system default: 242/242 pass. The earlier run was blocked because this host required authentication for Automation Mode.

🤖 Generated with Claude Code

@thymikee

Copy link
Copy Markdown
Member Author

Thanks. I checked the Smoke Tests job you linked: it ran on ad352d3 and passed, so the host app still launches on the current SDK. That was the only blocker, so this is ready for human review at ad352d3. All checks are green.

@thymikee thymikee added the ready-for-human Valid work that needs human implementation, judgment, or maintainer merge label Sep 24, 2026
@thymikee
thymikee merged commit 6debef0 into main Sep 24, 2026
19 checks passed
@thymikee
thymikee deleted the fix/ios27-runner-scene-lifecycle branch September 24, 2026 09:35
@github-actions

Copy link
Copy Markdown
PR Preview Action v1.8.1
Preview removed because the pull request was closed.
2026-09-24 09:36 UTC

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

Labels

ready-for-human Valid work that needs human implementation, judgment, or maintainer merge

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant