awesome-ios-sim
awesome-ios-sim
简体中文 · Guía de MCP · DeepSeek Harness · Arquitectura
Estado del simulador como código para desarrolladores de iOS, pipelines de CI y agentes de IA.
awesome-ios-sim convierte la configuración de un simulador de iOS en un perfil versionado que se puede capturar, comparar, planificar, revisar y aplicar de forma segura. Proporciona tanto una CLI determinista como un servidor MCP stdio. También se puede instalar como un paquete dsh-plugin para DeepSeek Harness.
Estado del proyecto: alfa. El esquema de estado es
v1alpha1. Revisa los planes generados antes de aplicarlos, especialmente los planes que contengan operaciones deeraseo eliminación de aplicaciones.
Por qué existe
La automatización del simulador suele estar dispersa en scripts de shell, valores predeterminados no documentados y configuración manual. Esto hace que los entornos de prueba sean difíciles de reproducir y proporciona a los agentes de IA una superficie de shell insegura y sin tipo.
Este proyecto introduce un flujo de trabajo:
profile + current snapshot -> diff -> deterministic plan -> explicit confirmation -> audited applyDeclarativo: confirma los perfiles del simulador junto con las pruebas y el código de la aplicación.
Revisable: inspecciona el plan de operaciones ordenadas exacto antes de la mutación.
Seguro para agentes: las herramientas MCP usan JSON Schema y
simulator_applypor defecto en modo de prueba (dry-run).Consciente de capacidades: el estado exacto, de mejor esfuerzo y no soportado se informa explícitamente.
Solo API pública: las mutaciones pasan por
xcrun simctlde Apple; no hay frameworks privados de CoreSimulator.Local primero: sin demonio, cuenta en la nube, telemetría ni clave API.
Related MCP server: iOS Development MCP Server
Arquitectura
flowchart LR
P[State profile] --> E[Pure Swift state engine]
S[Live or saved snapshot] --> E
E --> D[Diff]
E --> PL[Ordered plan]
PL --> C{Explicit confirm?}
C -- No --> DR[Dry-run report]
C -- Yes --> X[Typed simctl driver]
X --> J[Execution receipts]
CLI[CLI] --> E
MCP[MCP stdio server] --> EEl motor de estado no tiene dependencia de Xcode y se prueba con fixtures. Solo SimctlDriver toca el límite del proceso anfitrión. La CLI y el servidor MCP comparten el mismo planificador, validación y puertas de aplicación.
Requisitos
macOS 13 o posterior.
Swift 6.
Xcode completo con un runtime de simulador de iOS para operaciones de inventario, instantánea o aplicación en vivo.
xcode-selectconfigurado para la instalación de Xcode deseada.
Solo las herramientas de línea de comandos pueden compilar el paquete, pero no proporcionan CoreSimulator ni simctl.
Instalar
git clone https://github.com/qubyyang/awesome-ios-sim.git
cd awesome-ios-sim
swift build -c releaseLos ejecutables se generan en:
.build/release/ios-sim-state
.build/release/ios-sim-state-mcpSe planea la distribución mediante Homebrew y artefactos de lanzamiento firmados una vez que el esquema se estabilice.
Inicio rápido
Lista los simuladores disponibles:
swift run ios-sim-state inventoryCaptura un simulador:
swift run ios-sim-state snapshot --device <UDID> > simulator.snapshot.jsonGenera un plan sin conexión a partir del ejemplo incluido:
swift run ios-sim-state plan \
--profile Examples/ui-tests.profile.json \
--snapshot Examples/ui-tests.snapshot.json > simulator.plan.jsonPrevisualiza el comportamiento de aplicación sin mutación (el valor predeterminado):
swift run ios-sim-state apply --plan simulator.plan.jsonAplica un plan revisado y conserva un registro de ejecución:
swift run ios-sim-state apply \
--plan simulator.plan.json \
--confirm \
--journal simulator.report.jsonapply se detiene en la primera operación que falla. Cada recibo contiene los arrays de argumentos ejecutados, el código de salida, stdout, stderr y marcas de tiempo.
Perfil de estado
Los perfiles son documentos JSON validados contra schemas/v1alpha1/simulator-state.schema.json. Los campos con valores predeterminados seguros pueden omitirse.
{
"apiVersion": "awesome-ios-sim/v1alpha1",
"kind": "SimulatorState",
"metadata": { "name": "ui-tests" },
"target": {
"name": "iPhone 17 Pro",
"runtime": "com.apple.CoreSimulator.SimRuntime.iOS-27-0"
},
"spec": {
"power": "shutdown",
"applications": [
{
"bundleIdentifier": "com.example.app",
"sourcePath": "/absolute/path/to/Example.app",
"running": true,
"launchArguments": ["--uitesting"]
}
],
"preferences": [
{
"domain": "com.example.app",
"key": "hasSeenOnboarding",
"value": false
}
],
"statusBar": { "time": "09:41", "batteryLevel": 100 }
}
}power: "unchanged" restaura el estado de alimentación original después de un trabajo temporal. Cuando se planifica un borrado, un dispositivo encendido se apaga primero. Las operaciones de arranque esperan a simctl bootstatus -b antes del trabajo dependiente.
CLI
Comando | Mutación | Propósito |
| No | Lista runtimes y simuladores como JSON estable. |
| No | Captura el estado gestionado y los metadatos de capacidad. |
| No | Muestra las diferencias entre deseado/actual. |
| No | Produce un plan de operaciones ordenadas. |
| No | Devuelve un informe de prueba (dry-run). |
| Sí | Ejecuta el plan revisado en serie. |
Toda la salida orientada a máquina es JSON. Usa --compact para una salida en una sola línea.
MCP para agentes de IA
Compila el ejecutable MCP y apunta cualquier cliente MCP compatible con stdio a su ruta absoluta:
{
"mcpServers": {
"awesome-ios-sim": {
"command": "/absolute/path/awesome-ios-sim/.build/release/ios-sim-state-mcp"
}
}
}El servidor expone cinco herramientas:
Herramienta | Comportamiento |
| Lee el inventario del simulador. |
| Captura un simulador. |
| Compara un perfil con el estado guardado o en vivo. |
| Genera un plan tipado y ordenado. |
| Prueba (dry-run) por defecto; muta solo con |
El servidor stdio implementa el modelo de solicitud sin estado MCP 2026-07-28, incluyendo server/discover, _meta por solicitud, listas de herramientas cacheables, resultType y JSON Schema 2020-12. También acepta el handshake de inicialización heredado usado por los clientes de herramientas 2025-11-25, 2025-06-18 y 2024-11-05. Consulta la guía de MCP para ver ejemplos de cable y el subconjunto soportado exacto.
Complemento de DeepSeek Harness
Instala el repositorio como un paquete DSH e inicia el perfil Web:
dsh plugin --profile web add github:qubyyang/awesome-ios-sim
dsh webHarness puentea el servidor MCP existente y expone herramientas con espacio de nombres como mcp__ios_sim__simulator_inventory y mcp__ios_sim__simulator_plan. El adaptador se prueba actualmente contra @deepseek-ai/dsh 0.1.0-rc.7. Fija una etiqueta o commit en entornos reproducibles porque Harness aún está en vista previa para desarrolladores.
Consulta la guía de DeepSeek Harness para configuración, desarrollo, nombres de herramientas, pasos de desinstalación y el límite de seguridad del proceso anfitrión.
Cobertura de estado
Estado | Lectura | Escritura | Soporte |
Alimentación | Sí | Sí | Exacto |
Aplicaciones instaladas | Sí cuando | Sí | Mejor esfuerzo |
Estado de ejecución de apps | No completamente expuesto por | Iniciar/terminar | Mejor esfuerzo |
Claves de preferencias gestionadas | Sin lectura general | Valores escalares y arrays escalares | Mejor esfuerzo |
Anulaciones de la barra de estado | Sin lectura completa | Sí, dependiente del runtime | Mejor esfuerzo |
Borrado | N/A | Sí, operación destructiva explícita | Mutación exacta |
El planificador nunca actualiza silenciosamente datos de mejor esfuerzo a estado exacto. La falta de lectura produce metadatos de capacidad, escrituras idempotentes repetidas o una advertencia, en lugar de una afirmación falsa de convergencia.
Modelo de seguridad
No se invoca ningún shell; el ejecutable y los argumentos se pasan por separado.
diff,planyapplypor defecto no pueden mutar un simulador.La CLI de apply requiere
--confirm; MCP apply requiere el booleanoconfirm: true.Las operaciones se serializan y se detienen ante el primer fallo.
Un simulador encendido se apaga antes de un borrado.
Los arranques temporales restauran el estado de alimentación solicitado o final original.
Los esquemas de herramientas rechazan argumentos de nivel superior desconocidos.
No se realiza carga de frameworks privados, eliminación de directorios huérfanos ni limpieza del sistema de archivos.
Trata los archivos de plan como intenciones ejecutables. Revisa los cambios en los UDID de destino, las rutas de las aplicaciones, las operaciones de borrado y los dominios de preferencias antes de la confirmación.
Por qué Swift
El trabajo con simuladores está dominado por la latencia del proceso de Xcode y CoreSimulator, no por el tiempo de CPU a nivel de lenguaje. Swift proporciona distribución nativa en macOS, modelos Codable sólidos y alineación directa con las herramientas de iOS sin añadir un runtime. Rust sería una opción sólida para un indexador portátil con uso intensivo de CPU, pero no aceleraría materialmente simctl boot, install o erase. El paquete mantiene el motor de estado puro y el límite del proceso separados para que se pueda introducir un helper especializado más adelante si la creación de perfiles lo justifica.
Desarrollo
swift build
swift test
npm ci
npm test
npm run pack:check
swift run ios-sim-state plan \
--profile Examples/ui-tests.profile.json \
--snapshot Examples/ui-tests.snapshot.jsonConsulta CONTRIBUTING.md, SECURITY.md y las notas de arquitectura. Por favor, no añadas APIs privadas de CoreSimulator.
Hoja de ruta
Estabilizar el esquema de perfil y publicar binarios etiquetados.
Añadir distribución mediante Homebrew y artefactos universales firmados.
Añadir capas de perfil reutilizables y ajustes preestablecidos.
Expandir ajustes conscientes de capacidades sin frameworks privados.
Construir una aplicación complementaria nativa en SwiftUI sobre el mismo motor de estado.
Licencia
MIT. Consulta LICENSE.
This server cannot be deployed
Maintenance
Related MCP Connectors
Build, validate, and manage API simulations in WireMock Cloud from MCP-compatible AI agents.
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
Manage portable AI agent playbooks, Agent Skills, MCP configurations, personas, and memory.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to automate iOS Simulator interactions including device management, UI element interaction (tap, swipe, type), screenshot capture, and execution of YAML-defined navigation workflows.5 npmMIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that provides comprehensive tools for managing iOS simulators, including device control, app lifecycle management, and UI automation. It enables developers to boot devices, install apps, capture screenshots, and simulate user interactions through natural language commands.4MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI to control iOS simulators through the MCP protocol. Supports device management, UI automation, and network interception including screenshot capture, text input, and HTTP request mocking.-
- FlicenseNot gradedqualityCmaintenanceEnables AI agents to control iOS Simulators for UI/UX debugging, app management, and accessibility auditing via simctl, IDB, and ClaudeDebugKit.-