iOS Device Control

Um servidor MCP para controlar simuladores iOS e dispositivos reais, permitindo integração de assistente de IA no macOS.

Documentação

iOS Device Control (chuk-mcp-ios)

Sistema abrangente de controle de dispositivos iOS com suporte a simuladores e dispositivos reais. Disponível tanto como ferramenta CLI autônoma quanto como servidor MCP (Model Context Protocol) para integração com assistentes de IA.

Python 3.8+ License: MIT MCP Compatible

🚀 Recursos

  • 🎯 Gerenciamento Unificado de Dispositivos: Controle simuladores iOS e dispositivos reais através de uma única interface
  • 📋 Gerenciamento de Sessões: Crie e gerencie sessões de dispositivos para fluxos de automação organizados
  • 📱 Ciclo de Vida de Apps: Instale, inicie, encerre e gerencie aplicativos iOS
  • 🎮 Automação de UI: Toque, deslize, digite e interaja com interfaces de dispositivos
  • 📸 Mídia e Localização: Adicione fotos/vídeos, simule localizações GPS e rotas
  • 🔍 Depuração: Acesse logs, relatórios de falhas e informações de depuração
  • 🤖 Servidor MCP: Integração com Claude e outros assistentes de IA
  • ⚡ Ferramenta CLI: Interface de linha de comando autônoma para controle direto

📋 Requisitos

Para Simuladores iOS (Principal)

  • macOS com Xcode instalado
  • Ferramentas de Linha de Comando do Xcode: xcode-select --install
  • Pelo menos um runtime de simulador iOS

Para Dispositivos Reais (Opcional)

  • Dispositivo iOS com Modo Desenvolvedor habilitado
  • Conta válida de Apple Developer (para instalação de aplicativos)
  • Uma ou mais destas ferramentas:
    • idb (iOS Development Bridge do Facebook) - Recomendado
    • devicectl (Xcode 15+)
    • instruments (Ferramenta legada do Xcode)

🔧 Instalação

Opção 1: Usando uv (Recomendado)

# Install with uv
uv add chuk-mcp-ios

# Run directly
uvx chuk-mcp-ios cli status

Opção 2: Usando pip

# Install from source
git clone https://github.com/yourusername/chuk-mcp-ios.git
cd chuk-mcp-ios
pip install -e .

# Or install from PyPI (when published)
pip install chuk-mcp-ios

Verificar Instalação

# Check system status
chuk-mcp-ios cli status

# Should show available tools and devices

⚠️ Status Atual e Recomendações

Problemas Detectados na CLI

Com base em testes, a CLI possui vários bugs que precisam ser corrigidos:

  1. Resolução de Sessões: Sessões aparecem como ativas, mas comandos falham ao encontrar dispositivos
  2. Erros de Importação: Importação ausente de time causando travamentos
  3. Resolução de Dispositivos: Uso direto de UDID também falhando

Ordem de Uso Recomendada

1. simctl direto (Mais Confiável)

# Use native simulator tools directly
xcrun simctl list devices
xcrun simctl boot "iPhone 15" 
xcrun simctl io booted screenshot screenshot.png
xcrun simctl launch booted com.apple.Preferences

2. API Python (Recursos Completos)

# Use the Python API directly for full functionality
python3 -c "
import asyncio
from chuk_mcp_ios.mcp.tools import ios_create_session, ios_screenshot
session = asyncio.run(ios_create_session())
print(f'Session: {session}')
"

3. Servidor MCP (Integração com IA)

# Use MCP server for AI assistant integration
uvx chuk-mcp-ios mcp
# Then connect via Claude or other AI assistants

4. CLI (Limitado, Com Bugs)

# CLI currently has issues but basic commands work:
uvx chuk-mcp-ios cli status        # ✅ Works
uvx chuk-mcp-ios cli device list   # ✅ Works  
uvx chuk-mcp-ios cli session list  # ✅ Works
uvx chuk-mcp-ios cli ui screenshot # ❌ Broken
uvx chuk-mcp-ios cli app list      # ❌ Broken

Exemplo Funcional Passo a Passo

Aqui está uma sequência completa que realmente funciona:

# 1. Check your system status
uvx chuk-mcp-ios cli status

# 2. List available devices to see what's available
uvx chuk-mcp-ios cli device list

# 3. Create a new session (this gives you a fresh session ID)
uvx chuk-mcp-ios cli session create --device "iPhone 15"
# Note: Copy the session ID from the output, e.g., session_1749425214_4b7f748f

