一尘不染

在CI(Travis / Jenkins)环境中使用xcodebuild(Xcode 8)和自动签名

jenkins

随着Xcode 8的发布,Apple引入了一种管理签名配置的新方法。现在,您有两个选择ManualAutomatic

根据有关代码签名的WWDC 2016会议(WWDC
2016-401-Xcode应用程序签名的新增功能)
,当您选择Automatic签名时,Xcode将执行以下操作:

  • 创建签名证书
  • 创建和更新应用程序ID
  • 创建和更新配置文件

但是根据苹果在那届会议上所说,它将被Automatic Signing使用,Development signing并且将仅限于Xcode创建的配置文件。

当您尝试Automatic Signing在CI环境(例如Travis
CI或Jenkins)上使用时,就会出现问题。我无法找到一种简单的方法来继续使用“自动”并签署分发文件(因为Xcode会迫使您使用Development和Xcode创建的配置文件)。

新的“
Xcode创建的供应配置文件”未显示在开发人员门户中,尽管我可以在我的机器中找到……我是否应该将这些配置文件移至CI机器,为其构建Development并导出Distribution?有没有办法覆盖Automatic Signing使用xcodebuild


阅读 210

收藏
2020-07-25

共1个答案

一尘不染

在尝试了一些选项之后,这些是我可以在CI服务器上使用的解决方案:

  • 在CI环境中包括开发人员证书和私钥以及自动生成的配置文件:

使用会Automatic signing强制您使用Developer证书和auto-generated provisioning profiles。一种选择是将开发证书和私钥(应用程序->实用程序->钥匙串访问)以及自动生成的配置文件导出到CI机器。定位自动生成的配置文件的一种方法是导航到~/Library/MobileDevice/Provisioning\ Profiles/,将所有文件移动到备份文件夹,打开Xcode并存档项目。Xcode将创建自动生成的开发配置文件,并将其复制到Provisioning Profiles文件夹中。

xcodebuild archive ...将为创建一个.xcarchive签名Developmentxcodebuild -exportArchive ...然后可以将构建辞职Distribution

  • 在CI环境中构建时,将“自动”替换为“手动”

拨打电话之前xcodebuild解决方法是更换的所有实例ProvisioningStyle = AutomaticProvisioningStyle = Manual在项目文件。sed可用于在pbxproj文件中简单查找替换:

sed -i '' 's/ProvisioningStyle = Automatic;/ProvisioningStyle = Manual;/' <ProjectName>.xcodeproj/project.pbxproj

@thelvis还使用gem
创建了一个Ruby脚本来完成此任务xcodeproj。该脚本使您可以更好地控制更改。

xcodebuild然后将使用CODE_SIGN_IDENTITY项目中设置的代码签名身份()以及供应配置文件(PROVISIONING_PROFILE_SPECIFIER)。这些设置也可以作为参数提供xcodebuild,它们将覆盖项目中设置的代码签名标识和/或供应配置文件。

编辑:使用Xcode
9,xcodebuild有一个新的构建设置参数CODE_SIGN_STYLE可供选择AutomaticManual因此无需在项目文件中查找和替换自动实例为手动,WWDC
2017 Session
403中的
更多信息Xcode和Xcode
Server签名中的新增功能

  • 切换到手动签名

手动签名将完全控制所使用的代码签名标识和配置文件。这可能是最干净的解决方案,但缺点是失去了自动签名的所有优点。

要了解有关使用Xcode
8进行代码签名的更多信息,我真的推荐这篇文章以及WWDC2016会议401-Xcode应用程序签名中的新增功能

2020-07-25