我想自动化iOS应用程序构建过程,该过程目前在台式计算机(Mac)上完全是手动的。在Gnu / Linux机器上运行的中央构建服务器Hudson / Jenkins已经在组织基础架构中可用。
是否可以使用Jenkins构建这个iOS应用程序,使用像Jenkins distributed builds这样的工具(以及将Mac机配置为奴隶)?
你有任何例子,知道任何技术或替代方法吗?
答案 0 :(得分:2)
是的,可能。我们这样做,它工作正常。您可以通过选择Xcode-plugin在Jenkins中配置Xcode-slave。网上有很多很好的教程。
首先查看此one。
答案 1 :(得分:2)
我终于让我的詹金斯工作完成并运行了更长时间,而不是我想要使用我能找到的唯一的教程,这些教程都发生在2015年或更早。所以我发布了一个真实的快速清单,列出了我在公司内部本地Mac mini上成功设置Mac奴隶的所做的事情。与您@lifeisfoo类似,我的组织目前在外部服务器上运行Jenkins实例。 此处显示了根据2018设置Mac从站的链接。 Setting up jenkins slave on Mac OS
在成功创建节点并且Launch Agent从Jenkins实例正确连接到Mac从属设备后设置Jenkins作业方面,请参阅以下内容:
xcrun xcodebuild -project ProjectName.xcodeproj \
-configuration Release \
-destination 'platform=iOS Simulator,name=iPhone 6s' \
-allowProvisioningUpdates \
CODE_SIGN_STYLE='Automatic'
PROVISIONING_PROFILE_SPECIFIER=${PROVISIONING_PROFILE}
CODE_SIGN_IDENTITY=${CODE_SIGNING_IDENTITY}
截至2018年2月,我已将其更改为工作区,因为需要包含一些可可pod SDK,因此我现在使用以下组合"执行Shell" s。
下面的脚本是每次运行一个pod安装(因为我将Pods /添加到gitignore文件中,只将Podfile和Podfile.lock推送到Jenkins从中获取的存储库)
cd /Users/jenkins/Desktop/projectFileWhere.xcworkspaceExists
/usr/local/bin/pod install
以下是在另一个" Execute Shell"
中运行项目构建 xcrun xcodebuild -workspace ProjectName.xcworkspace \
-scheme NameOfScheme \
-configuration Release \
-destination 'platform=iOS Simulator,name=iPhone 6s' \
-allowProvisioningUpdates \
CODE_SIGN_STYLE='Automatic'
PROVISIONING_PROFILE_SPECIFIER=${PROVISIONING_PROFILE}
CODE_SIGN_IDENTITY=${CODE_SIGNING_IDENTITY}
注意: - 我不确定它是否绝对必要,但我确保将最新的GitHub repo克隆到我的Mac slave机器中,然后放入.xcodeproj之前存在的同一个项目目录中。 - 我也愚蠢地没有意识到.xcworkspace没有被推送到我的GitHub仓库,因为build / * .xcworkspace仍然在我的gitignore文件中。删除它,重新推送回购并克隆到Mac奴隶,这是所有肉汁宝宝
我想写这篇文章来指出我最终做了什么来完成工作,我的问题很容易解决,直到最后一个代码签名无法找到我在Xcode的项目文件目标和项目中使用的证书/团队的配置文件:
1)在这个Wiki中,我直接在标题" Xcode项目设置"中完成了段落中所述的内容。 https://github.com/cyupa/JenkinsCI-iOS
2)你需要在Mac Slave上拥有开发和分发证书的私钥和公钥,以便通过Jenkins构建到Mac Slave。需要在Mac Slave上为每个帐户配置配置文件,并使用正确的Bundle ID。
https://blog.noser.com/streamlining-ios-development-with-jenkins-and-wireless-app-distribution-2/
3)将开发和分发的钥匙串和证书移动到登录或您创建的任何其他唯一钥匙串,但是对于每个私钥,右键单击(双指点击)私钥和获取信息 - >访问控制 - >允许/ usr / bin / codesign或所有应用程序访问此项目
4)在Mac slave上的Xcode项目的Build设置中(确保你已经从你的repo下载到Mac slave并在Mac Slave的Xcode应用程序上打开它一次),更改构建设置是自动的和/或只是在目标应用程序的常规中进行更改,并根据需要进行测试。
5)解决我花了2天时间问题的最后一个难题是简单地将我的钥匙串添加到安全列表中,以便Xcode可以使用所需证书的配置文件。如果您将密钥链添加到安全列表中,但是我保留了它以及它对我有用,那么不确定我上面提到的有关访问控制的内容是否必要。也许我稍后会进行实验,看看实际需要什么,不需要什么但是现在,这才是关键。退出代码1和#34可能会导致代码失败。这都是一回事。要解锁的终端命令是:
security list-keychains -s ~/Library/Keychains/{login, "any other keychains you want added to security list"}.keychain
Sooooo如果你在Jenkins中看到任何构建错误,比如.......
没有关于' com.organization.Target'的个人资料被发现:Xcode无法找到任何与App.organization.Target'匹配的iOS应用开发配置文件。 代码签名错误:产品类型需要代码签名'应用程序'在SDK' iOS 11.2'
.......然后你知道它很可能是一个钥匙串访问的东西,没有别的。
事后我意识到,我在其他一些Stack帖子和下面链接的一两篇其他博客文章中看到了同样的建议,但当时我的问题不是我所以我完全忘记了它现在我不喜欢自己因为这些帖子不慢读。那好吧。至少我现在正在获得一个绿色圆圈。