自动化打包宣布,自动化打包晋级

在上一篇文章iOS Fastlane 自动化打包初探中我们介绍了fastlane的一些简单用法,其实fastlane还可以实现很多功能。

官网:

iOS-自动打包及分发(一)
iOS-自动打包及分发(二)
iOS-自动打包及分发(三)

1.前言

本篇文章主要讲解了 Fastlane 如何实现多 Target 自动化打包发布,以及如何配置 Appfile、Deliverfile 和 Fastfile 等配置文件,发布和构建版本号自增,修改更新内容,自动上传苹果商店和自动提交审核等内容,希望能够为您的工作或学习带来有价值的信息。

图片 1fastlane

参考文章:

废话不多说了,上正文:

2.简介

Fastlane 是一套使用Ruby写的自动化工具集,用于iOS和Android的自动化打包、发布等工作,可以节省大量的时间。

下面这些工具的用法具体可在对应的文档中查看,文档讲解的很详细,在配合多次练习,肯定会用的得心应手

一、fastlane的基础组件:工具集

1)自动化编译工具
gym:编译、打包,生成签名和ipa文件等

2)证书、配置工具
cert:自动创建iOS代码签名证书(.cert文件)。
sigh:生成配置文件、创建、更新、下载和修复provisioning profiles,支持AppStore、AdHoc、Development和企业profiles。
pem:尅自动化生成和更新应用推送通知描述文件。

3)App公测工具
polot:管理TestFilight测试用户,上传二进制文件。
firim:测试分发平台fim。
pgyer:测试分发平台蒲公英。

4)测试工具
scan:自动化测试工具,很好的封装了Unit Test。

5)截图、扫描、添加边框工具
deliver:将应用所需数据提交到ITC(iTunes Connect)。包括:截图、配置文件、ipa包等。
snapshot:生成截图,依靠UI Test完成截图,可以自动化iOS应用在每个设备上的本地化截屏过程。

6)协同
match:同步团队每个人的证书和provision file 的工具,能够使团队通过git同步证书和配置文件。

3.安装

Fastlane安装及简单使用,请参考另一篇文章:iOS持续集成:Fastlane 蒲公英 自动打包发布

实际上fastlane是一套工具集,包含如下工具:

二、fastlane主要文件说明和设置

fastlane     自动化执行配置文件
Appfile      存储App公共信息
Delivefile      存储App发布信息
metadata      包含应用在ITC中的各种信息
screenshots    包含截图数据

fastlane 原生文件设置

# fastlane的最低版本支持,每次执行之后会检查是否有新版本,有会在最后追加提醒 
fastlane_version “2.75.1”

# 默认使用平台是iOS,也就是说文件可以多个平台
default_platform :ios

platform :ios do
        desc “打包一个debug版本,发布到蒲公英上,密码:666666”
        lane :debug do
        puts “开始打包 类型:ipa”
        #编译
        gym(
            # 计划名称
            scheme: “DaBaoDemo”,

            # 输出ipa名称
            output_name: “DaBaoDemo.ipa”

            # ipa存放路径
            output_directory: “/Users/用户名/Desktop/ipa”

            # 是否清空以前的编辑信息
            clean: true,

            # 指定打包方式:Release 或者 Debug
            configuration: “Debug”,

            # 指定打包所使用的输出方式:app-store、ad-hoc、enterprise、development
            export_method: “ad-hoc”,

            # 导出选项
            export_options: {
                method: "ad-hoc",
                provisioningProfiles: {
                     "com.DaBaoDemo.huzc" => "com.DaBaoDemo.huzc AdHoc"
                }
             }  
        ) 
        # 上传到蒲公英 添加:apikey、userkey、密码、安装类型默认2
        pgyer(api_key: “”, user_key: “”, password: “”, install_type: “”)
        end
end

4.配置

4.1 打开终端,进入你的工程目录,然后执行 fastlane init:

图片 2屏幕快照 2017-09-04 下午4.00.20.png