# 4. List active sessions to verify
uvx chuk-mcp-ios cli session list

# 5. Use the actual session ID from step 3 for commands:
# Replace YOUR_SESSION_ID with the actual ID from step 3
uvx chuk-mcp-ios cli ui screenshot YOUR_SESSION_ID -o screenshot.png

# 6. Launch Settings app
uvx chuk-mcp-ios cli app launch YOUR_SESSION_ID com.apple.Preferences

# 7. Take another screenshot to see Settings
uvx chuk-mcp-ios cli ui screenshot YOUR_SESSION_ID -o settings.png

# 8. List installed apps
uvx chuk-mcp-ios cli app list YOUR_SESSION_ID

# 9. Clean up when done
uvx chuk-mcp-ios cli session terminate YOUR_SESSION_ID

Exemplo Funcional (Com Soluções Alternativas)

# Method 1: Try session ID first, fallback to UDID
SESSION_ID="session_1749425214_4b7f748f"
UDID="D5ABE678-7395-4EF6-880B-E649F4FEDEE5"

# Try session ID
uvx chuk-mcp-ios cli ui screenshot $SESSION_ID -o screenshot.png

# If that fails, try UDID directly
if [ $? -ne 0 ]; then
    echo "Session failed, trying UDID..."
    uvx chuk-mcp-ios cli ui screenshot $UDID -o screenshot.png
fi

# Method 2: Direct device approach (most reliable)
# Get UDID from device list
uvx chuk-mcp-ios cli device list
# Copy the UDID and use it directly
uvx chuk-mcp-ios cli ui screenshot D5ABE678-7395-4EF6-880B-E649F4FEDEE5 -o screenshot.png

# Method 3: Fresh session approach
# Clean slate approach if sessions are buggy
uvx chuk-mcp-ios cli session terminate session_1749425214_4b7f748f
uvx chuk-mcp-ios cli session terminate automation_1749424425_58872b30
NEW_SESSION=$(uvx chuk-mcp-ios cli quick-start | grep -o 'session_[a-zA-Z0-9_]*')
uvx chuk-mcp-ios cli ui screenshot $NEW_SESSION -o screenshot.png

Correção Imediata para Sua Situação

# Based on your current sessions, try these in order:

# 1. Try direct UDID (most likely to work)
uvx chuk-mcp-ios cli ui screenshot D5ABE678-7395-4EF6-880B-E649F4FEDEE5 -o screenshot.png

# 2. If UDID doesn't work, test direct simctl
xcrun simctl io D5ABE678-7395-4EF6-880B-E649F4FEDEE5 screenshot test.png

# 3. If simctl works but CLI doesn't, it's a CLI bug
# Use Python API as workaround:
python3 -c "
import asyncio
from chuk_mcp_ios.mcp.tools import ios_screenshot
result = asyncio.run(ios_screenshot('D5ABE678-7395-4EF6-880B-E649F4FEDEE5', 'screenshot.png'))
print('Success!' if result.get('success') else f'Error: {result.get(\"error\")}')
"

Alternativa: Use Início Rápido

# Auto-setup with best available device
uvx chuk-mcp-ios cli quick-start

# This creates a session and tells you the ID to use
# Then use that ID for subsequent commands

📚 Exemplos de CLI

Primeiro, verifique quais comandos estão realmente disponíveis:

# Check main commands
chuk-mcp-ios cli --help

# Check UI subcommands
chuk-mcp-ios cli ui --help

# Check device subcommands  
chuk-mcp-ios cli device --help

# Check session subcommands
chuk-mcp-ios cli session --help

# Check app subcommands
chuk-mcp-ios cli app --help

Gerenciamento de Dispositivos

# List all available devices (simulators + real devices)
chuk-mcp-ios cli device list

# List only simulators
chuk-mcp-ios cli device list --type simulator

# Show device details
chuk-mcp-ios cli device info DEVICE_UDID

# Boot a specific simulator
chuk-mcp-ios cli device boot DEVICE_UDID

# Shutdown simulator
chuk-mcp-ios cli device shutdown DEVICE_UDID

Gerenciamento de Sessões

# Create session with auto-selected device
chuk-mcp-ios cli session create

# Create session with specific device name
chuk-mcp-ios cli session create --device "iPhone 15"

