DEBUG IOS APP WITH AI

Debug an iOS app with AI: what actually works

Three families of agent tooling, one honest comparison, and the gap none of them closes alone.

The short answer

An AI agent needs three things to debug an iOS app: a way to build and launch it, a way to drive its UI, and a way to see what the app did internally — the requests it sent, the logs it wrote, the rows it stored. Today's tooling covers the first two well and the third almost not at all. Build servers automate Xcode. UI-automation servers replay taps through the accessibility tree. Only an in-app SDK reports runtime state, and it costs one dependency in your debug build. Most teams end up combining two of the three.

Build and launch

Xcode automation

XcodeBuildMCP, Apple's built-in Xcode MCP, ios-simulator-mcp. They compile, install, boot a simulator, tail the console, attach LLDB. They run on the Mac that holds your project, and they stop at the app's front door.

Drive the UI

Accessibility automation

mobile-mcp, Appium, Argent. They read the accessibility tree and synthesize taps, swipes and text input. Excellent for walking a flow. They see what a screen reader sees — not why a screen rendered empty.

Read the runtime

In-app SDK

AppTelepath. Linked into a debug build, it exposes network traffic, logs, SQLite, UserDefaults, sandbox files, crashes and hangs as structured tool calls — over a hosted MCP endpoint, with no cable and no local server.

These three overlap less than their descriptions suggest. The matrix below is the part nobody publishes.

What the loop looks like

The agent finds the failure, reads the body that caused it, fixes the decoder, and confirms the fix — without asking anyone for a screenshot.

The tool matrix

Seven tools an AI agent can point at an iOS app, and the nine questions that decide which one you need. Two rows are ours to lose — they are in the table, not in a footnote.

AppTelepath XcodeBuildMCP mobile-mcp Argent ios-simulator-mcp Xcode MCP Appium
Physical device Yes — the device dials out Yes — USB or Wi-Fi Yes — with WDA + tunnel No on iOS; yes on Android No Build and run Yes — with WDA + provisioning
Simulator Yes Yes Yes Yes Yes Yes Yes
Xcode on the agent's machine Not required Required — Xcode 16+ Required for iOS Required Required, plus idb It is Xcode — 26.3+ Required for iOS
WebDriverAgent, tunnel or cable None None; code signing still applies WDA + go-ios + device tunnel Bundled simulator server idb None WDA built and installed per device
Hosted — works across the internet Yes — hosted MCP endpoint No — local server No — local server No — local server No — local server No — local bridge to Xcode Self-hosted grid or a device cloud
App runtime internals — network, logs, DB, UserDefaults, files Yes — all of them Console logs and LLDB No — accessibility tree only Logs and profiling No — accessibility tree only Build diagnostics No
Drives the UI Yes — tap, type, swipe by stable ref Simulator only Yes Yes — gestures and hardware keys too Yes No Yes — the reference implementation
Requires a change to your app Yes — one pod, debug builds only No No No No No No
Platforms iOS only — Android on the roadmap Apple platforms iOS, Android iOS, Android, TV, Electron iOS Simulator Apple platforms iOS, Android, Windows and more

Checked 20 August 2026 against each project's own documentation. All of them ship fast; verify before you commit to one.

How to read it

The last two rows are the trade. Every tool that needs nothing from your app is also blind to everything inside it — an accessibility tree cannot tell you that the feed is empty because /v2/feed returned 500 with a malformed body. An SDK can, because it lives on the same side of the network stack as your code. That is the whole bargain. It also means the two categories are complements, not competitors — building with XcodeBuildMCP and observing with AppTelepath in the same session costs nothing but two MCP entries.

See the tools before you install anything

The live demo on the home page runs the same commands against a real session — screenshot, view hierarchy, tap, network, diagnose.

Open the demo

Making the agent verify its own change

Compiling is not verifying. The loop that actually closes is: build, install, launch, navigate to the screen you touched, then ask what broke. The first three steps belong to an Xcode-side server. The last one is where agents stall and ask you for a screenshot.