执行过程中,需要输入对应的苹果开发账号。接下来,出现确认提示,确认无误输入y:

图片 3屏幕快照 2017-09-05 下午5.40.02.png

4.2 Fastlane 初始化完成后,工程目录下会自动生成 fastlane 文件夹,如下所示:

图片 4屏幕快照 2017-09-04 下午4.32.11.png

  • metadata: 目录:存放 App 元数据,包括 App 简介,Icon,Copyright 等;
  • screenshots: 目录:顾名思义,存放 App store 中的截图;
  • Appfile:用于指定 app_identifier, apple_id, team_id
  • Deliverfile:用于指定跟 App 版本发布相关的信息,除了 apple_identifier 外,还包括 submit_for_review, automatic_release 等可配置项,基本覆盖 iTunes Connect 里面的所有选项
  • Fastfile:用于编写逻辑脚本,使用 ruby 语言,例如首先执行 cocoapods 更新第三方依赖库,然后执行 pem 更新相关证书,接着通过 gym 来编译并打包 ipa 文件,最后通过 deliver 发布到 iTunes Connect 中,并提交审核。

4.3 配置文件

因为 Fastlane 默认只有一个 target ,单个 target 配置可参考 iOS持续集成:Fastlane 蒲公英 自动打包发布 中关于 .env 文件的配置。对于多个 target 可以通过配置多个 .env 文件。

具体操作如下:打开终端,进入工程目录下,分别创建两个 .env 文件。下面是我的项目中创建的两个 .env 文件: .env.SunfoBank.env.SunfoBankPlus ,截图如下:

图片 5屏幕快照 2017-09-05 下午4.23.44.png

文件内容如下:

.env.SunfoBank

#APP唯一标识符APP_IDENTIFIER = "xxx.xxx"#发布版本号APP_VERSION_RELEASE = "3.4.0"#新版本修改记录RELEASE_NOTES = "1) 升级测试第一行n2) 升级测试第二行"#蒲公英 更新描述PGY_UPDATE_DESCRIPTION = "fastlane自动打包上传测试"#自动提交审核SUBMIT_FOR_REVIEW = false#审核通过后立刻发布AUTOMATIC_RELEASE = false#苹果开发者账号APPLE_ID = "xxx@xxx.xxx"#苹果开发者帐号密码FASTLANE_PASSWORD = "xxxxxx"#套装IDTEAM_ID = "90xxxxxx02"#应用名称SCHEME_NAME = "SunfoBank"#APP元数据及截图存放路径METADATA_PATH = "./metadata/SunfoBank"SCREENSHOTS_PATH = "./screenshots/SunfoBank"#APP元数据及截图下载时,直接覆盖原有数据,不询问DELIVER_FORCE_OVERWRITE = true

.env.SunfoBankPlus

#APP唯一标识符APP_IDENTIFIER = "xxx.xxx.xxx"#发布版本号APP_VERSION_RELEASE = "3.4.0"#新版本修改记录RELEASE_NOTES = "1) 升级测试第一行n2) 升级测试第二行"#蒲公英 更新描述PGY_UPDATE_DESCRIPTION = "fastlane自动打包上传测试"#自动提交审核SUBMIT_FOR_REVIEW = false#审核通过后立刻发布AUTOMATIC_RELEASE = false#苹果开发者账号APPLE_ID = "xxx@xxx.com"#苹果开发者帐号密码FASTLANE_PASSWORD = "xxxxxx"#套装IDTEAM_ID = "11xxxxxx06"#应用名称SCHEME_NAME = "SunfoBankCopy"#APP元数据及截图存放路径METADATA_PATH = "./metadata/SunfoBankCopy"SCREENSHOTS_PATH = "./screenshots/SunfoBankCopy"#APP元数据及截图下载时,直接覆盖原有数据,不询问DELIVER_FORCE_OVERWRITE = true

截图如下:

图片 6屏幕快照_2017-09-05_下午3_42_22.png

同时,我的项目中的 AppfileDeliverfileFastfile 配置文件修改如下:

