mirror of
https://github.com/xtool-org/xtool.git
synced 2026-11-07 15:46:11 +03:00
03fb48c30b
## What does this PR do? Updates readme & agents guidance ## How was it tested? i read it back with mine own eyes ## AI tool usage How much of this PR was AI-assisted? (check one) - [x] **0** - No AI was used to write code - [ ] **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 --> <!-- coderabbit-ai-generated:v1 --> ## Summary by CodeRabbit * **Documentation** * Clarified how to consume xtool as a Swift Package and that CLI stability guarantees do not apply to Swift interfaces. * Updated Swift development conventions with dependency-injection examples, concurrency guidance, and commit-message formatting. * **Chores** * Updated the pull request template to ask how much code was AI-assisted and note that the completed work was reviewed. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
1.3 KiB
1.3 KiB
About
xtool is a cross-platform replacement for Xcode (including build system, provisioning, deployment).
The xtool CLI supports macOS, Linux, WSL. The lower-level XKit (provisioning and device interaction) library additionally supports iOS.
Development
- The majority of the code is in the Swift Package. You can use
swift build/swift test/ etc for iteration. - Caveat: on macOS, xtool is distributed as an app bundle (allows entitlements like Keychain). To build the Mac app, use
make mac. You can then invoke the CLI at./macOS/Build/xtool. - Make sure to run
make lint(swiftlint) when you're done
Conventions
- Use modern Swift 6. Strict concurrency is enabled.
- Use swift-dependencies (
@Dependency(\.foo)/d.foo) for Dependency Injection. Passing dependencies around as arguments is an anti-pattern. - Commits should be in the format
subsystem: imperative descriptione.g.auth: support reading password from stdin. - Don't use
Task.detached { ... }. If you need to escape isolation, you wantTask { @concurrent in ... }instead. - Uphold API stability guarantees for consumers who use xtool via the command line interface (e.g. don't remove subcommands or config fields). However, the Swift interface (including
publictypes) when consuming xtool itself as a Swift Package is NOT API stable; it's okay to break Swift API.