diff --git a/packages/flutter_tools/lib/src/commands/build_ios.dart b/packages/flutter_tools/lib/src/commands/build_ios.dart index 85e1922ef44..533effc64f4 100644 --- a/packages/flutter_tools/lib/src/commands/build_ios.dart +++ b/packages/flutter_tools/lib/src/commands/build_ios.dart @@ -15,7 +15,9 @@ import 'package:path/path.dart' as path; class BuildIOSCommand extends FlutterCommand { BuildIOSCommand() { - argParser.addFlag('simulator', help: 'Build for the iOS simulator instead of the device'); + argParser.addFlag('simulator', help: 'Build for the iOS simulator instead of the device.'); + argParser.addFlag('codesign', negatable: true, defaultsTo: true, + help: 'Codesign the application bundle (only available on device builds).'); } @override @@ -39,6 +41,12 @@ class BuildIOSCommand extends FlutterCommand { } bool forSimulator = argResults['simulator']; + bool shouldCodesign = argResults['codesign']; + + if (!forSimulator && !shouldCodesign) { + printStatus('Warning: Building for device with codesigning disabled.'); + printStatus('You will have to manually codesign before deploying to device.'); + } String logTarget = forSimulator ? "simulator" : "device"; @@ -50,7 +58,7 @@ class BuildIOSCommand extends FlutterCommand { await buildDir.create(); bool result = await buildIOSXcodeProject(app, - buildForDevice: !forSimulator, buildDirectory: buildDir); + buildForDevice: !forSimulator, buildDirectory: buildDir, codesign: shouldCodesign); if (!result) { printError('Encountered error while building for $logTarget.'); diff --git a/packages/flutter_tools/lib/src/ios/mac.dart b/packages/flutter_tools/lib/src/ios/mac.dart index 7a71226b9be..42e1f5f2b3a 100644 --- a/packages/flutter_tools/lib/src/ios/mac.dart +++ b/packages/flutter_tools/lib/src/ios/mac.dart @@ -97,7 +97,7 @@ bool _xcodeVersionCheckValid(int major, int minor) { } Future buildIOSXcodeProject(ApplicationPackage app, - { bool buildForDevice, Directory buildDirectory }) async { + { bool buildForDevice, Directory buildDirectory, bool codesign: true }) async { String flutterProjectPath = Directory.current.path; if (xcodeProjectRequiresUpdate()) { @@ -125,6 +125,8 @@ Future buildIOSXcodeProject(ApplicationPackage app, '/usr/bin/env', 'xcrun', 'xcodebuild', + 'clean', + 'build', '-target', 'Runner', '-configuration', 'Release', 'ONLY_ACTIVE_ARCH=YES', @@ -141,6 +143,15 @@ Future buildIOSXcodeProject(ApplicationPackage app, if (buildForDevice) { commands.addAll(['-sdk', 'iphoneos', '-arch', 'arm64']); + if (!codesign) { + commands.addAll( + [ + 'CODE_SIGNING_ALLOWED=NO', + 'CODE_SIGNING_REQUIRED=NO', + 'CODE_SIGNING_IDENTITY=""' + ] + ); + } } else { commands.addAll(['-sdk', 'iphonesimulator', '-arch', 'x86_64']); }