错误,"时间戳服务不可用." 在Mac OS X 10.8上使用codesign时

Nic*_*ton 15 macos code-signing

我正在使用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$ 
Run Code Online (Sandbox Code Playgroud)

注意: MyApp.app不是我的真实应用程序名称,<my name here>并不是实际值.

因此,可能会有1到10次间歇性地失败并出现此错误:

MyApp.app: The timestamp service is not available.
Run Code Online (Sandbox Code Playgroud)

我已经验证了.app通过隔离机制,spctl --assess并通过压缩和下载签名文件 - 所以请不要说"你做错了,使用Xcode".我知道Apple并没有"正式"推荐使用codesign开发者ID证书(根据WWDC视频),但我们需要将其用于自动化,因为我们的应用程序是gcc和Qt构建输出的奇怪组合.

围绕此错误的最佳策略是重试,直到它再次运行?这就是我能想到的.

lid*_*lid 7

这个问题似乎确实来自网络/防火墙问题.在使用VPN进入限制较少的网络之前,我始终遇到此错误.我想知道这个代码签名工具试图访问哪个服务器.

解决方法似乎是添加--timestamp=none标志(如果您正在使用XCode,则为"其他代码签名标志").


小智 7

我不建议使用--timestamp = none解决方法.如果您没有为签名添加时间戳,那么当证书过期时,您的二进制文件将变为未签名/无效.至少如果您为签名加时间戳,只要在证书仍然有效时签署了二进制文件,验证就会通过.这并不会对实际被撤销的证书进行打折,但是如果有人(可能是您)需要在证书到期后的某个时间段内使用您的档案副本,则应该让您受到保护.

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

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


sha*_*ora 6

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

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

  1. ping time.apple.com

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

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

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

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

  1. 在一个终端上运行ping time.apple.com,并在第二个终端选项卡上连续运行 codesign 命令,这始终有效。并且不要忘记security unlock-keychain login.keychain在协同设计命令之前运行。


val*_*exa 5

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


Jer*_*ock 4

我认为这与你签名的方式无关。今天下午我在 Xcode 中多次构建了我的项目,没有出现这样的问题。但是今天晚上,当我乘坐没有互联网连接的公共汽车时,我尝试构建了三次,但每次都遇到同样的错误。于是我合上 MacBook Air,我们俩都睡了个午觉。当我回到家,无线网络重新打开时,我就可以再次进行构建了。

因此,显然,Xcode 不会进行协同设计,因此无法构建协同设计的应用程序,除非它可以到达互联网上的时间服务器或类似的东西。非常烦人的是错误消息没有解释这一点!您的互联网访问是否间歇性?

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