# Create session with specific UDID
chuk-mcp-ios cli session create --udid ABCD-1234-EFGH-5678

# List active sessions
chuk-mcp-ios cli session list

# Terminate session
chuk-mcp-ios cli session terminate session_123

Gerenciamento de Apps

# List installed apps
chuk-mcp-ios cli app list session_123

# List only user apps (exclude system apps)
chuk-mcp-ios cli app list session_123 --user-only

# Install app from .app bundle
chuk-mcp-ios cli app install session_123 /path/to/MyApp.app

# Launch app by bundle ID
chuk-mcp-ios cli app launch session_123 com.example.myapp

# Terminate running app
chuk-mcp-ios cli app terminate session_123 com.example.myapp

# Uninstall app
chuk-mcp-ios cli app uninstall session_123 com.example.myapp

Automação de UI

# Take screenshot
chuk-mcp-ios cli ui screenshot session_123 -o /path/to/screenshot.png

# Tap at coordinates
chuk-mcp-ios cli ui tap session_123 100 200

# Type text (available commands based on your CLI implementation)
chuk-mcp-ios cli ui type session_123 "Hello World"

# Check available UI commands
chuk-mcp-ios cli ui --help

Nota: Os comandos exatos de UI disponíveis dependem da sua implementação da CLI. Verifique chuk-mcp-ios cli ui --help para a lista completa.

Mídia e Localização

# Note: Check available commands with --help first
chuk-mcp-ios cli --help

# Location and media commands may be available under different subcommands
# Check for location commands:
chuk-mcp-ios cli location --help  # if location subcommand exists
chuk-mcp-ios cli media --help     # if media subcommand exists

# If not available via CLI, use Python API:
python3 -c "
from chuk_mcp_ios.core.media_manager import UnifiedMediaManager
media = UnifiedMediaManager()
media.set_location_by_name('your_session_id', 'San Francisco')
"

Encontrando Comandos Disponíveis

A estrutura da CLI pode diferir desta documentação. Sempre verifique os comandos disponíveis:

# Discover main command structure
chuk-mcp-ios cli --help

# Check subcommands for each area
chuk-mcp-ios cli device --help
chuk-mcp-ios cli session --help  
chuk-mcp-ios cli app --help
chuk-mcp-ios cli ui --help

# If certain commands aren't available in CLI, they may be:
# 1. Available only via MCP tools
# 2. Available only via Python API
# 3. Named differently than documented

# Example: Check what UI commands actually exist
chuk-mcp-ios cli ui --help
# Output might show: tap, screenshot, type (but not press, swipe, etc.)

Alternativas de Comandos:

# If CLI command doesn't exist, try Python API:
python3 -c "
import asyncio
from chuk_mcp_ios.mcp.tools import ios_press_button
result = asyncio.run(ios_press_button('session_123', 'home'))
print(result)
"

# Or check if it's an MCP-only feature
chuk-mcp-ios mcp  # Start MCP server and use via AI assistant

🤖 Uso do Servidor MCP

Iniciando o Servidor MCP

# Start MCP server (stdio mode)
chuk-mcp-ios mcp

# Start with specific configuration
chuk-mcp-ios mcp --host localhost --port 8080

# With debug logging
chuk-mcp-ios mcp --log-level DEBUG

Integração com Claude Desktop

Adicione à sua configuração do Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "ios-control": {
      "command": "uvx",
      "args": ["chuk-mcp-ios", "mcp"],
      "env": {
        "LOG_LEVEL": "INFO"
      }
    }
  }
}

Exemplos de Linguagem Natural com MCP

Uma vez conectado ao Claude, você pode usar linguagem natural:

🧑 "Take a screenshot of the current iOS simulator"
🤖 I'll take a screenshot for you...
   ✅ Screenshot saved to screenshot_20231215_143022.png

🧑 "Launch the Settings app and navigate to WiFi settings"
🤖 I'll launch Settings and help you navigate...
   ✅ Settings app launched
   ✅ Tapped on WiFi settings

🧑 "Set the device location to Tokyo and open Maps"
🤖 Setting location to Tokyo and opening Maps...
   ✅ Location set to Tokyo, Japan (35.6762, 139.6503)
   ✅ Maps app launched

🧑 "Install the app at /Users/me/MyApp.app and launch it"
🤖 I'll install and launch the app for you...
   ✅ App MyApp installed successfully
   ✅ App launched: com.example.myapp

