Unverified Commit 52687c79 authored by KyleWong's avatar KyleWong Committed by GitHub

Optimize flutter run logic for iOS by "ONLY_ACTIVE_ARCH=YES" if possible (#27817)

parent 963d69d8
......@@ -243,6 +243,9 @@ class IOSDevice extends Device {
// TODO(chinmaygarde): Use mainPath, route.
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.
final XcodeBuildResult buildResult = await buildXcodeProject(
app: package,
......@@ -250,6 +253,7 @@ class IOSDevice extends Device {
targetOverride: mainPath,
buildForDevice: true,
usesTerminalUi: usesTerminalUi,
activeArch: iosArch
);
if (!buildResult.success) {
printError('Could not build the precompiled application for the device.');
......
......@@ -134,7 +134,7 @@ class IMobileDevice {
Future<String> getInfoForDevice(String deviceID, String key) async {
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'))
throw IOSDeviceNotFoundError('ideviceinfo could not find device:\n${result.stdout}');
if (result.exitCode != 0)
......@@ -294,6 +294,7 @@ Future<XcodeBuildResult> buildXcodeProject({
BuildInfo buildInfo,
String targetOverride,
bool buildForDevice,
IOSArch activeArch,
bool codesign = true,
bool usesTerminalUi = true,
}) async {
......@@ -435,6 +436,14 @@ Future<XcodeBuildResult> buildXcodeProject({
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) {
buildCommands.addAll(
<String>[
......
......@@ -130,7 +130,7 @@ void main() {
});
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?', '')));
expect(() async => await iMobileDevice.getInfoForDevice('foo', 'bar'), throwsA(isInstanceOf<IOSDeviceNotFoundError>()));
}, overrides: <Type, Generator>{
......
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