Appfile

app_identifier ENV['APP_IDENTIFIER'] # The bundle identifier of your appapple_id ENV['APPLE_ID'] # Your Apple email addressteam_id ENV['TEAM_ID'] # Developer Portal Team ID

Deliverfile

app_identifier ENV['APP_IDENTIFIER'] # The bundle identifier of your appusername ENV['APPLE_ID'] # your Apple ID user# 元数据的路径metadata_path ENV['METADATA_PATH']screenshots_path ENV['SCREENSHOTS_PATH'] #App store 中待发布的 App 版本,若每个 target 的版本号不同,可以通过.env 文件来分别定义 app_version ENV['APP_VERSION_RELEASE'] #下载 metadata 及 screenshots 时直接覆盖,不询问 force true #不覆盖 iTunes Connect原有截图 skip_screenshots true #自动提交审核 submit_for_review ENV['SUBMIT_FOR_REVIEW'] #审核通过后立刻发布 automatic_release ENV['AUTOMATIC_RELEASE'] #新版本修改记录 release_notes({ "zh-Hans" => ENV['RELEASE_NOTES'] })#App 加密算法使用情况及广告相关配置submission_information({ #Export Compliance export_compliance_available_on_french_store: "false", export_compliance_contains_proprietary_cryptography: "false", export_compliance_contains_third_party_cryptography: "false", export_compliance_is_exempt: "false", export_compliance_uses_encryption: "false", export_compliance_app_type: nil, export_compliance_encryption_updated: "false", export_compliance_compliance_required: "false", export_compliance_platform: "ios", content_rights_contains_third_party_content: "false", content_rights_has_rights: "false", #Advertising Identifier add_id_info_limits_tracking: "false", add_id_info_serves_ads: "false", add_id_info_tracks_action: "false", add_id_info_tracks_install: "false", add_id_info_uses_idfa: "false"});

Fastfile

#---------- begin -----------def update_build_number() currentTime = Time.new.strftime build = get_build_number() if build.include?"#{currentTime}." # => 为当天版本 计算迭代版本号 lastStr = build[build.length-2..build.length-1] lastNum = lastStr.to_i lastNum = lastNum   1 lastStr = lastNum.to_s if lastNum < 10 lastStr = lastStr.insert end build = "#{currentTime}.#{lastStr}" else # => 非当天版本 build 号重置 build = "#{currentTime}.01" end puts("*************| 更新build #{build} |*************") # => 更改项目 build 号 increment_build_number( build_number: "#{build}" )enddef prepare_version # 正式版本号 increment_version_number( version_number: options[:version] ) # 构建版本号 update_build_number() end def get_update_description() return "版本号:nbb#{ENV['APP_VERSION_RELEASE']} n更新描述:nbb#{ENV['RELEASE_NOTES']}" end#---------- end -------------#---------- begin -----------fastlane_version "2.54.3"default_platform :iosplatform :ios do before_all do # ENV["SLACK_URL"] = "https://hooks.slack.com/services/..." cocoapods end desc "1).优先版 发布到 蒲公英" lane :beta_main_pgy do sh "fastlane beta_pgy --env SunfoBank" end desc "2).马甲版 发布到 蒲公英" lane :beta_plus_pgy do sh "fastlane beta_pgy --env SunfoBankPlus" end desc "3).优先版 发布到 苹果商店" lane :release_mian_apple do sh "fastlane release_apple --env SunfoBank" end desc "4).马甲版 发布到 苹果商店" lane :release_plus_apple do sh "fastlane release_apple --env SunfoBankPlus" end desc "5).优先版 和 马甲版 同时 发布到 蒲公英" lane :beta_all_pgy do sh "fastlane beta_pgy --env SunfoBank" sh "fastlane beta_pgy --env SunfoBankPlus" end desc "6).优先版 和 马甲版 同时 发布到 苹果TestFlight" lane :beta_all_apple do sh "fastlane beta_apple --env SunfoBank" sh "fastlane beta_apple --env SunfoBankPlus" end desc "7).优先版 和 马甲版 同时 发布到 苹果商店" lane :release_all_apple do sh "fastlane release_apple --env SunfoBank" sh "fastlane release_apple --env SunfoBankPlus" end desc "发布 指定版本 到 蒲公英" lane :beta_pgy do # 更新版本号 increment_version_number_in_plist(target: ENV['SCHEME_NAME'], version_number: ENV['APP_VERSION_RELEASE']) gym(scheme: ENV['SCHEME_NAME'], export_method: "ad-hoc", silent: true, # 隐藏没有必要的信息 clean: true # 在构建前先clean ) pgyer(api_key: "d066f633dc2d970eb230dba7823ff022", user_key: "4477d913a078c11df32be931523619dc", update_description: get_update_description(), password: "123456", install_type: "2") end desc "发布 指定版本 到 苹果TestFlight" lane :beta_apple do # 更新版本号 increment_version_number_in_plist(target: ENV['SCHEME_NAME'], version_number: ENV['APP_VERSION_RELEASE']) gym(scheme: ENV['SCHEME_NAME'], silent: true, # 隐藏没有必要的信息 clean: true # 在构建前先clean ) pilot end desc "发布 指定版本 到 苹果商店" lane :release_apple do # 更新版本号 increment_version_number_in_plist(target: ENV['SCHEME_NAME'], version_number: ENV['APP_VERSION_RELEASE']) gym(scheme: ENV['SCHEME_NAME'], silent: true, # 隐藏没有必要的信息 clean: true # 在构建前先clean ) deliver end#---------- end ------------- # You can define as many lanes as you want 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 # ) endend

