macOS 公证错误:“使用的签名算法太弱”

Leo*_*aun 5 cocoa codesign notarize

我想知道是否有人熟悉这个错误,只有当我将我的应用程序上传到 Apple 进行公证时才会发生:

"AppName.zip/AppName.app/Contents/Resources/EWSMacCompress.tar.gz/EWSMacCompress.tar/EWSMac.framework/Versions/A/EWSMac83886082"
"The signature algorithm used is too weak."
Run Code Online (Sandbox Code Playgroud)

附加信息:

- 我多年来一直在为我的应用程序签名,没有任何问题。该错误仅在发送应用程序进行公证时发生。

- 我在 2018 年 11 月提交了一个错误,向 Apple 提供了他们要求的所有信息 - 但从未得到进一步解决。

- 我最近再次联系了 Apple,他们向我指出了上次更新于 2016 年的一些资源页面。它简要地提到了一个类似的错误 - 但仍然没有任何关于如何解决它的信息:https : //developer.apple.com/ library/archive/technotes/tn2206/_index.html#//apple_ref/doc/uid/DTS40007919-CH1-TNTAG301

- 对这个错误的搜索没有产生任何有用的信息。

- 有问题的 tar.gz 文件是一个 eSellerate 许可框架。很多人可能都知道,十多年来,它一直是 Mac 软件的流行许可平台。虽然我前段时间切换到不同的许可平台,但我仍然有成千上万的客户拥有 eSellerate 许可(我确信许多其他 Mac 开发人员的情况也是如此)。

据我了解,整个情况必须对 tar.gz 档案中的文件进行签名 - 我也找不到任何信息

任何帮助将不胜感激!

谢谢,利奥

lao*_*ius 4

您必须解压您的tar或文件,对所有有错误的文件进行协同设计并重新打包它们zipjar

只需浏览日志并对所有有错误的日志进行协同设计,然后对整个应用程序进行签名即可。对于我来说,我使用以下两个命令。

find ./MyApp -type f \
 -exec codesign --timestamp \
 --keychain /Users/builduser/Library/Keychains/login.keychain-db \
 -s 'Developer ID Application: XXXXXXXX' -f --verbose=9 --deep \
 --options=runtime --entitlements entitlements.xml {} +
Run Code Online (Sandbox Code Playgroud)

然后签署应用程序

codesign --timestamp \
 --keychain /Users/builduser/Library/Keychains/login.keychain-db \
 -s 'Developer ID Application: XXXXXXXX' -f --verbose=9 --deep \
 --options=runtime --entitlements entitlements.xml MyApp
Run Code Online (Sandbox Code Playgroud)

您必须使用 运行协同设计--options=runtime。这是公证指南。

如果您正在构建 Java 应用程序,这些链接也可能会有所帮助: How to build MacOS app with Hardened Runtime in AppBundler

https://bitbucket.org/infinitekind/appbundler/issues/39/build-with-hardened-runtime