no test runner to sign
UI test tools need a signed runner on the device, developer mode and a rebuild when the signature expires. Zeptap works from the screen and a Bluetooth pointer instead, so it drives any build: TestFlight, App Store or one you just ran from Xcode.
open_app("Loop")tap_text("Get started")screenshot()
the flows a simulator can't do
Push notifications, sign-in codes that arrive by SMS or email, permission prompts, the share sheet, widgets, and hand-offs to Settings, Mail or Messages and back. Your agent can leave your app to fetch the code and come back to finish signing in.
open_app("Messages")find_text("code")open_app("Loop")
right in your coding loop
Claude Code changes the code, you rebuild, and it checks the result on the phone in the same session. Every action returns a screenshot once the screen settles, and on-device text recognition lets it confirm a label is really there.
tap_text("Save")wait(1500)find_text("Saved")