Skip to content

fix(open): launch older Xcodes on newer macOS - #855

Open
savanne-kham wants to merge 1 commit into
XcodesOrg:mainfrom
savanne-kham:pr/open-directly
Open

savanne-kham wants to merge 1 commit into
XcodesOrg:mainfrom
savanne-kham:pr/open-directly

Conversation

@savanne-kham

@savanne-kham savanne-kham commented Sep 16, 2026

Copy link
Copy Markdown

I updated to macOS 27 but still need Xcode 26.6 for an old project that doesn't build against the newer SDK. macOS blocks that version of Xcode when opened normally, so I had to launch its executable directly from Terminal:

/Applications/Xcode-26.6.0.app/Contents/MacOS/Xcode

Xcodes hit the same compatibility check because its Open action used NSWorkspace. This change directly launches an Xcode that predates the running macOS, while compatible versions continue to open normally through NSWorkspace. It also reuses and activates an existing instance, preserves Open in Rosetta, and adds a test for the version check.

This builds on the approach from #686.

Related: #784, #434.

NSWorkspace.openApplication routes through LaunchServices, which refuses to
launch an Xcode built before the current macOS (e.g. Xcode 26 on macOS 27),
showing an 'update to the latest version' dialog and making the Open button
unusable for those versions. Launch the Xcode executable directly to bypass
that compatibility gate. Before spawning, reuse an already-running instance of
the same Xcode (matched by bundle URL) and activate it, so repeated clicks do
not spawn duplicate processes. Rosetta launches are preserved via arch -x86_64.
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