mirror of
https://github.com/flutter/flutter.git
synced 2025-06-03 00:51:18 +00:00
[flutter_tools] move dsym generation logic into dart build process (#49491)
This commit is contained in:
parent
123de155a6
commit
2a91a7501c
@ -202,20 +202,6 @@ BuildApp() {
|
|||||||
RunCommand cp -r -- "${app_framework}" "${derived_dir}"
|
RunCommand cp -r -- "${app_framework}" "${derived_dir}"
|
||||||
|
|
||||||
if [[ "${build_mode}" == "release" ]]; then
|
if [[ "${build_mode}" == "release" ]]; then
|
||||||
StreamOutput " ├─Generating dSYM file..."
|
|
||||||
# Xcode calls `symbols` during app store upload, which uses Spotlight to
|
|
||||||
# find dSYM files for embedded frameworks. When it finds the dSYM file for
|
|
||||||
# `App.framework` it throws an error, which aborts the app store upload.
|
|
||||||
# To avoid this, we place the dSYM files in a folder ending with ".noindex",
|
|
||||||
# which hides it from Spotlight, https://github.com/flutter/flutter/issues/22560.
|
|
||||||
RunCommand mkdir -p -- "${build_dir}/dSYMs.noindex"
|
|
||||||
RunCommand xcrun dsymutil -o "${build_dir}/dSYMs.noindex/App.framework.dSYM" "${app_framework}/App"
|
|
||||||
if [[ $? -ne 0 ]]; then
|
|
||||||
EchoError "Failed to generate debug symbols (dSYM) file for ${app_framework}/App."
|
|
||||||
exit -1
|
|
||||||
fi
|
|
||||||
StreamOutput "done"
|
|
||||||
|
|
||||||
StreamOutput " ├─Stripping debug symbols..."
|
StreamOutput " ├─Stripping debug symbols..."
|
||||||
RunCommand xcrun strip -x -S "${derived_dir}/App.framework/App"
|
RunCommand xcrun strip -x -S "${derived_dir}/App.framework/App"
|
||||||
if [[ $? -ne 0 ]]; then
|
if [[ $? -ne 0 ]]; then
|
||||||
|
@ -214,7 +214,7 @@ class AotBuilder {
|
|||||||
final FlutterProject flutterProject = FlutterProject.current();
|
final FlutterProject flutterProject = FlutterProject.current();
|
||||||
final Target target = buildMode == BuildMode.profile
|
final Target target = buildMode == BuildMode.profile
|
||||||
? const AotAssemblyProfile()
|
? const AotAssemblyProfile()
|
||||||
: const AotAssemblyRelease();
|
: const GenerateDebugSymbols();
|
||||||
|
|
||||||
final BuildResult result = await buildSystem.build(target, Environment(
|
final BuildResult result = await buildSystem.build(target, Environment(
|
||||||
projectDir: flutterProject.directory,
|
projectDir: flutterProject.directory,
|
||||||
|
@ -145,6 +145,50 @@ class AotAssemblyProfile extends AotAssemblyBase {
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Handle strip and dysm generate for iOS release.
|
||||||
|
///
|
||||||
|
/// Xcode calls `symbols` during app store upload, which uses Spotlight to
|
||||||
|
/// find dSYM files for embedded frameworks. When it finds the dSYM file for
|
||||||
|
/// `App.framework` it throws an error, which aborts the app store upload.
|
||||||
|
/// To avoid this, we place the dSYM files in a folder ending with ".noindex",
|
||||||
|
/// which hides it from Spotlight, https://github.com/flutter/flutter/issues/22560.
|
||||||
|
class GenerateDebugSymbols extends Target {
|
||||||
|
const GenerateDebugSymbols();
|
||||||
|
|
||||||
|
@override
|
||||||
|
String get name => 'generate_debug_symbols';
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Target> get dependencies => const <Target>[
|
||||||
|
AotAssemblyRelease()
|
||||||
|
];
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Source> get inputs => const <Source>[
|
||||||
|
Source.pattern('{OUTPUT_DIR}/App.framework/App'),
|
||||||
|
];
|
||||||
|
|
||||||
|
@override
|
||||||
|
List<Source> get outputs => const <Source>[
|
||||||
|
Source.pattern('{OUTPUT_DIR}/dSYMs.noindex/App.framework.dSYM'),
|
||||||
|
];
|
||||||
|
|
||||||
|
@override
|
||||||
|
Future<void> build(Environment environment) async {
|
||||||
|
final Directory appFramework = environment.outputDir.childDirectory('App.framework');
|
||||||
|
final Directory noIndex = environment.outputDir.childDirectory('dSYMs.noindex')
|
||||||
|
..createSync();
|
||||||
|
final RunResult result = await globals.xcode.dsymutil(<String>[
|
||||||
|
'-o',
|
||||||
|
noIndex.childFile('App.framework.dSYM').path,
|
||||||
|
appFramework.childFile('App').path,
|
||||||
|
]);
|
||||||
|
if (result.exitCode != 0) {
|
||||||
|
throwToolExit('Failed to generate debug symbols (dSYM) file for ${appFramework.path}/App.');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Create an App.framework for debug iOS targets.
|
/// Create an App.framework for debug iOS targets.
|
||||||
///
|
///
|
||||||
/// This framework needs to exist for the Xcode project to link/bundle,
|
/// This framework needs to exist for the Xcode project to link/bundle,
|
||||||
|
@ -153,6 +153,13 @@ class Xcode {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Future<RunResult> dsymutil(List<String> args) {
|
||||||
|
return _processUtils.run(
|
||||||
|
<String>['xcrun', 'dsymutil', ...args],
|
||||||
|
throwOnError: true,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
Future<RunResult> clang(List<String> args) {
|
Future<RunResult> clang(List<String> args) {
|
||||||
return _processUtils.run(
|
return _processUtils.run(
|
||||||
<String>['xcrun', 'clang', ...args],
|
<String>['xcrun', 'clang', ...args],
|
||||||
|
@ -0,0 +1,40 @@
|
|||||||
|
// Copyright 2014 The Flutter Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style license that can be
|
||||||
|
// found in the LICENSE file.
|
||||||
|
|
||||||
|
import 'package:flutter_tools/src/build_system/build_system.dart';
|
||||||
|
import 'package:flutter_tools/src/build_system/targets/ios.dart';
|
||||||
|
import 'package:flutter_tools/src/globals.dart' as globals;
|
||||||
|
import 'package:platform/platform.dart';
|
||||||
|
|
||||||
|
import 'package:process/process.dart';
|
||||||
|
|
||||||
|
import '../../../src/common.dart';
|
||||||
|
import '../../../src/context.dart';
|
||||||
|
import '../../../src/testbed.dart';
|
||||||
|
|
||||||
|
void main() {
|
||||||
|
Testbed testbed;
|
||||||
|
|
||||||
|
setUp(() {
|
||||||
|
testbed = Testbed();
|
||||||
|
});
|
||||||
|
|
||||||
|
test('GenerateDebugSymbols uses the proper arguments', () => testbed.run(() async {
|
||||||
|
final Environment environment = Environment.test(
|
||||||
|
globals.fs.currentDirectory,
|
||||||
|
);
|
||||||
|
await const GenerateDebugSymbols().build(environment);
|
||||||
|
}, overrides: <Type, Generator>{
|
||||||
|
Platform: () => FakePlatform(operatingSystem: 'macos'),
|
||||||
|
ProcessManager: () => FakeProcessManager.list(<FakeCommand>[
|
||||||
|
const FakeCommand(command: <String>[
|
||||||
|
'xcrun',
|
||||||
|
'dsymutil',
|
||||||
|
'-o',
|
||||||
|
'/dSYMs.noindex/App.framework.dSYM',
|
||||||
|
'/App.framework/App',
|
||||||
|
])
|
||||||
|
]),
|
||||||
|
}));
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user