Skip to content

Follow a custom SYMROOT when locating the built app#293

Closed
hyzyla wants to merge 13 commits into
mainfrom
issue292-custom-symroot
Closed

Follow a custom SYMROOT when locating the built app#293
hyzyla wants to merge 13 commits into
mainfrom
issue292-custom-symroot

Conversation

@hyzyla

@hyzyla hyzyla commented Jun 19, 2026

Copy link
Copy Markdown
Collaborator

Fixes #292. When a project relocates its build products with a custom SYMROOT (e.g. SYMROOT = $(SRCROOT)/../build/products in 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.

hyzyla added 13 commits June 18, 2026 18:45
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).
@hyzyla hyzyla closed this Jun 19, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Launch fails after successful build when project uses custom SYMROOT

1 participant