如何通过命令行安装iOS开发者证书/私钥和预配文件?

46

我正在为iOS应用程序项目配置自动构建服务器。

大部分工作已经完成,现在是最后阶段——安全性。

开发人员证书/私钥和预配配置文件可以通过GUI轻松安装到Keychain中。但我想通过命令行完成这个过程,以便自动化整个配置过程。需要通过命令行导出/导入证书、私钥和预配配置文件。

非常感谢您的任何建议!


4
你是否找到了安装配置文件的方法?我已经搞定了证书方面,但是还在摸索如何进行另一部分... - jkp
3个回答

55

始终允许GUI被触发,因为codesign没有获得访问您的私钥的acl。请尝试以下方法:

security unlock-keychain -p <my keychain password>
security import Certificate.p12 -k ~/Library/Keychains/login.keychain -P password -T /usr/bin/codesign

-T 标志告诉安全性允许 codesign 访问你在 Certificate.p12 文件中导入的密钥。

7
是的,这正是我所需要的。需要注意的是,当我尝试运行上述命令时,遇到了“security: SecKeychainItemImport: User interaction is not allowed.”的错误提示信息。我忘记解锁我的钥匙串了。唉!运行“security unlock-keychain”后,它顺利地工作了。 - awolf
这个可以正常工作,但我需要更多的东西...我的证书+密钥对不是原始的苹果产品,而是我们为内部开发人员创建的自签名证书(我们不希望他们在自己的机器上拥有我们真正的私钥)。现在我还需要配置KeyChain始终信任该证书。我知道如何在GUY中做到这一点,我也知道如何通过以下方式添加(导入+信任)受信任的证书:security add-trusted-cert -k /Library/Keychains/System.keychain -d XXXX.cer --- 然而,该命令无法处理.p12文件。有什么想法吗? - Motti Shneor
更新:自macOS Sierra起,您应该遵循Ilian Iliev在此处的流程: https://dev59.com/oVkS5IYBdhLWcg3wb2Ts - ablarg

15

我从这里发现了提示:http://lists.apple.com/archives/apple-cdsa/2010/Mar/msg00021.html

命令是security。我正在阅读手册页。试用后我会在稍后更新这个答案 :)

--(编辑)--

首先,我们必须手动为密钥链中的证书/密钥授予“始终允许”访问权限。我不知道如何在没有GUI的情况下执行此操作。

然后在每个会话中运行构建工具之前运行命令security unlock-keychain。我使用SSH,所以我必须为每个登录会话执行一次。


5
在添加证书和密钥时,要授予“始终允许”访问权限,可以使用 security import 的 -A 开关进行操作。 - Luke
1
不建议使用-A选项,因为它允许任何应用程序使用这些证书。为了更安全,请使用上面描述的“-T /usr/bin/codesign”选项。这将允许特定的应用程序。有关其他选项,请参见“security import --help”。 - atreat

3

使用命令行安装证书:

security unlock-keychain -p <machine login password>
security import my_certificate.p12 -k ~/Library/Keychains/login.keychain -P my_password -T /usr/bin/codesign

安装移动设备描述文件:

简单的方法:

#install profiles, will trigger xcode to install the profile
open "my_profile1.mobileprovision"

# wait for xcode to process the request
sleep 3

# shut down xcode (optional)
kill $(ps aux | grep 'Xcode' | awk '{print $2}')

复杂的方法:

PROVISION_FILE ="my_profile.mobileprovision"

uuid=`security cms -D -i ${PROVISION_FILE } | grep -aA1 UUID | grep -o "[-a-zA-Z0-9]\{36\}"`

cp "$PROVISION_FILE " ~/Library/MobileDevice/Provisioning\ Profiles/$uuid.mobileprovision

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接