iOS--fastlane自动化打包

前言:App的开发过程中,打包测试也是非常重要的一环,但是频繁的机械式操作反而阻塞我们的开发测试效率,我们希望通过自动打包上传到测试环境减少一些不必要的简单操作,所以自动打包开发工具就应运而生了,常见的主流工具有JenkinsfastlaneJenkins功能强大,但是需要的配置也比较多,团队较大的可以优先考虑,fastlane比较轻便,配置较为简单,使用起来也很方便。本文将基于fastlane自动化打包的功能,详细的介绍下fastlane安装到上传蒲公英的整个流程。

目录

<一>. fastlane的安装

<二>. fastlane的配置

<三>. fastlane打包并上传至蒲公英和fir.im

<一>. fastlane的安装

  • 1.笔者配置fastlane的环境为 macOS Catalina v10.15.6版本。
  • 2.fastlane 是用Ruby语言编写的一套自动化工具集和框架,fastlane的Github地址,fastlane的官网,fastlane的文档。
  • 3.fastlane的安装(在终端命令行操作):
    --第一步:因为fastlane是用Ruby语言编写的工具,所以必须保证已经配置好了Ruby开发环境。可以使用如下命令行查看是否安装了Ruby:
ruby -v

如果有以下提示说明你已经安装了Ruby:

ruby 2.6.0p0 (2018-12-25 revision 66547) [x86_64-darwin19]

如果没有安装也没关系,这里提供一个博主的方法。
--第二步:安装Xcode命令行工具

xcode-select --install

如果没有安装,命令会有提示框,根据提示一步一步安装即可。
如果出现以下命令提示,说明已经安装成功:


已经安装成功提示
xcode-select: error: command line tools are already installed, use "Software Update" to install updates

--第三步:Ruby和Xcode环境都配置好之后,我们只需要执行以下命令来安装fastlane

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

安装完成之后,输入以下命令查看是否安装成功:

fastlane --version

出现以下提示说明你已经安装成功了:


fastlane安装成功

如果没有以上提示也没关系,回看前面的步骤,再仔细检查下,祝君好运。

<二>. fastlane的配置

fastlane安装成功之后,接下来就是比较重要的fastlane的配置。

  • <1>首先需要我们cd到你的iOS项目下,执行初始化命令:
fastlane init

命令执行完成之后会给出我们如下几个提示:

fastlane init

命令执行到最后有What would you like to use fastlane for?提示,此时fastlane列出几个选项,需要我们告诉它使用fastlane需要执行哪种操作:

  • 第一种获取App Store的App预览照片。
  • 第二种打包上传至TestFlight工具上。
  • 第三种打包上传到App Store。
  • 第四种自定义打包方式。

以上四种方式大家可以根据自己的需要自行选择,本文主要介绍打包上传至第三方平台,所以选择4自定义打包方式。选择完成之后,fastlane会在我们项目中创建fastlane文件,这个过程大概需要两分钟等待。
出现以下截图说明已经创建成功:

截屏2020-10-22 下午11.38.17.png

此时只需要我们一直敲回车键即可,直到该命令运行结束,我们会看到如下创建的文件:
截屏2020-10-23 下午4.19.11.png

  • <2>创建好fastlane文件夹之后,Appfile是编辑我们相关App和开发者账号信息的,一般不需要我们去手动修改,在最后一步的打包过程中如果出现需要App ID的相关信息,我们在命令行中正常输入即可。Fastfile是我们对自动打包这个过程的完整配置,默认的Fastfile文件内容如下:
# This file contains the fastlane.tools configuration
# You can find the documentation at https://docs.fastlane.tools
#
# For a list of all available actions, check out
#
#     https://docs.fastlane.tools/actions
#
# For a list of all available plugins, check out
#
#     https://docs.fastlane.tools/plugins/available-plugins
#

# Uncomment the line if you want fastlane to automatically update itself
# update_fastlane

default_platform(:iOS)

platform :iOS do
  desc "Description of what the lane does"
  lane :custom_lane do
    # add actions here: https://docs.fastlane.tools/actions
  end
