php执行fastlane,Fastlane的使用及进阶

ed893c36e312

image

一、Fastlane是什么

1、简介

Fastlane是用Ruby语言编写的一套自动化工具集和框架,每一个工具实际都对应一个Ruby脚本,用来执行某一个特定的任务,而Fastlane核心框架则允许使用者通过类似配置文件的形式,将不同的工具有机而灵活的结合在一起,从而形成一个个完整的自动化流程。

2、原理

Fastlane命令执行的底层并不是自己实现的,而是调用其他的插件或者工具执行的。

核心一:打包命令,Fastlane中的gym工具只是xcodebuild工具的一个封装。因此安装Fastlane的步骤里有安装IDE的指令集。

核心二:iTC(即iTunesConnect 苹果的账号证书应用管理平台)命令。苹果除了提供图形化可操作的网页之外,还提供相对应的一整套底层 API 给开发者使用,Fastlane的底层操作是封装的这套API。

3、功能

基础功能

ed893c36e312

基础功能

二、Fastlane的安装

ruby版本必须高于2.0,macbook自带的ruby可能低于2.0

不要卸载、更改mac系统内置的ruby!mac系统需要它,更改以后,会导致mac系统故障!

使用rvm管理和安装指定版本的ruby

三、Fastlane使用及问题

1、fastlane init 的选择问题

fastlane init

新版本安装的时候出现了下面的分支选择,按要求选择就行

1. Automate screenshots(自动截屏)

2. Automate beta distribution to TestFlight (自动testfilght型配置)

3. Automate App Store distribution (自动发布型配置)

4. Manual setup - manually setup your project to automate your (需要手动配置内容)

这里我们选择4,然后一直按回车。会生成Gemfile文件,fastlane文件夹,Appfile,Fastfile文件。

ed893c36e312

执行init后生成

2、配置文件解释

Appfile: 存储有关开发者账号相关信息

Fastfile: 核心文件,主要用于命令行调用和处理具体的流程,lane相对于一个方法或者函数

Deliverfile: deliver工具的配置文件

metadata: 元数据文件夹

screenshots: 截图文件夹

Matchfile: Match操作对应的配置文件

如果Deliverfile、screenshots和metadata没有自动生成,通过 deliver init 可以重新初始化

Matchfile: match 这个action的配置文件,fastlane match init 自动生成

不要手动创建这些文件

3、关于Gemfile

这里可以对比cocoapods,cocoapods和fastlane一样,也是基于Ruby的开发脚本集合。

gemfile和podfile、gemfile.lock和podfile.lock其实很相似。

gemfile管理gem,就像podfile管理pod,简单的说都是进行索引绑定的。当我们在podfile中添加一个第三库需要执行pod install,同样需要执行bundle install用于更新gemfile,podfile.lock和gemfile.lock里面就会生成相应的所关联的资源的版本信息。

RubyGems简称gem,RubyGems是一个包管理框架,提供了ruby社区的gem的托管服务,用于ruby软件包的下载、安装、使用;ruby的软件包被称为gem,包含了ruby应用或库。

1)那么可以理解为:fastlane、cocoapods就是ruby的软件包,就是gem。所以gemfile管理的就是fastlane的版本。

2)类似于pod更新,bundle update fastlane用于更新fastlane版本。

3)在实际项目中为了使用固定的fastlane版本,都建议使用bundle exec fastlane [lane_name]来执行fastlane命令,如jenkins中打包。

4)综上所述,Gemfile其实就是一个管理fastlane版本的工具。

ed893c36e312

4、Fastfile代码生命周期

执行顺序

方法名

说明

1

before_all

脚本自动执行的第一个 lane,只执行一次

2

before_each

每次执行 lane 之前都会执行一次

3

lane

自定义的任务

4

after_each

每次执行 lane 之后都会执行一次

5

after_all

脚本自动执行的最后一个 lane,只执行一次

6

error

在执行上述情况任意环境报错都会中止并执行一次

Actions:fastlane提供的已经写好的独立的方法库。Action是Fastlane自动化流程中的最小执行单元,直观上来讲就是Fastfile脚本中的一个个命令,而这些命令背后都对应一个用Ruby编写的脚本。

到目前为止,Fastlane的工具集大约包含180多个Action,基本上涵盖了git,打包,签名,测试,部署,发布,库管理等等移动开发中涉及到的内容。

fastlane actions : 查看action列表

fastlane action [action_name]:查看具体action 描述

常用Actions

scan => 自动运行测试工具,并且可以生成漂亮的HTML报告,支持sonnar

match => 一个新的证书和描述文件管理工具。会把所有需要用到的证书传到git私有库上,任何需要配置的机器直接用match同步回来就不用管证书问题了

1.match只认识通过match方式创建的pp文件 证书,其他方式创建的不予理会。

2.使用match 需要先撤销现在的证书。

cert => 自动创建管理iOS代码签名证书

sigh => 是用来创建、更新、下载、修复Provisioning Profile的工具

resign => sigh的子方法,用于重签名

pem => 自动生成、更新推送配置文件

