From be6501a91cb1b1ffa32869792ef94956387724bf Mon Sep 17 00:00:00 2001 From: Simon Lightfoot Date: Mon, 21 May 2018 11:54:38 +0100 Subject: [PATCH] Patch to fix builds with custom targets on iOS simulator. (#17734) * Patch to fix builds with custom targets on iOS simulator. #16787 * Fix for unused import. * Code review changes applied. --- .../lib/src/commands/build_ios.dart | 2 +- .../flutter_tools/lib/src/ios/devices.dart | 2 +- packages/flutter_tools/lib/src/ios/mac.dart | 5 ++--- .../flutter_tools/lib/src/ios/simulators.dart | 21 ++++++++++++------- .../flutter_tools/lib/src/ios/xcodeproj.dart | 10 ++++++--- 5 files changed, 25 insertions(+), 15 deletions(-) diff --git a/packages/flutter_tools/lib/src/commands/build_ios.dart b/packages/flutter_tools/lib/src/commands/build_ios.dart index 1738b6f769a..397d2faf3d1 100644 --- a/packages/flutter_tools/lib/src/commands/build_ios.dart +++ b/packages/flutter_tools/lib/src/commands/build_ios.dart @@ -82,7 +82,7 @@ class BuildIOSCommand extends BuildSubCommand { final XcodeBuildResult result = await buildXcodeProject( app: app, buildInfo: buildInfo, - target: targetFile, + targetOverride: targetFile, buildForDevice: !forSimulator, codesign: shouldCodesign, ); diff --git a/packages/flutter_tools/lib/src/ios/devices.dart b/packages/flutter_tools/lib/src/ios/devices.dart index 2a11caa3ab4..e3bb161d554 100644 --- a/packages/flutter_tools/lib/src/ios/devices.dart +++ b/packages/flutter_tools/lib/src/ios/devices.dart @@ -167,7 +167,7 @@ class IOSDevice extends Device { final XcodeBuildResult buildResult = await buildXcodeProject( app: package, buildInfo: debuggingOptions.buildInfo, - target: mainPath, + targetOverride: mainPath, buildForDevice: true, usesTerminalUi: usesTerminalUi, ); diff --git a/packages/flutter_tools/lib/src/ios/mac.dart b/packages/flutter_tools/lib/src/ios/mac.dart index 22489323b1a..fa2d3e59765 100644 --- a/packages/flutter_tools/lib/src/ios/mac.dart +++ b/packages/flutter_tools/lib/src/ios/mac.dart @@ -20,7 +20,6 @@ import '../base/process.dart'; import '../base/process_manager.dart'; import '../base/utils.dart'; import '../build_info.dart'; -import '../bundle.dart' as bundle; import '../globals.dart'; import '../plugins.dart'; import '../services.dart'; @@ -189,7 +188,7 @@ class Xcode { Future buildXcodeProject({ BuildableIOSApp app, BuildInfo buildInfo, - String target: bundle.defaultMainPath, + String targetOverride, bool buildForDevice, bool codesign: true, bool usesTerminalUi: true, @@ -246,7 +245,7 @@ Future buildXcodeProject({ updateGeneratedXcodeProperties( projectPath: fs.currentDirectory.path, buildInfo: buildInfo, - target: target, + targetOverride: targetOverride, previewDart2: buildInfo.previewDart2, ); diff --git a/packages/flutter_tools/lib/src/ios/simulators.dart b/packages/flutter_tools/lib/src/ios/simulators.dart index 740a6e579ce..6ad3a209e1c 100644 --- a/packages/flutter_tools/lib/src/ios/simulators.dart +++ b/packages/flutter_tools/lib/src/ios/simulators.dart @@ -283,7 +283,7 @@ class IOSSimulator extends Device { printTrace('Building ${package.name} for $id.'); try { - await _setupUpdatedApplicationBundle(package, debuggingOptions.buildInfo); + await _setupUpdatedApplicationBundle(package, debuggingOptions.buildInfo, mainPath, usesTerminalUi); } on ToolExit catch (e) { printError(e.message); return new LaunchResult.failed(); @@ -350,14 +350,14 @@ class IOSSimulator extends Device { return criteria.reduce((bool a, bool b) => a && b); } - Future _setupUpdatedApplicationBundle(ApplicationPackage app, BuildInfo buildInfo) async { - await _sideloadUpdatedAssetsForInstalledApplicationBundle(app, buildInfo); + Future _setupUpdatedApplicationBundle(ApplicationPackage app, BuildInfo buildInfo, String mainPath, bool usesTerminalUi) async { + await _sideloadUpdatedAssetsForInstalledApplicationBundle(app, buildInfo, mainPath); if (!await _applicationIsInstalledAndRunning(app)) - return _buildAndInstallApplicationBundle(app, buildInfo); + return _buildAndInstallApplicationBundle(app, buildInfo, mainPath, usesTerminalUi); } - Future _buildAndInstallApplicationBundle(ApplicationPackage app, BuildInfo buildInfo) async { + Future _buildAndInstallApplicationBundle(ApplicationPackage app, BuildInfo buildInfo, String mainPath, bool usesTerminalUi) async { // Step 1: Build the Xcode project. // The build mode for the simulator is always debug. @@ -367,7 +367,13 @@ class IOSSimulator extends Device { extraGenSnapshotOptions: buildInfo.extraGenSnapshotOptions, preferSharedLibrary: buildInfo.preferSharedLibrary); - final XcodeBuildResult buildResult = await buildXcodeProject(app: app, buildInfo: debugBuildInfo, buildForDevice: false); + final XcodeBuildResult buildResult = await buildXcodeProject( + app: app, + buildInfo: debugBuildInfo, + targetOverride: mainPath, + buildForDevice: false, + usesTerminalUi: usesTerminalUi, + ); if (!buildResult.success) throwToolExit('Could not build the application for the simulator.'); @@ -382,10 +388,11 @@ class IOSSimulator extends Device { await SimControl.instance.install(id, fs.path.absolute(bundle.path)); } - Future _sideloadUpdatedAssetsForInstalledApplicationBundle(ApplicationPackage app, BuildInfo buildInfo) { + Future _sideloadUpdatedAssetsForInstalledApplicationBundle(ApplicationPackage app, BuildInfo buildInfo, String mainPath) { // When running in previewDart2 mode, we still need to run compiler to // produce kernel file for the application. return bundle.build( + mainPath: mainPath, precompiledSnapshot: !buildInfo.previewDart2, previewDart2: buildInfo.previewDart2, trackWidgetCreation: buildInfo.trackWidgetCreation, diff --git a/packages/flutter_tools/lib/src/ios/xcodeproj.dart b/packages/flutter_tools/lib/src/ios/xcodeproj.dart index 3b75183af48..f11dad62b49 100644 --- a/packages/flutter_tools/lib/src/ios/xcodeproj.dart +++ b/packages/flutter_tools/lib/src/ios/xcodeproj.dart @@ -37,17 +37,20 @@ void generateXcodeProperties(String projectPath) { updateGeneratedXcodeProperties( projectPath: projectPath, buildInfo: BuildInfo.debug, - target: bundle.defaultMainPath, + targetOverride: bundle.defaultMainPath, previewDart2: false, ); } } /// Writes or rewrites Xcode property files with the specified information. +/// +/// targetOverride: Optional parameter, if null or unspecified the default value +/// from xcode_backend.sh is used 'lib/main.dart'. void updateGeneratedXcodeProperties({ @required String projectPath, @required BuildInfo buildInfo, - @required String target, + String targetOverride, @required bool previewDart2, }) { final StringBuffer localsBuffer = new StringBuffer(); @@ -61,7 +64,8 @@ void updateGeneratedXcodeProperties({ localsBuffer.writeln('FLUTTER_APPLICATION_PATH=${fs.path.normalize(projectPath)}'); // Relative to FLUTTER_APPLICATION_PATH, which is [Directory.current]. - localsBuffer.writeln('FLUTTER_TARGET=$target'); + if (targetOverride != null) + localsBuffer.writeln('FLUTTER_TARGET=$targetOverride'); // The runtime mode for the current build. localsBuffer.writeln('FLUTTER_BUILD_MODE=${buildInfo.modeName}');