虽然我没有为苹果开发代码签名这样做,但我仍然认为我有一些有价值的东西可以帮助你调试这样的问题。不同之处在于我创建了自己的证书,而您从苹果获得了证书。
检查证书的信任度,它必须受信任才能进行代码签名(在钥匙串访问中证书视图信任部分的倒数第三个 yosemite 上)。请注意,对于您的代码签名证书应该在登录钥匙串中,我需要它在系统钥匙串中。
起初,证书对钥匙串的代码签名并不为人所知,因为缺少扩展目的“代码签名”,如果您查看钥匙串并双击证书,您可以找到它:
我解决了这个问题(您无法修复它,因为 Apple 向您提供了证书。扩展程序应该就在那里):
然后,在将证书从钥匙串拖放到我的桌面后,我将证书添加到受信任的签名证书中,这创建了 ~/Desktop/gdb-cert.cer(请注意,您可以省略 -d 和 -r trustRoot:
$ sudo security add-trusted-cert -d -r trustRoot -p codeSign -k /Library/Keychains/System.keychain ~/Desktop/gdb-cert.cer
这有点棘手,因为我被一些互联网帖子误导并且没有查看手册页。有人说你应该使用 add-trust ( https://llvm.org/svn/llvm-project/lldb/trunk/docs/code-signing.txt )。可怕的是命令成功了,但没有做它应该做的事情。
之后,我在受信任的证书中找到了新证书,如下所示:
$ security find-identity -p codesigning
Policy: Code Signing
Matching identities
1) E7419032D4..... "Mac Developer: FirstName LastName (K2Q869SWUE)" (CSSMERR_TP_CERT_EXPIRED)
2) ACD43B6... "gdb-cert"
2 identities found
Valid identities only
1) ACD43... "gdb-cert"
1 valid identities found
在我的情况下,苹果证书已过期,但我用来签署 gdb 的证书没有过期(好吧,我只是自己创建的)。另请注意,“security add-trusted-cert”(-p codeSign)和“security find-identity”命令(-p codesigning)的策略名称不同。然后我继续签署 gdb,我也总是得到:
$ codesign --sign gdb-cert.cer --keychain ~/Library/Keychains/login.keychain `which gdb`
gdb-cert.cer: no identity found
因为我的印象是我必须将证书文件的文件名提供给 --sign 选项,但实际上这是我应该提供的证书的 CN,并且应该在信任库中。双击钥匙串中的证书时,您可以在此处找到 CN:
或在“security find-identity -p codesigning”的上述输出中。然后我继续签名,我必须给它正确的钥匙链。在您的情况下,这必须是 ~/Library/Keychains/login.keychain,在我的情况下是 System.keychain:
codesign -s gdb-cert --keychain /Library/Keychains/System.keychain `which gdb`
然后给了我一个工作的 gdb,它应该给你一个签名的应用程序。