Fastlane- app自动编译、打包多个版本、上传到app store
Fastlane是一套使用Ruby写的自动化工具集,用于iOS和Android的自动化打包、发布等工作,可以节省大量的时间。
Github:https://github.com/fastlane/fastlane
文档:https://docs.fastlane.tools/
安装
1、首先要安装正确的 Ruby 版本。在终端窗口中用下列命令来确认:
ruby -v
2、然后检查 Xcode 命令行工具是否安装。在终端窗口中输入命令:
xcode-select --install
如果未安装,终端会开始安装,如果报错误:command line tools are already installed, use "Software Update" to install updates.代表已经安装。
3、以上依赖配置好之后就可以通过 rubygem 进行安装了:
$ sudo gem install fastlane
安心等待一会,fastlane就安装完成了。
初始化
进入到工程目录执行:
fastlane init
中间需要输入开发者账号、密码。
初始化之后目录下多了一个fastlane目录,内容:

Appfile
Appfile用来存放app_identifier,apple_id和team_id。 了解详情,它的格式是这样的:
app_identifier "com.xxx.xxx" # app的bundle identifier
apple_id "xxx@xxx.com" # 你的Apple ID team_id "XXXXXXXXXX" # Team ID
你也可以为每个lane(后面会讲到)提供不同的 app_identifier, apple_id 和 team_id,例如:
app_identifier "com.aaa.aaa"
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"] = "https://hooks.slack.com/services/..."
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: https://codesigning.guide
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
其中一个lane就是一个任务,里面是一个个的action组成的工作流。
修改项目版本号:
修改Build Settings中的Versioning配置,Current Project Version随便填一个,Versioning System选择Apple Generic。
def prepare_version(options)
increment_version_number(
version_number: options[:version]
) increment_build_number(
build_number: options[:build]
)
end
利用目前支持的工具可以做所有包含自动化和可持续化构建的每个环节,例如:
scan 自动化测试工具,很好的封装了 Unit Test
sigh针对于 iOS 项目开发证书和 Provision file 的下载工具
match 同步团队每个人的证书和 Provision file 的超赞工具
gym针对于 iOS 编译打包生成 ipa 文件
deliver 用于上传应用的二进制代码,应用截屏和元数据到 App Store
snapshot 可以自动化iOS应用在每个设备上的本地化截屏过程
执行
定义完lane之后怎么执行呢?打开终端,切换到项目的根目录:执行fastlane lane'name就可以了。成功之后会在相应的路径下生成ipa文件,如果报错的话就根据错误信息好好查看文档。
其他
1、这里是官方提供的一些例子。
2、想了解fastlane命令的话可以执行$ fastlane --help
3、查看可用任务的列表,可以执行命令$ fastlane lanes
4、fastlane也提供了很多插件方便我们使用,例如pgyer(发布app到蒲公英)。我们也可以打完包直接传到蒲公英上,具体的可以看蒲公英提供的文档。
如果你感觉有些插件不符合自己的情况,你甚至可以自定义插件
5、多个 lane 的话实际上是可以相互调用的,这个其实特别实用。例如:
default_platform :ios platform :ios do lane :prepare do
cocoapods
match
end desc 'fastlane build' 'fastlane build type:adhoc'
lane :build do |options|
# 调用上面的 prepare 任务
prepare case options[:type]
when 'adhoc'
adhoc
else
appstore
end
end lane : adhoc do
···
end lane : appstore do
···
end end
6、我们可以在 Fastfile 文件中添加一个函数来设置version号和build号。
default_platform :ios 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. build:2.0
Fastlane能做的事情还有很多,大家可以去好好看看文档,研究一些高级的用法吧!
Fastlane- app自动编译、打包多个版本、上传到app store的更多相关文章
- Ant自动编译打包&发布 android项目
Eclipse用起来虽然方便,但是编译打包android项目还是比较慢,尤其将应用打包发布到各个渠道时,用Eclipse手动打包各种渠道包就有点不切实际了,这时候我们用到Ant帮我们自动编译打包了. ...
- Android-Ant自动编译打包android项目 -- 2 ----签名与渠道包
上篇介绍了怎么使用ant自动编译打包现有的android项目,这篇将继续介绍如果如何在ant打包应用的时候加入签名信息以及自动打包渠道包. 1. 加入签名信息: 在项目的根目录下建一个ant.prop ...
- Android - Ant自动编译打包android项目 -- 1(转)
1. 背景: Eclipse用起来虽然方便,但是编译打包android项目还是比较慢,尤其当要将应用打包发布到各个渠道时,用Eclipse手动打包各种渠道包就有点不切实际了,这时候我们用到Ant帮我 ...
- Andorid进阶7—— Ant自动编译打包&发布 android项目
http://www.cnblogs.com/tt_mc/p/3891546.html Eclipse用起来虽然方便,但是编译打包android项目还是比较慢,尤其将应用打包发布到各个渠道时,用Ecl ...
- Ant自动编译打包android项目(转载)
1.1 Ant安装 ant的安装比较简单,下载ant压缩包 http://ant.apache.org (最新的为1.9.3版本),下载之后将其解压到某个目录(本人解压到E:\Progra ...
- (转载)Ant自动编译打包android项目
1 Ant自动编译打包android项目 1.1 Ant安装 ant的安装比较简单,下载ant压缩包 http://ant.apache.org (最新的为1.9.3版本),下载之后将其解压 ...
- 【转】 iOS开发之打包上传到App Store——(一)各种证书的理解
OK,有日子没写iOS开发的相关文章啦,主要是最近的精力都没在这上面,不过既然产品已经快要出来了,就有必要了解一下各种证书啥的(众所周知iOS的一堆证书可是很让人头大呀),最近确实被这个搞得头大,然后 ...
- ipa上传到APP store
原地址:http://blog.csdn.net/akun1103/article/details/8632651 在itunes中创建程序 该部分内容继续以雪豹系统为例 打开https://itun ...
- 阿里云CentOS自动备份MySql 8.0并上传至七牛云
本文主要介绍一下阿里云CentOS7下如何对MySql 8.0数据库进行自动备份,并使用.NET Core 将备份文件上传至七牛云存储上,并对整个过程所踩的坑加以记录. 环境.工具.准备工作 服务器: ...
- windows如何上传ios app到appstore
我们在hbuilderx这些开发工具打包好ios app后,需要将这个app提交appstore才能让用户下载安装. 上传IOS APP主要是通过苹果开发者中心来上传,然后借助香蕉云编上传工具来上传就 ...
随机推荐
- .Net Core 3.0依赖注入替换 Autofac
今天早上,喜庆的更新VS2019,终于3.0正式版了呀~ 有小伙伴问了一句Autofac怎么接入,因为Startup.ConfigureServices不能再把返回值改成IServiceProvide ...
- 用 Python 下载抖音无水印视频
说起抖音,大家或多或少应该都接触过,如果大家在上面下载过视频,一定知道我们下载的视频是带有水印的,那么我们有什么方式下载不带水印的视频呢?其实用 Python 就可以做到,下面我们来看一下. 很多人学 ...
- 微信号可以改了?我用 Python 发现了隐藏的 6 大秘密.
“听说,微信可以改微信号了! ” 不知道谁扯了一嗓子,让办公室变成了欢乐的海洋 张姐流下了激动的泪水:“太好了!姐的年龄终于不用暴露在微信号了!” 很多人学习python,不知道从何学起.很多人学习p ...
- 每日一道 LeetCode (8):删除排序数组中的重复项和移除元素
每天 3 分钟,走上算法的逆袭之路. 前文合集 每日一道 LeetCode 前文合集 代码仓库 GitHub: https://github.com/meteor1993/LeetCode Gitee ...
- XCTF-WEB-高手进阶区-PHP2-笔记
鬼才作者...特么卡了我那么长时间,这知识点我真不知道 o(╥﹏╥)o 拿Dirserach扫只能扫出来index.php和index.php/login 一度让我怀疑是有我不会的姿势去解这道题 最后 ...
- ALGEBRA-2 有限维向量空间
关键词:张成.线性无关.基.维度 linear span: V中任意一组向量的span都是V的子空间(对加法和数乘封闭) linear independent 线性无关 https://www.zy ...
- K8S 创建管理员账号
一.生成管理员证书 cat > admin-csr.json <<EOF { "CN": "admin", "hosts" ...
- python接口自动化 - 断言(上)
我们在做接口自动化的时候会用当unittest框架,这个框架中是有assert方法 当我们写好我们的case后 总要有个验证是否正确的东西,assert就给我们提供了非常强大的结果验证 序号 断言方法 ...
- 一个简单的例子让你很轻松地明白JavaScript中apply、call、bind三者的用法及区别
JavaScript中apply.call.bind三者的用法及区别 引言 正文 一.apply.call.bind的共同用法 二. apply 三. call 四. bind 五.其他应用场景 六. ...
- 记录一下navicat的快捷键
1.ctrl+q 打开查询窗口2.ctrl+/ 注释sql语句3.ctrl+shift +/ 解除注释4.ctrl+r 运行查询窗口的s ...