Fastlane 实现 iOS 自动化打包

2,046 阅读3分钟

趁着测试同学还在疯狂提 bug 的间隙,研究了一下 iOS 的自动打包以及上传,包括App Store和像蒲公英这样的一些第三方平台。 写这篇文章的本意是想记录下我在搭建及使用 fastlane 的所遇到的问题。 至于如何搭建和使用 fastlane,官方文档和网上文章也介绍得很详细了,不在这里赘述。

- 前提

1. 准备工作

  1. 注册开发者账号
  2. 申请并下载证书(开发、发布最好都要)
  3. 申请并下载配置文件(Provisioning Profile)

2. 项目配置

1.双击安装证书及配置文件

2.把开发者账号登录到 xcode (以后 Provisioning Profile 有更新可直接下载,不用去 Developer.Apple.com 下载)

3.在项目里选择对应的配置文件(这里我不适用自动配置,如图步骤一)

image.png

- 环境搭建

参考如下:

官方文档

# iOS 持续交付之 Fastlane

- 遇到的问题

使用 fastlane 自动打包上传至 App Store Connect 遇到的问题。

1. ruby 源不兼容

问题:
RubyGems is not listed as your Gem source
You can run `gem sources` to see all your sources
Please run the following command to fix this:
$ gem sources --add https://rubygems.org

image.png

解决:
# 终端执行
gem sources --add https://rubygems.org
分析:

我的电脑装的是 gems.ruby-china.com/, 但是提示 RubyGems is not listed as your Gem source,说明 rubygem 识别不了 china 这个源,那索性再加一个就好了。

2. 账号权限

问题:
The request could not be completed because:
This request is forbidden for security reasons - The API key in use does not allow this request

image.png

解决:

开发者账号权限设置成 App Manager 或以上

  1. 打开App Store Connect
  2. 进入用户和访问

image.png

  1. AppFile 文件里设置的账号是否包含在这个分组里,如果没有,就要调权限,或着换账号 (也可以是比这个更高的权限,出现这个问题的是,因为配置的是个开发者权限的账号,所以会被 forbidden)

image.png

参考:

github.com/fastlane/fa…

image.png

github.com/fastlane/fa…

3. 上传失败

问题:
Transporter transfer failed.
Please sign in with an app-specific password. You can create one at appleid.apple.com. (-22910)
Your account has 2 step verification enabled
Please go to https://appleid.apple.com/account/manage
and generate an application specific password for
the iTunes Transporter, which is used to upload builds

To set the application specific password on a CI machine using
an environment variable, you can set the
FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD variable

image.png

解决方法一:(我用的)
  1. 打开 appleid.apple.com/account/man…
  2. 使用 AppFile 配置的账号登录进入
  3. 设置 App 专用密码,会得到一串密码,拷贝出来存好

image.png

  1. 回到终端,重新运行 fastlane action xxxx(比如 upload_to_app_store)
  2. 在遇到需要输密码的地方把刚才生成的密码粘贴进去,回车 注意:username与密码必须一一对应
解决方法二:

1、2、3 同上

4.打开 fastFile 文件,设置环境变量

before_all do
ENV['FASTLANE_APPLE_APPLICATION_SPECIFIC_PASSWORD'] = '专用密码'
end
分析:

现在的 Apple id 基本都开启了双重验证,但是 fastlane action 里面需要一个专用密码跳过双重验证这一步,所以需要到 Apple id 管理界面生成一个专用密码,出现上面错误的原因是错误的把 Apple Id 的密码当成了专用密码。

3. Deliver 文件参数格式

问题:

DeliverFile 文件:

deliver(
    force: true,
    skip_screenshots: true,
    skip_metadata: true,
    )

image.png

解决:
force true
skip_screenshots true
skip_metadata true
分析:

根据官方文档使用的示例格式修改参数与实际不符 image.png

打包至蒲公英

打包发布至蒲公英相对来说还是简单的,配置相关的证书等信息,已经填写好 key,加上蒲公英已经写好了一套脚本,基本上没什么问题。

使用 Fastlane 上传 App 到蒲公英

- 结语

fastlane 的使用还有很多可以拓展的地方,可根据业务需求自行拓展。每个人的业务需求不一样,遇到的问题也不一样。希望能给碰到同样难题的同学提供思路。还有,官方文档一定要看,里面才是最详细的从安装->使用.

谢谢!