2013-10-04 30 views
6

我正在将代码签名集成到我们的版本中,并创建了一个自定义钥匙串,该钥匙串被保存在源代码树中并用于对代码进行签名(复制到~/Library/Keychains在使用之前,所以它在一个众所周知的位置)。Codesign表示“找不到身份证”但钥匙串上的身份

但是,当试图注册我得到一个错误:

$ /usr/bin/codesign --sign='Mac Developer: John Doe (AA1AAA1AAA)' \ 
    --keychain=~/Library/Keychains/xxx.keychain \ 
    dist/64/gmake/release/bin/libmylib.dylib 

Mac Developer: John Doe (AA1AAA1AAA): no identity found 

但是:

$ security find-identity -p codesigning ~/Library/Keychains/xxx.keychain 

Policy: Code Signing 
    Matching identities 
    1) 49F2FBE79899DF18A9638AC6B1302E2EB6E079AD "Mac Developer: John Doe (AA1AAA1AAA)" 
    1 identities found 

    Valid identities only 
    1) 49F2FBE79899DF18A9638AC6B1302E2EB6E079AD "Mac Developer: John Doe (AA1AAA1AAA)" 

所以我不明白为什么codesign是无法找到的身份。

任何人都可以提出解决方案吗?

请注意,我也尝试过身份的SHA-1,结果相同。

回答

8

一些codeign的错误信息不清楚。这里的问题是代码标识找不到钥匙串,这是由于使用--keychain=~/path造成的。这被解释为单个参数,并且不执行波浪号扩展。如果修改命令以使用单独的参数,它应该按预期工作:

codesign --sign 'Mac Developer: John Doe (AA1AAA1AAA)' \ 
    --keychain ~/Library/Keychains/xxx.keychain \ 
    dist/64/gmake/release/bin/libmylib.dylib 
+0

有趣;如果我用这种方式指定参数,我并不认为shell不会扩展'〜'。我会明天测试,然后回到你身边,但是我认为你是一个赢家。 – trojanfoe

+0

是的,这是答案,但我现在正在“不允许用户交互”,尽管我已用“安全解锁钥匙串”解锁了它。现在我知道该序列可以使用'login.keychain'(我经常这样做),但是在使用非标准钥匙串时它看起来不起作用。我讨厌成为吸血鬼*但你有什么建议吗? – trojanfoe

+0

我能想到几种可能性。一种是钥匙串还没有配置为始终允许对私钥进行密码访问,因此系统要提示用户允许访问。您可以通过双击私钥并在访问控制下添加codesign(或允许所有应用程序),通过Keychain Access进行设置。另一个是如果在构建过程的早期发生解锁,5分钟的默认钥匙串解锁超时过短。您可以通过钥匙串设置来控制它,以延长或删除超时时间。 –