当前位置:  开发笔记 > 编程语言 > 正文

从分叉终端运行xcodebuild

如何解决《从分叉终端运行xcodebuild》经验,为你挑选了6个好方法。

我正在尝试为iPhone应用程序设置自动构建服务器.我希望能够安装夜间adhoc测试版,以便测试人员可以跟踪开发.

我已成功设置xcode xcode来执行adhoc构建,我也可以从命令行启动构建:

xcodebuild -configuration AdHoc -sdk iphoneos2.2干净的构建

我遇到的问题是,以下行无法从分叉终端(使用nohup或屏幕)工作,并且失败并出现以下情况

CodeSign错误:代码签名标识'iPhone Distribution:XXXXX'与您的钥匙串中的任何代码签名证书都不匹配.添加到钥匙串后,触摸文件或清理项目以继续.

我在我的shell和nohup或屏幕中检查了我的环境变量,但没有找到线索.我想我的问题是分叉终端无法访问钥匙串,但我不知道如何允许它.

谢谢你的帮助



1> Yann Bianche..:

我有错误用户交互是不允许的,并通过首先解锁钥匙串解决它

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 


这是我打算做的,但是它太长了,不适合评论.并且AFAIK评论无法格式化.

2> markshiz..:

这有两个(可能是三个!)组件.一个是钥匙串必须解锁.其次,在钥匙串内部有一个访问控制列表,用于告知处于解锁状态的应用程序的权限.因此,即使您已成功解锁了钥匙串,如果未获得访问私钥并与其签名的能力,/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 "" login.keychain

注意:该工具apple-tool会插入分区security,因此上面的命令会保留该分区.有关此方面的更多信息,请参阅:http://www.openradar.me/28524119



3> Michaël Witr..:

另一种方案:

打开钥匙串访问

右键单击私钥

选择"获取信息"

选择"访问控制"选项卡

单击"允许所有应用程序访问此项"

点击"保存更改"

输入您的密码

请享用



4> 小智..:

您是否可以security list-keychains -s ${HOME}/Library/Keychains/login.keychain在构建过程中使用将登录密钥链显式添加到搜索列表中?从分叉终端看来,构建过程看不到您的用户密钥链.如果钥匙串搜索列表基于您当前的安全会话,这可能是有意义的 - 分叉的终端会话将使登录会话就像您ssh通过环回连接一样.



5> Furkan Musta..:

好吧,问题对我来说是两件事,第一件事就是打开钥匙扣;

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工作,所有的钥匙串都可以访问,一切正常.



6> Bernt Haberm..:

更新与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个小时.叹.

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有