March 22, 2026

Teaching Claude to QA a Mobile App: Android in 90 Min, iOS in 6 Hours

Christopher Meiklejohn just published a detailed account of teaching Claude to automate QA for Zabriskie, his solo-built community app. The story reveals a stark truth about mobile development in 2026: Android took 90 minutes. iOS took over 6 hours.

The gap isn't about complexity. It's about tooling philosophy. Android gives you a WebSocket and says "do whatever you want." iOS gives you a locked door and a note that says "please use Xcode."

The Problem: Capacitor's Testing No-Man's-Land

Meiklejohn built Zabriskie alone — no team, no investors. He used Capacitor to wrap his React web app in native shells for iOS and Android. One codebase, three platforms.

But Capacitor creates a testing gap:

You're too native for web tools and too web for native tools. Every screen had to be manually tested. Until Claude got involved.

Android: The Chrome DevTools Protocol Breakthrough

The key insight: Capacitor apps run inside an Android WebView, and WebViews expose a Chrome DevTools Protocol socket. Find it, forward it, and you have full programmatic control:

# Find the WebView's DevTools socket WV_SOCKET=$(adb shell "cat /proc/net/unix" | \ grep webview_devtools_remote | \ grep -oE 'webview_devtools_remote_[0-9]+' | head -1) # Forward it to a local port adb forward tcp:9223 localabstract:$WV_SOCKET # Full CDP access curl http://localhost:9223/json

With CDP, authentication is one WebSocket message — inject a JWT into localStorage and navigate to the feed. Navigation is another message. No coordinate guessing, no UI interaction, no fighting with keyboards or dialogs.

The result: A Python script that sweeps all 25 screens in 90 seconds, takes screenshots, analyzes them for issues, and files bug reports to the production forum — all before anyone's had coffee.

iOS: The Fortress of Compounding Restrictions

Meiklejohn figured iOS would be straightforward. Same app, same screens, the Simulator is right there on the Mac. What followed was "one of the most absurd debugging sessions I've had."

You Can't Type an Email Address

The login form has type="email" on the input. AppleScript's keystroke "@" sends Shift+2, which the Simulator interprets as a keyboard shortcut. Every attempt to type @ switched the form to Sign Up, navigated to Forgot Password, or opened a context menu.

The fix: modify the backend to accept username OR email, change the form to type="text", and create a test user named "qatest". A backend modification to work around a keyboard limitation.

You Can't Dismiss Native Dialogs

Upon login, iOS shows a "Would Like to Send You Notifications" dialog rendered by UIKit, not the WebView. Native iOS dialogs cannot be dismissed by any form of macOS-synthesized input.

Meiklejohn tried everything: AppleScript clicks, cliclick at every coordinate, Python Quartz events, accessibility tree queries, simctl commands. The dialog sat there, immovable.

The fix: write directly to the Simulator's TCC.db — the privacy permissions database — inserting a pre-approval for notifications, then restarting SpringBoard. Timing matters: it has to happen before installing the app.

The Fundamental Gap

Apple's WKWebView doesn't expose Chrome DevTools Protocol. Safari Web Inspector uses a proprietary binary protocol that only Safari speaks. There's no bridge for automation tools.

Android authentication:

ws.send('{"method":"Runtime.evaluate","params":{"expression":"localStorage.setItem(\'token\',\'xxx\')"}}')

iOS authentication:

Uninstall app, write to TCC database, restart SpringBoard, reinstall app, launch, wait 5 seconds, tap Sign In at specific coordinates, wait, tap Email field, type "qatest" via AppleScript, press Tab, type password, press Return, wait, hope.

The Lessons

Meiklejohn's post is packed with practical takeaways for anyone building mobile apps:

What This Means for Indie Hackers

Both platforms now have working QA skills. Every morning, the Android emulator and iOS Simulator boot up, sweep 25 screens each, analyze screenshots, and file bug reports for anything that looks wrong.

For solo builders, this is the future: AI agents that handle the tedious work of QA, letting you focus on building. But the path to that future is much smoother on Android than iOS.

"Apple, if you're reading this: please expose CDP or WebDriver for Simulator WebViews. The developer tools are great when a human is using them. They're nearly useless when an AI is trying to."


Want More AI Automation Tips?