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.
|
||||
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>{
|
||||
|
|
Loading…
Reference in a new issue