Files
gui/docs/using-ios.md
T

103 lines
2.4 KiB
Markdown

# iOS Native Development Tips
## Running Detox Tests
### Metro Setup
Run Metro separately for faster iteration:
```bash
cd code/kitchen-sink
bun run start > /tmp/metro.log 2>&1 &
```
Then run detox with `--reuse` to use existing Metro:
```bash
npx detox test -c ios.sim.debug --reuse
```
### Single Test Workflow (Recommended for Dev)
For one-off test runs, use `--maxWorkers 1` to avoid spawning multiple simulators:
```bash
# 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:
```bash
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:
```bash
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:
```bash
# 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:
```bash
# 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:
```bash
# 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
```