build_app
Build Kotlin Multiplatform Mobile applications for Android or iOS, returning structured results with error details to facilitate debugging and automated workflows.
Instructions
Build a KMM application for Android or iOS. Returns structured build result with error details on failure.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| platform | Yes | Target platform to build for | |
| variant | No | Build variant (default: debug) | |
| clean | No | Clean before building (default: false) | |
| iosDestination | No | iOS simulator destination (e.g., "platform=iOS Simulator,name=iPhone 15 Pro") | |
| androidModule | No | Android module name (default: androidApp) | |
| iosScheme | No | iOS scheme name (default: iosApp) | |
| timeoutMs | No | Build timeout in milliseconds (default: 30 minutes) |
Implementation Reference
- src/tools/build/build-app.ts:36-74 (handler)Main handler function for the 'build_app' tool. It validates the input arguments, determines the platform (Android or iOS), and delegates to the appropriate platform-specific build helper.export async function buildApp(args: BuildAppArgs): Promise<BuildResult> { const { platform, variant = 'debug', clean = false, iosDestination = 'platform=iOS Simulator,name=iPhone 15 Pro', androidModule = 'androidApp', iosScheme = 'iosApp', timeoutMs = DEFAULTS.BUILD_TIMEOUT_MS, } = args; // Validate platform if (!isPlatform(platform)) { throw Errors.invalidArguments(`Invalid platform: ${platform}. Must be 'android' or 'ios'`); } // Validate variant if (!isBuildVariant(variant)) { throw Errors.invalidArguments(`Invalid variant: ${variant}. Must be 'debug' or 'release'`); } // Build based on platform if (platform === 'android') { return buildAndroid({ variant, clean, moduleName: androidModule, timeoutMs, }); } else { return buildIOS({ variant, clean, destination: iosDestination, scheme: iosScheme, timeoutMs, }); } }
- src/tools/build/build-app.ts:16-31 (schema)TypeScript interface defining the input arguments for the build_app tool, used for type safety and documentation.export interface BuildAppArgs { /** Target platform */ platform: string; /** Build variant */ variant?: string; /** Clean before build */ clean?: boolean; /** iOS simulator destination */ iosDestination?: string; /** Android module name */ androidModule?: string; /** iOS scheme name */ iosScheme?: string; /** Build timeout in milliseconds */ timeoutMs?: number; }
- src/tools/build/build-app.ts:79-93 (helper)Helper function that builds the Android app by invoking the Gradle build process.async function buildAndroid(options: { variant: BuildVariant; clean: boolean; moduleName: string; timeoutMs: number; }): Promise<BuildResult> { const gradleOptions: GradleBuildOptions = { variant: options.variant, clean: options.clean, moduleName: options.moduleName, timeoutMs: options.timeoutMs, }; return buildGradle(gradleOptions); }
- src/tools/build/build-app.ts:98-120 (helper)Helper function that builds the iOS app by invoking the Xcode build process, with availability check.async function buildIOS(options: { variant: BuildVariant; clean: boolean; destination: string; scheme: string; timeoutMs: number; }): Promise<BuildResult> { // Check if xcodebuild is available const available = await isXcodebuildAvailable(); if (!available) { throw Errors.platformUnavailable('ios'); } const xcodeOptions: XcodeBuildOptions = { variant: options.variant, clean: options.clean, destination: options.destination, scheme: options.scheme, timeoutMs: options.timeoutMs, }; return buildXcode(xcodeOptions); }
- src/tools/register.ts:122-127 (registration)Central registration during server startup: imports and invokes registerBuildAppTool to register the 'build_app' tool in the global registry.const { registerBuildAppTool } = await import('./build/build-app.js'); const { registerInstallAppTool } = await import('./build/install-app.js'); const { registerLaunchAppTool } = await import('./build/launch-app.js'); registerBuildAppTool(); registerInstallAppTool();