flutter_release_build
Build signed release versions for mobile platforms (APK, AAB, IPA) from Flutter projects with optional code obfuscation to prepare apps for distribution.
Instructions
Build release versions for all platforms: APK, AAB, IPA with signing
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| cwd | Yes | Working directory (Flutter project root) | |
| platforms | No | Platforms to build for | |
| obfuscate | No | Obfuscate Dart code |
Implementation Reference
- src/tools/super-tools.ts:339-370 (handler)Primary handler for 'flutter_release_build' tool. Orchestrates release builds for multiple platforms (APK, AAB, IPA) by invoking the underlying 'flutter_build' tool for each platform, handles errors per platform, and aggregates results with artifact paths.handler: async (args: any) => { const builds: Record<string, any> = {}; const buildTool = flutterTools.get('flutter_build'); for (const platform of args.platforms || ['apk', 'appbundle']) { try { const result = await buildTool.handler({ cwd: args.cwd, target: platform, buildMode: 'release' }); builds[platform] = result; } catch (error) { builds[platform] = { success: false, error: error instanceof Error ? error.message : String(error) }; } } return { success: Object.values(builds).some((b: any) => b.success), data: { builds, artifacts: { apk: 'build/app/outputs/flutter-apk/app-release.apk', appbundle: 'build/app/outputs/bundle/release/app-release.aab', ipa: 'build/ios/ipa/*.ipa' } } }; }
- src/tools/super-tools.ts:312-371 (registration)Registration of the 'flutter_release_build' super-tool, including name, description, input schema, and handler reference.tools.set('flutter_release_build', { name: 'flutter_release_build', description: 'Build release versions for all platforms: APK, AAB, IPA with signing', inputSchema: { type: 'object', properties: { cwd: { type: 'string', description: 'Working directory (Flutter project root)' }, platforms: { type: 'array', items: { type: 'string', enum: ['apk', 'appbundle', 'ipa', 'ios'] }, description: 'Platforms to build for', default: ['apk', 'appbundle'] }, obfuscate: { type: 'boolean', description: 'Obfuscate Dart code', default: true } }, required: ['cwd'] }, handler: async (args: any) => { const builds: Record<string, any> = {}; const buildTool = flutterTools.get('flutter_build'); for (const platform of args.platforms || ['apk', 'appbundle']) { try { const result = await buildTool.handler({ cwd: args.cwd, target: platform, buildMode: 'release' }); builds[platform] = result; } catch (error) { builds[platform] = { success: false, error: error instanceof Error ? error.message : String(error) }; } } return { success: Object.values(builds).some((b: any) => b.success), data: { builds, artifacts: { apk: 'build/app/outputs/flutter-apk/app-release.apk', appbundle: 'build/app/outputs/bundle/release/app-release.aab', ipa: 'build/ios/ipa/*.ipa' } } }; } });
- src/tools/flutter.ts:653-717 (handler)Underlying 'flutter_build' tool handler called by 'flutter_release_build'. Executes 'flutter build <target> --release' command after validation, handles the actual Flutter CLI build process.tools.set('flutter_build', { name: 'flutter_build', description: 'Build Flutter app for specific target platform', inputSchema: { type: 'object', properties: { cwd: { type: 'string', minLength: 1, description: 'Working directory (Flutter project root)' }, target: { type: 'string', enum: ['apk', 'appbundle', 'ipa', 'ios', 'android', 'web', 'windows', 'macos', 'linux'], description: 'Build target platform' }, buildMode: { type: 'string', enum: ['debug', 'profile', 'release'], description: 'Build mode' }, flavor: { type: 'string', description: 'Build flavor' } }, required: ['cwd', 'target'] }, handler: async (args: any) => { const validation = FlutterBuildSchema.safeParse(args); if (!validation.success) { throw new Error(`Invalid request: ${validation.error.message}`); } const { cwd, target, buildMode = 'debug', flavor } = validation.data; // Validate that it's a Flutter project await validateFlutterProject(cwd); const flutter_args = ['build', target]; if (buildMode !== 'debug') { flutter_args.push(`--${buildMode}`); } if (flavor) { flutter_args.push('--flavor', flavor); } const result = await processExecutor.execute('flutter', flutter_args, { cwd, timeout: 1800000, // 30 minutes timeout for builds }); if (result.exitCode !== 0) { throw new Error(`Flutter build failed: ${result.stderr || result.stdout}`); } return { success: true, data: { target, buildMode, flavor, projectPath: cwd, output: result.stdout, duration: result.duration, exitCode: result.exitCode, }, }; } });
- src/tools/flutter.ts:81-86 (schema)Zod schema for validating inputs to the 'flutter_build' tool, used by 'flutter_release_build' indirectly.const FlutterBuildSchema = z.object({ cwd: z.string().min(1), target: z.enum(['apk', 'appbundle', 'ipa', 'ios', 'android', 'web', 'windows', 'macos', 'linux']), buildMode: z.enum(['debug', 'profile', 'release']).default('debug'), flavor: z.string().optional(), });
- src/utils/tool-categories.ts:305-313 (helper)Metadata and categorization for 'flutter_release_build' tool, defining requirements, performance expectations, and category.'flutter_release_build': { name: 'flutter_release_build', category: ToolCategory.ESSENTIAL, platform: 'flutter', requiredTools: [RequiredTool.FLUTTER, RequiredTool.GRADLE, RequiredTool.XCODEBUILD], description: 'Build release versions for all platforms: APK, AAB, IPA with signing', safeForTesting: false, performance: { expectedDuration: 300000, timeout: 1200000 } },