Skip to content

Commit d081364

Browse files
[flutter_tools] remove indirection around App.framework production (flutter#53853)
1 parent 7ceed97 commit d081364

File tree

3 files changed

+64
-33
lines changed

3 files changed

+64
-33
lines changed

packages/flutter_tools/lib/src/commands/build.dart

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44

55
import 'dart:async';
66

7-
import '../aot.dart';
87
import '../bundle.dart';
98
import '../commands/build_linux.dart';
109
import '../commands/build_macos.dart';
1110
import '../commands/build_windows.dart';
11+
import '../globals.dart' as globals;
1212
import '../runner/flutter_command.dart';
1313
import 'build_aar.dart';
1414
import 'build_aot.dart';
@@ -28,7 +28,7 @@ class BuildCommand extends FlutterCommand {
2828
addSubcommand(BuildAotCommand());
2929
addSubcommand(BuildIOSCommand());
3030
addSubcommand(BuildIOSFrameworkCommand(
31-
aotBuilder: AotBuilder(),
31+
buildSystem: globals.buildSystem,
3232
bundleBuilder: BundleBuilder(),
3333
));
3434
addSubcommand(BuildBundleCommand(verboseHelp: verboseHelp));

packages/flutter_tools/lib/src/commands/build_ios_framework.dart

Lines changed: 52 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,20 @@ import 'package:file/file.dart';
88
import 'package:meta/meta.dart';
99
import 'package:platform/platform.dart';
1010

11-
import '../aot.dart';
1211
import '../artifacts.dart';
1312
import '../base/common.dart';
1413
import '../base/file_system.dart';
1514
import '../base/logger.dart';
1615
import '../base/process.dart';
1716
import '../base/utils.dart';
1817
import '../build_info.dart';
18+
import '../build_system/build_system.dart';
19+
import '../build_system/targets/dart.dart';
20+
import '../build_system/targets/icon_tree_shaker.dart';
1921
import '../build_system/targets/ios.dart';
2022
import '../bundle.dart';
2123
import '../cache.dart';
24+
import '../convert.dart';
2225
import '../globals.dart' as globals;
2326
import '../macos/cocoapod_utils.dart';
2427
import '../macos/xcode.dart';
@@ -35,12 +38,12 @@ import 'build.dart';
3538
class BuildIOSFrameworkCommand extends BuildSubCommand {
3639
BuildIOSFrameworkCommand({
3740
FlutterVersion flutterVersion, // Instantiating FlutterVersion kicks off networking, so delay until it's needed, but allow test injection.
38-
@required AotBuilder aotBuilder,
3941
@required BundleBuilder bundleBuilder,
42+
@required BuildSystem buildSystem,
4043
Cache cache,
4144
Platform platform
4245
}) : _flutterVersion = flutterVersion,
43-
_aotBuilder = aotBuilder,
46+
_buildSystem = buildSystem,
4447
_bundleBuilder = bundleBuilder,
4548
_injectedCache = cache,
4649
_injectedPlatform = platform {
@@ -95,8 +98,9 @@ class BuildIOSFrameworkCommand extends BuildSubCommand {
9598
);
9699
}
97100

98-
final AotBuilder _aotBuilder;
99101
final BundleBuilder _bundleBuilder;
102+
final BuildSystem _buildSystem;
103+
BuildSystem get buildSystem => _buildSystem ?? globals.buildSystem;
100104

101105
Cache get _cache => _injectedCache ?? globals.cache;
102106
final Cache _injectedCache;
@@ -367,15 +371,17 @@ end
367371
final Status status = globals.logger.startProgress(
368372
' ├─Assembling Flutter resources for App.framework...', timeout: timeoutConfiguration.slowOperation);
369373
try {
374+
if (buildInfo.mode == BuildMode.debug) {
370375
await _bundleBuilder.build(
371-
platform: TargetPlatform.ios,
372-
buildInfo: buildInfo,
373-
// Relative paths show noise in the compiler https://github.com/dart-lang/sdk/issues/37978.
374-
mainPath: globals.fs.path.absolute(targetFile),
375-
assetDirPath: destinationAppFrameworkDirectory.childDirectory('flutter_assets').path,
376-
precompiledSnapshot: buildInfo.mode != BuildMode.debug,
377-
treeShakeIcons: boolArg('tree-shake-icons')
378-
);
376+
platform: TargetPlatform.ios,
377+
buildInfo: buildInfo,
378+
// Relative paths show noise in the compiler https://github.com/dart-lang/sdk/issues/37978.
379+
mainPath: globals.fs.path.absolute(targetFile),
380+
assetDirPath: destinationAppFrameworkDirectory.childDirectory('flutter_assets').path,
381+
precompiledSnapshot: buildInfo.mode != BuildMode.debug,
382+
treeShakeIcons: boolArg('tree-shake-icons')
383+
);
384+
}
379385
} finally {
380386
status.stop();
381387
}
@@ -429,16 +435,41 @@ end
429435
timeout: timeoutConfiguration.slowOperation,
430436
);
431437
try {
432-
await _aotBuilder.build(
433-
platform: TargetPlatform.ios,
434-
outputPath: destinationDirectory.path,
435-
buildInfo: buildInfo,
436-
// Relative paths show noise in the compiler https://github.com/dart-lang/sdk/issues/37978.
437-
mainDartFile: globals.fs.path.absolute(targetFile),
438-
quiet: true,
439-
bitcode: true,
440-
iosBuildArchs: <DarwinArch>[DarwinArch.armv7, DarwinArch.arm64],
438+
final Target target = buildInfo.isRelease
439+
? const ReleaseIosApplicationBundle()
440+
: const ProfileIosApplicationBundle();
441+
final Environment environment = Environment(
442+
projectDir: globals.fs.currentDirectory,
443+
outputDir: destinationDirectory,
444+
buildDir: _project.dartTool.childDirectory('flutter_build'),
445+
cacheDir: null,
446+
flutterRootDir: globals.fs.directory(Cache.flutterRoot),
447+
defines: <String, String>{
448+
kTargetFile: targetFile,
449+
kBuildMode: getNameForBuildMode(buildInfo.mode),
450+
kTargetPlatform: getNameForTargetPlatform(TargetPlatform.ios),
451+
kIconTreeShakerFlag: buildInfo.treeShakeIcons.toString(),
452+
kDartDefines: jsonEncode(buildInfo.dartDefines),
453+
kBitcodeFlag: 'true',
454+
if (buildInfo?.extraGenSnapshotOptions?.isNotEmpty ?? false)
455+
kExtraGenSnapshotOptions: buildInfo.extraGenSnapshotOptions.join(','),
456+
if (buildInfo?.extraFrontEndOptions?.isNotEmpty ?? false)
457+
kExtraFrontEndOptions: buildInfo.extraFrontEndOptions.join(','),
458+
kIosArchs: <DarwinArch>[DarwinArch.armv7, DarwinArch.arm64]
459+
.map(getNameForDarwinArch).join(' '),
460+
},
461+
artifacts: globals.artifacts,
462+
fileSystem: globals.fs,
463+
logger: globals.logger,
464+
processManager: globals.processManager,
441465
);
466+
final BuildResult result = await buildSystem.build(target, environment);
467+
if (!result.success) {
468+
for (final ExceptionMeasurement measurement in result.exceptions.values) {
469+
globals.printError(measurement.exception.toString());
470+
}
471+
throwToolExit('The aot build failed.');
472+
}
442473
} finally {
443474
status.stop();
444475
}

packages/flutter_tools/test/commands.shard/hermetic/build_ios_framework_test.dart

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
import 'dart:io';
66

77
import 'package:file/memory.dart';
8-
import 'package:flutter_tools/src/aot.dart';
98
import 'package:flutter_tools/src/build_info.dart';
9+
import 'package:flutter_tools/src/build_system/build_system.dart';
1010
import 'package:flutter_tools/src/bundle.dart';
1111
import 'package:flutter_tools/src/cache.dart';
1212
import 'package:flutter_tools/src/commands/build_ios_framework.dart';
@@ -64,7 +64,7 @@ void main() {
6464
when(mockFlutterVersion.frameworkVersion).thenReturn(frameworkVersion);
6565

6666
final BuildIOSFrameworkCommand command = BuildIOSFrameworkCommand(
67-
aotBuilder: MockAotBuilder(),
67+
buildSystem: MockBuildSystem(),
6868
bundleBuilder: MockBundleBuilder(),
6969
platform: fakePlatform,
7070
flutterVersion: mockFlutterVersion,
@@ -89,7 +89,7 @@ void main() {
8989
when(mockGitTagVersion.commits).thenReturn(2);
9090

9191
final BuildIOSFrameworkCommand command = BuildIOSFrameworkCommand(
92-
aotBuilder: MockAotBuilder(),
92+
buildSystem: MockBuildSystem(),
9393
bundleBuilder: MockBundleBuilder(),
9494
platform: fakePlatform,
9595
flutterVersion: mockFlutterVersion,
@@ -111,7 +111,7 @@ void main() {
111111
when(mockGitTagVersion.commits).thenReturn(0);
112112

113113
final BuildIOSFrameworkCommand command = BuildIOSFrameworkCommand(
114-
aotBuilder: MockAotBuilder(),
114+
buildSystem: MockBuildSystem(),
115115
bundleBuilder: MockBundleBuilder(),
116116
platform: fakePlatform,
117117
flutterVersion: mockFlutterVersion,
@@ -149,7 +149,7 @@ void main() {
149149

150150
testUsingContext('created when forced', () async {
151151
final BuildIOSFrameworkCommand command = BuildIOSFrameworkCommand(
152-
aotBuilder: MockAotBuilder(),
152+
buildSystem: MockBuildSystem(),
153153
bundleBuilder: MockBundleBuilder(),
154154
platform: fakePlatform,
155155
flutterVersion: mockFlutterVersion,
@@ -172,7 +172,7 @@ void main() {
172172

173173
testUsingContext('contains license and version', () async {
174174
final BuildIOSFrameworkCommand command = BuildIOSFrameworkCommand(
175-
aotBuilder: MockAotBuilder(),
175+
buildSystem: MockBuildSystem(),
176176
bundleBuilder: MockBundleBuilder(),
177177
platform: fakePlatform,
178178
flutterVersion: mockFlutterVersion,
@@ -192,7 +192,7 @@ void main() {
192192

193193
testUsingContext('debug URL', () async {
194194
final BuildIOSFrameworkCommand command = BuildIOSFrameworkCommand(
195-
aotBuilder: MockAotBuilder(),
195+
buildSystem: MockBuildSystem(),
196196
bundleBuilder: MockBundleBuilder(),
197197
platform: fakePlatform,
198198
flutterVersion: mockFlutterVersion,
@@ -210,7 +210,7 @@ void main() {
210210

211211
testUsingContext('profile URL', () async {
212212
final BuildIOSFrameworkCommand command = BuildIOSFrameworkCommand(
213-
aotBuilder: MockAotBuilder(),
213+
buildSystem: MockBuildSystem(),
214214
bundleBuilder: MockBundleBuilder(),
215215
platform: fakePlatform,
216216
flutterVersion: mockFlutterVersion,
@@ -228,7 +228,7 @@ void main() {
228228

229229
testUsingContext('release URL', () async {
230230
final BuildIOSFrameworkCommand command = BuildIOSFrameworkCommand(
231-
aotBuilder: MockAotBuilder(),
231+
buildSystem: MockBuildSystem(),
232232
bundleBuilder: MockBundleBuilder(),
233233
platform: fakePlatform,
234234
flutterVersion: mockFlutterVersion,
@@ -252,5 +252,5 @@ void main() {
252252
class MockFlutterVersion extends Mock implements FlutterVersion {}
253253
class MockGitTagVersion extends Mock implements GitTagVersion {}
254254
class MockCache extends Mock implements Cache {}
255-
class MockAotBuilder extends Mock implements AotBuilder {}
255+
class MockBuildSystem extends Mock implements BuildSystem {}
256256
class MockBundleBuilder extends Mock implements BundleBuilder {}

0 commit comments

Comments
 (0)