Skip to content

iOS Support

Ghost in the Droid drives real iPhones and iOS simulators as first-class devices, not a compatibility shim. Same tap, swipe, type_text, launch_app, screenshot, open_camera, open_url, extract_articles β€” you just pass an ios:<udid> device ref instead of an Android serial, and the exact same MCP client, LangChain agent, or run_flow script keeps working.

  • Real iPhones + iOS simulators β€” physical devices addressed by UDID, simulators via xcrun simctl UDID. Ghost also auto-discovers connected iPhones and booted simulators from xcrun xctrace list devices when Xcode command-line tools are installed.
  • Same 62 MCP tools as Android β€” an MCP client (Claude Code, Codex, Antigravity, Cursor, LangChain, LlamaIndex, custom) that already drives Android drives iOS by swapping the device ref. Zero client changes.
  • Same skills, same execution engine β€” the Skill System supports platforms: ["ios"] skills with ios_bundle_id and elements_ios.yaml. The Skill Creator can target ios:<udid> devices and use iOS/Appium prompt guidance.
  • On-device iOS LLM β€” MLX on Apple Silicon or llama.cpp on Metal. The model AND the agent loop can both run on the phone in airplane mode.
  • Live streaming + screen recording β€” WDA MJPEG for real-time streaming, ffmpeg for the same test-runner recording path Android uses.
  • Dashboard parity β€” the Phone Admin dashboard shows Appium/WDA health dots, recovery steps, and one-click fix buttons for auto-fixable issues (reset_session, start_appium, restart_remote_xpc_tunnel, and more).

Under the hood: Appium XCUITest + WebDriverAgent. Ghost speaks to Appium over the standard 4723 base URL; Appium manages the WDA session on your phone or simulator. iOS devices are referenced as ios:<udid> everywhere in the tool surface.

Your MCP client / agent
β”‚
β–Ό
Ghost (MCP server, FastAPI)
β”‚
β–Ό ios:<udid>
Appium XCUITest (localhost:4723)
β”‚
β–Ό
WebDriverAgent β†’ Real iPhone / Simulator

The open_camera tool, type_text, tap, swipe, press_key, everything else β€” same signatures, same semantics. Ghost handles the WDA-points-to-screenshot-pixels coordinate translation so gestures land where you saw them.

Full parity with Android for:

  • Device interaction: tap, tap_element, swipe, type_text, long_press, press_key (HOME, ENTER, best-effort BACK)
  • App control: launch_app, search_apps, list_apps, list_packages (configured/common bundle IDs verified through Appium)
  • Screen understanding: screenshot, screenshot_annotated, screenshot_cropped, get_screen_tree, get_screen_xml, get_elements, find_on_screen, classify_screen, OCR (RapidOCR)
  • Camera: open_camera with Photo/Video/Selfie modes and timer control
  • Clipboard: clipboard_get, clipboard_set, paste_text
  • Notifications: open_notifications, get_notifications, best-effort clear_notifications
  • Browser primitives: open_url, web_search, browser_back, get_current_url, wait_for_text, extract_visible_text, extract_articles
  • Streaming: /api/phone/stream?device=ios:<udid> with WDA MJPEG mode + screenshot polling fallback
  • Recording: start_screen_recording, stop_screen_recording (WDA MJPEG + ffmpeg)
  • Health: device_health, fix_device_health with auto-fix for reset_session, start_appium, restart_remote_xpc_tunnel
  • ADB shell commands and Android intents (no iOS equivalent)
  • Portal overlay and Portal TTS
  • Play Store helpers and full-device package enumeration (iOS doesn’t expose it the same way)
  • TikTok Android flows β€” upload, draft creation, and draft publishing. The iOS TikTok skill is smoke-level (launch + search + Profile navigation).

Ghost supports multiple concurrent iPhones with independent Appium URLs, bundle defaults, and MJPEG settings. Configure via IOS_DEVICE_UDIDS + IOS_DEVICES_JSON (or a JSON config file at IOS_CONFIG_FILE). See iOS Setup β†’ Multiple iPhones for the exact env shape.

Full setup instructions β€” Appium XCUITest install, WebDriverAgent signing for real iPhones, all the env vars, single + multi-device config, smoke tests, and troubleshooting:

β†’ iOS Setup guide

  • On-Device LLM β€” MLX + llama.cpp for on-phone inference across Android + iOS
  • MCP Server β€” the 62-tool surface both Android and iOS clients use
  • Skill System β€” how platforms: ["ios"] skills work
  • Dashboard β€” Phone Admin for iOS Appium/WDA health