Unverified Commit 3082a280 authored by Jenn Magder's avatar Jenn Magder Committed by GitHub

build ios-framework simulator slices for profile/release (#73378)

parent e21d8220
...@@ -191,7 +191,7 @@ Future<void> _testBuildIosFramework(Directory projectDir, { bool isModule = fals ...@@ -191,7 +191,7 @@ Future<void> _testBuildIosFramework(Directory projectDir, { bool isModule = fals
section('Check debug build has no Dart AOT'); section('Check debug build has no Dart AOT');
final String aotSymbols = await dylibSymbols(debugAppFrameworkPath); final String aotSymbols = await _dylibSymbols(debugAppFrameworkPath);
if (aotSymbols.contains('architecture') || if (aotSymbols.contains('architecture') ||
aotSymbols.contains('_kDartVmSnapshot')) { aotSymbols.contains('_kDartVmSnapshot')) {
...@@ -212,7 +212,7 @@ Future<void> _testBuildIosFramework(Directory projectDir, { bool isModule = fals ...@@ -212,7 +212,7 @@ Future<void> _testBuildIosFramework(Directory projectDir, { bool isModule = fals
await _checkBitcode(appFrameworkPath, mode); await _checkBitcode(appFrameworkPath, mode);
final String aotSymbols = await dylibSymbols(appFrameworkPath); final String aotSymbols = await _dylibSymbols(appFrameworkPath);
if (!aotSymbols.contains('_kDartVmSnapshot')) { if (!aotSymbols.contains('_kDartVmSnapshot')) {
throw TaskResult.failure('$mode App.framework missing Dart AOT'); throw TaskResult.failure('$mode App.framework missing Dart AOT');
...@@ -228,7 +228,7 @@ Future<void> _testBuildIosFramework(Directory projectDir, { bool isModule = fals ...@@ -228,7 +228,7 @@ Future<void> _testBuildIosFramework(Directory projectDir, { bool isModule = fals
'vm_snapshot_data', 'vm_snapshot_data',
)); ));
checkFileNotExists(path.join( checkFileExists(path.join(
outputPath, outputPath,
mode, mode,
'App.xcframework', 'App.xcframework',
...@@ -314,13 +314,8 @@ Future<void> _testBuildIosFramework(Directory projectDir, { bool isModule = fals ...@@ -314,13 +314,8 @@ Future<void> _testBuildIosFramework(Directory projectDir, { bool isModule = fals
'DeviceInfoPlugin.h', 'DeviceInfoPlugin.h',
); );
if (mode == 'Debug') { checkFileExists(simulatorFrameworkPath);
checkFileExists(simulatorFrameworkPath); checkFileExists(simulatorFrameworkHeaderPath);
checkFileExists(simulatorFrameworkHeaderPath);
} else {
checkFileNotExists(simulatorFrameworkPath);
checkFileNotExists(simulatorFrameworkHeaderPath);
}
} }
section('Check all modes have generated plugin registrant'); section('Check all modes have generated plugin registrant');
...@@ -357,11 +352,7 @@ Future<void> _testBuildIosFramework(Directory projectDir, { bool isModule = fals ...@@ -357,11 +352,7 @@ Future<void> _testBuildIosFramework(Directory projectDir, { bool isModule = fals
'Headers', 'Headers',
'GeneratedPluginRegistrant.h', 'GeneratedPluginRegistrant.h',
); );
if (mode == 'Debug') { checkFileExists(simulatorHeaderPath);
checkFileExists(simulatorHeaderPath);
} else {
checkFileNotExists(simulatorHeaderPath);
}
} }
// This builds all build modes' frameworks by default // This builds all build modes' frameworks by default
...@@ -443,3 +434,12 @@ Future<void> _checkBitcode(String frameworkPath, String mode) async { ...@@ -443,3 +434,12 @@ Future<void> _checkBitcode(String frameworkPath, String mode) async {
throw TaskResult.failure('$frameworkPath does not contain bitcode'); throw TaskResult.failure('$frameworkPath does not contain bitcode');
} }
} }
Future<String> _dylibSymbols(String pathToDylib) {
return eval('nm', <String>[
'-g',
pathToDylib,
'-arch',
'arm64',
]);
}
...@@ -10,10 +10,6 @@ import 'utils.dart'; ...@@ -10,10 +10,6 @@ import 'utils.dart';
typedef SimulatorFunction = Future<void> Function(String deviceId); typedef SimulatorFunction = Future<void> Function(String deviceId);
Future<String> dylibSymbols(String pathToDylib) {
return eval('nm', <String>['-g', pathToDylib]);
}
Future<String> fileType(String pathToBinary) { Future<String> fileType(String pathToBinary) {
return eval('file', <String>[pathToBinary]); return eval('file', <String>[pathToBinary]);
} }
......
...@@ -342,17 +342,9 @@ end ...@@ -342,17 +342,9 @@ end
); );
final List<EnvironmentType> environmentTypes = <EnvironmentType>[ final List<EnvironmentType> environmentTypes = <EnvironmentType>[
EnvironmentType.physical, EnvironmentType.physical,
EnvironmentType.simulator,
]; ];
final List<Directory> frameworks = <Directory>[]; final List<Directory> frameworks = <Directory>[];
Target target;
if (buildInfo.isDebug) {
environmentTypes.add(EnvironmentType.simulator);
target = const DebugIosApplicationBundle();
} else if (buildInfo.isProfile) {
target = const ProfileIosApplicationBundle();
} else {
target = const ReleaseIosApplicationBundle();
}
try { try {
for (final EnvironmentType sdkType in environmentTypes) { for (final EnvironmentType sdkType in environmentTypes) {
...@@ -392,6 +384,15 @@ end ...@@ -392,6 +384,15 @@ end
? null ? null
: globals.flutterVersion.engineRevision, : globals.flutterVersion.engineRevision,
); );
Target target;
// Always build debug for simulator.
if (buildInfo.isDebug || sdkType == EnvironmentType.simulator) {
target = const DebugIosApplicationBundle();
} else if (buildInfo.isProfile) {
target = const ProfileIosApplicationBundle();
} else {
target = const ReleaseIosApplicationBundle();
}
final BuildResult result = await buildSystem.build(target, environment); final BuildResult result = await buildSystem.build(target, environment);
if (!result.success) { if (!result.success) {
for (final ExceptionMeasurement measurement for (final ExceptionMeasurement measurement
...@@ -453,42 +454,42 @@ end ...@@ -453,42 +454,42 @@ end
throwToolExit('Unable to build plugin frameworks: ${buildPluginsResult.stderr}'); throwToolExit('Unable to build plugin frameworks: ${buildPluginsResult.stderr}');
} }
if (mode == BuildMode.debug) { // Always build debug for simulator.
pluginsBuildCommand = <String>[ final String simulatorConfiguration = toTitleCase(getNameForBuildMode(BuildMode.debug));
...globals.xcode.xcrunCommand(), pluginsBuildCommand = <String>[
'xcodebuild', ...globals.xcode.xcrunCommand(),
'-alltargets', 'xcodebuild',
'-sdk', '-alltargets',
'iphonesimulator', '-sdk',
'-configuration', 'iphonesimulator',
xcodeBuildConfiguration, '-configuration',
'SYMROOT=${simulatorBuildOutput.path}', simulatorConfiguration,
'ENABLE_BITCODE=YES', // Support host apps with bitcode enabled. 'SYMROOT=${simulatorBuildOutput.path}',
'ARCHS=x86_64', 'ENABLE_BITCODE=YES', // Support host apps with bitcode enabled.
'ONLY_ACTIVE_ARCH=NO', // No device targeted, so build all valid architectures. 'ARCHS=x86_64',
'BUILD_LIBRARY_FOR_DISTRIBUTION=YES', 'ONLY_ACTIVE_ARCH=NO', // No device targeted, so build all valid architectures.
]; 'BUILD_LIBRARY_FOR_DISTRIBUTION=YES',
];
buildPluginsResult = await globals.processUtils.run(
pluginsBuildCommand,
workingDirectory: _project.ios.hostAppRoot
.childDirectory('Pods')
.path,
allowReentrantFlutter: false,
);
if (buildPluginsResult.exitCode != 0) { buildPluginsResult = await globals.processUtils.run(
throwToolExit( pluginsBuildCommand,
'Unable to build plugin frameworks for simulator: ${buildPluginsResult.stderr}', workingDirectory: _project.ios.hostAppRoot
); .childDirectory('Pods')
} .path,
allowReentrantFlutter: false,
);
if (buildPluginsResult.exitCode != 0) {
throwToolExit(
'Unable to build plugin frameworks for simulator: ${buildPluginsResult.stderr}',
);
} }
final Directory iPhoneBuildConfiguration = iPhoneBuildOutput.childDirectory( final Directory iPhoneBuildConfiguration = iPhoneBuildOutput.childDirectory(
'$xcodeBuildConfiguration-iphoneos', '$xcodeBuildConfiguration-iphoneos',
); );
final Directory simulatorBuildConfiguration = simulatorBuildOutput.childDirectory( final Directory simulatorBuildConfiguration = simulatorBuildOutput.childDirectory(
'$xcodeBuildConfiguration-iphonesimulator', '$simulatorConfiguration-iphonesimulator',
); );
final Iterable<Directory> products = iPhoneBuildConfiguration final Iterable<Directory> products = iPhoneBuildConfiguration
...@@ -504,10 +505,9 @@ end ...@@ -504,10 +505,9 @@ end
final List<Directory> frameworks = <Directory>[ final List<Directory> frameworks = <Directory>[
podProduct as Directory, podProduct as Directory,
if (mode == BuildMode.debug) simulatorBuildConfiguration
simulatorBuildConfiguration .childDirectory(builtProduct.basename)
.childDirectory(builtProduct.basename) .childDirectory(podFrameworkName)
.childDirectory(podFrameworkName)
]; ];
await _produceXCFramework(frameworks, binaryName, modeDirectory); await _produceXCFramework(frameworks, binaryName, modeDirectory);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment