Walk Android, iOS and desktop apps
Kaloko walks native apps the way it walks web pages: every step becomes a screenshot with its UI tree, checked criteria and a place on the canvas. The scenario says which platform it is, and the config says which app to open.
1. Name the app per environment
# kaloko.config.yml
environments:
staging:
app:
android: { package: com.acme.shop.staging, apk: build/app-staging.apk, reset: true }
ios: { bundle: com.acme.shop, app: build/Shop.app, device: iPhone 17 }
desktop:
app:
electron: { main: dist/main.js }
# desktop: { name: Notes } # a macOS app by its window
# windows: { name: contoso, path: dist/Contoso.exe }
2. Set the platform in the scenario
platform: android # android | ios | electron | desktop | windows
devices: [pixel-8-api-34, pixel-7-api-33]
color_schemes: [light, dark]
nodes:
- id: product
kind: screen
path: shop://product/42 # a deep link
packs: [app]
Steps are reached by deep links or by a step script (app.tap(…), app.type(…)). Every locale starts the app fresh in that language, and reset: true clears its data first.
What each platform can do
| Platform | Driven by | Notes |
|---|---|---|
| Android | adb: emulator, USB phone or a phone over Wi-Fi | an emulator that is not running is started; dark mode and reduced motion are set per capture |
| iOS Simulator | xcrun simctl | taps and the UI tree need idb; without it Kaloko reads the text from the screen |
| iPhone and iPad | devicectl and a screenshot tool | capture only, text read from the screen |
| Electron | Playwright | the window is a web page: every web check applies |
| macOS app | the app's window and accessibility tree | capture only; your tool, AppleScript or a person moves between screens |
| Windows app | UI Automation through PowerShell | taps and typing; walk it on Windows |
The app pack checks labels on controls, touch target sizes, cut-off text and crashes.
Screens from other tools
Maestro, Appium, XCUITest, Detox or a person can take the screenshot, and Kaloko lays it out with its UI dump:
npx kaloko capture --step checkout --image shot.png --tree hierarchy.xml --device "Pixel 8" --density 2.625
--tree reads uiautomator or Appium XML, idb ui describe-all --json and Maestro's hierarchy JSON. Without a tree, --ocr reads the text from the image on macOS. A whole folder of screenshots or a test report goes in with npx kaloko import.
Check the machine first
npx kaloko doctor
It says which app tools are missing on this machine (adb, simctl, idb, ffmpeg) and how to install them. On macOS, kaloko doctor --fix asks for the Screen Recording and Accessibility permissions desktop captures need.