From 775332a2eee0e4baaf7fcce680f6cd95d0b6a7d5 Mon Sep 17 00:00:00 2001 From: bitxeno <137328844+bitxeno@users.noreply.github.com> Date: Wed, 22 Apr 2026 14:54:51 +0800 Subject: [PATCH] feat(device): add multiple platform support for device build --- src/mcp/tools/device/build_device.ts | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/mcp/tools/device/build_device.ts b/src/mcp/tools/device/build_device.ts index 16a537c46..5a6d9ade2 100644 --- a/src/mcp/tools/device/build_device.ts +++ b/src/mcp/tools/device/build_device.ts @@ -6,7 +6,6 @@ */ import * as z from 'zod'; -import { XcodePlatform } from '../../../types/common.ts'; import { executeXcodeBuildCommand } from '../../../utils/build/index.ts'; import type { CommandExecutor } from '../../../utils/execution/index.ts'; import { getDefaultCommandExecutor } from '../../../utils/execution/index.ts'; @@ -19,12 +18,14 @@ import { nullifyEmptyStrings } from '../../../utils/schema-helpers.ts'; import { startBuildPipeline } from '../../../utils/xcodebuild-pipeline.ts'; import { finalizeInlineXcodebuild } from '../../../utils/xcodebuild-output.ts'; import { formatToolPreflight } from '../../../utils/build-preflight.ts'; +import { mapDevicePlatform } from './build-settings.ts'; // Unified schema: XOR between projectPath and workspacePath const baseSchemaObject = z.object({ projectPath: z.string().optional().describe('Path to the .xcodeproj file'), workspacePath: z.string().optional().describe('Path to the .xcworkspace file'), scheme: z.string().describe('The scheme to build'), + platform: z.enum(['iOS', 'watchOS', 'tvOS', 'visionOS']).optional().describe('default: iOS'), configuration: z.string().optional().describe('Build configuration (Debug, Release)'), derivedDataPath: z.string().optional(), extraArgs: z.array(z.string()).optional(), @@ -48,6 +49,7 @@ const publicSchemaObject = baseSchemaObject.omit({ projectPath: true, workspacePath: true, scheme: true, + platform: true, configuration: true, derivedDataPath: true, preferXcodebuild: true, @@ -62,14 +64,15 @@ export async function buildDeviceLogic( executor: CommandExecutor, ): Promise { const ctx = getHandlerContext(); + const platform = mapDevicePlatform(params.platform); const processedParams = { ...params, configuration: params.configuration ?? 'Debug', }; const platformOptions = { - platform: XcodePlatform.iOS, - logPrefix: 'iOS Device Build', + platform, + logPrefix: `${platform} Device Build`, }; const preflightText = formatToolPreflight({ @@ -78,7 +81,7 @@ export async function buildDeviceLogic( workspacePath: params.workspacePath, projectPath: params.projectPath, configuration: processedParams.configuration, - platform: 'iOS', + platform: String(platform), }); const pipelineParams = { @@ -86,7 +89,7 @@ export async function buildDeviceLogic( workspacePath: params.workspacePath, projectPath: params.projectPath, configuration: processedParams.configuration, - platform: 'iOS', + platform: String(platform), preflight: preflightText, }; @@ -119,6 +122,7 @@ export async function buildDeviceLogic( ctx.nextStepParams = { get_device_app_path: { scheme: params.scheme, + platform: String(platform), }, }; }