Remove Finder extended attributes before code signing iOS frameworks (#81342)
This commit is contained in:
parent
1a3af88ced
commit
d2b0687558
@ -626,7 +626,20 @@ void _signFramework(Environment environment, String binaryPath, BuildMode buildM
|
||||
if (codesignIdentity == null || codesignIdentity.isEmpty) {
|
||||
return;
|
||||
}
|
||||
final ProcessResult result = environment.processManager.runSync(<String>[
|
||||
|
||||
// Extended attributes applied by Finder can cause code signing errors. Remove them.
|
||||
// https://developer.apple.com/library/archive/qa/qa1940/_index.html
|
||||
final ProcessResult xattrResult = environment.processManager.runSync(<String>[
|
||||
'xattr',
|
||||
'-r',
|
||||
'-d',
|
||||
'com.apple.FinderInfo',
|
||||
binaryPath,
|
||||
]);
|
||||
if (xattrResult.exitCode != 0) {
|
||||
environment.logger.printTrace('Failed to remove FinderInfo extended attributes from $binaryPath.\n${xattrResult.stderr}');
|
||||
}
|
||||
final ProcessResult codesignResult = environment.processManager.runSync(<String>[
|
||||
'codesign',
|
||||
'--force',
|
||||
'--sign',
|
||||
@ -637,7 +650,7 @@ void _signFramework(Environment environment, String binaryPath, BuildMode buildM
|
||||
],
|
||||
binaryPath,
|
||||
]);
|
||||
if (result.exitCode != 0) {
|
||||
throw Exception('Failed to codesign $binaryPath with identity $codesignIdentity.\n${result.stderr}');
|
||||
if (codesignResult.exitCode != 0) {
|
||||
throw Exception('Failed to codesign $binaryPath with identity $codesignIdentity.\n${codesignResult.stderr}');
|
||||
}
|
||||
}
|
||||
|
@ -138,7 +138,14 @@ void main() {
|
||||
|
||||
final Directory frameworkDirectory = environment.outputDir.childDirectory('App.framework');
|
||||
final File frameworkDirectoryBinary = frameworkDirectory.childFile('App');
|
||||
processManager.addCommand(
|
||||
processManager.addCommands(<FakeCommand>[
|
||||
FakeCommand(command: <String>[
|
||||
'xattr',
|
||||
'-r',
|
||||
'-d',
|
||||
'com.apple.FinderInfo',
|
||||
frameworkDirectoryBinary.path,
|
||||
]),
|
||||
FakeCommand(command: <String>[
|
||||
'codesign',
|
||||
'--force',
|
||||
@ -147,7 +154,7 @@ void main() {
|
||||
'--timestamp=none',
|
||||
frameworkDirectoryBinary.path,
|
||||
]),
|
||||
);
|
||||
]);
|
||||
|
||||
await const DebugIosApplicationBundle().build(environment);
|
||||
expect(processManager.hasRemainingExpectations, isFalse);
|
||||
@ -184,7 +191,14 @@ void main() {
|
||||
|
||||
final Directory frameworkDirectory = environment.outputDir.childDirectory('App.framework');
|
||||
final File frameworkDirectoryBinary = frameworkDirectory.childFile('App');
|
||||
processManager.addCommand(
|
||||
processManager.addCommands(<FakeCommand>[
|
||||
FakeCommand(command: <String>[
|
||||
'xattr',
|
||||
'-r',
|
||||
'-d',
|
||||
'com.apple.FinderInfo',
|
||||
frameworkDirectoryBinary.path,
|
||||
]),
|
||||
FakeCommand(command: <String>[
|
||||
'codesign',
|
||||
'--force',
|
||||
@ -192,7 +206,7 @@ void main() {
|
||||
'ABC123',
|
||||
frameworkDirectoryBinary.path,
|
||||
]),
|
||||
);
|
||||
]);
|
||||
|
||||
await const ReleaseIosApplicationBundle().build(environment);
|
||||
expect(processManager.hasRemainingExpectations, isFalse);
|
||||
@ -277,6 +291,7 @@ void main() {
|
||||
FakeCommand lipoCommandNonFatResult;
|
||||
FakeCommand lipoVerifyArm64Command;
|
||||
FakeCommand bitcodeStripCommand;
|
||||
FakeCommand xattrRemoveCommand;
|
||||
|
||||
setUp(() {
|
||||
final FileSystem fileSystem = MemoryFileSystem.test();
|
||||
@ -313,6 +328,14 @@ void main() {
|
||||
'-o',
|
||||
binary.path,
|
||||
]);
|
||||
|
||||
xattrRemoveCommand = FakeCommand(command: <String>[
|
||||
'xattr',
|
||||
'-r',
|
||||
'-d',
|
||||
'com.apple.FinderInfo',
|
||||
binary.path,
|
||||
]);
|
||||
});
|
||||
|
||||
testWithoutContext('iphonesimulator', () async {
|
||||
@ -621,6 +644,54 @@ void main() {
|
||||
expect(processManager.hasRemainingExpectations, isFalse);
|
||||
});
|
||||
|
||||
testWithoutContext('logs when extended attribute fails', () async {
|
||||
binary.createSync(recursive: true);
|
||||
|
||||
final Environment environment = Environment.test(
|
||||
fileSystem.currentDirectory,
|
||||
processManager: processManager,
|
||||
artifacts: artifacts,
|
||||
logger: logger,
|
||||
fileSystem: fileSystem,
|
||||
outputDir: outputDir,
|
||||
defines: <String, String>{
|
||||
kIosArchs: 'arm64',
|
||||
kSdkRoot: 'path/to/iPhoneOS.sdk',
|
||||
kBitcodeFlag: '',
|
||||
kCodesignIdentity: 'ABC123',
|
||||
},
|
||||
);
|
||||
|
||||
processManager.addCommands(<FakeCommand>[
|
||||
copyPhysicalFrameworkCommand,
|
||||
lipoCommandNonFatResult,
|
||||
lipoVerifyArm64Command,
|
||||
bitcodeStripCommand,
|
||||
FakeCommand(
|
||||
command: <String>[
|
||||
'xattr',
|
||||
'-r',
|
||||
'-d',
|
||||
'com.apple.FinderInfo',
|
||||
binary.path,
|
||||
],
|
||||
exitCode: 1,
|
||||
stderr: 'Failed to remove extended attributes',
|
||||
),
|
||||
FakeCommand(command: <String>[
|
||||
'codesign',
|
||||
'--force',
|
||||
'--sign',
|
||||
'ABC123',
|
||||
'--timestamp=none',
|
||||
binary.path,
|
||||
]),
|
||||
]);
|
||||
|
||||
await const DebugUnpackIOS().build(environment);
|
||||
expect(logger.traceText, contains('Failed to remove extended attributes'));
|
||||
});
|
||||
|
||||
testWithoutContext('fails when codesign fails', () async {
|
||||
binary.createSync(recursive: true);
|
||||
|
||||
@ -644,6 +715,7 @@ void main() {
|
||||
lipoCommandNonFatResult,
|
||||
lipoVerifyArm64Command,
|
||||
bitcodeStripCommand,
|
||||
xattrRemoveCommand,
|
||||
FakeCommand(command: <String>[
|
||||
'codesign',
|
||||
'--force',
|
||||
@ -688,6 +760,7 @@ void main() {
|
||||
lipoCommandNonFatResult,
|
||||
lipoVerifyArm64Command,
|
||||
bitcodeStripCommand,
|
||||
xattrRemoveCommand,
|
||||
FakeCommand(command: <String>[
|
||||
'codesign',
|
||||
'--force',
|
||||
|
Loading…
x
Reference in New Issue
Block a user