skip-ui-automation
Skip UI Automation
Skip projects can be launched on the iOS Simulator and an Android emulator side-by-side from a single command, and the same flow can be exercised on both platforms with Maestro. This skill covers the inner loop, the .accessibilityIdentifier() convention that holds flows together, and the project layout for .maestro/ flows.
For the platform-specific gotchas, locale-switching commands, and build-state recoveries that come up often enough to deserve their own files, consult:
references/platform-quirks.md— iOS vs. AndroidassertVisible:differences,clearState: trueblank-screen issue,hideKeyboardfailing on iOS,inputTextASCII-only on Android, ComposeOutlinedTextFieldID propagation, Toggle thumb hit target, WebView scroll/text opacity, settings sheet dismissal.references/locale-switching.md— iOSsimctl spawn defaults writeand Androidadb cmd locale set-app-localesrecipes, theMAESTRO_OUT_SUFFIXenv-substitution pattern for per-language screenshot paths, the typical end-to-end localised screenshot workflow.references/build-state-recovery.md— when torm -rf .build, the staleBundle.modulerecovery, stale Gradle/Compose-compiler cache after a Skip upgrade, stale Xcode DerivedData, stale Android install, and the nuclear "wipe everything" reset.
The inner loop
swift test and swift build validate that the code compiles and the test suites pass. Neither tells you that the running app behaves correctly on both platforms. skip app launch puts the app in front of you on both simulators in one step, and Maestro replays the same gestures against both — so when you change a SwiftUI view you find out immediately whether it still renders, responds, and looks right under Compose.
This is the canonical inner loop for cross-platform UI work:
edit SwiftUI → skip app launch → eyeball both platforms → maestro test .maestro/feature.yaml → fix → repeat