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.
diff --git a/packages/flutter_tools/lib/src/ios/devices.dart b/packages/flutter_tools/lib/src/ios/devices.dart
index 2a11caa..e3bb161 100644
--- a/packages/flutter_tools/lib/src/ios/devices.dart
+++ b/packages/flutter_tools/lib/src/ios/devices.dart
@@ -167,7 +167,7 @@
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 2248932..fa2d3e5 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_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 @@
Future<XcodeBuildResult> buildXcodeProject({
BuildableIOSApp app,
BuildInfo buildInfo,
- String target: bundle.defaultMainPath,
+ String targetOverride,
bool buildForDevice,
bool codesign: true,
bool usesTerminalUi: true,
@@ -246,7 +245,7 @@
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 740a6e5..6ad3a20 100644
--- a/packages/flutter_tools/lib/src/ios/simulators.dart
+++ b/packages/flutter_tools/lib/src/ios/simulators.dart
@@ -283,7 +283,7 @@
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 @@
return criteria.reduce((bool a, bool b) => a && b);
}
- Future<Null> _setupUpdatedApplicationBundle(ApplicationPackage app, BuildInfo buildInfo) async {
- await _sideloadUpdatedAssetsForInstalledApplicationBundle(app, buildInfo);
+ Future<Null> _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<Null> _buildAndInstallApplicationBundle(ApplicationPackage app, BuildInfo buildInfo) async {
+ Future<Null> _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 @@
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 @@
await SimControl.instance.install(id, fs.path.absolute(bundle.path));
}
- Future<Null> _sideloadUpdatedAssetsForInstalledApplicationBundle(ApplicationPackage app, BuildInfo buildInfo) {
+ Future<Null> _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 3b75183..f11dad6 100644
--- a/packages/flutter_tools/lib/src/ios/xcodeproj.dart
+++ b/packages/flutter_tools/lib/src/ios/xcodeproj.dart
@@ -37,17 +37,20 @@
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 @@
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}');