🧑 "Simulate a user scrolling through a photo gallery"
🤖 I'll simulate scrolling through photos...
   ✅ Photos app launched
   ✅ Performed swipe gestures to scroll through gallery

Ferramentas MCP Disponíveis

O servidor MCP fornece estas ferramentas:

// Session Management
ios_create_session()
ios_list_sessions()
ios_terminate_session()

// Device Control  
ios_list_devices()
ios_boot_device()
ios_shutdown_device()

// App Management
ios_install_app()
ios_launch_app()
ios_terminate_app()
ios_uninstall_app()
ios_list_apps()

// UI Automation
ios_tap()
ios_double_tap()
ios_long_press()
ios_swipe()
ios_swipe_direction()
ios_input_text()
ios_press_button()
ios_screenshot()
ios_record_video()
ios_get_screen_info()

// Media & Location
ios_set_location()
ios_set_location_by_name()
ios_add_media()

// Utilities
ios_open_url()
ios_set_status_bar()
ios_set_appearance()
ios_clear_keychain()
ios_get_logs()
ios_set_permission()
ios_focus_simulator()

🐍 Uso da API Python

Uso Básico

from chuk_mcp_ios.core.device_manager import UnifiedDeviceManager
from chuk_mcp_ios.core.session_manager import UnifiedSessionManager
from chuk_mcp_ios.core.ui_controller import UnifiedUIController

# Initialize managers
device_manager = UnifiedDeviceManager()
session_manager = UnifiedSessionManager()
ui_controller = UnifiedUIController()

# Set up session manager for UI controller
ui_controller.set_session_manager(session_manager)

# Create automation session
session_id = session_manager.create_automation_session()
print(f"Created session: {session_id}")

# Take screenshot
screenshot_path = ui_controller.take_screenshot(session_id, "test.png")
print(f"Screenshot saved: {screenshot_path}")

# Interact with UI
ui_controller.tap(session_id, 100, 200)
ui_controller.swipe_up(session_id)
ui_controller.input_text(session_id, "Hello World")

# Clean up
session_manager.terminate_session(session_id)

Exemplo Avançado de Automação

from chuk_mcp_ios.core import *
import time

async def automate_app_testing():
    """Example: Automated app testing workflow."""
    
    # Initialize managers
    device_mgr = UnifiedDeviceManager()
    session_mgr = UnifiedSessionManager()
    app_mgr = UnifiedAppManager()
    ui_ctrl = UnifiedUIController()
    
    # Link managers
    app_mgr.set_session_manager(session_mgr)
    ui_ctrl.set_session_manager(session_mgr)
    
    try:
        # Create session with iPhone simulator
        session_id = session_mgr.create_automation_session({
            'device_name': 'iPhone 15'
        })
        
        # Install test app
        app_info = app_mgr.install_app(
            session_id, 
            '/path/to/TestApp.app',
            AppInstallConfig(launch_after_install=True)
        )
        
        # Wait for app to load
        time.sleep(3)
        
        # Take screenshot of app launch
        ui_ctrl.take_screenshot(session_id, 'app_launch.png')
        
        # Perform test interactions
        ui_ctrl.tap(session_id, 200, 300)  # Tap login button
        ui_ctrl.input_text(session_id, 'test@example.com')
        ui_ctrl.tap(session_id, 200, 400)  # Tap password field
        ui_ctrl.input_text(session_id, 'password123')
        ui_ctrl.tap(session_id, 200, 500)  # Tap submit
        
        # Wait and verify
        time.sleep(2)
        ui_ctrl.take_screenshot(session_id, 'after_login.png')
        
        # Get app logs
        logs = logger_mgr.get_app_logs(session_id, app_info.bundle_id)
        print(f"Found {len(logs)} log entries")
        
    finally:
        # Clean up
        if 'session_id' in locals():
            session_mgr.terminate_session(session_id)

# Run the automation
import asyncio
asyncio.run(automate_app_testing())

📱 Configuração de Dispositivos Reais

Pré-requisitos

  1. Habilite o Modo Desenvolvedor (iOS 16+):

    • Conecte o dispositivo ao Mac com Xcode
    • Ajustes → Privacidade e Segurança → Modo Desenvolvedor
    • Ative e reinicie o dispositivo
  2. Instale o idb (Recomendado):

    # Using Homebrew
    brew install idb-companion
    
    # Using pip
    pip install fb-idb
    
  3. Confie no Computador:

    • Conecte o dispositivo via USB
    • Toque em "Confiar" quando solicitado no dispositivo

