我认为问题在于您的签名的指定要求导致它不接受自己作为与自己“相同的应用程序”(出于钥匙串的目的)。
造成这种情况的一个常见原因(我认为这是您的原因)是使用开发人员 ID 应用程序证书,没有指定要求,也没有安装中间证书。
标准的开发者 ID 要求如下所示:
designated => anchor apple generic and
identifier \"com.example.appName\" and
((cert leaf[field.1.2.840.113635.100.6.1.9] exists) or
(certificate 1[field.1.2.840.113635.100.6.2.6] exists and
certificate leaf[field.1.2.840.113635.100.6.1.13] exists and
certificate leaf[subject.OU] = \"1AZBYCXDW9V\" ))
如果您想自己构建它,则必须将标识符替换为捆绑标识符,并将 subject.OU 替换为证书中的值。(如果您在 Keychain Access 中双击它,它应该被列为组织单位。)然后您可以添加到“Other Code Signing Flags”:
--requirements "=designated ..." (the whole mess from above)
但是,更好的方法是使用 Xcode 4.3.2 或更高版本。如果它识别出您正在使用开发人员 ID 应用程序证书,并且可以在钥匙串中看到中间证书,它将默认生成此证书。
此外,如果您使用 Xcode 中的存档管理器来“导出开发人员 ID 签名的应用程序”,而不是仅使用目标目录中的构建,它将确保对您的应用程序和任何其他随附的可签名文件进行签名,并且它将测试一切都设置正确。(失败非常神秘——例如,您的“选择要签名的开发者 ID”步骤可能没有选择,系统日志中的消息没有有用的信息——但至少失败或成功的事实缩小了范围你的问题在哪里。)
无论哪种方式,您都需要从Developer Certificate Utility站点上的“Developer ID Intermediate Certificate”链接下载并安装(在您的构建机器上)名为“Developer ID Certification Authority”的中间证书。
最后一件事:即使这可以解决您在构建机器上运行的问题,您也确实希望在您支持的最旧的操作系统版本上进行测试。例如,Lion 的 codesign 编译的需求有时无法在 Leopard 上解析,有时甚至无法在 Snow Leopard 上解析。如果发生这种情况……请参阅Gatekeeper vs. Leopard:一个正在进行的故事。