一句代码
fastlane [lane_name]
,实现一键自动完成构建打包。fastlane还有很多其他功能,学会直线骑车再学拐弯等骑车技巧就很容易了。下面讲fastlane简单的自动化构建,免除我们日常工作中的编译、打包、部署等重复流程。
一、安装fastlane
- 我安装fastlane遇到个问题,长点知识,凡是遇到这种报错基本都是本地ruby版本太低了。查看了ruby的一系列版本之后选了
最新的版本2.4.1
,就是这个坑
,2.4.1
这个版本我装好了好久都装不上,花了我好多时间,后来退了一个版本2.2.2
,问题解决。(一万只马在奔腾......)
// 报错的大致信息:
YAML safe loading is not available. Please upgrade psych to a version that supports safe loading (>= 2.0).
ERROR: SSL verification error at depth 1: unable to get local issuer certificate (20)
...
ERROR: Error installing fastlane:
ERROR: Failed to build gem native extension.
Building has failed. See above output for more information on the failure.
extconf failed, exit code 1
- 解决Answer:打开终端,键入
// 安装新版本,这个版本没问题,rvm>2.0版本就可以了
rvm install 2.2.2
回到正题:安装fastlane
fastlane官方地址
[fastlaneGithub地址]
参考文章1
参考文章2
参考LuisX
参考文章4
// 终端键入,等待安装完成
rvm install fastlane
- 测试是否安装成功,有版本号就成功,我的版本是2.89.0
// 终端键入
fastlane -v
二、fastlane简单使用和初始化
- 进入项目根目录
cd 你项目的根目录
-
初始化fastlane,
fastlane init
,我选择第3种What would you like to use fastlane for? 1. 📸 Automate screenshots 2. 👩✈️ Automate beta distribution to TestFlight 3. 🚀 Automate App Store distribution 4. 🛠 Manual setup - manually setup your project to automate your tasks
- 失败原因是:fastlane默认的是App Store自动化设置,但是我是用企业账号没有权限来设置App Store自动化打包,所以失败,我改选第4项的手动设置。
- 初始化成功后,进入你项目根目录的
fastlane
文件有两个文件:Appfile
和Fastfile
Appfile
- Appfile文件用来存放你的APP信息,包括app_identifier,apple_id和team_id。
Fastfile
- Fastfile文件是你自动化构建配置的信息
实现企业版自动化构建配置,解决上面权限问题
- 在Fastfile文件写入
desc "企业版"
lane :inhouse do
gym(scheme: "BeeEnrichmentAppiOS",
clean:true,
configuration: "Release",
export_method: "enterprise",
output_name:"BeeEnrichmentAppiOS",
output_directory:"build") # Build your app - more options available
deliver(force: false)
# frameit
end
-
打开终端,cd到你的项目根目录,键入
fastlane ios inhouse do
-
更多fastlane的其他指令请看fastlane Doc指南
fastlane actions: 列出所有可用fastlane活动
fastlane action [action_name]: 显示一个更详细的活动描述
fastlane lanes: 列出所有可用lanes (有描述)
fastlane list: 列出所有可用lanes (没有描述)
fastlane new_action: 在fastlane创建一个活动(集成)
- fastlane工具:
-
deliver
: 上传截图, 元数据, app应用程序到App Store -
supply
: 上传Android app应用程序和元数据到Google Play -
snapshot
: 自动捕获iOS app应用程序本地截图 -
screengrab
: 自动捕获Android app应用程序本地截图 -
frameit
: 快速截屏并将截屏放入设备中 -
pem
: 自动生成和更新推送通知配置文件 -
sigh
: 开发证书和描述文件下载 -
produce
: 使用命令行在iTunes Connect上创建新的app和开发入口 -
cert
: 自动创建和配置iOS代码签名证书 -
spaceship
: Ruby 库访问 Apple开发者中心和 iTunes Connect -
pilot
: 最好的方式管理你的TestFlight 测试人员和从终端构建 -
boarding
: 最简单的方式邀请你的TestFlight beta测试人员 -
gym
: iOS app打包签名自动化工具 -
match
: 使用Git同步你的团队证书和配置文件 -
scan
: 最简单方式测试你的 iOS 和 Mac apps
三、gym配置自动化构建
-
gym也是fastlane的工具之一,iOS app打包签名自动化工具
gym图片 - gym安装:
// 终端
sudo gem install gym
- gym的使用
一下操作都是cd到项目的根目录下
// 终端
gym --workspace "gymTest.xcworkspace" --scheme "gymTest" --clean
// 或者用这条命令,fastlane 指令
fastlane gym
执行
- 在Fastfile文件写完lane配置后,终端键入
fastlane [lane_name]
,自动打包完成。 - 以后打包的时候,只要cd到项目根目录,再键入
fastlane [lane_name]
就实现自动构建。[lane_name]是你写入的lane名字。 - 你可以在Fastfile写入这写功能:
platform :ios do
before_all do
# ENV["SLACK_URL"] = "https://hooks.slack.com/services/..."
cocoapods
end
#执行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
desc "Description of what the lane does"
lane :custom_lane do
# add actions here: https://docs.fastlane.tools/actions
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: "你的项目名字") # Build your app - more options available
pilot
# sh "your_script.sh"
end
desc "部署一个新版本到App Store"
lane :release do
# match(type: "appstore")
# snapshot
gym(scheme: "你的项目名字”,
clean:true,
configuration: "Release”,
export_method: "appstore"
) # Build your app - more options available
deliver(force: false)
# frameit
end
desc "企业版"
lane :inhouse do
gym(scheme: "你的项目名字",
clean:true,
configuration: "Release",
export_method: "enterprise",
output_name:"你的项目名字",#打包.ipa的文件名
output_directory:"build") # Build your app - more options available
deliver(force: false)
# frameit
end
end
自动打包成功.png
网友评论