苹果公证将dylib文件列为未签名。

8
我们发布一个Java应用程序,其中包含一个捆绑的JRE版本1.8.0_172。我使用-f --deep和--options runtime标志对应用程序进行签名。查看捆绑JRE的_CodeSignature目录中的CodeResources文件,JRE中的每个文件都已签名并得到确认。
然而,在将包含应用程序的DMG提交给苹果进行公证后,我们的软件被拒绝。在JRE中的所有60个DYLIB文件都被列为未签名。以下是一个示例:
从CodeResources文件中:
<key>Home/jre/lib/libAppleScriptEngine.dylib</key>
    <dict>
        <key>hash</key>
        <data>
        oJjQQGky4LuYNhwuBu8zMLG4zbc=
        </data>
        <key>hash2</key>
        <data>
        grMACw0q7A9GJyPxlSBDGYEkZKrDusKLRRnXsW/bHGI=
        </data>
    </dict>

从苹果的回应中:
"severity": "error",
"code": null,
"path": "TheApplication.dmg/TheApplication.app/Contents/PlugIns/jdk1.8.0_172.jdk/Contents/Home/jre/lib/libAppleScriptEngine.dylib",
"message": "The binary is not signed.",
"docUrl": null,
"architecture": "x86_64"

除了dylib文件外,文件jspawnhelper也因未签名而被拒绝。
最后,文件libjli.dylib由于以下原因被拒绝: “该二进制文件使用的SDK早于10.9 SDK。”
有人遇到过类似问题并能够通过认证过程吗?
2020年1月14日: 我从这个网站http://www.zarkonnen.com/signing_notarizing_catalina中使用的步骤已经不再适用于今天。苹果改变了他们的限制条件。我现在面临着与我在此帖子中首次提出的问题相同的问题。
2020年2月21日: 事实证明,列为未签名的文件实际上未签名。我现在使用一个shell脚本递归地为我们应用程序中的每个文件进行签名。我接着签署捆绑的JRE、其他内部应用程序,最后是整个顶级应用程序的总体签署。
剩余的问题是Java 8没有构建使用强化运行时的文件。希望OpenJDK和/或AdoptOpenJDK很快将有新版本的Java 8,满足Apple的强化运行时要求。

该二进制文件使用的 SDK 版本早于 10.9 SDK。为此,您需要手动使用 SDK >=10.9 重新构建它。 - StefanS
你尝试过在制作 dmg 文件之前先对应用程序的 zip 文件进行公证吗? - Richard Barber
1
@PeterHuneke,您是否已经解决了“二进制文件使用的SDK早于10.9 SDK”的问题,并成功地对Java 8应用程序进行了公证? - AbstractVoid
今天我提交了一个应用程序的压缩包。该应用程序已成功进行公证。我使用infinitekind-appbundler组装了该应用程序。应用程序包还包括之前我签名过的Electron应用程序。我使用ant构建文件对捆绑的JRE进行了签名。然后我对整个应用程序进行了签名。所有这些都是在Mac High Sierra上完成的。 - Peter Huneke
结果发现,尽管该应用程序已经过公证和装订,但由于JRE未被允许运行,该应用程序无法在Mojave或Catalina上运行。我按照此网站上的说明修改了我的流程:http://www.zarkonnen.com/signing_notarizing_catalina 我缺少的主要是授权。现在我的应用程序可以在Catalina和Mojave上运行了。 - Peter Huneke
显示剩余2条评论
1个回答

0

除了使用AdoptOpenJDK之外,还需要对应用程序中的每个文件进行单独签名。仅使用--deep标志进行签名是不够的。我们使用一个shell脚本来循环遍历所有文件并对其进行签名。 - Peter Huneke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接