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

This commit is contained in:
Jenn Magder 2021-01-06 12:12:23 -08:00 committed by GitHub
parent e21d822074
commit 3082a2806e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 56 additions and 60 deletions

View file

@ -191,7 +191,7 @@ Future<void> _testBuildIosFramework(Directory projectDir, { bool isModule = fals
section('Check debug build has no Dart AOT');
final String aotSymbols = await dylibSymbols(debugAppFrameworkPath);
final String aotSymbols = await _dylibSymbols(debugAppFrameworkPath);
if (aotSymbols.contains('architecture') ||
aotSymbols.contains('_kDartVmSnapshot')) {
@ -212,7 +212,7 @@ Future<void> _testBuildIosFramework(Directory projectDir, { bool isModule = fals
await _checkBitcode(appFrameworkPath, mode);
final String aotSymbols = await dylibSymbols(appFrameworkPath);
final String aotSymbols = await _dylibSymbols(appFrameworkPath);
if (!aotSymbols.contains('_kDartVmSnapshot')) {
throw TaskResult.failure('$mode App.framework missing Dart AOT');
@ -228,7 +228,7 @@ Future<void> _testBuildIosFramework(Directory projectDir, { bool isModule = fals
'vm_snapshot_data',
));
checkFileNotExists(path.join(
checkFileExists(path.join(
outputPath,
mode,
'App.xcframework',
@ -314,13 +314,8 @@ Future<void> _testBuildIosFramework(Directory projectDir, { bool isModule = fals
'DeviceInfoPlugin.h',
);
if (mode == 'Debug') {
checkFileExists(simulatorFrameworkPath);
checkFileExists(simulatorFrameworkHeaderPath);
} else {
checkFileNotExists(simulatorFrameworkPath);
checkFileNotExists(simulatorFrameworkHeaderPath);
}
}
section('Check all modes have generated plugin registrant');
@ -357,11 +352,7 @@ Future<void> _testBuildIosFramework(Directory projectDir, { bool isModule = fals
'Headers',
'GeneratedPluginRegistrant.h',
);
if (mode == 'Debug') {
checkFileExists(simulatorHeaderPath);
} else {
checkFileNotExists(simulatorHeaderPath);
}
}
// This builds all build modes' frameworks by default
@ -443,3 +434,12 @@ Future<void> _checkBitcode(String frameworkPath, String mode) async {
throw TaskResult.failure('$frameworkPath does not contain bitcode');
}
}
Future<String> _dylibSymbols(String pathToDylib) {
return eval('nm', <String>[
'-g',
pathToDylib,
'-arch',
'arm64',
]);
}

View file

@ -10,10 +10,6 @@ import 'utils.dart';
typedef SimulatorFunction = Future<void> Function(String deviceId);
Future<String> dylibSymbols(String pathToDylib) {
return eval('nm', <String>['-g', pathToDylib]);
}
Future<String> fileType(String pathToBinary) {
return eval('file', <String>[pathToBinary]);
}

View file

@ -342,17 +342,9 @@ end
);
final List<EnvironmentType> environmentTypes = <EnvironmentType>[
EnvironmentType.physical,
EnvironmentType.simulator,
];
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 {
for (final EnvironmentType sdkType in environmentTypes) {
@ -392,6 +384,15 @@ end
? null
: 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);
if (!result.success) {
for (final ExceptionMeasurement measurement
@ -453,7 +454,8 @@ end
throwToolExit('Unable to build plugin frameworks: ${buildPluginsResult.stderr}');
}
if (mode == BuildMode.debug) {
// Always build debug for simulator.
final String simulatorConfiguration = toTitleCase(getNameForBuildMode(BuildMode.debug));
pluginsBuildCommand = <String>[
...globals.xcode.xcrunCommand(),
'xcodebuild',
@ -461,7 +463,7 @@ end
'-sdk',
'iphonesimulator',
'-configuration',
xcodeBuildConfiguration,
simulatorConfiguration,
'SYMROOT=${simulatorBuildOutput.path}',
'ENABLE_BITCODE=YES', // Support host apps with bitcode enabled.
'ARCHS=x86_64',
@ -482,13 +484,12 @@ end
'Unable to build plugin frameworks for simulator: ${buildPluginsResult.stderr}',
);
}
}
final Directory iPhoneBuildConfiguration = iPhoneBuildOutput.childDirectory(
'$xcodeBuildConfiguration-iphoneos',
);
final Directory simulatorBuildConfiguration = simulatorBuildOutput.childDirectory(
'$xcodeBuildConfiguration-iphonesimulator',
'$simulatorConfiguration-iphonesimulator',
);
final Iterable<Directory> products = iPhoneBuildConfiguration
@ -504,7 +505,6 @@ end
final List<Directory> frameworks = <Directory>[
podProduct as Directory,
if (mode == BuildMode.debug)
simulatorBuildConfiguration
.childDirectory(builtProduct.basename)
.childDirectory(podFrameworkName)