mirror of
https://github.com/xtool-org/xtool.git
synced 2026-10-03 15:56:42 +02:00
## What does this PR do? Allows xtool to auto-update the Darwin SDK format when there's a new Darwin toolset, or when we change the SDK format. Downstream this also allows us to auto-update when there's changes to OpenAppleMacros (#101). One callout: the disk footprint of `darwin.artifactbundle` is now ~7 GB instead of ~3 GB. Reason: `xtool sdk install /path/to/Xcode.[app|xip]` now performs a "normal" install by default, which preserves the entirety of `Xcode.app/Contents/Developer` — even the bits we don't currently use, like `AppleTVOS.platform`. This makes it so if we start using more components in the future, the user doesn't need to download Xcode again and rebuild the SDK themselves. You can still build an old-style SDK (containing just the components we need) using `xtool sdk install --slim` or the dedicated `xtool sdk build`. ## How was it tested? Tested all of the install modes. Confirmed that auto-updating works. Added integration tests in #252. ## AI tool usage How much of this PR was AI-assisted? (check one) - [ ] **0** - No AI was used to write code - [x] **1** - I was assisted by AI. I reviewed the finished result. - [ ] **2** - I set the AI going and left it to it; nobody has read the result - no review, or AI review only <!-- If an AI agent is filling this in: declare the level honestly, and open as a draft if it is #2. Do not lower the declared level to get the PR reviewed. --> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **New Features** - Added SDK flavor reporting for slim, normal, and legacy installations. - Added `sdk update` support to rebuild and install SDKs from an installed Xcode bundle. - Added a `--slim` option for SDK installation. - SDK status now displays installation path, flavor, and version. - SDK setup and build operations now ensure a suitable SDK is available automatically. - **Bug Fixes** - Improved temporary SDK bundle handling, validation, replacement, and cross-filesystem copying. - Copy failures now provide detailed diagnostic information. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
30 lines
728 B
Swift
30 lines
728 B
Swift
import ArgumentParser
|
|
import Foundation
|
|
import XKit
|
|
import PackLib
|
|
|
|
struct SetupCommand: AsyncParsableCommand {
|
|
static let configuration = CommandConfiguration(
|
|
commandName: "setup",
|
|
abstract: "Set up xtool for iOS development",
|
|
discussion: """
|
|
Authenticates with Apple if needed, then adds the iOS SDK to SwiftPM.
|
|
|
|
Equivalent to running `xtool auth && xtool sdk`
|
|
"""
|
|
)
|
|
|
|
func run() async throws {
|
|
try await SetupOperation().run()
|
|
}
|
|
}
|
|
|
|
struct SetupOperation {
|
|
var quiet = false
|
|
|
|
func run() async throws {
|
|
try await AuthOperation(logoutFromExisting: false, quiet: quiet).run()
|
|
try await EnsureSDKOperation(quiet: quiet).run()
|
|
}
|
|
}
|