[flutter_tools] simplify symbol logic for iOS (#49628)
This commit is contained in:
parent
de7da494a1
commit
cb3b7ab487
@ -57,13 +57,6 @@ Future<void> main() async {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (await _hasDebugSymbols(ephemeralReleaseHostApp)) {
|
|
||||||
return TaskResult.failure(
|
|
||||||
"Ephemeral host app ${ephemeralReleaseHostApp.path}'s App.framework's "
|
|
||||||
"debug symbols weren't stripped in release mode"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
section('Clean build');
|
section('Clean build');
|
||||||
|
|
||||||
await inDirectory(projectDir, () async {
|
await inDirectory(projectDir, () async {
|
||||||
@ -97,12 +90,6 @@ Future<void> main() async {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!await _hasDebugSymbols(ephemeralProfileHostApp)) {
|
|
||||||
return TaskResult.failure(
|
|
||||||
"Ephemeral host app ${ephemeralProfileHostApp.path}'s App.framework does not contain debug symbols"
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
section('Clean build');
|
section('Clean build');
|
||||||
|
|
||||||
await inDirectory(projectDir, () async {
|
await inDirectory(projectDir, () async {
|
||||||
@ -406,26 +393,3 @@ Future<bool> _isAppAotBuild(Directory app) async {
|
|||||||
|
|
||||||
return symbolTable.contains('kDartIsolateSnapshotInstructions');
|
return symbolTable.contains('kDartIsolateSnapshotInstructions');
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<bool> _hasDebugSymbols(Directory app) async {
|
|
||||||
final String binary = path.join(
|
|
||||||
app.path,
|
|
||||||
'Frameworks',
|
|
||||||
'App.framework',
|
|
||||||
'App',
|
|
||||||
);
|
|
||||||
|
|
||||||
final String symbolTable = await eval(
|
|
||||||
'dsymutil',
|
|
||||||
<String> [
|
|
||||||
'--dump-debug-map',
|
|
||||||
binary,
|
|
||||||
],
|
|
||||||
// The output is huge.
|
|
||||||
printStdout: false,
|
|
||||||
);
|
|
||||||
|
|
||||||
// Search for some random Flutter framework Dart function which should always
|
|
||||||
// be in App.framework.
|
|
||||||
return symbolTable.contains('BuildOwner_reassemble');
|
|
||||||
}
|
|
||||||
|
@ -201,30 +201,6 @@ BuildApp() {
|
|||||||
|
|
||||||
RunCommand cp -r -- "${app_framework}" "${derived_dir}"
|
RunCommand cp -r -- "${app_framework}" "${derived_dir}"
|
||||||
|
|
||||||
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..."
|
|
||||||
RunCommand xcrun strip -x -S "${derived_dir}/App.framework/App"
|
|
||||||
if [[ $? -ne 0 ]]; then
|
|
||||||
EchoError "Failed to strip ${derived_dir}/App.framework/App."
|
|
||||||
exit -1
|
|
||||||
fi
|
|
||||||
StreamOutput "done"
|
|
||||||
fi
|
|
||||||
|
|
||||||
else
|
else
|
||||||
RunCommand mkdir -p -- "${derived_dir}/App.framework"
|
RunCommand mkdir -p -- "${derived_dir}/App.framework"
|
||||||
|
|
||||||
|
@ -138,11 +138,7 @@ class AOTSnapshotter {
|
|||||||
outputPaths.add(assembly);
|
outputPaths.add(assembly);
|
||||||
genSnapshotArgs.add('--snapshot_kind=app-aot-assembly');
|
genSnapshotArgs.add('--snapshot_kind=app-aot-assembly');
|
||||||
genSnapshotArgs.add('--assembly=$assembly');
|
genSnapshotArgs.add('--assembly=$assembly');
|
||||||
// TODO(jonahwilliams): determine the correct time to use strip
|
|
||||||
// since this is required for the future dwarf strack traces option.
|
|
||||||
if (bitcode && buildMode == BuildMode.release) {
|
|
||||||
genSnapshotArgs.add('--strip');
|
genSnapshotArgs.add('--strip');
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
final String aotSharedLibrary = globals.fs.path.join(outputDir.path, 'app.so');
|
final String aotSharedLibrary = globals.fs.path.join(outputDir.path, 'app.so');
|
||||||
outputPaths.add(aotSharedLibrary);
|
outputPaths.add(aotSharedLibrary);
|
||||||
|
@ -326,6 +326,7 @@ void main() {
|
|||||||
'--deterministic',
|
'--deterministic',
|
||||||
'--snapshot_kind=app-aot-assembly',
|
'--snapshot_kind=app-aot-assembly',
|
||||||
'--assembly=$assembly',
|
'--assembly=$assembly',
|
||||||
|
'--strip',
|
||||||
'--no-sim-use-hardfp',
|
'--no-sim-use-hardfp',
|
||||||
'--no-use-integer-division',
|
'--no-use-integer-division',
|
||||||
'--no-causal-async-stacks',
|
'--no-causal-async-stacks',
|
||||||
@ -444,6 +445,7 @@ void main() {
|
|||||||
'--deterministic',
|
'--deterministic',
|
||||||
'--snapshot_kind=app-aot-assembly',
|
'--snapshot_kind=app-aot-assembly',
|
||||||
'--assembly=$assembly',
|
'--assembly=$assembly',
|
||||||
|
'--strip',
|
||||||
'--no-sim-use-hardfp',
|
'--no-sim-use-hardfp',
|
||||||
'--no-use-integer-division',
|
'--no-use-integer-division',
|
||||||
'--no-causal-async-stacks',
|
'--no-causal-async-stacks',
|
||||||
@ -493,6 +495,7 @@ void main() {
|
|||||||
'--deterministic',
|
'--deterministic',
|
||||||
'--snapshot_kind=app-aot-assembly',
|
'--snapshot_kind=app-aot-assembly',
|
||||||
'--assembly=${globals.fs.path.join(outputPath, 'snapshot_assembly.S')}',
|
'--assembly=${globals.fs.path.join(outputPath, 'snapshot_assembly.S')}',
|
||||||
|
'--strip',
|
||||||
'--no-causal-async-stacks',
|
'--no-causal-async-stacks',
|
||||||
'--lazy-async-stacks',
|
'--lazy-async-stacks',
|
||||||
'main.dill',
|
'main.dill',
|
||||||
@ -531,6 +534,7 @@ void main() {
|
|||||||
'--deterministic',
|
'--deterministic',
|
||||||
'--snapshot_kind=app-aot-assembly',
|
'--snapshot_kind=app-aot-assembly',
|
||||||
'--assembly=${globals.fs.path.join(outputPath, 'snapshot_assembly.S')}',
|
'--assembly=${globals.fs.path.join(outputPath, 'snapshot_assembly.S')}',
|
||||||
|
'--strip',
|
||||||
'--no-sim-use-hardfp',
|
'--no-sim-use-hardfp',
|
||||||
'--no-use-integer-division',
|
'--no-use-integer-division',
|
||||||
'--no-causal-async-stacks',
|
'--no-causal-async-stacks',
|
||||||
@ -571,6 +575,7 @@ void main() {
|
|||||||
'--deterministic',
|
'--deterministic',
|
||||||
'--snapshot_kind=app-aot-assembly',
|
'--snapshot_kind=app-aot-assembly',
|
||||||
'--assembly=${globals.fs.path.join(outputPath, 'snapshot_assembly.S')}',
|
'--assembly=${globals.fs.path.join(outputPath, 'snapshot_assembly.S')}',
|
||||||
|
'--strip',
|
||||||
'--no-causal-async-stacks',
|
'--no-causal-async-stacks',
|
||||||
'--lazy-async-stacks',
|
'--lazy-async-stacks',
|
||||||
'main.dill',
|
'main.dill',
|
||||||
|
Loading…
x
Reference in New Issue
Block a user