end
  • 1.主要介绍lane的任务结构和蒲公英、fir.im的api配置。
    笔者给出一个自己的例子来作为参考并讲解主要参数的含义:
#     gym(
#       scheme:"NonTeacher", #项目名称
#       export_method:"ad-hoc",#打包的类型
#       configuration:"Release",#模式,默认Release,还有Debug
#       output_name:"#{ipaName}",#输出的包名
#       output_directory:"./build"#输出的位置
#     )

# Uncomment the line if you want fastlane to automatically update itself
#

platform :iOS do

    desc "打测试包上传到蒲公英"
    lane :pgy do
        build_app(
            workspace: "XXXXX.xcworkspace",
            scheme: "XXXXX",
            export_method: "ad-hoc",
            output_directory: "/Users/XXXXX/Desktop/IPA"
        )
    
        #蒲公英的配置 替换为自己的api_key和user_key
        pgyer(api_key: "蒲公英api_key", user_key: "蒲公英user_key", update_description: "该版本更新的内容")
    end
    
    desc "打测试包上传到fir.im"
    lane :fir do
        build_app(
            workspace: "XXXXX.xcworkspace",
            scheme: "XXXXX",
            export_method: "ad-hoc",
            output_directory: "/Users/XXXXX/Desktop/IPA",
            silent:"true"
        )

        gym(
            output_directory: "/Users/XXXXX/Desktop/IPA",
        )
    
        # 上传ipa到fir.im服务器,在fir.im获取firim_api_token
        firim(firim_api_token: "firim_api_token")  # token 在fir 上查看
    end
end

关于上述的蒲公英api_key和user_key可以到蒲公英Api网站查看:

截屏2020-10-23 下午5.14.55.png

关于fir.im的相关信息可以到fir.imApi网站查看:
FIR_API

    1. build_app 中主要是编译打包成ipa文件这个过程的相关操作,build_app中的相关参数介绍:
参数 参数的意义 默认值
workspace iOS项目的workspace
project 工程路径
scheme iOS项目的scheme
clean fastlane自动打包之前知否clean项目 false
output_directory 编译App完成后ipa包的存放地址,默认在工程中 .
output_name ipa包名称
silent 编译过程中隐藏掉不必要的信息 false
codesigning_identity 描述文件
skip_package_ipa 自动跳过ipa打包 false
skip_package_pkg 自动跳过pkg打包 false
include_symbols ipa包包含symbols?
include_bitcode ipa包包含symbolsbitcode?
export_method 打包导出方式: app-store, ad-hoc, package, enterprise, development, developer-id
export_options 需要一个export_options plist 文件路径或者export_options ,用 'xcodebuild -help' 查看提供的 options
skip_build_archive Export ipa from previously built xcarchive. Uses archive_path as source
skip_archive 跳过打archive包过程
skip_codesigning Build without codesigning
catalyst_platform catalyst app的打包平台: ios, macos
build_path The directory in which the archive should be stored in
archive_path The path to the created archive
sdk 应用支持的手机系统版本

套用fastlane官方的配置例子:

build_app(
  workspace: "MyApp.xcworkspace",
  configuration: "Debug",
  scheme: "MyApp",
  silent: true,
  clean: true,
  output_directory: "path/to/dir", # Destination directory. Defaults to current directory.
  output_name: "my-app.ipa",       # specify the name of the .ipa file to generate (including file extension)
  sdk: "iOS 11.1"        # use SDK as the name or path of the base SDK when building the project.
)
    1. gym 中主要是编译打包成功后,对导出的IPA包的操作,gym中的相关参数可参考build_app中的参数,因为两者的参数基本一致,最后用一个gym例子:
platform :iOS do
   desc "打测试包上传到fir.im"
    lane :fir do
        build_app(
            workspace: "XXXXX.xcworkspace",
            scheme: "XXXXX",
            export_method: "ad-hoc",
            output_directory: "/Users/XXXXX/Desktop/IPA",
            silent:"true"
        )

        gym(
            workspace: "MyApp.xcworkspace",
            configuration: "Debug",
            scheme: "MyApp",
            silent: true,
            clean: true,
            output_directory: "path/to/dir", # Destination directory. Defaults to current directory.
            output_name: "my-app.ipa",       # specify the name of the .ipa file to         generate (including file extension)
            sdk: "iOS 11.1"        # use SDK as the name or path of the base SDK when building the project.
        )
    end
