在 set-key-partition-list codesign 后仍然提示输入密钥

Posted

技术标签:

【中文标题】在 set-key-partition-list codesign 后仍然提示输入密钥【英文标题】:After set-key-partition-list codesign still prompts for key access 【发布时间】:2017-03-24 14:50:19 【问题描述】:

我正在使用以下命令导入包含我的代码签名身份的公钥和私钥的 PEM 文件:

security import "$PEM_FILE" -k ~/Library/Keychains/login.keychain -T /usr/bin/codesign -T /usr/bin/security

OS X 10.11 El Capitan 上,然后我可以在没有提示的情况下codesign

codesign --force --sign "$IDENTITY_HASH" --timestamp=none `mktemp`

但是,由于others 有mentioned,OS X 10.12 Sierra 现在要求您在import 之后set-key-partition-list

security set-key-partition-list -S apple-tool:,apple: -s -k "$PASSWORD" ~/Library/Keychains/login.keychain

但是,即使在 set-key-partition-list 之后,我仍然会看到一个 UI 对话框,要求我有权访问我的私钥以进行代码签名:

如果我点击Always Allow,那么未来的codesign 调用不会提示,但我不希望那个 UI 对话框提示。我希望这一切都可以编写脚本。

为什么set-key-partition-list 为其他人工作,而不是为我工作?

【问题讨论】:

【参考方案1】:

在我原来的import 命令中,我没有为我的钥匙串提供密码。如果我为import 命令提供密码,set-key-partition-list 会阻止对话框显示:

security import "$PEM_FILE" -k ~/Library/Keychains/login.keychain -P "$PASSWORD" -T /usr/bin/codesign -T /usr/bin/security
security set-key-partition-list -S apple-tool:,apple: -s -k "$PASSWORD" ~/Library/Keychains/login.keychain

然后codesign 不显示对话框。它只是工作!

codesign --force --sign "$IDENTITY_HASH" --timestamp=none `mktemp`

【讨论】:

如何获得"$IDENTITY_HASH"codesign 命令?抱歉,我是 ios 开发新手... security find-identity -v 将列出您的所有身份。 IDENTITY_HASH 是第一个列出的 41 个字符的哈希值。您可能想要一个名称以 iPhone DeveloperiPhone Distribution 开头的名称,具体取决于您是要签名以进行开发还是分发。 Heath Borders,我在本地系统中尝试了 xcode verison 9.0 和 os mac high sierra 10.13,但仍然弹出确认对话框 嘿@HeathBorders,我不明白你的回答。 import 命令的 -P 是证书本身的密码,而不是钥匙串的密码。如果我在这里输入钥匙串密码,它将无法导入,因为我的钥匙串和.p12文件没有相同的密码。 关于-T; $安全导入--帮助; -T 指定可以访问导入密钥的应用程序(允许多个 -T 选项)

以上是关于在 set-key-partition-list codesign 后仍然提示输入密钥的主要内容,如果未能解决你的问题,请参考以下文章

NOIP 2015 & SDOI 2016 Round1 & CTSC 2016 & SDOI2016 Round2游记

秋的潇洒在啥?在啥在啥?

上传的数据在云端的怎么查看,保存在啥位置?

在 React 应用程序中在哪里转换数据 - 在 Express 中还是在前端使用 React?

存储在 plist 中的数据在模拟器中有效,但在设备中无效

如何在保存在 Mongoose (ExpressJS) 之前在模型中格式化数据