Skip to content

Fix install media creation for macOS Golden Gate 27 (#241) - #242

Open
phmg701 wants to merge 1 commit into
ninxsoft:mainfrom
phmg701:fix/installer-app-name-241
Open

phmg701 wants to merge 1 commit into
ninxsoft:mainfrom
phmg701:fix/installer-app-name-241

Conversation

@phmg701

@phmg701 phmg701 commented Sep 15, 2026

Copy link
Copy Markdown

PR: Fix installer creation for macOS 27 Golden Gate — incorrect Installer app path

Project: ninxsoft/Mist (GUI app)
Fixes: #241
Scope: Mist/Model/Installer.swift only (1 file, +9 / -1)

Summary

Mist was trying to use the installer application bundle at
<mount>/Applications/Install macOS Golden Gate.app, but Apple's
InstallAssistant.pkg for macOS 27 now creates the bundle as
Install macOS 27 Golden Gate.app (the major version is part of the name,
unlike previous releases such as Install macOS Tahoe.app). As a result,
creating installers (bootable installer, .iso) fails to locate
createinstallmedia.

Root cause

The GUI's Installer.name computed property maps version ^27 to the display
name macOS Golden Gate (no version number), and temporaryInstallerURL built
the bundle path as Install \(name).app → Install macOS Golden Gate.app.
Apple names the 27.x bundle Install macOS 27 Golden Gate.app, so the derived
path points at a file that does not exist.

Note: mist-cli was not affected — its name is parsed from Apple's
distribution file and already resolves to macOS 27 Golden Gate, so no CLI
change is required.

Change

Add an applicationName computed property that returns the actual on-disk
bundle name, branching on the existing version-regex idiom used throughout the
codebase:

var applicationName: String {
    if version.range(of: "^27", options: .regularExpression) != nil {
        return "Install macOS 27 Golden Gate"
    }

    return "Install \(name)"
}

temporaryInstallerURL now derives the bundle name from applicationName,
so every downstream consumer (bootable installer, .iso, .app/.dmg
copy targets) resolves the correct path.

Verification

  • Confirmed at runtime that the bundle Apple's package creates on the mounted
    volume is exactly Applications/Install macOS 27 Golden Gate.app.
  • Standalone swiftc check of the derived property:
    • 27.0 / 27.1 → Install macOS 27 Golden Gate
    • 26.7 → Install macOS Tahoe (regression check)
    • 15.8 → Install macOS Sequoia (regression check)
    • temporaryInstallerURL.lastPathComponent → Install macOS 27 Golden Gate.app
  • Lint gates (local):
    • swiftlint --strict — no violations in the changed file
    • swiftformat --lint . — 0 files require formatting
    • drstring check — clean
  • GUI xcodebuild — BUILD SUCCEEDED (Debug, CODE_SIGNING_ALLOWED=NO)
  • GUI xcodebuild test -scheme MistTests — TEST SUCCEEDED
  • CLI swift test — all passed

Notes / limitations

  • Scope is the macOS 27 final bundle name. Beta 27 naming is handled
    separately by the existing beta-rename tasks and is unchanged.
  • Pre-existing optional_data_string_conversion lint violations exist in
    ShellExecutor.swift, Hardware.swift, RefreshView.swift and
    PropertyListUpdater.swift; they are not introduced by this PR and do not
    fail CI's pinned SwiftLint (0.63.x).

AI assistance

This change was implemented with AI assistance.

Checklist

  • Scoped to a single repo (Mist GUI)
  • Minimal diff (1 file, +9 / -1)
  • Matches upstream style (version-range regex idiom, no doc comments on computed properties)
  • Lint gates pass locally
  • Relations with mist-cli documented (no change required)
  • CI build / tests green (pending on PR)

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