end
  • 4 蒲公英和fir.im的插件配置
    经过上面的相关配置,我们的配置就差一步:第三方平台的插件配置。
    @1.蒲公英插件的配置:
    执行以下命令来安装蒲公英插件:
fastlane add_plugin pgyer

出现以下结果表明安装成功:

截屏2020-10-23 下午5.59.59.png

@2.fir.im插件的配置:
执行以下命令来安装fir.im插件:

fastlane add_plugin firim

出现以下结果表明安装成功:


截屏2020-10-23 下午6.04.34.png

<三>. fastlane打包并上传至蒲公英和fir.im

经过上面的配置,我们就可以愉快的自动打包上传啦,不过最后还有几点跟大家说明一下,首先贴出来笔者打包的配置文件:

platform :iOS do

    desc "打测试包上传到蒲公英"
    lane :pgy do
        build_app(
            workspace: "XXXXX.xcworkspace",
            scheme: "XXXXX",
            export_method: "ad-hoc",
            output_directory: "/Users/XXXXX/Desktop/IPA"
        )
    
        #蒲公英的配置 替换为自己的api_key和user_key
        pgyer(api_key: "蒲公英api_key", user_key: "蒲公英user_key", update_description: "该版本更新的内容")
    end
    
    desc "打测试包上传到fir.im"
    lane :fir do
        build_app(
            workspace: "XXXXX.xcworkspace",
            scheme: "XXXXX",
            export_method: "ad-hoc",
            output_directory: "/Users/XXXXX/Desktop/IPA",
            silent:"true"
        )
    
        # 上传ipa到fir.im服务器,在fir.im获取firim_api_token
        firim(firim_api_token: "firim_api_token")  # token 在fir 上查看
    end
end

首先lane作为一个单独的任务模块,它是可以自己定义的,例如笔者的例子中platformiOS,下面有两个任务:pgyfir,所以在我们只需要cd 到相关的iOS项目下执行以下命理即可:
(打包上传至fir.im ios为platform字段中的平台 fir为自己自定义的任务 当然这个名字可以任意取,在我们执行命令的时候对应上即可。)

fastlane ios fir   

或者

fastlane ios pgy

出现下面的截图就代表你已经上传成功了:


截屏2020-10-22 下午6.37.44.png

附录:

<1> firim相关参数配置

参数 参数的意义 默认值
platform 平台:ios , mac, android ---
firim_api_url https://www.betaqr.com/apps ---
firim_api_token firim网站的API token ---
app_changelog 更新日志 ---
firim_username 用户名 ---
app_passwd 安装密码 ---
ipa ipa包 ---
apk apk包 ---
gradle_file --- ---
icon --- ---
file --- ---
app_identifier --- ---
app_name --- ---
app_desc --- ---
app_short --- ---
app_is_opened --- ---
app_is_show_plaza --- ---
app_store_link_visible --- ---
app_version --- ---
app_build_version --- ---
app_release_type --- ---
app_info_to_file_path --- ---

<2> 蒲公英相关参数配置

参数 参数的意义 默认值
api_key https://www.pgyer.com/account/api ---
user_key https://www.pgyer.com/account/api ---
ipa ipa包 ---
apk apk包 ---
password 安装包密码 ---
update_description 更新日志 ---
install_type --- ---

写在最后:fastlane的本地打包主题感受是相比之前手工操作省去了不少机械操作,笔者80M左右的项目上传成功大概用了9分左右,还是挺有效率的。当然这也只是开发测试中的一环,弊端就是必须要本地配置好才可以,关于后续的服务器自动化打包测试会继续更新,感谢大家的拜读,如果文中有错误或者理解不对的地方,欢迎大家的批评指正。

你可能感兴趣的:(iOS--fastlane自动化打包)