截图如下:

图片 7屏幕快照 2017-09-05 下午3.42.33.png

  1. 测试工具

注:

下面是fastlane脚本范文,不足之处还望指正,谢谢

#!/bin/bash

#计时
SECONDS=0

# 取当前时间字符串添加到文件结尾
now=$(date  "%Y%m%d-%H:%M")

# 获取 Setting.plist 文件路径
setting_path=/Users/mecrt/Desktop/DaBao_Demo/Setting.plist

# 项目名称
project_name=$(/usr/libexec/PlistBuddy -c "print project_name" ${setting_path})

# 项目路径
project_path=$(/usr/libexec/PlistBuddy -c "print project_path" ${setting_path})
workspace_path="${project_path}/${project_name}.xcworkspace"

# scheme名称
scheme=$(/usr/libexec/PlistBuddy -c "print scheme_name" ${setting_path})

# 项目版本
project_version=$(/usr/libexec/PlistBuddy -c "print project_version" ${setting_path})

# 配置打包样式:Release、AdHoc、Debug
configuration=$(/usr/libexec/PlistBuddy -c "print configuration" ${setting_path})

# 发布地址:蒲公英->PGY,苹果->AppStore
upload_address=$(/usr/libexec/PlistBuddy -c "print upload_address" ${setting_path})

# ipa包名称
ipa_name=$(/usr/libexec/PlistBuddy -c "print ipa_name" ${setting_path})

# ipa包路径
ipa_path2=$(/usr/libexec/PlistBuddy -c "print ipa_path" ${setting_path})/${now}
ipa_path="${ipa_path2}-V${project_version}-${upload_address}"

# 配置plist路径    
plist_path=${project_path}/exportAdHoc.plist

# 指定输出归档文件地址
archive_path="${ipa_path}/${project_name}.xcarchive"

# 上传到蒲公英设置
user_key=$(/usr/libexec/PlistBuddy -c "print user_key" ${setting_path})
api_key=$(/usr/libexec/PlistBuddy -c "print api_key" ${setting_path})
password=$(/usr/libexec/PlistBuddy -c "print password" ${setting_path})

if [ ${upload_address} == "AppStore" ];then
configuration="Release"
export_method='app-store'
plist_path=${project_path}/exportAppstore.plist
else 
if [ ${configuration} == "Release" ];then
export_method='app-store'
plist_path=${project_path}/exportAppstore.plist
else
export_method='ad-hoc'
plist_path=${project_path}/exportDebug.plist
fi
fi

