mirror of
https://github.com/flutter/flutter
synced 2024-10-13 11:42:54 +00:00
Optimize flutter run logic for iOS by "ONLY_ACTIVE_ARCH=YES" if possible (#27817)
This commit is contained in:
parent
963d69d8b1
commit
52687c7910
|
@ -243,6 +243,9 @@ class IOSDevice extends Device {
|
||||||
// TODO(chinmaygarde): Use mainPath, route.
|
// TODO(chinmaygarde): Use mainPath, route.
|
||||||
printTrace('Building ${package.name} for $id');
|
printTrace('Building ${package.name} for $id');
|
||||||
|
|
||||||
|
final String cpuArchitecture = await iMobileDevice.getInfoForDevice(id, 'CPUArchitecture');
|
||||||
|
final IOSArch iosArch = getIOSArchForName(cpuArchitecture);
|
||||||
|
|
||||||
// Step 1: Build the precompiled/DBC application if necessary.
|
// Step 1: Build the precompiled/DBC application if necessary.
|
||||||
final XcodeBuildResult buildResult = await buildXcodeProject(
|
final XcodeBuildResult buildResult = await buildXcodeProject(
|
||||||
app: package,
|
app: package,
|
||||||
|
@ -250,6 +253,7 @@ class IOSDevice extends Device {
|
||||||
targetOverride: mainPath,
|
targetOverride: mainPath,
|
||||||
buildForDevice: true,
|
buildForDevice: true,
|
||||||
usesTerminalUi: usesTerminalUi,
|
usesTerminalUi: usesTerminalUi,
|
||||||
|
activeArch: iosArch
|
||||||
);
|
);
|
||||||
if (!buildResult.success) {
|
if (!buildResult.success) {
|
||||||
printError('Could not build the precompiled application for the device.');
|
printError('Could not build the precompiled application for the device.');
|
||||||
|
|
|
@ -134,7 +134,7 @@ class IMobileDevice {
|
||||||
|
|
||||||
Future<String> getInfoForDevice(String deviceID, String key) async {
|
Future<String> getInfoForDevice(String deviceID, String key) async {
|
||||||
try {
|
try {
|
||||||
final ProcessResult result = await processManager.run(<String>['ideviceinfo', '-u', deviceID, '-k', key, '--simple']);
|
final ProcessResult result = await processManager.run(<String>['ideviceinfo', '-u', deviceID, '-k', key]);
|
||||||
if (result.exitCode == 255 && result.stdout != null && result.stdout.contains('No device found'))
|
if (result.exitCode == 255 && result.stdout != null && result.stdout.contains('No device found'))
|
||||||
throw IOSDeviceNotFoundError('ideviceinfo could not find device:\n${result.stdout}');
|
throw IOSDeviceNotFoundError('ideviceinfo could not find device:\n${result.stdout}');
|
||||||
if (result.exitCode != 0)
|
if (result.exitCode != 0)
|
||||||
|
@ -294,6 +294,7 @@ Future<XcodeBuildResult> buildXcodeProject({
|
||||||
BuildInfo buildInfo,
|
BuildInfo buildInfo,
|
||||||
String targetOverride,
|
String targetOverride,
|
||||||
bool buildForDevice,
|
bool buildForDevice,
|
||||||
|
IOSArch activeArch,
|
||||||
bool codesign = true,
|
bool codesign = true,
|
||||||
bool usesTerminalUi = true,
|
bool usesTerminalUi = true,
|
||||||
}) async {
|
}) async {
|
||||||
|
@ -435,6 +436,14 @@ Future<XcodeBuildResult> buildXcodeProject({
|
||||||
buildCommands.addAll(<String>['-sdk', 'iphonesimulator', '-arch', 'x86_64']);
|
buildCommands.addAll(<String>['-sdk', 'iphonesimulator', '-arch', 'x86_64']);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (activeArch != null) {
|
||||||
|
final String activeArchName = getNameForIOSArch(activeArch);
|
||||||
|
if (activeArchName != null) {
|
||||||
|
buildCommands.add('ONLY_ACTIVE_ARCH=YES');
|
||||||
|
buildCommands.add('ARCHS=$activeArchName');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (!codesign) {
|
if (!codesign) {
|
||||||
buildCommands.addAll(
|
buildCommands.addAll(
|
||||||
<String>[
|
<String>[
|
||||||
|
|
|
@ -130,7 +130,7 @@ void main() {
|
||||||
});
|
});
|
||||||
|
|
||||||
testUsingContext('getInfoForDevice throws IOSDeviceNotFoundError when ideviceinfo returns specific error code and message', () async {
|
testUsingContext('getInfoForDevice throws IOSDeviceNotFoundError when ideviceinfo returns specific error code and message', () async {
|
||||||
when(mockProcessManager.run(<String>['ideviceinfo', '-u', 'foo', '-k', 'bar', '--simple']))
|
when(mockProcessManager.run(<String>['ideviceinfo', '-u', 'foo', '-k', 'bar']))
|
||||||
.thenAnswer((_) => Future<ProcessResult>.value(ProcessResult(1, 255, 'No device found with udid foo, is it plugged in?', '')));
|
.thenAnswer((_) => Future<ProcessResult>.value(ProcessResult(1, 255, 'No device found with udid foo, is it plugged in?', '')));
|
||||||
expect(() async => await iMobileDevice.getInfoForDevice('foo', 'bar'), throwsA(isInstanceOf<IOSDeviceNotFoundError>()));
|
expect(() async => await iMobileDevice.getInfoForDevice('foo', 'bar'), throwsA(isInstanceOf<IOSDeviceNotFoundError>()));
|
||||||
}, overrides: <Type, Generator>{
|
}, overrides: <Type, Generator>{
|
||||||
|
|
Loading…
Reference in a new issue