telepath_screen_digest answers it in text: the current view controller, the visible copy, and every interactive element with a stable ref. Cheaper than an image and directly actionable — the agent taps by ref, never by guessed coordinates. telepath_tap then returns what changed plus the error logs and failed requests recorded during that tap, so a step that worked needs no follow-up call at all.

# the agent already built and launched the app
telepath_screen_digest
// current screen as text, with refs

telepath_tap       { "ref": "s4n7" }
// tap by ref; the response carries the consequences

telepath_diagnose
// anything wrong in the last 60 seconds?

telepath_diagnose returns one severity, one headline, deduplicated error-log clusters, failed and slow requests, crashes and hangs — the whole "what just went wrong" question in a single call, ranked. Fed a clean result, the agent moves on; fed an error cluster, it has the stack it needs.

Showing the agent the failed request

A 500 that only the app sees is invisible to every accessibility-based tool. The screen just shows an empty list; the agent reports "the feed did not load" and starts guessing. The SDK captures traffic inside the app's own network stack, so the agent reads the exact bytes the app read.

Query the change, not the whole log: telepath_network_requests takes sinceSeconds. Large bodies page through bodyOffset, and the full body size is reported separately from the captured window — so a truncated capture never reads as a short response. When a server-side fix lands, telepath_replay_request re-sends the captured request through the app's stack, with the app's own headers, cookies and TLS. That is a different test from repeating it in curl.

telepath_network_requests        { "sinceSeconds": 120, "urlContains": "/v2/" }
telepath_network_request_detail  { "id": 42, "maxBody": 65536 }
telepath_replay_request          { "id": 42 }

No MCP client? The same commands over HTTP.

curl -s https://apptelepath.com/api/invoke \
  -H "Authorization: Bearer $TELEPATH_KEY" \
  -H 'content-type: application/json' \
  -d '{"command":"net.list","params":{"limit":20,"urlContains":"/v2/"}}'

Weak-network simulation is the other half of this: telepath_simulate can fail only the URLs you name, return a real 500 rather than a connection error, or hang a request without answering it — which is the only reliable way to find out whether your timeout handling exists.

Reproducing a bug that only happens on a real device

Real cellular, real thermal throttling, a real keyboard, a build that came out of CI — plenty of bugs never appear in a simulator. This is exactly where local tooling gets expensive: WebDriverAgent installed on the device, a tunnel process, a cable, and a Mac in the same room as the phone.

AppTelepath inverts the direction. The SDK opens an outbound WebSocket from the device to the hosted service, so the device needs network and nothing else. The agent connects to the hosted MCP endpoint. Neither has to be near the other — a tester's phone in another country is one telepath_list_devices call away, and the same is true of a simulator on a colleague's Mac.

# one call each; no cable, no tunnel
telepath_list_devices    // every device attached to the workspace
telepath_simulate        // weak network, GPS route, push — including denied states
telepath_repro           // record, act, stop, summarized timeline — one call
telepath_crash_reports   // crashes with stacks

Stripped Staging builds do not resolve their own symbols, and a debugger that invents a nearby symbol name is worse than one that admits it cannot. Unresolved frames come back as image offsets together with the image UUIDs and load addresses, so the agent symbolicates locally, where the dSYM already is:

# the agent has a shell; let it use one
atos -o MyApp.app.dSYM/Contents/Resources/DWARF/MyApp \
  -arch arm64 -l 0x1044b8000 0x1044c9a1c

Raw data is not agent-readable

Every tool on this page can return a screenshot. What separates them is the state of your context window afterwards.

telepath_view_hierarchy

Budgeted UI trees

The default is a summary, not the full hierarchy: interactive elements and visible text, layout containers dropped, trimmed to a token budget. Whatever gets cut is counted and reported — a truncated tree that pretends to be complete is worse than no tree.

telepath_tap · ref

Stable refs, not coordinates