# 输出设定的变量值
#echo "----ipa_name->>>"${ipa_name}

# 先清空前一次build
echo "--开始编译打包--"${ipa_name}
fastlane gym --workspace ${workspace_path} --scheme ${scheme} --clean --configuration ${configuration} --archive_path ${archive_path} --export_method ${export_method} --output_directory ${ipa_path} --output_name ${ipa_name} --export_options ${plist_path}

echo "--开始上传-->>>--"${upload_address}
if [ ${upload_address} == "AppStore" ];then
# 验证并上传到App Store,上传AppStore的参数设置等需要再研究查找核对。
altoolPath="/Applications/Xcode.app/Contents/Applications/Application Loader.app/Contents/Frameworks/ITunesSoftwareService.framework/Versions/A/Support/altool"
"$altoolPath" --validate-app -f ${ipa_path}/${ipa_name}.ipa -u iosmanager@system.ifohoo.com -p zxF515?611 -t ios --output-format xml
"$altoolPath" --upload-app -f ${ipa_path}/${ipa_name}.ipa -u iosmanager@system.ifohoo.com -p zxF515?611 -t ios --output-format xml
else
curl -F "file=@${ipa_path}/${ipa_name}.ipa" -F "uKey=${user_key}" -F "_api_key=${api_key}" -F "password=${password}" https://www.pgyer.com/apiv1/app/upload
fi

# 输出总用时
echo "执行耗时: ${SECONDS}秒"

所有的东西都在这儿:
编辑好的fastlane xcodebuild脚本,原生的fastlane xcodebuild,请到下面github下载。
iOS-fastlane-xcodebuild

5.执行

这里以打包上传蒲公英为例,如果没有安装蒲公英插件,可以参考这篇文章:iOS持续集成:Fastlane

  • 蒲公英 自动打包发布,如果以上环境配置成功,我们可以执行以下命令:

    bundle exec fastlane ios

然后顺利的话,将会出现类似如下的选择提示,截图图如下:

图片 8屏幕快照 2017-09-04 下午6.27.57.png

我们可以通过选择不同的序号并输入,来打包上传到不同的平台,此时,我们选择序号为5,同时将两个target版本打包上传到蒲公英平台。

稍等几分钟,如果出现类似下面的信息,就说明打包上传蒲公英成功了,是不是很方便!!!

图片 9屏幕快照 2017-09-04 下午6.27.57.png

通过终端输出的日志文件,我们同时可以看到编译、打包和上传的全过程,代码中出现的警告信息,也可以作为优化时的参考。到这里Fastlane 自动打包上传就完成了。

scan:自动运行测试工具,可以生成漂亮的HTML报告

如果要使用最新版本,建议使用rvm来管理ruby

6.其他

参考链接使用fastlane实现iOS持续集成Fastlane自动化构建工具(完整解决测试和发布流程)

常见问题

  1. 生成证书、配置文件工具

在使用sudo gem install fastlane命令安装时,如果报以下错误

cert:自动创建iOS代码签名证书

ERROR:  While executing gem ... (Errno::EPERM)

sigh:自动创建、更新、下载、修复Provisioning Profile

Operation not permitted - /usr/bin/xcodeproj

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

可以修改命令sudo gem install -n /usr/local/bin fastlane

  1. 截图、描设备边框

如果fastlane加载缓慢,可以尝试gem cleanup

deliver:上传截图、元数据、App到iTunesConnect

snapshot:使用UI test功能实现自动截图

fastlane工具:

frameit:在截图的图片外层套上物理设备边框

除fastlane命令,你还可以访问以下fastlane工具

  1. 自动化编译工具

deliver: 上传截图, 元数据, app应用程序到App Store

gym:自动化编译工具

supply: 上传Android app应用程序和元数据到Google Play

