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
| Name | Required | Description | Default |
|---|---|---|---|
| udid | Yes | Simulator UDID |
Implementation Reference
- src/tools/ios.ts:379-426 (handler)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, }, }; }
- src/tools/ios.ts:368-427 (registration)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, }, }; } });
- src/tools/ios.ts:52-54 (schema)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), });
- src/tools/ios.ts:159-162 (helper)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); };
- src/tools/ios.ts:140-144 (helper)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}`); } };