我正在使用Apple Developer ID证书签署应用包。我需要使用命令行工具进行签名,因为我们的构建是自动化的,并且从我们的工具链运行。 90%的时间使用此命令正常工作:
ws5:bin nick$ codesign -fs "Developer ID Application: <my name here>" MyApp.app
ws5:bin nick$ spctl --assess MyApp.app
ws5:bin nick$
注意: MyApp.app不是我真正的应用程序名称,<my name here>
不是实际值。
所以,也许10次中有1次间歇性失败并出现此错误:
MyApp.app: The timestamp service is not available.
我已经验证.app通过spctl --assess
获取隔离机制并通过压缩并下载签名文件 - 所以请不要说“你做错了,使用Xcode”。我知道Apple并没有“正式”建议使用codesign
来获取开发者ID证书(根据WWDC video),但我们需要将其用于自动化,因为我们的应用程序是gcc和gcc的奇怪组合Qt构建输出。
围绕此错误的最佳策略是重试,直到它再次运行?这就是我能想到的全部。
答案 0 :(得分:7)
此问题似乎确实来自网络/防火墙问题。在使用VPN进入限制较少的网络之前,我始终遇到此错误。我想知道这个代码签名工具试图访问哪个服务器。
解决方法似乎是添加--timestamp=none
标志(如果您正在使用XCode,则添加到“其他代码签名标志”)。
答案 1 :(得分:7)
我不建议使用--timestamp = none解决方法。如果您没有为签名添加时间戳,则证书过期时,二进制文件将变为未签名/无效。至少如果您为签名加时间戳,只要在证书仍然有效时签署了二进制文件,验证就会通过。这并不会对实际被撤销的证书进行打折,但是如果有人(可能是您)需要在证书到期后的某个时间段内使用您的档案副本,则应该让您受到保护。
如果您没有互联网为签名加时间戳,您也可以完全禁用签名,直到您的连接恢复为止。
编辑:或者,假设您的连接已启动,但Apple的默认时间戳服务器不稳定,您可以选择提供自己的有效时间戳服务器。
答案 2 :(得分:4)
这是由Apple rdar:// 11785270跟踪的,对我有用的解决方法是在每次构建之前运行项目。
答案 3 :(得分:2)
我认为这与你签约的方式无关。我今天下午在Xcode中多次构建我的项目,没有这样的问题。但是今天晚上,当我乘坐没有互联网接入的公共汽车时,我试图建造三次并且每次都得到同样的错误。所以我关闭了我的MacBook Air,我们都小睡了。当我回到家时,重新启动无线互联网,我又能够重建。
所以,显然,Xcode不会编码,因此无法构建代码签名的应用程序,除非它可以到达互联网上的时间服务器,或类似的东西。相当恼人,错误信息无法解释这一点!您的互联网访问是否断断续续?
显然,删除代码签名构建阶段的强力解决方法可能会解决它。我还找到了easier workaround,除了我要设置一个提示,记住在构建运输之前重新打开时间戳开关。否则,我认为您的未加盖时间戳的产品可能无法通过Mac App Store审核或关守。
答案 4 :(得分:-2)
清理项目+确保您有活跃的互联网连接。这至少对我有所帮助。