Each XIP is now extracted into a version-specific directory (e.g. Xcode-16.0-extract/)
instead of sharing the same parent directory, eliminating the race where one version's
extracted Xcode.app could be moved to another version's destination path.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- We now check if in the handling of two factor option, the option to be used is a SecurityKey. If so, check if a FIDO2 device is attached and if it needs a PIN.
- When a PIN is not required, we can just move straight onto assertation, the code for which will present the touch key UI.
- Otherwise we fallback to the original flow.
- This object was being kept around after being created and as we need it in some other functions it made sense to make it lazy and keep it around that way.
- Arguably the FIDO2 instance could be removed after each time it’s been used, but as the FIDO2 class doesn’t have any state stored in it, it seems benign keeping it about for now.
- Introduced a new preference keys allowedMajorVersions, hideSupportXcodes
- allowedMajorVersions defaults to Int.max (ie allow all versions till date)
- allowedMajorVersions is used to limit the number of major versions to as many as
value set for this key. Eg: A value of 1 would allow the latest GA version and one major version before
A value of 0 would allow only the latest GA version
A value of 2 would allow the latest GA and previous two major versions
- allowedMajorVersions does not have preference UI
$ defaults write com.xcodesorg.xcodesapp allowedMajorVersions 2 #to limit to current GA and previous major
$ defaults delete com.xcodesorg.xcodesapp allowedMajorVersions #to remove limits
- Display buildNumber in bottom status bar
- Define enumerations for preferences that can be managed in an enterprise environment using MDM
- Add methods in AppState to check for managed preferences
- Update Advanced, Download, Experiments and Update preference panes to disable controls
to modify any of the managed preferences
- Update Xcode category list button to be disabled if preference is managed