激动人心的时刻来临了,终于不用一顿操作,各种选择等待,最后提交审核了,现在我们可以一条指令完成以前的所有工作,开始吧。

snapshot: 自动捕获iOS app应用程序本地截图

  • 1、工具生成我们执行fastlane init后生成了AppfileFastfile两个文件,现在我们需要的工具是deliver

screengrab: 自动捕获Android app应用程序本地截图

frameit: 快速截屏并将截屏放入设备中

// 在项目根目录执行$ fastlane deliver init

pem: 自动生成和更新推送通知配置文件

如果你输入过Apple ID 那么会直接登录iTunes Connect 并下载所需数据,如果没有输入过会让你输入Apple ID,照做就是了。然后你会发现文件发生了如下变化。

sigh: 开发证书和描述文件下载

图片 10image.png

produce: 使用命令行在iTunes Connect上创建新的app和开发入口

  • 2、信息配置打开metadata你会发现iTunes Connect 里APP所有的配置信息都在这里,想更改什么找到对应的更改就是了。

  • 3、lane 内容调整

cert: 自动创建和配置iOS代码签名证书

spaceship: Ruby 库访问 Apple开发者中心和 iTunes Connect

desc "上传新版本到 App Store" lane :release do # 增加build版本号 # increment_build_number scheme_name = "xxx" # 导出路径 output_directory = "/Users/xxx/Desktop/IPA_Info" #导出名称 output_name = "#{scheme_name}_#{Time.now.strftime('%Y%m%d%H%M%S')}.ipa" gym( export_method: "app-store", #这里填写导出方式 export_xcargs: "-allowProvisioningUpdates", scheme: scheme_name,# target的名字 clean: true, # 在构建前先clean output_directory: output_directory, output_name: output_name, ) # 上传AppStore deliver end

pilot: 最好的方式管理你的TestFlight 测试人员和从终端构建

  • 4、一行代码上传

boarding: 最简单的方式邀请你的TestFlight beta测试人员

gym: iOS app打包签名自动化工具

// 在项目根目录执行$ fastlane release

match: 使用Git同步你的团队证书和配置文件

  • 5、生成配置信息预览文件这里选择y,说明你对配置信息确认没啥问题,选择n,就终止上传啦。你会在预览文件中看到所有的配置信息,则些将是展示在iTunes上的信息

    图片 11image.png

scan: 最简单方式测试你的 iOS 和 Mac apps

使用方式,以iOS为例:

  • 6、结果等待一段时间后,在iTunes 上你会惊喜的发现出现了xx版本准备提交的选项,里面的配置信息也根据你配置的更改了,目前状态是准备提交,如果想直接进入等待审核呢,deliver增加如下参数

cd 到项目根目录

fastlane init