gym => Fastlane家族的自动化编译工具,和其他工具配合的非常默契

deliver => 自动上传截图,APP的元数据,二进制(ipa)文件到iTunes Connect

pilot => 管理TestFlight的测试用户,上传二进制文件

boarding => 建立一个添加测试用户界面,发给测试者,可自行添加邮件地址,并同步到iTC

produce => 如果你的产品还没在iTunes Connect(iTC)或者Apple Developer Center(ADC)建立,produce可以自动帮你完成这些工作

spaceship => 为pilot,boarding和deliver等工具提供和 iTC的交互API。spaceship本来是个独立的项目,后来被Fastlane收编进来

WatchBuild => 是一个独立的iTC监控工具,开启WatchBuild可以监控iTC上的文件状态,弹出MacOS自带的Notification

四、实例

1、马甲包多target方案打包实例

问题:多target如下图所示,每个target对应一个马甲包,每个马甲包有各自的Apple账号、TeamID、BundleID等资源,fastlane默认支持一个target,如何通过fastlane打出不同的包呢?

ed893c36e312

image.png

gym命令可以指定target,使用scheme参数

默认情况这些Apple账号、TeamID、BundleID都是填在Appfile下,现在为不同的target配置不同的环境变量文件(称之为差分资源),具体如下图

ed893c36e312

差分资源内部填写各自的Apple账号、TeamID、BundleID等

ed893c36e312

image.png

注意

1)这些差分资源为隐藏文件

2)Appfile Fastfile 内部访问这些环境变量要使用ENV['APPLE_ID']

3)打包时,必须通过添加参数 --env 来指定待读取的 .env 文件,如:

$ fastlane [lane_name] --env targetA

$ fastlane [lane_name] --env targetB

2、马甲包重签名方案打包实例

问题还是:每个马甲包有各自的Apple账号、TeamID、BundleID等资源

步骤:

配置差分资源

ed893c36e312

脚本切换项目 (即切换差分资源)

按正常的fastlane流程打出ipa包 (使用的是公共Apple账号、TeamID、BundleID)

使用fastlane的produce工具在iTC或ADC创建马甲包的发布环境 (比如在新Apple账号上创建一个新APP、勾选推送功能等)

produce => 如果你的产品还没在iTunes Connect(iTC)或者Apple Developer Center(ADC)建立,produce可以自动帮你完成这些工作。

$ fastlane produce --username [AppleAccount@email.com] --skip_itc --app_name [AppName] -a [AppBundleID] //创建一个新的bundleID

fastlane produce associate_group -a [AppBundleID] [GroupID] --username [AppleAccount@email.com] --skip_itc //勾选associate group

对ipa重签名

fastlane sigh resign [ipa_path] --signing_identity [p12] --provisioning_profile [bundleID1]=[PPfile1] --provisioning_profile [bundleID2]=[PPfile2]

五、spaceship

spaceship => 为pilot,boarding和deliver等工具提供跟iTC和ADC的交互API。spaceship本来是个独立的项目,后来被Fastlane收编进来。

在spaceship之前,fastlane工具使用网络抓取来与苹果的网络服务交互。使用spaceship可以只使用简单的HTTP客户端直接访问底层api。

现在fastlane中与Apple Service交互的工具(如pilot、deliver)底层都使用的spaceship。

spaceship源码也是用Ruby语言编写

API

Apple Developer Portal API:用于处理证书描述文件等,与Apple Developer Center(ADC)交互

App Store Connect API:用于处理提交TestFlight发布提审等,与iTunes Connect(iTC)交互

实例1:spaceship最常用的功能是用于处理二步认证问题

fastlane的配置会要求输入开发者账号密码,通过spaceship与Apple交互,并会产生一份有效期一个月的cookies文件,保存在: ~/.fastlane/spaceship/[email]/cookie

官方介绍,使用fastlane spaceauth -u [AppleAccount@email.com]生成cookie,再将cookie和Special Key保存到终端的环境配置,可以免短信验证(二步认证)。但实际情况还是有一个月有效期。

实例2:利用Multiple Spaceships同步设备UDID

以下脚本实现功能:假设有AB两个开发者账号,可以将A账号的所有设备UDID添加到B账号

# Launch 2 spaceships

spaceship1 = Spaceship::Launcher.new("felix@krausefx.com", "password")

spaceship2 = Spaceship::Launcher.new("stefan@spaceship.airforce", "password")

# Fetch all registered devices from spaceship1

devices = spaceship1.device.all

# Iterate over the list of available devices

# and register each device from the first account also on the second one

devices.each do |device|

spaceship2.device.create!(name: device.name, udid: device.udid)

end

实例3:新增设备UDID并更新描述文件

Spaceship.device.create!(name: dev_name, udid: dev_udid)

#match管理

fastlane match --type="adhoc" --force_for_new_devices=true

#手动管理

profile = Spaceship::Portal.provisioning_profile.development.all.find { |p| p.name == "***" }

profile.devices = Spaceship::Portal.device.all

profile.update!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值