使用Xcode 8的FastLane的新Build设置来理解
我已经构建并负责管理我们iOS移动研究工作的构建管道。 我们运行3个不同的版本: Alpha , Beta ,将每个版本发布到不同的输出: HockeyApp,TestFlight,AppStore
这些释放点中的每一个均由对不同git分支的提交触发。 提交开发内容将自动将构建版本发送给Microsoft HockeyApp ,提交给master的提交将自动构建应用程序的两个版本,一个版本自动发送给Apple TestFlight ,同时准备一个稍有不同的构建版本,我们可以手动将其部署到Apple App Store 。
为了使事情变得更加有趣,我们的一些项目使用了两个独立的应用程序目标,这使我们共有六种不同的配置。
当我将构建服务器和项目过渡到Swift 3和Xcode 8时,构建配置不再能很好地工作。 苹果对新版本的Xcode中的代码签名和配置方式进行了一些更改,因此我不得不更新流程。
构建通道的核心是快速通道,我们使用它来自动执行该过程的大多数步骤。
手动签名
我最初的希望是,可以将项目文件设置为“自动签名”,然后当它到达CI服务器时,服务器将重写项目文件中的所有必要字段,以将其转换为手动签名。
这是可能的,但是如果您在项目中同时拥有框架和应用程序目标,则将变得相当困难-在某些软件中就是这种情况。 因此,我们坚持使用手动签名进行所有操作。
借助“手动签名”,我们需要手动管理我们的配置文件-可能会有些麻烦-但至少我们有一个很小的团队,因此目前可以管理。
我的目标之一是确保快速通道过程是非破坏性的,这意味着您可以在开发机器上运行它,并且不会破坏您的项目。 因此,高级流程是存储现有的构建设置,然后根据需要重新连接项目文件,进行构建,然后将项目还原到以前的状态。
捆绑ID和其他唯一字段
我们的三个构建路径中的每一个都有一组唯一的字段。 例如,每个应用程序的捆绑ID必须是唯一的。
另外,每个捆绑包ID都有其自己的唯一供应配置文件供应-连接到与该内部版本关联的Apple开发者帐户。 因此,对于发行版,我们使用主要的开发人员帐户,而在beta和alpha测试中,我们使用企业帐户进行签名。
现在,配置文件存储在以下构建设置中: PROVISIONING_PROFILE_SPECIFIER,因此使用xcodebuild,grep和awk的组合提取此值
#使用XcodeBuild | Grep | Awk | 提取提取配置文件名称的信息
EXISTING_PROFILE = sh(“ xcodebuild -project#{PROJECT_FILE_PATH} -scheme#{SCHEME} -showBuildSettings | grep PROVISIONING_PROFILE_SPECIFIER | sed -E s'/ [[[:space:]] + PROVISIONING_PROFILE_SPECIFIER = // g'”)。chomp()
提取值后,我将设置一些其他命令。 根据构建路径,我在Fastfile的顶部定义了ALPHA_PROFILE_NAME和BETA_PROFILE_NAME以及其他一些变量
#用户指定的常数
ALPHA_PROFILE_NAME =“ myProject-Alpha”
BETA_PROFILE_NAME =“ myProject-Beta”
PROJECT_FILE =“ myProject.xcodeproj”
#自动生成的常量
PROJECT_FILE_PATH =“ ../#{PROJECT_FILE}”
PROJECT_FILE_XML =“#{PROJECT_FILE} /project.pbxproj”
PROJECT_FILE_XML_PATH =“ ../#{PROJECT_FILE_XML}”
变量Provisioning_profile_specifier的设置取决于您使用的通道,也称为Alpha ,它将被设置为ALPHA_PROFILE_NAME中的值。
接下来,我构建一些sed命令:
CONVERT_REGEX =“ s /#{EXISTING_PROFILE} /#{provisioning_profile_specifier} / g”
RESTORE_REGEX =“ s /#{provisioning_profile_specifier} /#{EXISTING_PROFILE} / g”
CONVERT_CMD =“ sed -i”'#{CONVERT_REGEX}'#{PROJECT_FILE_XML_PATH}”
RESTORE_CMD =“ sed -i”'#{RESTORE_REGEX}'#{PROJECT_FILE_XML_PATH}”
基本上,这里的目标是存储现有的配置文件,重写项目文件以将配置文件用于构建(捆绑ID和应用程序名称也将更改),构建然后恢复配置文件。
建房前我打电话
sh CONVERT_CMD
在after_all块中,我调用:
如果定义? RESTORE_CMD
sh RESTORE_CMD
结束
结束。 🙂