Files
gui/docs/using-ios.md
T
zeekayandHanzo Dev 69c6e860d7 transplant onto tamagui v2.6.0, brand as a re-runnable transform
This repo could never sync. There was NO merge-base with tamagui — 372 commits
here against 15,791 there, unrelated histories — because it began as a
copy-paste rebrand with a flattened layout. Every "sync" since was a hand
re-application that drifted, which is why the tree sat on 7.3.1 while upstream
shipped fixes we then rediscovered by hand.

This commit's PARENT IS TAMAGUI. A future sync is `git merge tama/main` then
`node scripts/rebrand.mjs` — a real merge, because the history is now shared.

174 packages: 166 upstream, our 8 restored (chrome, shell, telemetry, recipes,
get, font-geist-{sans,mono}, @hanzo/booker), bento-get gained. 170/170 build.

Our patches to files UPSTREAM ALSO OWNS are carried, which the package-level
delta missed and which was where the value actually was:
  - useMedia's server snapshot (`initState ?? getMedia()`). Upstream still
    returns undefined there, so every Tamagui Dialog kills a prerender — the
    exact crash hanzo.app spent a day on.
  - data-slot on web host nodes, absent upstream entirely.
Both applied ONTO upstream's newer files (it rewrote useMedia +150/-63 and
createComponent +160/-55), marked `PATCH (ours, carried across the transplant)`.

Seven traps are encoded in scripts/rebrand.mjs, each found by a gate:
skip itself and lockfiles; special-case the double-branded names in BOTH scoped
and bare form; map path strings, not just paths; drop a level for the flattened
group; check disk rather than a stale index.

Rust build artifacts are NOT committed. An earlier draft of this commit swept
apps/desktop/src-tauri/target/debug in via `git add -A` — 3,859 files including
a 272MB .a, over GitHub's 100MB cap, so the push could never have landed. They
are gitignored now.

Co-Authored-By: Hanzo Dev <[email protected]>
2026-07-30 18:25:06 -07:00

2.4 KiB

iOS Native Development Tips

Running Detox Tests

Metro Setup

Run Metro separately for faster iteration:

cd apps/kitchen-sink
bun run start > /tmp/metro.log 2>&1 &

Then run detox with --reuse to use existing Metro:

npx detox test -c ios.sim.debug --reuse

For one-off test runs, use --maxWorkers 1 to avoid spawning multiple simulators:

# run a single test on one simulator (fast iteration)
npx detox test -c ios.sim.debug --reuse --retries 0 --maxWorkers 1 -t "test name"

This prevents Detox from launching 10+ simulators in parallel, which is noisy for debugging.

Full Test Suite (CI or Final Verification)

For running all tests, omit --maxWorkers to use parallelization:

npx detox test -c ios.sim.debug --reuse

Useful Detox Flags

  • --retries 0 - fail fast, don't retry
  • -t "test name" - run specific test by name
  • --reuse - use existing metro/app (faster iteration)
  • --maxWorkers 1 - single simulator (quieter for debugging)
  • --headless - run without simulator UI (CI only)

Example:

npx detox test -c ios.sim.debug --reuse --retries 0 --maxWorkers 1 -t "sheet drag test"

Managing Simulators

Detox can leave many simulators running. Here's how to manage them:

# list all simulators
xcrun simctl list devices

# shutdown all simulators
xcrun simctl shutdown all

# boot a specific simulator
xcrun simctl boot "iPhone 15"

# erase a simulator (fresh state)
xcrun simctl erase "iPhone 15"

# delete unavailable simulators (cleanup old Xcode versions)
xcrun simctl delete unavailable

If simulators are stuck in "Shutting Down" state:

# force kill all simulator processes
killall Simulator 2>/dev/null
xcrun simctl shutdown all
sleep 2
xcrun simctl boot "iPhone 15"

Debugging Workflow

  1. Skip tests already verified to speed up cycles
  2. Use console.warn() (not console.log) in native code to see output in metro
  3. Filter metro logs: grep -E "pattern" /tmp/metro.log
  4. Take screenshots in tests: await device.takeScreenshot('name')
  5. Check screenshots in e2e/artifacts/ after runs

Example

The keyboard tests verify smooth handoff between keyboard and sheet gestures:

# Run keyboard-specific tests
detox test --reuse --retries 0 -t "Keyboard"

# Watch for keyboard events in metro logs
grep -E "keyboard|Keyboard|kb-" /tmp/metro.log