Exemplos com Dispositivos Reais

# List real devices
chuk-mcp-ios cli device list --type real

# Create session with real iPhone
chuk-mcp-ios cli session create --device "Chris's iPhone"

# Install app (requires developer certificate)
chuk-mcp-ios cli app install session_123 MyApp.ipa

# Same UI automation works on real devices
chuk-mcp-ios cli ui screenshot session_123 -o real_device.png

🔧 Configuração

Variáveis de Ambiente

# Tool paths (if not in PATH)
export IOS_CONTROL_SIMCTL_PATH="/usr/bin/xcrun simctl"
export IOS_CONTROL_IDB_PATH="/usr/local/bin/idb"
export IOS_CONTROL_DEVICECTL_PATH="/usr/bin/xcrun devicectl"

# Timeouts
export IOS_CONTROL_DEFAULT_TIMEOUT=30
export IOS_CONTROL_BOOT_TIMEOUT=60

# Logging
export IOS_CONTROL_LOG_LEVEL=INFO
export IOS_CONTROL_LOG_DIR="$HOME/.ios-control/logs"

Arquivo de Configuração

Crie ~/.ios-control/config.yaml:

defaults:
  timeout: 30
  screenshot_format: png
  
devices:
  preferred_simulator: "iPhone 15 Pro"
  auto_boot: true
  
logging:
  level: INFO
  file_logging: true
  
mcp:
  host: localhost
  port: 8080

📊 Exemplos e Demonstrações

Execute Demonstrações Integradas

# Interactive demo (menu-driven)
python -m chuk_mcp_ios.examples.interactive_demo

# Automated end-to-end demo
python -m chuk_mcp_ios.examples.automated_demo

# MCP server demonstration
python -m chuk_mcp_ios.examples.e2e_mcp_demo

# Web scraping demo (Techmeme)
python -m chuk_mcp_ios.examples.techmeme --auto

Scripts de Automação Personalizados

# examples/custom_automation.py
from chuk_mcp_ios import *

def test_settings_navigation():
    """Test navigating through iOS Settings."""
    with AutomationSession() as session:
        # Launch Settings
        session.launch_app('com.apple.Preferences')
        session.screenshot('settings_main.png')
        
        # Navigate to WiFi
        session.tap_text('Wi-Fi')
        session.screenshot('wifi_settings.png')
        
        # Navigate back
        session.tap_back_button()
        session.screenshot('settings_back.png')

if __name__ == "__main__":
    test_settings_navigation()

🏗️ Arquitetura

chuk-mcp-ios/
├── core/                   # Core functionality (device-agnostic)
│   ├── base.py            # Base classes and interfaces
│   ├── device_manager.py  # Unified device management
│   ├── session_manager.py # Session lifecycle management
│   ├── app_manager.py     # App installation and control
│   ├── ui_controller.py   # UI automation and gestures
│   ├── media_manager.py   # Photos, videos, and location
│   ├── logger_manager.py  # Logging and crash reports
│   └── utilities_manager.py # Misc utilities and settings
├── devices/               # Device-specific implementations
│   ├── simulator.py       # iOS Simulator support
│   ├── real_device.py     # Real device support
│   └── detector.py        # Device discovery and detection
├── mcp/                   # MCP server implementation
│   ├── tools.py          # MCP tool definitions
│   ├── models.py         # Pydantic models for validation
│   └── main.py           # MCP server entry point
├── cli/                   # Command-line interface
│   └── main.py           # CLI entry point and commands
└── examples/              # Usage examples and demos
    ├── interactive_demo.py
    ├── automated_demo.py
    ├── e2e_mcp_demo.py
    └── techmeme.py

🧪 Desenvolvimento

Configurar Ambiente de Desenvolvimento

# Clone repository
git clone https://github.com/yourusername/chuk-mcp-ios.git
cd chuk-mcp-ios

# Install in development mode with dev dependencies
pip install -e ".[dev]"

# Or with uv
uv sync --dev

Executando Testes

# Run all tests
pytest

# Run with coverage
pytest --cov=chuk_mcp_ios

# Run specific test file
pytest tests/test_device_manager.py

# Run integration tests (requires simulators)
pytest tests/integration/ -m "not slow"

Qualidade de Código

# Format code
black src/ tests/

