Skip to main content
Glama

ios_shutdown_simulator

Shutdown an iOS simulator by providing its UDID to manage device resources during mobile development workflows.

Instructions

Shutdown an iOS simulator

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
udidYesSimulator UDID

Implementation Reference

  • Executes the tool logic: validates UDID, stops active recordings, runs 'xcrun simctl shutdown' command with timeout, handles already-shutdown case (exit 164), returns success status and output.
    handler: async (args: any) => { checkMacOS(); const validation = IosSimulatorActionSchema.safeParse(args); if (!validation.success) { throw new Error(`Invalid request: ${validation.error.message}`); } const { udid } = validation.data; // Validate UDID format if (!validateUDID(udid)) { throw new Error(`Invalid simulator UDID format. UDID must be in format XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX: ${udid}`); } // Stop any active recordings for this simulator if (activeRecordings.has(udid)) { const pid = activeRecordings.get(udid); try { process.kill(pid!, 'SIGTERM'); activeRecordings.delete(udid); } catch { // Process might already be dead activeRecordings.delete(udid); } } const result = await processExecutor.execute('xcrun', ['simctl', 'shutdown', udid], { timeout: 30000, // 30 seconds timeout for shutdown }); // Note: simctl shutdown returns exit code 164 if simulator is already shut down if (result.exitCode !== 0 && result.exitCode !== 164) { throw new Error(`Failed to shutdown iOS simulator: ${result.stderr}`); } const wasAlreadyShutdown = result.exitCode === 164; return { success: true, data: { udid, status: wasAlreadyShutdown ? 'already_shutdown' : 'shutdown', message: wasAlreadyShutdown ? 'Simulator was already shut down' : 'Simulator shut down successfully', output: result.stdout, }, }; }
  • Registers the 'ios_shutdown_simulator' tool in the tools Map with name, description, inputSchema (requiring udid), and handler function reference.
    // iOS Simulator Management - Shutdown simulator tools.set('ios_shutdown_simulator', { name: 'ios_shutdown_simulator', description: 'Shutdown an iOS simulator', inputSchema: { type: 'object', properties: { udid: { type: 'string', minLength: 1, description: 'Simulator UDID' } }, required: ['udid'] }, handler: async (args: any) => { checkMacOS(); const validation = IosSimulatorActionSchema.safeParse(args); if (!validation.success) { throw new Error(`Invalid request: ${validation.error.message}`); } const { udid } = validation.data; // Validate UDID format if (!validateUDID(udid)) { throw new Error(`Invalid simulator UDID format. UDID must be in format XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX: ${udid}`); } // Stop any active recordings for this simulator if (activeRecordings.has(udid)) { const pid = activeRecordings.get(udid); try { process.kill(pid!, 'SIGTERM'); activeRecordings.delete(udid); } catch { // Process might already be dead activeRecordings.delete(udid); } } const result = await processExecutor.execute('xcrun', ['simctl', 'shutdown', udid], { timeout: 30000, // 30 seconds timeout for shutdown }); // Note: simctl shutdown returns exit code 164 if simulator is already shut down if (result.exitCode !== 0 && result.exitCode !== 164) { throw new Error(`Failed to shutdown iOS simulator: ${result.stderr}`); } const wasAlreadyShutdown = result.exitCode === 164; return { success: true, data: { udid, status: wasAlreadyShutdown ? 'already_shutdown' : 'shutdown', message: wasAlreadyShutdown ? 'Simulator was already shut down' : 'Simulator shut down successfully', output: result.stdout, }, }; } });
  • Zod schema for validating input parameters (udid: string min length 1), used by shutdown, boot, and erase simulator tools.
    const IosSimulatorActionSchema = z.object({ udid: z.string().min(1), });
  • Helper function to validate iOS simulator UDID format using UUID v4 regex pattern.
    const validateUDID = (udid: string): boolean => { const uuidPattern = /^[A-F0-9]{8}-[A-F0-9]{4}-[A-F0-9]{4}-[A-F0-9]{4}-[A-F0-9]{12}$/i; return uuidPattern.test(udid); };
  • Helper function to ensure the platform is macOS (darwin), throws error otherwise.
    const checkMacOS = (): void => { if (process.platform !== 'darwin') { throw new Error(`iOS development tools only work on macOS. Current platform: ${process.platform}`); } };

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/cristianoaredes/mcp-mobile-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server