iOS 使用 Fastlane 上传 App 到蒲公英

Fastlane 是一款为 iOS 和 Android 开发者提供的自动化构建工具,它可以帮助开发者将 App 打包、签名、测试、发布、信息整理、提交 App Store 等工作完整的连接起来,实现完全自动化的工作流,如果使用得当,可以显著的提高开发者的开发效率。

Fastlane 安装

1、首先要安装正确的 Ruby 版本。在终端窗口中用下列命令来确认:

$ ruby -v

2、检查 Xcode 命令行工具是否安装。

$ xcode-select --install

如果未安装,终端会开始安装,
如果报错误:command line tools are already installed, use “Software Update” to install updates.代表已经安装。

3、通过 rubygem 进行安装fastlane

$ sudo gem install fastlane

如果执行命令报错:

ERROR: While executing gem ... (Errno::EPERM)
Operation not permitted - /usr/bin/rougify

可改用下面的命令:

$ sudo gem install -n /usr/local/bin fastlane

Fastlane 项目配置

在终端,cd到你的工程目录,执行

$ fastlane init

fastlane 会进行初始化,过程需要根据提示输入开发者账号以及两次确认,第一次确认App Identifier相关信息,第二次确认是否在appstore创建项目(如果不需要可以输入N,一系列的初始化操作,包括下载 App Store 上的元数据和截屏文件。初始化完成之后,工程目录下就多了一个 fastlane目录

Appfile 用来存储一些公共信息的,比如app_identifier,apple_id,team_id,itc_team_id等。
Deliverfile 用于指定跟App 版本发布相关的信息,基本覆盖 iTunes Connect 里面的所有选项
Fastfile 用来定义所有的lane任务
metadata 存放 App 元数据,包括 App 简介,Icon,Copyright 等
screenshots 存放 App store 中的截图

appfile在你初始化后基本就已经生成好了,可以根据实际情况作更改。

这里我们主要看下Fastfile如何配置。 原文件如下:

fastlane_version "2.53.1"

default_platform :ios

platform :ios do
  before_all do
    # ENV["SLACK_URL"] = "https://hooks.slack.com/services/..."
    # cocoapods指令用于是否更新第三方库
    # cocoapods

  end

  lane :release do
    # match(type: "appstore")
    # snapshot
    gym # Build your app - more options available
    deliver(force: true)
    # frameit
  end

  after_all do |lane|
    # This block is called, only if the executed lane was successful
    # slack(
    #  message: "Successfully deployed new App Update."
    # )
  end

  error do |lane, exception|
    # slack(
    #  message: exception.message,
       #  success: false
    # )
  end
end

我们可以定义一个lane去完成一次打包,lane有多个action共同协作完成,常用的action有下面几个

scan 自动化测试工具,很好的封装了 Unit Test
sigh 针对于 iOS 项目开发证书和 Provision file 的下载工具
match 同步团队每个人的证书和 Provision file 的超赞工具
gym 针对于 iOS 编译打包生成 ipa 文件
deliver 用于上传应用的二进制代码,应用截屏和元数据到 App Store
snapshot 可以自动化iOS应用在每个设备上的本地化截屏过程

下面来定义一个build的lane

lane :build_development do
    gym(
        clean: true,
        scheme: "TZH_Project",
      export_method: "ad-hoc",
        output_directory: "./build/",
        output_name: "TZH_Project-development.ipa",
      )
end

这里简单说明一下,这里gym的参数配置即xcodebuild的method参数。

clean: 打包前进行clean操作
scheme: 项目scheme
export_method: 指定ipa导出方式,目前支持app-store, package, ad-hoc, enterprise, development, 和developer-id
output_directory: 可以指定ipa和DYSM文件的生成路径,默认情况下会执行后会和项目根目录同级存放,这里可以指定文件夹来管理
output_name: 指定ipa的文件名

这样配置好后在项目终端cd到项目目录执行即可安心等待。

$ fastlane build_development

配合蒲公英设置

安装蒲公英的 fastlane 插件。

$ fastlane add_plugin pgyer

配置lane

lane :build_development do
    gym(
        clean: true,
        scheme: "TZH_Project",
      export_method: "ad-hoc",
        output_directory: "./build/",
        output_name: "TZH_Project-development.ipa",
      )

      # 上传蒲公英
      pgyer(
          api_key: "XXXXXXXXX", 
          user_key: "XXXXXXXXX"
      )
end

以上的 api_key 和 user_key,在蒲公英账号下的 应用管理 - App概述 - API 中可以找到,并替换到以上相应的位置。

同样的执行 即可完成打包并上传

$ fastlane build_development

后记

关于更多的fastlane的信息可以去github查看https://github.com/fastlane/fastlane

官方还提供了配置文件的例子可供参考