deliver( submit_for_review: true # 提交审核)

根据提示填写信息(有可能提示错误)

图片 12image.png

然后会看到生成一个fastlane文件夹,文件夹中会有Appfile,Fastfile等文件

  • 7、注意事项
    • 在上传appStore时候,app的版本记得更改成想要的版本
    • 如果打包一次了,再此打包的时候如果没有增加build号,会报错,为了避免每次打包都要增加build,我们增加自动增加build功能,首选按下图配置,然后增加increment_build_number,把 3、lane 内容调整的对应代码打开。
    • 下图第3步 这个值应该大于你项目的当前build值,例如我的是305,那么这里应该大于305,这样自增才会有效,因为只增是根据你这个值增加的。

Appfile

图片 13image.png

Appfile用来存放app_identifier,apple_id和team_id。 它的格式是这样的:

  • 如果iTunes 信息手动更改了,想更新到本地的话

app_identifier "com.xxx.xxx" # app的bundle identifier

apple_id "xxx@xxx.com" # 你的Apple ID

// 根目录下执行$ fastlane deliver download_metadata

team_id "XXXXXXXXXX" # Team ID

有时候我们的项目可能一套代码有多个target,这个时候怎么实现自动打包我们需要的target呢?其实很简单,如下图我们在想要的target中选择Edit Scheme->shared 勾选,这样在Fastfile中gym配置如下即可,不勾选shared会报错

···

gym ( scheme: "target的scheme name", # 此处应该是TargetDemo2 )

你也可以为每个lane(后面会讲到)提供不同的 app_identifier, apple_id 和 team_id,例如:

图片 14image.png图片 15image.png

app_identifier "com.aaa.aaa"

  • iOS使用fastlane一键打包审核

apple_id "aaa@aaa.com"

team_id "AAAAAAAAAA"

for_lane :inhouse do

app_identifier "com.bbb.bbb"

apple_id "bbb@bbb.com"

team_id "AAAAAAAAAA"

end

这里就是为Fastfile中定义的:inhouse设置单独的信息。

Fastfile

Fastfile管理你所创建的 lane 。它的格式是这样的:

···

# 自动更新fastlane 工具

# update_fastlane

#需要的fastlane的最小版本,在每次执行之后会检查是否有新版本,如果有会在最后末尾追加新版本提醒

fastlane_version "2.30.1"

#默认使用平台是 ios,也就是说文件可以定义多个平台

default_platform :ios

platform :ios do

before_all do

# ENV["SLACK_URL"] = "..."

cocoapods

end

desc "Runs all the tests"

lane :test do

scan

end

desc "提交一个新的Beta版本到 Apple TestFlight"

desc "This will also make sure the profile is up to date"

lane :beta do

# match(type: "appstore") # more information: 

gym(scheme: "Docment") # Build your app - more options available

pilot

# sh "your_script.sh"

end

desc "部署一个新版本到App Store"

lane :release do

# match(type: "appstore")

# snapshot

gym(scheme: "Docment") # Build your app - more options available

deliver(force: true)

# frameit

end

# 你可以定义自己的lane

#执行lane成功后的回调

after_all do |lane|

# slack(

#   message: "Successfully deployed new App Update."

# )

end

# 如果流程发生异常会走这里并终止

error do |lane, exception|

# slack(

#   message: exception.message,

#   success: false

# )

end

end

我们也可以定义一个自己的lane:

desc "企业版"

lane :inHouse do

gym(scheme: "XXX",

export_method:"enterprise",

output_directory "./build", # 打包后的 ipa 文件存放的目录

output_name "XXX"  # ipa 文件名

)

end

在调用fastlane 【管道】是后面可以传递参数,一可以自定义action,参考

比如可以在Fastfile中定义一个函数来处理接收到的参数

def prepare_version(options)

increment_version_number(

version_number: options[:version]

)

increment_build_number(

build_number: options[:build]

)

end

然后在某个lane中使用它

lane :appstore do |options|

···

prepare_version(options)

···

end

然后执行这个lane的时候:

fastlane appstore version:2.4.0 build:2.0

另外,lane之间是可以相互调用的,就像函数间的调用一样,比如在调用appstore的时候,可以在里面调用test的lane

lane :appstore

test

···

end

fastlane的基本使用就是这样,在使用过程中,有几个常用的action

gym:打包签名自动化工具,fastlane中包含了gym,详情:

你可以使用gym的action,但是每次需要传递参数

gym(scheme:"MyApp",workspace:"MyApp.xcworkspace")

也可以创建一个Gymfile来保存这些配置,新建一个Gymfile,使用命令fastlane gym init,这个文件中如何填写,可以参考

scheme"Example"

clean true 

output_directory"./build"#store the ipa in this folder

output_name"MyApp"#the name of the ipa file

export_options(

method:"app-store",

provisioningProfiles:{

"com.example.bundleid":"Provisioning Profile Name",

"com.example.bundleid2":"Provisioning Profile Name 2" 

}

)

当然也可以使用自定义action的方式,来提供默认gym配置,自定义action,参考

本文由星彩网app下载发布于计算机编程,转载请注明出处:自动化打包宣布,自动化打包晋级

TAG标签: 星彩网app下载
Ctrl+D 将本页面保存为书签,全面了解最新资讯,方便快捷。