{"title":"स्वचालित iOS ऐप परीक्षण","slug":"automated-testing-ios","category":"guides","summary":"Synapse + Computer Control API का उपयोग Simulator के माध्यम से iOS ऐप परीक्षण स्वचालित करने के लिए।","audience":["human","llm"],"tags":["guide","ios","testing","automation"],"difficulty":"advanced","updated":"2026-06-27","word_count":361,"read_minutes":2,"lang":"hi","translated":true,"requested_lang":"hi","content_markdown":"\n# स्वचालित iOS ऐप परीक्षण\n\nLLM-चालित iOS ऐप परीक्षण बनाने के लिए Synapse की मेमोरी प्रणाली को Computer Control API के साथ जोड़ें। LLM परीक्षण परिदृश्यों को याद रखता है, पिछली विफलताओं से सीखता है, और UI परिवर्तनों के अनुसार ढल जाता है।\n\n## आर्किटेक्चर\n\n```\n┌──────────────┐    commands    ┌──────────────┐    screenshots    ┌──────────────┐\n│  LLM Agent   │ ─────────────▶│  Synapse     │ ────────────────▶ │  iOS Sim     │\n│  (Claude)    │               │  Computer    │ ◀──────────────── │  (via agent) │\n└──────────────┘               │  Control     │    results        └──────────────┘\n       │                       └──────────────┘\n       │ store/recall\n       ▼\n┌──────────────┐\n│  Memories    │ (test scenarios, past failures, UI patterns)\n└──────────────┘\n```\n\n## पूर्वापेक्षाएँ\n\n- Synapse खाता + Mind Key\n- Claude Desktop में Synapse MCP server कॉन्फ़िगर किया गया\n- `screen-remote-agent` इंस्टॉल के साथ iOS Simulator\n- Synapse में पंजीकृत कंप्यूटर ([Computer Control API](/docs/api/computers) देखें)\n\n## चरण 1: Simulator कंप्यूटर पंजीकृत करें\n\niOS Simulator चलाने वाले Mac पर:\n\n```bash\n# Get install code from Synapse\ncurl -X POST https://synapse.schaefer.zone/computers/install-code \\\n  -H \"Authorization: Bearer YOUR_MIND_KEY\" \\\n  -d '{\"computer_name\":\"ios-sim\"}'\n# → { \"install_code\": \"ic_...\" }\n\n# Run screen-remote-agent on the Mac\n# (uses the install code to register)\n```\n\n## चरण 2: मेमोरी में परीक्षण परिदृश्य स्टोर करें\n\nपुनः प्रयोज्य परीक्षण परिदृश्यों को मेमोरीज़ के रूप में स्टोर करें:\n\n```python\nimport requests\n\ndef store_test_scenario(name, steps, app):\n    requests.post(f\"{URL}/memory\",\n        headers={\"Authorization\": f\"Bearer {MIND_KEY}\"},\n        json={\n            \"category\": \"skill\",\n            \"key\": f\"test_scenario_{name}\",\n            \"content\": f\"App: {app}\\nSteps:\\n\" + \"\\n\".join(steps),\n            \"tags\": [\"test\", \"ios\", app],\n            \"priority\": \"high\"\n        })\n\nstore_test_scenario(\"login_flow\", [\n    \"Launch app\",\n    \"Tap email field\",\n    \"Type test@example.com\",\n    \"Tap password field\",\n    \"Type password123\",\n    \"Tap Login button\",\n    \"Verify home screen appears\"\n], \"MyApp\")\n```\n\n## चरण 3: LLM-चालित परीक्षण निष्पादन\n\nClaude Desktop में (Synapse MCP कॉन्फ़िगर के साथ):\n\n```\nRun the login_flow test scenario on the iOS Simulator.\nTake a screenshot after each step and verify the expected UI.\nIf any step fails, store the failure as a memory so we can\navoid it next time.\n```\n\nClaude करेगा:\n\n1. `test_scenario_login_flow` मेमोरी खोजने के लिए `memory_search` कॉल करेगा\n2. वर्तमान स्थिति देखने के लिए `computer_screenshot` कॉल करेगा\n3. प्रत्येक चरण को `computer_command_queue` (click, type) के माध्यम से निष्पादित करेगा\n4. स्क्रीनशॉट के माध्यम से परिणाम सत्यापित करेगा\n5. किसी भी विफलताओं को `mistake` मेमोरीज़ के रूप में स्टोर करेगा\n\n## चरण 4: स्व-उपचार परीक्षण\n\nजब कोई परीक्षण विफल हो, तो विफलता और उपचार स्टोर करें:\n\n```python\ndef store_test_failure(scenario, step, error, recovery):\n    requests.post(f\"{URL}/memory\",\n        headers={\"Authorization\": f\"Bearer {MIND_KEY}\"},\n        json={\n            \"category\": \"mistake\",\n            \"key\": f\"failure_{scenario}_{step}\",\n            \"content\": f\"Scenario: {scenario}\\nStep: {step}\\nError: {error}\\nRecovery: {recovery}\",\n            \"tags\": [\"test\", \"failure\", \"ios\", scenario],\n            \"priority\": \"high\"\n        })\n\n# Example\nstore_test_failure(\"login_flow\", \"tap_login\",\n    \"Login button not found at expected coordinates\",\n    \"Button moved due to new logo. Search by accessibility label instead.\")\n```\n\nअगली बार LLM परीक्षण चलाने पर, यह विफलता को रिकॉल करता है और उपचार स्वचालित रूप से लागू करता है।\n\n## चरण 5: परीक्षण परिणाम ट्रैकिंग\n\nपरीक्षण रन को कार्य के रूप में ट्रैक करें:\n\n```python\ndef track_test_run(scenario, status, duration):\n    requests.post(f\"{URL}/mind/task\",\n        headers={\"Authorization\": f\"Bearer {MIND_KEY}\",\n                 \"Content-Type\": \"application/json\"},\n        json={\n            \"title\": f\"Test: {scenario}\",\n            \"description\": f\"Status: {status}, Duration: {duration}s\",\n            \"priority\": \"normal\"\n        })\n```\n\n## सामान्य कमांड्स\n\n| क्रिया | कमांड |\n|--------|---------|\n| Simulator लॉन्च करें | `xcrun simctl launch booted com.example.app` |\n| स्क्रीनशॉट | `computer_screenshot` (Synapse MCP के माध्यम से) |\n| (x,y) पर टैप | `computer_command_queue {type:\"click\", payload:{x,y}}` |\n| टेक्स्ट टाइप करें | `computer_command_queue {type:\"type\", payload:{text:\"...\"}}` |\n| Home दबाएँ | `computer_command_queue {type:\"key\", payload:{keys:[\"Cmd\",\"Shift\",\"H\"]}}` |\n\n## सर्वोत्तम प्रथाएँ\n\n> [!TIP]\n> - **UI निर्देशांकों को मेमोरीज़ के रूप में स्टोर करें** — UI बदलता है, लेकिन LLM फिर से सीख सकता है\n> - **accessibility लेबल का उपयोग करें** — निर्देशांकों से अधिक स्थिर\n> - **परीक्षण डेटा अलग रखें** — उपयोगकर्ता नाम, पासवर्ड के लिए variables का उपयोग करें\n> - **स्वच्छ स्थिति में परीक्षण चलाएँ** — रन के बीच Simulator रीसेट करें\n> - **विफलताओं के लिए स्क्रीनशॉट लॉग करें** — डीबगिंग के लिए उपयोगी\n\n## अगले कदम\n\n- [स्व-उपचार परीक्षण](/docs/guides/self-healing-tests)\n- [Computer Control API](/docs/api/computers)\n- [मेमोरी सर्वोत्तम प्रथाएँ](/docs/guides/memory-best-practices)\n","content_html":"<h1>स्वचालित iOS ऐप परीक्षण</h1>\n<p>LLM-चालित iOS ऐप परीक्षण बनाने के लिए Synapse की मेमोरी प्रणाली को Computer Control API के साथ जोड़ें। LLM परीक्षण परिदृश्यों को याद रखता है, पिछली विफलताओं से सीखता है, और UI परिवर्तनों के अनुसार ढल जाता है।</p>\n<h2>आर्किटेक्चर</h2>\n<pre><code class=\"hljs language-plaintext\">┌──────────────┐    commands    ┌──────────────┐    screenshots    ┌──────────────┐\n│  LLM Agent   │ ─────────────▶│  Synapse     │ ────────────────▶ │  iOS Sim     │\n│  (Claude)    │               │  Computer    │ ◀──────────────── │  (via agent) │\n└──────────────┘               │  Control     │    results        └──────────────┘\n       │                       └──────────────┘\n       │ store/recall\n       ▼\n┌──────────────┐\n│  Memories    │ (test scenarios, past failures, UI patterns)\n└──────────────┘</code></pre><h2>पूर्वापेक्षाएँ</h2>\n<ul>\n<li>Synapse खाता + Mind Key</li>\n<li>Claude Desktop में Synapse MCP server कॉन्फ़िगर किया गया</li>\n<li><code>screen-remote-agent</code> इंस्टॉल के साथ iOS Simulator</li>\n<li>Synapse में पंजीकृत कंप्यूटर (<a href=\"/docs/api/computers\">Computer Control API</a> देखें)</li>\n</ul>\n<h2>चरण 1: Simulator कंप्यूटर पंजीकृत करें</h2>\n<p>iOS Simulator चलाने वाले Mac पर:</p>\n<pre><code class=\"hljs language-bash\"><span class=\"hljs-comment\"># Get install code from Synapse</span>\ncurl -X POST https://synapse.schaefer.zone/computers/install-code \\\n  -H <span class=\"hljs-string\">&quot;Authorization: Bearer YOUR_MIND_KEY&quot;</span> \\\n  -d <span class=\"hljs-string\">&#x27;{&quot;computer_name&quot;:&quot;ios-sim&quot;}&#x27;</span>\n<span class=\"hljs-comment\"># → { &quot;install_code&quot;: &quot;ic_...&quot; }</span>\n\n<span class=\"hljs-comment\"># Run screen-remote-agent on the Mac</span>\n<span class=\"hljs-comment\"># (uses the install code to register)</span></code></pre><h2>चरण 2: मेमोरी में परीक्षण परिदृश्य स्टोर करें</h2>\n<p>पुनः प्रयोज्य परीक्षण परिदृश्यों को मेमोरीज़ के रूप में स्टोर करें:</p>\n<pre><code class=\"hljs language-python\"><span class=\"hljs-keyword\">import</span> requests\n\n<span class=\"hljs-keyword\">def</span> <span class=\"hljs-title function_\">store_test_scenario</span>(<span class=\"hljs-params\">name, steps, app</span>):\n    requests.post(<span class=\"hljs-string\">f&quot;<span class=\"hljs-subst\">{URL}</span>/memory&quot;</span>,\n        headers={<span class=\"hljs-string\">&quot;Authorization&quot;</span>: <span class=\"hljs-string\">f&quot;Bearer <span class=\"hljs-subst\">{MIND_KEY}</span>&quot;</span>},\n        json={\n            <span class=\"hljs-string\">&quot;category&quot;</span>: <span class=\"hljs-string\">&quot;skill&quot;</span>,\n            <span class=\"hljs-string\">&quot;key&quot;</span>: <span class=\"hljs-string\">f&quot;test_scenario_<span class=\"hljs-subst\">{name}</span>&quot;</span>,\n            <span class=\"hljs-string\">&quot;content&quot;</span>: <span class=\"hljs-string\">f&quot;App: <span class=\"hljs-subst\">{app}</span>\\nSteps:\\n&quot;</span> + <span class=\"hljs-string\">&quot;\\n&quot;</span>.join(steps),\n            <span class=\"hljs-string\">&quot;tags&quot;</span>: [<span class=\"hljs-string\">&quot;test&quot;</span>, <span class=\"hljs-string\">&quot;ios&quot;</span>, app],\n            <span class=\"hljs-string\">&quot;priority&quot;</span>: <span class=\"hljs-string\">&quot;high&quot;</span>\n        })\n\nstore_test_scenario(<span class=\"hljs-string\">&quot;login_flow&quot;</span>, [\n    <span class=\"hljs-string\">&quot;Launch app&quot;</span>,\n    <span class=\"hljs-string\">&quot;Tap email field&quot;</span>,\n    <span class=\"hljs-string\">&quot;Type test@example.com&quot;</span>,\n    <span class=\"hljs-string\">&quot;Tap password field&quot;</span>,\n    <span class=\"hljs-string\">&quot;Type password123&quot;</span>,\n    <span class=\"hljs-string\">&quot;Tap Login button&quot;</span>,\n    <span class=\"hljs-string\">&quot;Verify home screen appears&quot;</span>\n], <span class=\"hljs-string\">&quot;MyApp&quot;</span>)</code></pre><h2>चरण 3: LLM-चालित परीक्षण निष्पादन</h2>\n<p>Claude Desktop में (Synapse MCP कॉन्फ़िगर के साथ):</p>\n<pre><code class=\"hljs language-plaintext\">Run the login_flow test scenario on the iOS Simulator.\nTake a screenshot after each step and verify the expected UI.\nIf any step fails, store the failure as a memory so we can\navoid it next time.</code></pre><p>Claude करेगा:</p>\n<ol>\n<li><code>test_scenario_login_flow</code> मेमोरी खोजने के लिए <code>memory_search</code> कॉल करेगा</li>\n<li>वर्तमान स्थिति देखने के लिए <code>computer_screenshot</code> कॉल करेगा</li>\n<li>प्रत्येक चरण को <code>computer_command_queue</code> (click, type) के माध्यम से निष्पादित करेगा</li>\n<li>स्क्रीनशॉट के माध्यम से परिणाम सत्यापित करेगा</li>\n<li>किसी भी विफलताओं को <code>mistake</code> मेमोरीज़ के रूप में स्टोर करेगा</li>\n</ol>\n<h2>चरण 4: स्व-उपचार परीक्षण</h2>\n<p>जब कोई परीक्षण विफल हो, तो विफलता और उपचार स्टोर करें:</p>\n<pre><code class=\"hljs language-python\"><span class=\"hljs-keyword\">def</span> <span class=\"hljs-title function_\">store_test_failure</span>(<span class=\"hljs-params\">scenario, step, error, recovery</span>):\n    requests.post(<span class=\"hljs-string\">f&quot;<span class=\"hljs-subst\">{URL}</span>/memory&quot;</span>,\n        headers={<span class=\"hljs-string\">&quot;Authorization&quot;</span>: <span class=\"hljs-string\">f&quot;Bearer <span class=\"hljs-subst\">{MIND_KEY}</span>&quot;</span>},\n        json={\n            <span class=\"hljs-string\">&quot;category&quot;</span>: <span class=\"hljs-string\">&quot;mistake&quot;</span>,\n            <span class=\"hljs-string\">&quot;key&quot;</span>: <span class=\"hljs-string\">f&quot;failure_<span class=\"hljs-subst\">{scenario}</span>_<span class=\"hljs-subst\">{step}</span>&quot;</span>,\n            <span class=\"hljs-string\">&quot;content&quot;</span>: <span class=\"hljs-string\">f&quot;Scenario: <span class=\"hljs-subst\">{scenario}</span>\\nStep: <span class=\"hljs-subst\">{step}</span>\\nError: <span class=\"hljs-subst\">{error}</span>\\nRecovery: <span class=\"hljs-subst\">{recovery}</span>&quot;</span>,\n            <span class=\"hljs-string\">&quot;tags&quot;</span>: [<span class=\"hljs-string\">&quot;test&quot;</span>, <span class=\"hljs-string\">&quot;failure&quot;</span>, <span class=\"hljs-string\">&quot;ios&quot;</span>, scenario],\n            <span class=\"hljs-string\">&quot;priority&quot;</span>: <span class=\"hljs-string\">&quot;high&quot;</span>\n        })\n\n<span class=\"hljs-comment\"># Example</span>\nstore_test_failure(<span class=\"hljs-string\">&quot;login_flow&quot;</span>, <span class=\"hljs-string\">&quot;tap_login&quot;</span>,\n    <span class=\"hljs-string\">&quot;Login button not found at expected coordinates&quot;</span>,\n    <span class=\"hljs-string\">&quot;Button moved due to new logo. Search by accessibility label instead.&quot;</span>)</code></pre><p>अगली बार LLM परीक्षण चलाने पर, यह विफलता को रिकॉल करता है और उपचार स्वचालित रूप से लागू करता है।</p>\n<h2>चरण 5: परीक्षण परिणाम ट्रैकिंग</h2>\n<p>परीक्षण रन को कार्य के रूप में ट्रैक करें:</p>\n<pre><code class=\"hljs language-python\"><span class=\"hljs-keyword\">def</span> <span class=\"hljs-title function_\">track_test_run</span>(<span class=\"hljs-params\">scenario, status, duration</span>):\n    requests.post(<span class=\"hljs-string\">f&quot;<span class=\"hljs-subst\">{URL}</span>/mind/task&quot;</span>,\n        headers={<span class=\"hljs-string\">&quot;Authorization&quot;</span>: <span class=\"hljs-string\">f&quot;Bearer <span class=\"hljs-subst\">{MIND_KEY}</span>&quot;</span>,\n                 <span class=\"hljs-string\">&quot;Content-Type&quot;</span>: <span class=\"hljs-string\">&quot;application/json&quot;</span>},\n        json={\n            <span class=\"hljs-string\">&quot;title&quot;</span>: <span class=\"hljs-string\">f&quot;Test: <span class=\"hljs-subst\">{scenario}</span>&quot;</span>,\n            <span class=\"hljs-string\">&quot;description&quot;</span>: <span class=\"hljs-string\">f&quot;Status: <span class=\"hljs-subst\">{status}</span>, Duration: <span class=\"hljs-subst\">{duration}</span>s&quot;</span>,\n            <span class=\"hljs-string\">&quot;priority&quot;</span>: <span class=\"hljs-string\">&quot;normal&quot;</span>\n        })</code></pre><h2>सामान्य कमांड्स</h2>\n<table>\n<thead>\n<tr>\n<th>क्रिया</th>\n<th>कमांड</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>Simulator लॉन्च करें</td>\n<td><code>xcrun simctl launch booted com.example.app</code></td>\n</tr>\n<tr>\n<td>स्क्रीनशॉट</td>\n<td><code>computer_screenshot</code> (Synapse MCP के माध्यम से)</td>\n</tr>\n<tr>\n<td>(x,y) पर टैप</td>\n<td><code>computer_command_queue {type:&quot;click&quot;, payload:{x,y}}</code></td>\n</tr>\n<tr>\n<td>टेक्स्ट टाइप करें</td>\n<td><code>computer_command_queue {type:&quot;type&quot;, payload:{text:&quot;...&quot;}}</code></td>\n</tr>\n<tr>\n<td>Home दबाएँ</td>\n<td><code>computer_command_queue {type:&quot;key&quot;, payload:{keys:[&quot;Cmd&quot;,&quot;Shift&quot;,&quot;H&quot;]}}</code></td>\n</tr>\n</tbody></table>\n<h2>सर्वोत्तम प्रथाएँ</h2>\n<div class=\"callout callout-ok\"></div><h2>अगले कदम</h2>\n<ul>\n<li><a href=\"/docs/guides/self-healing-tests\">स्व-उपचार परीक्षण</a></li>\n<li><a href=\"/docs/api/computers\">Computer Control API</a></li>\n<li><a href=\"/docs/guides/memory-best-practices\">मेमोरी सर्वोत्तम प्रथाएँ</a></li>\n</ul>\n","urls":{"html":"/docs/guides/automated-testing-ios","text":"/docs/guides/automated-testing-ios?format=text","json":"/docs/guides/automated-testing-ios?format=json","llm":"/docs/guides/automated-testing-ios?format=llm"},"translations_available":["en","zh","hi","es","fr","ar","pt","ru","ja","de","it","ko","nl","pl","tr","sv","vi","th","id","uk"]}