iOS setup
vk --ios reaches feature parity with Android — ui / find, tap, text / type,
swipe, key, assert, wait, screenshot, launch / stop, plus
vk batch, vk ai,
and the JUnit + HTML reports — on both simulators and physical devices.
Parity is not total, and it differs between a simulator and a physical device. Platform support is the command-by-command matrix; this page is how to get the toolchain working.
Install idb
Section titled “Install idb”Everything interactive is powered by idb (Facebook’s
iOS Development Bridge), shelled one-shot like adb:
brew tap facebook/fb && brew install idb-companion # the companion daemonpip install fb-idb # the idb CLI (needs Python 3.6+)Then boot a simulator and check the toolchain:
xcrun simctl boot "iPhone 17 Pro" # or start Simulator.appvk doctor --iosvk --ios ui, vk --ios tap, and the rest then work.
Which tool does what
Section titled “Which tool does what”verikun picks between simctl and idb per operation, based on whether the resolved UDID
is a simulator:
| Operation | Simulator | Physical device |
|---|---|---|
| Accessibility hierarchy | idb ui describe-all |
idb ui describe-all |
| Tap / type / swipe / key | idb ui … |
idb ui … |
| Screen size | idb describe |
idb describe |
| Screenshot | xcrun simctl |
idb |
| Launch / stop | xcrun simctl |
idb |
| Device logs | xcrun simctl (log show) |
unsupported |
device set dark / font-scale |
xcrun simctl ui |
unsupported |
--device booted is resolved to the concrete UDID of the booted simulator, since idb
cannot address the booted alias itself.
Documented limitations
Section titled “Documented limitations”Where the platform has no clean equivalent, verikun refuses with a named reason rather than half-implementing it. Platform support is the full matrix; two entries there decide which target you should pick:
- A physical iOS device supports no device settings at all —
darkandfont-scale, the two keys that work on a simulator, refuse on a device. logcapture is simulator-only. For a physical device use Console.app oridb logdirectly, and expect an archived run from one to carry no device log.
Writing selectors that work on iOS
Section titled “Writing selectors that work on iOS”The advice does not change on iOS — @id first, text: second, desc: never; the
reasoning is in Selectors.
What is iOS-specific is where a label ends up. An accessibility label arrives as desc on
Android but as text on iOS, so a desc: selector written against Android silently stops
matching when you point the same test at a simulator. desc: on iOS reaches only the
accessibility hint, which almost nothing sets.
--selected and --focused exit 3 on iOS rather than matching nothing; --enabled and
--checked work on both — see
Platform support.
Where to go next
Section titled “Where to go next”- Platform support — the full per-platform matrix
- Troubleshooting — idb-specific failures
- Device state — how snapshot and restore work
- Selectors — the complete grammar
example/flutter-app/README.md— whatvkreports for each Flutter widget, per platform