使用Xcode 8的FastLane的新Build设置来理解

我已经构建并负责管理我们iOS移动研究工作的构建管道。 我们运行3个不同的版本: AlphaBeta ,将每个版本发布到不同的输出: 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_NAMEBETA_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
结束

结束。 🙂