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