chore: merged upstream 4.1.1 - #16
Merged
Merged
Conversation
appleDescription already includes the major version, so prepending major.description + "." rendered titles like "27.27.0 Beta 4". Use appleDescription directly via a testable static helper. Co-Authored-By: Claude <noreply@anthropic.com>
The "New Xcode version available" notification was triggered by an array-count increase rather than by the appearance of a genuinely new version identity (AvailableXcode.xcodeID). This caused two user-visible bugs: - False negative: when a new version is added and an old one removed in the same refresh (count unchanged, or even shrunk), no notification fired, so a genuinely new version landed silently. - False positive: when the array grew without a new identity (a duplicate row, or a data-source switch returning an already-known xcodeID), a spurious "new version" banner appeared. Extract the decision into a pure static helper AppState.newlyAvailableXcodes(oldXcodes:newXcodes:) that computes the xcodeID set difference, and notify iff it is non-empty. The empty-old guard is preserved so the initial cache load (empty -> populated) does not notify; the scheduleNotification arguments are unchanged. Adds XcodesTests/NewVersionNotificationTests.swift with a red-before-green regression suite (the false-negative and false-positive cases fail against a buggy count-based mirror and pass against the identity-based body). Co-Authored-By: Claude <noreply@anthropic.com>
fix: notify on new Xcode version identity, not array-count growth
…tion-title fix: duplicated major version in install notification title
…ture-picker fix: platform architecture picker visibility
chore: update xcodesKit and LoginKit to latest. minor fixes
Ports moveApp/createSymbolicLink/rename/remove from developer_id onto current HelperXPCProtocol (now Sendable) and adds FileOperations.swift implementing them.
…ileged helper Adds usePrivilegedHelperForFileOperations preference and wires HelperClient's new moveApp/createSymbolicLink/rename/remove methods into AppState's select, createSymbolicLink, renameToXcode, and uninstall flows, gated behind the toggle. Falls back to direct FileManager operations (via FileOperations/XcodeSelectionFilesystemService) when the toggle is off.
Points the XcodesKit package dependency at abiligiri/XcodesKit async-move-item-for-helper branch, which makes XcodeUnarchiveService.MoveItem async so the post-unarchive move into /Applications can go through Current.helper.moveAppAsync when usePrivilegedHelperForFileOperations is enabled. This is a temporary fork pin; the corresponding XcodesKit change should be upstreamed to XcodesOrg/XcodesKit and this pinned back to a released version once merged.
Uninstall now permanently deletes files instead of moving to Trash, and the delete can take a noticeable number of seconds with zero visual feedback in the row/detail pane. Sets installState to .uninstalling at the start of AppState.uninstall(xcode:) and resets it on failure; on success the existing post-uninstall updateInstalledXcodesAsync() recompute already clears it back to .notInstalled. Requires the XcodesKit fork's new .uninstalling(Path) case (abiligiri/XcodesKit@fbee0cd).
…ileOperations strings The xcstrings.yml CI check requires every key to have translations for all 18 supported languages (ca, de, el, es, fi, fr, hi, it, ja, ko, nl, pl, pt-BR, ru, tr, uk, zh-Hans, zh-Hant), and these two new keys were English-only.
…lper-file-ops Feature/privileged helper file ops
Support password manager autofill during Apple ID sign-in
- Integrated upstream login, helper, platform and notification updates. - Preserved fork identity, session restoration and credential handling. - Fixed wrapped transient errors, filesystem guards and cancellation. - Prepared build 49 and documented Homebrew replacement prevention.
- Retried transient authentication status errors within the existing limit. - Preserved unauthorised failures and saved credentials. - Added status-specific regression coverage.
jacobcxdev
enabled auto-merge
September 18, 2026 11:04
jacobcxdev
disabled auto-merge
September 18, 2026 11:08
- Separated platform metadata from titles and actions. - Moved platform navigation below the sidebar list. - Allowed titles to wrap and shortened paths in the middle.
- Applied flexible label height to version groups. - Reduced spacing reserved beside selection controls.
jacobcxdev
enabled auto-merge
September 18, 2026 11:11
- Specified the optional status type for older Swift compilers. - Preserved transient authentication retry behaviour.
- Created isolated app directories for filesystem discovery. - Replaced scheduler polling with explicit helper expectations. - Preserved cancellation and replacement-state assertions.
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.
The installed app and registered Homebrew cask both point to upstream Xcodes 4.1.1, leaving sign-in failures without the fork's retry and error handling. This merges upstream
v4.1.1b41while retaining the fork's identity, session restoration, Keychain behaviour, and signed update feed, and preparesv4.1.1b49.Validation: release, appcast, identity, localisation, shell, and workflow contracts passed locally. App and test targets compile locally; the full hosted test suite runs in CI to avoid interrupting the local desktop. Regression tests cover wrapped authentication failures, helper filesystem operations, and cancellation.