tools/manual_tests/frb-local-tart-apple-dev-env.md
Verify that the per-worktree FRB Tart macOS VM can run Apple-platform local validation that Docker cannot provide: macOS Flutter native testing, iOS Simulator testing, and Apple release build smoke checks. This test also records that Tart is not the Android emulator strategy.
.claude/skills/frb-manual-test/SKILL.md, .claude/skills/frb-dev-env/SKILL.md, .claude/skills/frb-tart-prepare/SKILL.md, .claude/skills/frb-test/SKILL.mdRun this after changing the Tart helper, Tart base VM, Apple scaffold, Flutter/Xcode/macOS/iOS versions, CargoKit Apple integration, or any behavior that must be validated with macOS or an iOS Simulator.
fzyzcjy/flutter_rust_bridgefrb-tart-base must exist, unless the run intentionally sets FRB_TART_BASE_VM to another prepared base VM.xcrun simctl list devices available.sw_vers inside the VM.flutter --version --no-version-check inside the Tart VM.dart --version inside the Tart VM.rustc --version and cargo --version inside the Tart VM.Run preparation commands from the repository root of the checkout being tested.
git rev-parse --show-toplevel
git status --short
git submodule update --init --recursive
sw_vers
tart --version
.claude/skills/frb-dev-env/frb_dev_env.py tart info
.claude/skills/frb-dev-env/frb_dev_env.py tart create
.claude/skills/frb-dev-env/frb_dev_env.py tart start --wait 300
.claude/skills/frb-dev-env/frb_dev_env.py tart ip --wait 180
Confirm the VM can see the mounted worktree and prepare the VM-local copy used for heavy Apple builds.
.claude/skills/frb-dev-env/frb_dev_env.py tart exec -- bash -lc 'pwd && git status --short && ./frb_internal --help'
.claude/skills/frb-dev-env/frb_dev_env.py tart upload
.claude/skills/frb-dev-env/frb_dev_env.py tart exec -- bash -lc 'set -euo pipefail; flutter config --no-version-check; git -C /Users/admin/flutter remote set-url origin file:///Users/admin/flutter; git -C /Users/admin/flutter remote -v'
The Flutter remote override is VM-local and prevents flutter doctor -v, which is invoked by ./frb_internal test-flutter-native, from blocking on remote upstream checks when the local validation host has restricted network access. Record the resulting origin file:///Users/admin/flutter evidence in the execution result.
frb_example/flutter_via_create.Record the Apple toolchain and FRB tool versions inside the Tart VM.
.claude/skills/frb-dev-env/frb_dev_env.py tart exec -- bash -lc '
set -euo pipefail
sw_vers
xcodebuild -version
xcrun simctl list runtimes
flutter --version --no-version-check
dart --version
rustc --version
cargo --version
'
Run the macOS Flutter native integration test from the VM-local copy.
.claude/skills/frb-dev-env/frb_dev_env.py tart exec --sync-code -- ./frb_internal test-flutter-native --package frb_example/flutter_via_create --flutter-test-args '--device-id macos'
List available iOS simulators and choose one bootable UDID. Record the chosen simulator name, runtime, and UDID in the execution result.
.claude/skills/frb-dev-env/frb_dev_env.py tart exec -- xcrun simctl list devices available
Boot the selected iOS Simulator and wait for it to finish booting.
.claude/skills/frb-dev-env/frb_dev_env.py tart exec -- bash -lc 'xcrun simctl boot <UDID> || true'
.claude/skills/frb-dev-env/frb_dev_env.py tart exec -- xcrun simctl bootstatus <UDID> -b
Run the iOS Flutter native integration test from the VM-local copy.
.claude/skills/frb-dev-env/frb_dev_env.py tart exec --sync-code -- ./frb_internal test-flutter-native --package frb_example/flutter_via_create --flutter-test-args '--device-id <UDID>'
Smoke-test Apple release build commands from the VM-local copy.
.claude/skills/frb-dev-env/frb_dev_env.py tart exec --sync-code -- ./frb_internal build-flutter --target macos
.claude/skills/frb-dev-env/frb_dev_env.py tart exec --sync-code -- ./frb_internal build-flutter --target ios
Confirm the host checkout did not gain unexpected generated or cache files.
git status --short
The Tart Apple environment coverage test passes when every command exits successfully, the macOS and iOS native test commands complete against the requested devices, and the Apple build smoke commands copy release artifacts into target/build_flutter_output inside the VM-local uploaded copy.
./frb_internal test-flutter-native --package frb_example/flutter_via_create --flutter-test-args '--device-id macos'
./frb_internal test-flutter-native --package frb_example/flutter_via_create --flutter-test-args '--device-id <UDID>'
./frb_internal build-flutter --target macos
./frb_internal build-flutter --target ios
The test fails if any of the following happens:
git status --short shows unexpected local changes after the run.The test is blocked, not failed, if the host does not support Tart virtualization or the configured base VM is missing.
target/build_flutter_output artifacts.git status --short output.git submodule update --init --recursive and record the output..claude/skills/frb-dev-env/frb_dev_env.py tart create and record the helper output..claude/skills/frb-dev-env/frb_dev_env.py tart upload and record the mounted path and VM-local path.xcrun simctl list devices available and xcrun simctl list runtimes, then mark the run blocked.xcrun simctl boot <UDID> may report that state; continue to bootstatus and record the message.git status --short output and inspect whether the tested command intentionally regenerated it.The per-worktree Tart VM may be kept for future local FRB Apple-platform development. Shutdown the selected simulator if it should not remain booted.
.claude/skills/frb-dev-env/frb_dev_env.py tart exec -- bash -lc 'xcrun simctl shutdown <UDID> || true'
git status --short
.claude/skills/frb-dev-env/frb_dev_env.py tart info
If cleanup requires stopping or deleting the VM, run:
.claude/skills/frb-dev-env/frb_dev_env.py tart stop
.claude/skills/frb-dev-env/frb_dev_env.py tart delete
The command sequence can be automated on a dedicated Apple host with Tart and a prepared base VM. Keep this as a manual report while VM lifecycle, simulator selection, host storage, and Xcode runtime availability remain machine-specific.