阅读 270

Fastlane:移动应用CICD最优解之iOS项目环境设置和认证篇

环境设置和认证

截屏2021-12-15 下午4.33.22.png 最近在调研怎么做好移动端的CI-CD,发现一款不错的工具,那就是我们今天的主角fastlane。 其实我们日常Beta测试常用的网站firim和蒲公英都为fastlane提供了插件:比如蒲公英 使用Fastlane上传App。接下来我们就开始学习怎么在iOS客户端来使用fastlane这款工具。

环境设置macOS

Xcode command line tools (macOS)

安装Xcode命令行工具 xcode-select --install

安装fastlane

官网推荐使用 Bundler + ruby(version2.5+) 请确保满足Ruby版本要求,不确定的可以使用命令ruby --version 查看

Bundler安装方式

使用Bundler和Gemfile来定义我们对fastlane的依赖。这将清楚地定义要使用的fastlane版本及其依赖关系,也将加快fastlane的执行速度。

  1. 使用命令gem install bundler来安装Bundler

  2. 在我们项目的根目录创建一个Gemfile,内容如下

source "https://rubygems.org"  gem "fastlane" 复制代码

  1. 新建完之后运行命令 bundle update,并且将./Gemfile 和 ./Gemfile.lock 加入到我们的版本控制中

  2. 每次执行fastlane 使用 bundle exec fastlane [lane]

  3. 在CI中添加 bundle install 作为第一次构建的设置

  4. 升级fastlane使用 bundle update 即可

使用Homebrew (macOS)安装

这种方式,我们不需要单独安装Ruby,Homebrew会为我们安装适合fastlane的Ruby版本,详情请见,这里面我们可以根据需要选择Intel的CPU或Apple Silicon的CPU所对应的版本。

brew install fastlane 复制代码

不推荐使用系统 Ruby + RubyGems (macOS/Linux/Windows)

不建议在您的本地环境中使用这种方法,但是您仍然可以在系统Ruby的环境中安装fastlane。由于文件权限的原因,使用sudo经常会出现不需要的结果,从而使管理环境更加困难。

sudo gem install fastlane 复制代码

为项目配置fastlane

在Terminal中cd到我们的项目目录下执行

fastlane init 复制代码

注意,如果你想在你的app Store Connect账户上创建你的第一个应用,你需要用PRODUCE_COMPANY_NAME环境变量来设置开发者名称(company_name):

PRODUCE_COMPANY_NAME="YOUR COMPANY NAME" fastlane init 复制代码

获取更多关于 company_name 的描述参见 Create app documentation.

使用Swift语言用做Fastfile配置(正在测试中的新功能)

更多信息请查看Fastlane.swift docs

fastlane init swift 复制代码

根据选择的不同配置,会有不同的配置文件。如果我们选择了下载现有应用的元数据,则会得到这样的目录结构

image.png 最有趣的文件是fastlane/Fastfile,它包含了发布应用所需的所有信息。

设置环境变量

fastlane 需要一些环境变量的设置来保证运行正常。特别是,如果我们电脑的local设置没有设置为UTF-8,那么在构建和上传构建时就会出现问题。在不同的系统中可能需要修改的相关shell文件为:~/.bashrc~/.bash_profile~/.profile or ~/.zshrc。 在shell配置文件中添加以下几行:

export LC_ALL=en_US.UTF-8 export.UTF-8 复制代码

接下来,Fastlane会为我们带来哪些功能?

fastlane为我们创建了所有需要的文件。现在,我们可以继续定制fastlane来生成屏幕截图,或者自动分发新的构建,以及更多。 下面是一些例子:

  • 为App Store生成本地化的iOS截图

  • iOS测试版自动部署

  • 自动部署iOS App Store

  • 发现所有: fastlane actions

请注意,如果你构建的自动化需要与苹果服务器连接,例如在构建应用程序时进行代码签名,或将应用程序上传到app Store Connect,等等,你将需要进行身份验证。查看 苹果服务的身份验证 ,了解最佳的身份验证方法,以满足我们的特定用例。

