我正在尝试为iPhone应用程序设置自动构建服务器.我希望能够安装夜间adhoc测试版,以便测试人员可以跟踪开发.
我已成功设置xcode xcode来执行adhoc构建,我也可以从命令行启动构建:
xcodebuild -configuration AdHoc -sdk iphoneos2.2干净的构建
我遇到的问题是,以下行无法从分叉终端(使用nohup或屏幕)工作,并且失败并出现以下情况
CodeSign错误:代码签名标识'iPhone Distribution:XXXXX'与您的钥匙串中的任何代码签名证书都不匹配.添加到钥匙串后,触摸文件或清理项目以继续.
我在我的shell和nohup或屏幕中检查了我的环境变量,但没有找到线索.我想我的问题是分叉终端无法访问钥匙串,但我不知道如何允许它.
谢谢你的帮助
我有错误用户交互是不允许的,并通过首先解锁钥匙串解决它
security unlock-keychain /Users/yannooo/Library/Keychains/login.keychain
我也尝试将我的证书放在系统的钥匙串中,它正在运行.我的最终解决方案是使用Keychain Access应用程序将所有与iPhone相关的证书放在名为iPhone.keychain的专用钥匙串中
security list-keychains -s /Users/yannooo/Library/Keychains/iPhone.keychain security unlock-keychain -p keychainpassword /Users/yannooo/Library/Keychains/iPhone.keychain
这有两个(可能是三个!)组件.一个是钥匙串必须解锁.其次,在钥匙串内部有一个访问控制列表,用于告知处于解锁状态的应用程序的权限.因此,即使您已成功解锁了钥匙串,如果未获得访问私钥并与其签名的能力,/usr/bin/codesign
您仍会收到此消息.最后,如果您使用的是Mac OS Sierra,则分配给密钥的默认分区ID不正确,以便与codesign
二进制文件兼容.
解决方案如下:
1)如果您可以访问Keychain Access GUI,则可以通过右键单击私钥,选择"访问控制"选项卡,然后选择"允许所有应用程序",手动授予每个程序或/ usr/bin/codesign访问权限.访问此项"广播或"始终允许这些应用程序访问"列表.
2)如果您遇到此错误,则可能是您尝试codesign
为非登录用户运行.在这种情况下,您显然无法访问"Keychain Access"GUI.对于这些情况,您验证sign
应用程序缺少授权
,这显然意味着所有应用程序,或者特别是/usr/bin/codesign
通过使用:
security dump-keychain -i login.keychain
但是,由于某种原因,您无法在交互模式下添加或修改访问控制属性 - 只能删除!实际上,您必须手动删除密钥并将其重新添加到指定-T
标志的密钥链中.
security import login.keychain -P "" -T /usr/bin/codesign
在哪里-T
指定
-T Specify an application which may access the imported key (multiple -T options are allowed)
3)如果您使用的是Mac OS Sierra,请修改分区ID以包含apple
分区.据推测,这是分配给codesign
它的命名空间,因为它是由Apple分发的.
security set-key-partition-list -S apple-tool:,apple: -k "
注意:该工具apple-tool
会插入分区security
,因此上面的命令会保留该分区.有关此方面的更多信息,请参阅:http://www.openradar.me/28524119
另一种方案:
打开钥匙串访问
右键单击私钥
选择"获取信息"
选择"访问控制"选项卡
单击"允许所有应用程序访问此项"
点击"保存更改"
输入您的密码
请享用
您是否可以security list-keychains -s ${HOME}/Library/Keychains/login.keychain
在构建过程中使用将登录密钥链显式添加到搜索列表中?从分叉终端看来,构建过程看不到您的用户密钥链.如果钥匙串搜索列表基于您当前的安全会话,这可能是有意义的 - 分叉的终端会话将使登录会话就像您ssh
通过环回连接一样.
好吧,问题对我来说是两件事,第一件事就是打开钥匙扣;
security unlock-keychain login.keychain
第二个是(空)密码,
security import blahblahbackup.p12 -k login.keychain -T /usr/bin/codesign -P ""
更新:当脚本从Web脚本或某事件触发时,A稍后会遇到一些问题.像那样.它只是看到/Library/Keychains/System.chain.所以我发现了一个肮脏的解决方法(这可能导致安全问题,但对我来说还可以);
设置pubkey ssh登录(从想要调用构建脚本的用户,到具有证书并将运行xcodebuild的实际用户)在我的情况下,它是同一个用户.Apache正在工作,someuser
并且建立了构建的所有内容someuser
.
我的php脚本(用于触发构建)正在调用〜/ build-script.我改变了这样:
ssh someuser @ localhost~/build-script
所以它在一个真正的tty工作,所有的钥匙串都可以访问,一切正常.
更新与Jenkins遇到类似问题的人:
如果您将Mac设置为通过LaunchDaemons启动jenkins,则需要确保添加
SessionCreate
所以整个ci.plist看起来像这样:
Label Jenkins UserName user GroupName staff ProgramArguments /usr/bin/java -Xmx512m -jar /path/to/jenkins/jenkins.war RunAtLoad KeepAlive EnvironmentVariables JENKINS_HOME /path/to/jenkins/home SessionCreate
我和上面的很多人都有同样的问题.特别是我从Jenkins shell脚本运行时遇到的问题我得到了相同的****不允许用户交互**错误.从ssh shell运行时,我的脚本运行正常.
大多数人也看到的区别是,如果你运行 安全列表 - 钥匙串,你会得到:
$ security list-keychain "/Library/Keychains/System.keychain" "/Library/Keychains/System.keychain"
但是当在ssh shell中运行时,我会得到:
$ security list-keychain "/Users/user_account_name/Library/Keychains/login.keychain" "/Library/Keychains/System.keychain"
并且大多数人将在用户帐户钥匙串中拥有所有密钥/证书等.像一些人建议的那样,很容易建立一个与用户密钥链不同的新密钥链,并为你的XCode签名内容重新开发.我最终放在这里:/Library/Keychains/sysiphone.keychain
我认为问题在于我的设置(也可能是你的设置),你在不同的安全首选项域(系统与用户)中运行.最后 - 这是我如何让我的sysiphone.keychain出现:
$ sudo security list-keychains -d system -s "/Library/Keychains/sysiphone.keychain" Password: ***** $ security list-keychains -d system "/Library/Keychains/sysiphone.keychain"
......神奇的事情开始在詹金斯建造.哇...这对我来说大约需要4个小时.叹.