Every node carries a ref, and tap and input accept it directly. A ref from an older snapshot is an explicit error, never a silent tap on whatever now occupies those coordinates.

changed · incidents

Act and confirm in one call

A tap returns the view controller transition, the elements that appeared and disappeared, and the error logs and failed requests recorded during it. The confirmation screenshot the agent would have taken next is already unnecessary.

telepath_ui_diff · sinceSeconds

Change, not the full dump

sinceSeconds on network queries, telepath_ui_diff for what moved on screen. Re-sending the entire state every turn is how a context window dies halfway through a bug.

None of this is model inference. It is deterministic compression, done before the data reaches your agent — the platform never calls a model of its own.

Where AppTelepath stops

A comparison page whose author wins every row is not a comparison page.

iOS only

The SDK supports iOS 13 and later. Android, React Native and Flutter are on the roadmap and not shipped. If you need one tool across two platforms today, mobile-mcp or Appium is the honest answer.

It needs a dependency

One pod, compiled into debug, staging or CI builds behind a build flag. App Store builds are rejected at runtime and TestFlight requires an explicit opt-in — but it is still a dependency, and some teams will not take one.

It does not build your app

No compiling, no installing, no simulator management, no LLDB. Pair it with XcodeBuildMCP or Xcode's built-in MCP; those tools are good at that and we do not duplicate them.

Free while in Beta

Everything above is free during the Beta. Billing isn't switched on yet, so prices aren't published. Seats count people; agents and devices never take a seat.

Questions people actually ask

Can an AI agent debug an iOS app on a physical device?

Yes, by three different routes. XcodeBuildMCP drives real devices over USB or Wi-Fi from the Mac that holds the project; mobile-mcp and Appium reach them through WebDriverAgent and a device tunnel. AppTelepath takes the third route: the SDK inside the app dials out to a hosted service, so the device only needs a network connection and the agent can run anywhere. Argent supports physical Android devices but iOS Simulator only.

Does the agent need Xcode on the same machine?

For building, yes — every Xcode-side server requires a Mac with Xcode. For observing a running app, no. AppTelepath's MCP endpoint is hosted, so an agent in a container, in CI, or on a Linux box can read logs, network traffic and UI state from a device it has no physical access to.

Do I have to change my app to use AppTelepath?

Yes. You add one CocoaPods dependency and a single start call, guarded by a build flag so it compiles only into debug, staging and CI configurations. This is the real cost of the runtime access, and it is the reason accessibility-based tools cannot offer the same thing. The SDK detects App Store distribution and refuses to run; TestFlight requires an explicit opt-in.

Is a debugging SDK safe to have in the project?

Only under rules. Keep it out of App Store configurations, put its credentials in a gitignored local xcconfig or your existing secret store rather than in source control, and remember that screenshots, logs, files and network bodies can contain real user data. The device credential an agent issues can connect a device to the workspace and nothing else — it cannot call the MCP, HTTP or admin APIs.

Which of these tools should I pick?

If the agent's problem is "I cannot build and run this", start with XcodeBuildMCP or the Xcode MCP built into Xcode 26.3. If it is "I cannot walk this flow", add mobile-mcp, ios-simulator-mcp or Argent. If it is "I can see the screen but not why it is wrong", you need runtime access, which means an SDK. Combining a build server with AppTelepath covers all three.

What happened to Flipper?

Meta archived Flipper on 26 September 2025. It was the closest thing to an open in-app debugging surface for mobile, and it was designed around a human staring at a desktop client. Nothing in that generation of tools was built to answer questions from an agent with a token budget, which is why the current wave started from MCP rather than from a UI.

Give your agent eyes inside the app

One pod, one hosted endpoint. Free during the Beta.

Start free

Keep reading

AppTelepath

What the platform does, with a live command demo.

iOS MCP server

The hosted MCP endpoint and its tool catalog.

AppSpector alternative

For teams migrating from a session-based debugger.

Pricing

Plans, quotas, and what the free Beta includes.