认证:通过苹果提供的服务来认证

一系列的 fastlane actions 调用Apple接口需要安全认证. 这就给我们带来一些挑战,特别是在CI/CD(持续集成和持续交付)方面.接下来有四种方案来解决问题。

方法1

App Store Connect API key(推荐) 这是官方的认证方案,但它还不能支持所有的fastlane特性,详情见 App Store Connect API .

方法2

对于不支持 App Store Connect API的Action, 我们需要用我们的 Apple ID 来认证,清庆幸的是 fastlane 完全支持 Apple的双重认证 (和 2-step verification (2SV)) 来支持我们登录自己的开发者账号。如下图所示,熟悉的味道。

截屏2021-12-16 上午9.54.12.png

手动认证(输入账号和密码)

在启用两因素验证(或两步验证)后,您将被要求通过输入安全码来验证您的身份。如果您已经为您的帐户配置了一个可信的设备,那么代码将出现在设备上。如果您没有配置任何设备,但信任一个电话号码,那么代码将发送到您的手机。

生成的会话将存储在 ~/.fastlane/spaceship/[email]/cookie目录中

使用spaceauth存储手动验证的会话 

由于您的CI机器将无法提示您输入双因素身份验证或两步验证信息,您可以通过运行以下命令提前为您的Apple ID生成登录会话:

fastlane spaceauth -u user@email.com 复制代码

生成的值必须存储在CI系统上的“FASTLANE_SESSION”环境变量中。这个会话将被重用,而不是每次fastlane与苹果api通信时触发一个新的登录。

建议您在与CI相同的机器上运行' spaceauth ',而不是在您的机器上本地运行它——请参阅下面关于会话持续时间的注释。

关于会话持续时间的重要说明

作为2FA/2SV身份验证的一部分或作为*spaceauth的一部分生成、存储和重用的会话受苹果强加的技术限制。即:

  • Apple ID会话只在特定区域内有效,这意味着如果你使用会话的区域(例如CI系统)与你创建会话的区域(例如本地机器)不同,你可能会遇到问题。建议您在将使用会话的同一台机器上创建会话,以使会话持续更长时间。

-会话的有效性可以有很大的差异(1天到1个月之间,取决于会话使用的地理位置等因素)。这意味着你必须每个月至少生成一次新的会话。通常只有当构建开始失败时,您才会知道这一点。

fastlane也不能够在这方面做得更好,因为这些都是关于如何处理App Store Connect会话的技术限制。

方法3:使用程序的专用密码

如果你想从你的CI机器上传构建到App Store Connect(动作' upload_to_app_store '和' deliver ')或TestFlight(动作' upload_to_testflight ', ' pilot '或' TestFlight '),你可以生成一个应用程序专用密码:

  1. 访问 appleid.apple.com/account/man…

  2. 生成一个新的特定于应用程序的密码

  3. 使用环境变量FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD提供特定于应用程序的密码 

这将向iTMSTransporter提供应用程序特定的密码,iTMSTransporter是这些操作用来执行上传的工具。

注意:如果你的操作使用除了上传二进制文件以外,例如更新任何元数据,如设置发布通知或分发给测试人员,等等,应用程序特定的密码将 不起作用 。对于这些操作,您 必须 使用其他方法之一。

方法4: Apple ID without 2FA (不再支持)

Apple announced that as of February 27th 2019, it would enforce 2-factor authentication on developer Apple IDs with the "Account Holder" role. Since then, they extended this rule to all roles, and then later throughout 2020 they slowly enforced all existing accounts to register 2FA. As of March 3rd 2021, no accounts without 2FA registered are able to login until they register a 2FA method, essentially breaking all "non-2FA compliant Apple IDs" that still existed. For this reason, when using fastlane in your CI, you will have to work your way with 2FA.


作者:CoderHao
链接:https://juejin.cn/post/7042198645130657800

文章分类
代码人生
版权声明:本站是系统测试站点,无实际运营。本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 XXXXXXo@163.com 举报,一经查实,本站将立刻删除。
相关推荐