Follow a custom SYMROOT when locating the built app#293
Closed
hyzyla wants to merge 13 commits into
Closed
Conversation
The five targeting flags now live per-command in three tiers (container, +scheme, full build target) instead of global, so they must precede the action.
Replaces the wizard's step/back state machine and magic-string escapes with one linear gather_answers pass over shared input/select/confirm helpers, all on ColorfulTheme (including the resolve.rs fuzzy picker). The new-project next-step hint suggests `sweetpad app run` instead of `build start`.
A bare .xcodeproj nested under an unrelated .xcworkspace wrongly borrowed that workspace's DerivedData folder, so `app run` built into one folder but looked for the .app in another. find_derived_data_container now adopts a workspace only when it lists the project as a member, locked by a real -showBuildSettings oracle fixture plus unit and regression tests.
Project names may contain underscores (they double as Swift identifiers) but bundle ids may not, so the com.example.<name> default was rejected on arrival. The name is now sanitized into a valid segment (test_sweetpad_cli → com.example.test-sweetpad-cli).
Bare tool errors ("xcrun exited with a non-zero status") said neither what we
were doing nor which subcommand. CliError now holds the operation context apart
from the underlying message — process::stream names its args, the
simctl/devicectl/xcodebuild leaves tag their operation, and the renderer prints
the context bold after "error:" with the tool's message dimmed and indented
beneath it.
Completes the error-context sweep: swift-format/SwiftLint, swift run/build/test, the macOS app open/run, simctl openurl, and the xcodebuild test path now tag their operation — so a failure reads "formatting Swift sources: …" rather than a bare tool error.
Adds `sweetpad context show/select/remove` to inspect and change a project's remembered selections, and expands that state to mirror the VS Code extension: a separate testing context (config `[….testing]` plus `--testing`), destination recents and usage stats, and the last launched app. The destination picker floats most-used then booted above a deterministic platform/OS-version/family sort, and `test` resolves its own context (flag > testing > build), matching the separate test-scheme/configuration requests in #60 and #219.
Logs stream colored and level-tagged with a live debug/info/error/off filter (the 1–4 keys, simulator only), app crashes/exits are detected and surfaced, and a run summary with time-to-launch prints up front. Also disambiguates identical simulator labels in the destination picker, scopes log-stream cleanup per session, records the last-launched app only after a successful run, and exits non-zero when no build ever launched.
The bundled resolver hard-coded BUILD_DIR/BUILD_ROOT to the DerivedData products path, so a project that relocates its products with a custom SYMROOT (e.g. `SYMROOT = $(SRCROOT)/../build/products`) launched against the wrong path and failed with "App path does not exist". Derive both from $(SYMROOT) so TARGET_BUILD_DIR follows the override, matching xcodebuild, and add an oracle fixture pinning the real build settings for the custom-SYMROOT case (#292).
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.
Fixes #292. When a project relocates its build products with a custom SYMROOT (e.g.
SYMROOT = $(SRCROOT)/../build/productsin an xcconfig), the bundled resolver kept BUILD_DIR/BUILD_ROOT hard-wired to the DerivedData layout, so TARGET_BUILD_DIR pointed at the wrong place and launch failed with "App path does not exist". This derives BUILD_DIR/BUILD_ROOT from $(SYMROOT) to match xcodebuild, with an oracle fixture capturing the real build settings for the custom-SYMROOT case.