{
  "schemaVersion": "1.0",
  "item": {
    "slug": "ios-simulator",
    "name": "iOS Simulator Skill",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/tristanmanchester/ios-simulator",
    "canonicalUrl": "https://clawhub.ai/tristanmanchester/ios-simulator",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/ios-simulator",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=ios-simulator",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "scripts/ios-sim.mjs",
      "references/TROUBLESHOOTING.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-07T17:22:31.273Z",
      "expiresAt": "2026-05-14T17:22:31.273Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
        "contentDisposition": "attachment; filename=\"afrexai-annual-report-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/ios-simulator"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/ios-simulator",
    "agentPageUrl": "https://openagent3.xyz/skills/ios-simulator/agent",
    "manifestUrl": "https://openagent3.xyz/skills/ios-simulator/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/ios-simulator/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "iOS Simulator Automation",
        "body": "This skill provides a Node-only CLI wrapper around:\n\nxcrun simctl for simulator/device/app management\nidb for accessibility-tree inspection + synthesised UI input (tap/text/button)\n\nIt is designed for AI agents: minimal, structured output by default, with opt-in detail."
      },
      {
        "title": "Important constraints",
        "body": "Must run on macOS with Xcode Command Line Tools (or Xcode) available.\nIf the ClawdBot gateway is not macOS, run these commands on a connected macOS node (see “Remote macOS node” below).\nidb is optional, but required for UI tree / semantic tapping. (Install steps below.)"
      },
      {
        "title": "Quick start",
        "body": "# 1) Sanity check\nnode {baseDir}/scripts/ios-sim.mjs health\n\n# 2) List simulators (compact)\nnode {baseDir}/scripts/ios-sim.mjs list\n\n# 3) Select a default simulator (writes .ios-sim-state.json in the current dir)\nnode {baseDir}/scripts/ios-sim.mjs select --name \"iPhone\" --runtime \"iOS\" --boot\n\n# 4) Install + launch an .app\nnode {baseDir}/scripts/ios-sim.mjs app install --app path/to/MyApp.app\nnode {baseDir}/scripts/ios-sim.mjs app launch --bundle-id com.example.MyApp\n\n# 5) Inspect current UI (requires idb)\nnode {baseDir}/scripts/ios-sim.mjs ui summary\nnode {baseDir}/scripts/ios-sim.mjs ui tap --query \"Log in\"\nnode {baseDir}/scripts/ios-sim.mjs ui type --text \"hello world\"\n\n# 6) Screenshot\nnode {baseDir}/scripts/ios-sim.mjs screenshot --out artifacts/screen.png"
      },
      {
        "title": "Remote macOS node",
        "body": "If you are not on macOS, run the same commands on the macOS node using ClawdBot’s node execution (e.g. exec with host: node / node tools). Ensure the skill folder exists on that node, or copy it there."
      },
      {
        "title": "Output conventions (token-efficient)",
        "body": "Default output: single-line JSON (small summary object).\nAdd --pretty to pretty-print JSON.\nAdd --text for a short human-readable summary (when provided by the command).\nCommands that can be huge (ui tree, list --full) are opt-in."
      },
      {
        "title": "State / default UDID",
        "body": "select writes a state file (default: ./.ios-sim-state.json) that stores the chosen UDID.\nAll commands accept --udid <UUID> and otherwise fall back to the state file.\n\nOverride location with:\n\nIOS_SIM_STATE_FILE=/path/to/state.json"
      },
      {
        "title": "Xcode / simctl availability",
        "body": "If xcrun cannot find simctl, ensure Xcode CLI tools are selected (via Xcode settings or xcode-select) and run the first-launch setup:\n\nxcodebuild -runFirstLaunch"
      },
      {
        "title": "idb (for accessibility automation)",
        "body": "Install idb_companion and the idb CLI:\n\nbrew tap facebook/fb\nbrew install idb-companion\npython3 -m pip install --upgrade fb-idb"
      },
      {
        "title": "Safety tiers",
        "body": "TierCommandsNotesSAFElist, health, boot, shutdown, screenshot, ui *No data lossCAUTIONprivacy *, push, clipboard *, openurlAlters simulator/app stateDANGEROUSerase, deleteRequires --yes"
      },
      {
        "title": "Command index",
        "body": "All commands live under:\n\nnode {baseDir}/scripts/ios-sim.mjs <command> [subcommand] [flags]"
      },
      {
        "title": "Core simulator lifecycle",
        "body": "list [--full]\nselect --name <substr> [--runtime <substr>] [--boot]\nboot [--udid <uuid>] [--wait]\nshutdown [--udid <uuid>|--all]\nerase --yes [--udid <uuid>|--all]\ndelete --yes [--udid <uuid>]\ncreate --name <name> --device-type <substr> --runtime <substr>"
      },
      {
        "title": "App management",
        "body": "app install --app <path/to/App.app> [--udid ...]\napp uninstall --bundle-id <id> [--udid ...]\napp launch --bundle-id <id> [--udid ...] [-- <args...>]\napp terminate --bundle-id <id> [--udid ...]\napp container --bundle-id <id> [--type data|app] [--udid ...]"
      },
      {
        "title": "Screenshots & video",
        "body": "screenshot --out <file.png> [--udid ...]\nrecord-video --out <file.mp4> [--udid ...] (runs until Ctrl+C)"
      },
      {
        "title": "Clipboard / URL",
        "body": "clipboard get [--udid ...]\nclipboard set --text <text> [--udid ...]\nopenurl --url <url> [--udid ...]"
      },
      {
        "title": "Simulator permissions & push notifications",
        "body": "privacy grant --bundle-id <id> --service <svc[,svc...]> [--udid ...]\nprivacy revoke --bundle-id <id> --service <svc[,svc...]> [--udid ...]\nprivacy reset --bundle-id <id> --service <svc[,svc...]> [--udid ...]\npush --bundle-id <id> --payload <json-string> [--udid ...]"
      },
      {
        "title": "Logs",
        "body": "logs show [--last 5m] [--predicate <expr>] [--udid ...]"
      },
      {
        "title": "Accessibility-driven UI automation (requires idb)",
        "body": "ui summary [--limit 12]\nui tree (full UI JSON array)\nui find --query <text> [--limit 20]\nui tap --query <text> (find + tap best match)\nui tap --x <num> --y <num> (raw coordinate tap)\nui type --text <text>\nui button --name HOME|LOCK|SIRI|SIDE_BUTTON|APPLE_PAY"
      },
      {
        "title": "Troubleshooting",
        "body": "See: references/TROUBLESHOOTING.md"
      }
    ],
    "body": "iOS Simulator Automation\n\nThis skill provides a Node-only CLI wrapper around:\n\nxcrun simctl for simulator/device/app management\nidb for accessibility-tree inspection + synthesised UI input (tap/text/button)\n\nIt is designed for AI agents: minimal, structured output by default, with opt-in detail.\n\nImportant constraints\nMust run on macOS with Xcode Command Line Tools (or Xcode) available.\nIf the ClawdBot gateway is not macOS, run these commands on a connected macOS node (see “Remote macOS node” below).\nidb is optional, but required for UI tree / semantic tapping. (Install steps below.)\nQuick start\n# 1) Sanity check\nnode {baseDir}/scripts/ios-sim.mjs health\n\n# 2) List simulators (compact)\nnode {baseDir}/scripts/ios-sim.mjs list\n\n# 3) Select a default simulator (writes .ios-sim-state.json in the current dir)\nnode {baseDir}/scripts/ios-sim.mjs select --name \"iPhone\" --runtime \"iOS\" --boot\n\n# 4) Install + launch an .app\nnode {baseDir}/scripts/ios-sim.mjs app install --app path/to/MyApp.app\nnode {baseDir}/scripts/ios-sim.mjs app launch --bundle-id com.example.MyApp\n\n# 5) Inspect current UI (requires idb)\nnode {baseDir}/scripts/ios-sim.mjs ui summary\nnode {baseDir}/scripts/ios-sim.mjs ui tap --query \"Log in\"\nnode {baseDir}/scripts/ios-sim.mjs ui type --text \"hello world\"\n\n# 6) Screenshot\nnode {baseDir}/scripts/ios-sim.mjs screenshot --out artifacts/screen.png\n\nRemote macOS node\n\nIf you are not on macOS, run the same commands on the macOS node using ClawdBot’s node execution (e.g. exec with host: node / node tools). Ensure the skill folder exists on that node, or copy it there.\n\nOutput conventions (token-efficient)\nDefault output: single-line JSON (small summary object).\nAdd --pretty to pretty-print JSON.\nAdd --text for a short human-readable summary (when provided by the command).\nCommands that can be huge (ui tree, list --full) are opt-in.\nState / default UDID\n\nselect writes a state file (default: ./.ios-sim-state.json) that stores the chosen UDID. All commands accept --udid <UUID> and otherwise fall back to the state file.\n\nOverride location with:\n\nIOS_SIM_STATE_FILE=/path/to/state.json\nDependency notes\nXcode / simctl availability\n\nIf xcrun cannot find simctl, ensure Xcode CLI tools are selected (via Xcode settings or xcode-select) and run the first-launch setup:\n\nxcodebuild -runFirstLaunch\nidb (for accessibility automation)\n\nInstall idb_companion and the idb CLI:\n\nbrew tap facebook/fb\nbrew install idb-companion\npython3 -m pip install --upgrade fb-idb\n\nSafety tiers\nTier\tCommands\tNotes\nSAFE\tlist, health, boot, shutdown, screenshot, ui *\tNo data loss\nCAUTION\tprivacy *, push, clipboard *, openurl\tAlters simulator/app state\nDANGEROUS\terase, delete\tRequires --yes\nCommand index\n\nAll commands live under:\n\nnode {baseDir}/scripts/ios-sim.mjs <command> [subcommand] [flags]\n\nCore simulator lifecycle\nlist [--full]\nselect --name <substr> [--runtime <substr>] [--boot]\nboot [--udid <uuid>] [--wait]\nshutdown [--udid <uuid>|--all]\nerase --yes [--udid <uuid>|--all]\ndelete --yes [--udid <uuid>]\ncreate --name <name> --device-type <substr> --runtime <substr>\nApp management\napp install --app <path/to/App.app> [--udid ...]\napp uninstall --bundle-id <id> [--udid ...]\napp launch --bundle-id <id> [--udid ...] [-- <args...>]\napp terminate --bundle-id <id> [--udid ...]\napp container --bundle-id <id> [--type data|app] [--udid ...]\nScreenshots & video\nscreenshot --out <file.png> [--udid ...]\nrecord-video --out <file.mp4> [--udid ...] (runs until Ctrl+C)\nClipboard / URL\nclipboard get [--udid ...]\nclipboard set --text <text> [--udid ...]\nopenurl --url <url> [--udid ...]\nSimulator permissions & push notifications\nprivacy grant --bundle-id <id> --service <svc[,svc...]> [--udid ...]\nprivacy revoke --bundle-id <id> --service <svc[,svc...]> [--udid ...]\nprivacy reset --bundle-id <id> --service <svc[,svc...]> [--udid ...]\npush --bundle-id <id> --payload <json-string> [--udid ...]\nLogs\nlogs show [--last 5m] [--predicate <expr>] [--udid ...]\nAccessibility-driven UI automation (requires idb)\nui summary [--limit 12]\nui tree (full UI JSON array)\nui find --query <text> [--limit 20]\nui tap --query <text> (find + tap best match)\nui tap --x <num> --y <num> (raw coordinate tap)\nui type --text <text>\nui button --name HOME|LOCK|SIRI|SIDE_BUTTON|APPLE_PAY\nTroubleshooting\n\nSee: references/TROUBLESHOOTING.md"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/tristanmanchester/ios-simulator",
    "publisherUrl": "https://clawhub.ai/tristanmanchester/ios-simulator",
    "owner": "tristanmanchester",
    "version": "0.1.2",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/ios-simulator",
    "downloadUrl": "https://openagent3.xyz/downloads/ios-simulator",
    "agentUrl": "https://openagent3.xyz/skills/ios-simulator/agent",
    "manifestUrl": "https://openagent3.xyz/skills/ios-simulator/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/ios-simulator/agent.md"
  }
}