Repository navigation
Conversation
|
This is not going to get merged for 1.1.0 (it's nearly done and is on a different branch than what you based against). I can explore it for an update after that point. You are targeting Main, the development is happening on dev- branches currently. I have not published a Contributors policy yet (apologies, under a great deal of work) but more or less the core of the policy is 'the PR text itself needs to be human written', since I am a human and will be reading it as well as 'a human needs to comment complex changes, so I can understand what I am looking at'. This change is minimally commented and the text in the PR itself is entirely AI, which makes me sad. Anyway, this is a large change. Unfortunately, it's coming at a bad time to be reviewed (1.1.0 is more or less locked and is under going final touches and user testing now) and is targeting the 'main' branch rather than 'dev-1.1.0'. |
|
@NotProtonNot |
If you write the actual text in the PR reasonably well and hand write what the comments that the AI wrote in the code are for/what they do, I will take the code and rewrite it but attribute it to you and merge it - but it won't be immediately or even this week. Probably next week. It's a large change, needs a lot of testing and work. |
Ok understood. I Hope this code will still provides some use for you. |
Summary
Adds macOS 15 support to NotProton and enables the Rosetta runtime bundled in the combined CrossOver Preview 20261006 distribution.
Implementation
macOS 15 app compatibility
LSMinimumSystemVersionto15.0.Affected files include
Package.swift,Info.plist,StatusView.swift,PrefixesView.swift, andBackupsView.swift.Packaged resource loading
Add
AppResources.swiftto resolve resources from the packaged app before falling back to SwiftPM's generated resource accessor.Swift 6.1's generated accessor can otherwise look beside the executable or in the development build tree instead of the app's
Contents/Resourcesdirectory.Update component, manifest, and detour loading to use this resource bundle. Packaging and tests now account for both flat and structured SwiftPM resource-bundle layouts.
Bundled Rosetta runtime selection
Add
RunnerRuntime.swiftto:.notproton-runtimeselection marker.Add the pinned
27.0.0.41069-bundled-rosettaruntime profile.Source-distribution detection remains separate from runtime selection: the combined distribution shares a loader identity between its FEX and bundled Rosetta profiles. The source lookup is deterministic, and hosts without the FEX API select the pinned bundled Rosetta profile.
Hosts with the required API retain the existing FEX selection. Distributions without a known, pinned fallback are not silently substituted.
Matching loader, wineserver, and bridge
When cloning the bundled Rosetta profile, write a
rosettaruntime-selection marker.The app and Steam launcher use that marker to select:
win64prefix environment.Runner verification checks the marker. Clones whose marker is missing are treated as incomplete and can be repaired through setup.
The Steam launcher also ignores ntdll patches belonging to the inactive 64-bit runtime when checking a combined distribution.
ntdll patches
Add an 864-byte
detour2-bundled-41069.binresource generated from the existing detour sources.Add the matching pinned x86_64 ntdll patch for the combined distribution. Reuse its existing i386 patch, which is shared with the FEX profile.
Consolidate the shared patch definition in
NtdllPatcher.swiftand register both runtime profiles in the normal patch table.Update:
ntdll-patch/resolve.pywith the new pinned input and detour constants.ntdll-patch/build-ntdll.shwith abundled-rosetta-41069flavor that verifies the input, payload, and patched output hashes.No CrossOver DLLs are added to the repository.
Clone validation and safety
Verify a newly copied runtime before replacing an existing clone.
An unexpected source loader or ntdll input therefore does not destroy a working clone. Temporary staging directories are cleaned up after failure.
Launch errors and UI behavior
Previously, prefix tools discarded stdout/stderr and reported success immediately after spawning Wine, even if the loader immediately crashed.
The updated launch path:
notproton-tools.log.AppLog.The Status view also displays an actionable warning for an active FEX runtime that cannot run on the host.
Build and packaging changes
Native deployment targets
Propagate the macOS deployment target into Wine-tree setup and lsteamclient builds, defaulting to macOS 15.
Icons
Add a conventional
.iconset/.icnsgeneration path that works with macOS 15 Command Line Tools.Preserve the layered Icon Composer path when a full Xcode installation provides a supported newer SDK and
actool. The.icnsfallback is retained, and the two pipelines use separate output directories.ICON_COMPOSER=0forces the legacy-only icon build.App bundle validation
Update packaging to:
Add
helpers/check-deployment.py, its unit tests, and thedeploymentcheck-testsMake target.The validator checks declared deployment targets, not actual runtime API availability.
Tests and CI
Add a macOS 15 / Xcode 16.4 / Swift 6.1 CI job that compiles the app, runs selected tests without requiring CrossOver or the bridge payload, builds the legacy icon, and tests deployment validation.
New and expanded regression coverage includes:
Existing tests are adjusted for:
Isolated real-runtime test
Add an opt-in
RealBundledRosettaTestssuite.It requires an activated, supported Preview installation and:
Commands have timeouts. The test does not modify the installed CrossOver, active runner, or existing game prefixes.
Validation performed
Tested on Apple Silicon running macOS 15.8 with Swift 6.1.2:
RealRebuildTestsexcluded.Representative validation commands:
Detour reproduction requires the existing cross-compilers and Python's
capstonemodule.The integration test supports
NOTPROTON_TEST_CROSSOVERfor a nonstandard Preview app path andNOTPROTON_TEST_TEMPfor its temporary directory.