# Sort imports
isort src/ tests/

# Type checking
mypy src/

# Lint
flake8 src/

Adicionando Novos Recursos

  1. Adicione interfaces em core/base.py
  2. Implemente a funcionalidade no módulo principal apropriado
  3. Adicione ferramenta MCP em mcp/tools.py com validação adequada
  4. Adicione comando CLI em cli/main.py
  5. Escreva testes em tests/
  6. Adicione exemplos em examples/
  7. Atualize a documentação

🐛 Solução de Problemas

Problemas Conhecidos Atuais

Múltiplos Problemas Identificados na CLI:

  1. Bug de Resolução de Sessões: Sessões aparecem como ativas, mas não podem ser usadas
  2. Erro de Importação Ausente: name 'time' is not defined
  3. Bug de Resolução de Dispositivos: UUIDs também não funcionam
# These errors indicate code-level issues:
uvx chuk-mcp-ios cli app list session_1749426020_9ff9470b
# ❌ Failed: Device not found: session_1749426020_9ff9470b

uvx chuk-mcp-ios cli app list 45007866-72A3-4ACD-AD98-7EC58A726372  
# ❌ Failed: name 'time' is not defined

Soluções Alternativas Imediatas

Opção 1: Use Comandos simctl Diretos

# Bypass the CLI entirely and use simctl directly
UDID="45007866-72A3-4ACD-AD98-7EC58A726372"

# Take screenshot
xcrun simctl io $UDID screenshot screenshot.png

# Launch app
xcrun simctl launch $UDID com.apple.Preferences

# List installed apps (basic)
xcrun simctl listapps $UDID

# Boot device if needed
xcrun simctl boot $UDID

Opção 2: Use a API Python Diretamente

# Create a simple Python script to bypass CLI issues
cat << 'EOF' > ios_test.py
#!/usr/bin/env python3
import asyncio
import sys
import os
sys.path.insert(0, '.')

async def main():
    from chuk_mcp_ios.mcp.tools import (
        ios_list_devices, 
        ios_create_session, 
        ios_screenshot,
        ios_list_apps
    )
    
    # List devices
    print("=== Devices ===")
    devices = await ios_list_devices()
    print(devices)
    
    # Create session
    print("\n=== Creating Session ===")
    session = await ios_create_session(device_name="iPhone 15")
    if 'error' in session:
        print(f"Error: {session['error']}")
        return
    
    session_id = session['session_id']
    print(f"Session: {session_id}")
    
    # Take screenshot
    print("\n=== Screenshot ===")
    screenshot = await ios_screenshot(session_id, "test.png")
    print(screenshot)
    
    # List apps
    print("\n=== Apps ===")
    apps = await ios_list_apps(session_id)
    print(f"Found {len(apps.get('apps', []))} apps")

if __name__ == "__main__":
    asyncio.run(main())
EOF

python3 ios_test.py

Opção 3: Uso do Servidor MCP (Mais Confiável)

# Start MCP server in one terminal
uvx chuk-mcp-ios mcp

# In another terminal or via AI assistant, use MCP tools
# This bypasses the CLI entirely and uses the core MCP functions

Operações Manuais de Dispositivos

Controle Direto do Simulador (Sempre Funciona):

# List all simulators
xcrun simctl list devices

# Boot a specific simulator
xcrun simctl boot "iPhone 15"

# Take screenshot
xcrun simctl io booted screenshot screenshot.png

# Launch Settings
xcrun simctl launch booted com.apple.Preferences

