我正在尝试在 macOS 10.15 / XCode 12.4 上对现有应用程序进行协同设计/公证。
这是我的工作流程:
codesign -vvv --force --options runtime --deep --sign "Developer ID Application: ..." --entitlements myApp.entitlements myApp.app
zip -rqy
xcrun altool --notarize-app ...
这是公证日志:
{
"logFormatVersion": 1,
"jobId": "b864c16d-d8dc-464e-aa4f-c2eea5ff6ac4",
"status": "Invalid",
"statusSummary": "Archive contains critical validation errors",
"statusCode": 4000,
"archiveFilename": "myApp-signed.zip",
"uploadDate": "2022-07-18T12:25:04Z",
"sha256": "c324a9ba88dbbaf0e5c325b48c2c22744886d68d450835b0724c7c70258784c2",
"ticketContents": null,
"issues": [
{
"severity": "error",
"code": null,
"path": "myApp-signed.zip/myApp.app/Contents/MacOS/myApp",
"message": "The signature of the binary is invalid.",
"docUrl": null,
"architecture": "x86_64"
}
]
}
但是如果我查看该文件的签名,该签名仍处于上传到公证时的状态:
$ codesign -dvv myApp.app/Contents/MacOS/myApp
Executable=/path/to/myApp.app/Contents/MacOS/myApp
Identifier=com.myapp
Format=app bundle with Mach-O thin (x86_64)
CodeDirectory v=20500 size=1580 flags=0x10000(runtime) hashes=40+5 location=embedded
Signature size=8977
Authority=Developer ID Application: My Name (ID)
Authority=Developer ID Certification Authority
Authority=Apple Root CA
Timestamp=18 Jul 2022 at 15:09:09
Info.plist entries=10
TeamIdentifier=6RVQYWZ74B
Runtime Version=11.1.0
Sealed Resources version=2 rules=13 files=4529
Internal requirements count=1 size=192
(此外,在 codesign/altool 之后,应用程序将不再启动,但这是一个不同的问题)
我的应用程序的主要可执行文件有什么问题?
另一件事可能导致“二进制文件的签名无效”:我有一个包含 Windows 行结尾的 Info.plist 文件。当我改成unix行结尾时,公证成功了。我花了一段时间才弄清楚出了什么问题......
我的问题是我用安装程序签名签署了 .app。我需要使用应用程序签名
也有这个问题。就我而言,这是由于使用
zip
实用程序 (/usr/bin/zip
) 创建 zip 存档造成的(谁会想到?!)。
zip -r "$ZIP_PATH" "$APP_PATH"
被替换为
/usr/bin/ditto -c -k –sequesterRsrc --keepParent "$APP_PATH" "$ZIP_PATH"
显然这是因为标准
zip
以某种方式破坏了UTF8编码。