15

我正在使用 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 视频),但我们需要将其用于自动化,因为我们的应用程序是 gcc 和 Qt 构建输出的奇怪组合。

解决此错误的最佳策略是重试直到它再次起作用吗?这就是我能想到的。

4

6 回答 6

10

我不能推荐 --timestamp=none 解决方法。如果您没有为签名添加时间戳,那么当证书过期时,您的二进制文件将变为未签名/无效。至少如果你给你的签名加上时间戳,只要在证书仍然有效的情况下对二进制文件进行了签名,验证就会通过。这并不会对实际被吊销的证书打折扣,但应该让您得到保障,以防有人(可能是您)需要在证书到期后的某个时间使用您的档案副本。

如果您没有 Internet 来为您的签名添加时间戳,您也可以完全禁用签名,直到您的连接恢复。

编辑:或者,假设您的连接已启动,但 Apple 的默认时间戳服务器不稳定,您可以选择提供自己的有效时间戳服务器。

于 2013-10-19T08:56:41.550 回答
7

这个问题似乎是由网络/防火墙问题引起的。在使用 VPN 访问限制较少的网络之前,我一直遇到此错误。我想知道这个代码设计工具试图访问哪个服务器。

一种解决方法似乎是添加--timestamp=none标志(如果您使用的是 XCode,则添加到“其他代码签名标志”)。

于 2013-01-20T00:12:51.950 回答
4

这由 Apple rdar://11785270 跟踪,对我有用的解决方法是在每次构建之前运行一个干净的项目。

于 2012-11-22T14:52:17.350 回答
4

我认为这与您签署的方式无关。今天下午我在 Xcode 中多次构建了我的项目,没有出现这样的问题。但是今天晚上,在没有互联网访问的公共汽车上,我尝试构建了 3 次,每次都出现同样的错误。所以我关闭了我的 MacBook Air,我们都小睡了一会儿。当我回到家时,无线网络重新开启,我能够再次构建。

因此,显然,Xcode 不会进行代码设计,因此无法构建代码签名的应用程序,除非它可以访问互联网上的时间服务器或类似的东西。很烦人的错误信息没有解释这一点!您的互联网访问是否断断续续?

显然,删除代码设计构建阶段的蛮力解决方法可能会解决它。我还找到了一个更简单的解决方法,除了我会设置一个提醒以记住在构建发货之前重新打开该时间戳开关。否则,我认为您的未加时间戳的产品可能无法通过 Mac App Store 审查或 Gatekeeper。

于 2012-08-25T07:05:43.147 回答
0

每次您尝试进行代码签名时,它都会与 time.apple.com 服务器交互。有时我们会发现与苹果时间服务器有关的问题并且代码签名失败。

当我们面对这个问题时,我们可以做两件事 -

  1. ping time.apple.com

这将帮助我们检查时间服务器是否正常工作,没有任何故障。

  1. 如果上述步骤不起作用,最后一个选项是重新启动机器。

这是保护步骤,它始终有效,因为它重新启动本地苹果时间客户端。

如果您不想重新启动系统,那么您可以找到如何重新启动本地苹果时间客户端。或者

  1. 在一个终端上 - 运行ping time.apple.com并在第二个终端选项卡上运行 codesign 命令。有时这总是有效的。并且不要忘记security unlock-keychain login.keychain在代码签名命令之前运行。
于 2022-02-07T05:15:52.863 回答
-3

清理你的项目 + 确保你有一个活跃的互联网连接。这至少对我有帮助。

于 2013-10-06T10:03:36.507 回答