# Add media
xcrun simctl addmedia booted ~/Desktop/*.jpg

# Set location
xcrun simctl location booted set 37.7749,-122.4194

Depurando os Problemas da CLI

Para ajudar a identificar os problemas:

# 1. Check if core imports work
python3 -c "
try:
    from chuk_mcp_ios.core.device_manager import UnifiedDeviceManager
    print('✅ Core imports work')
except Exception as e:
    print(f'❌ Import error: {e}')
"

# 2. Check if time import is missing somewhere
python3 -c "
import chuk_mcp_ios.core.app_manager
print('✅ App manager imports work')
"

# 3. Minimal device test
python3 -c "
from chuk_mcp_ios.core.device_manager import UnifiedDeviceManager
dm = UnifiedDeviceManager()
devices = dm.discover_all_devices()
print(f'Found {len(devices)} devices')
for d in devices:
    print(f'  {d.name}: {d.udid}')
"

Problemas Conhecidos e Soluções Alternativas

Problema de Resolução de ID de Sessão: Se as sessões aparecem como ativas, mas os comandos falham, isso pode ser um bug na resolução de sessão para dispositivo:

# Workaround 1: Use device UDID directly (bypass sessions)
# Get UDID from session list, then use it directly
UDID="D5ABE678-7395-4EF6-880B-E649F4FEDEE5"  # From session list
uvx chuk-mcp-ios cli ui screenshot $UDID -o screenshot.png

# Workaround 2: Use quick-start for guaranteed working session
uvx chuk-mcp-ios cli quick-start
# Use the session ID that quick-start returns

# Workaround 3: Python API bypass (if CLI has issues)
python3 -c "
import asyncio
from chuk_mcp_ios.mcp.tools import ios_screenshot
result = asyncio.run(ios_screenshot('session_1749425214_4b7f748f', 'screenshot.png'))
print(result)
"

Comandos Verificados que Funcionam

Estes comandos devem definitivamente funcionar:

# 1. System check (always works)
uvx chuk-mcp-ios cli status

# 2. Device listing (always works)
uvx chuk-mcp-ios cli device list

# 3. Direct device operations (bypass sessions)
# Use UDID from device list directly
uvx chuk-mcp-ios cli device info DEVICE_UDID

# 4. Session management (metadata operations)
uvx chuk-mcp-ios cli session list
uvx chuk-mcp-ios cli session create --device "iPhone 15"
uvx chuk-mcp-ios cli session terminate SESSION_ID

Etapas de Solução de Problemas

# Step 1: Verify simulator is actually running
xcrun simctl list devices | grep Booted

# Step 2: Test direct simctl access
xcrun simctl io D5ABE678-7395-4EF6-880B-E649F4FEDEE5 screenshot direct_test.png

# Step 3: If direct simctl works but CLI doesn't, it's a session resolution bug
# Report this as an issue and use direct UDID as workaround

# Step 4: Clean restart if needed
uvx chuk-mcp-ios cli session terminate --all  # if available
# Or manually terminate each session
uvx chuk-mcp-ios cli session terminate session_1749425214_4b7f748f
uvx chuk-mcp-ios cli session terminate automation_1749424425_58872b30

Dispositivo Não Encontrado:

# Problem: No devices available
# Solution: Check simulators and boot one

# List available devices
uvx chuk-mcp-ios cli device list

# Boot a simulator if none are running
uvx chuk-mcp-ios cli device boot DEVICE_UDID_FROM_LIST

# Then create session
uvx chuk-mcp-ios cli session create --udid DEVICE_UDID_FROM_LIST

Comando Não Encontrado:

# Problem: Command like 'press' doesn't exist
# Solution: Check available commands

uvx chuk-mcp-ios cli ui --help  # See actual UI commands
uvx chuk-mcp-ios cli --help     # See all available commands

# Many advanced features are MCP-only or Python API-only

Obtendo Ajuda

  1. Verifique o status do sistema: chuk-mcp-ios cli status
  2. Revise os logs: ~/.ios-control/logs/
  3. Execute diagnósticos: chuk-mcp-ios cli diagnose
  4. Verifique problemas no GitHub: Página de Issues

🤝 Contribuindo

Aceitamos contribuições! Veja como começar:

  1. Faça um fork do repositório
  2. Crie um branch de recurso (git checkout -b feature/amazing-feature)
  3. Faça suas alterações com testes
  4. Formate o código (black, isort)
  5. Teste minuciosamente (pytest)
  6. Faça commit das alterações (git commit -m 'Add amazing feature')
  7. Envie o branch (git push origin feature/amazing-feature)
  8. Abra um Pull Request

Diretrizes de Contribuição

  • Adicione testes para novos recursos
  • Atualize a documentação
  • Siga o estilo de código existente
  • Adicione exemplos para recursos complexos
  • Atualize o changelog

📄 Licença

Licença MIT - consulte o arquivo LICENSE para detalhes

🙏 Agradecimentos

  • Apple pelo iOS Simulator e ferramentas de desenvolvimento
  • Facebook pelo idb (iOS Development Bridge)
  • Anthropic pelo MCP (Model Context Protocol)
  • Comunidade de código aberto pelas ferramentas e bibliotecas utilizadas

📞 Suporte


Feito com ❤️ para automação iOS e integração com IA