iOS使用fastlane实现本地一键打包和发布
fastlane简介
fastlane是一套主要使用Ruby语言开发的自动化工具集,可用于iOS和Android的自动化打包、发布等工作,做到一键集成发布,为广大开发者节约大量时间。fastlane详细介绍可参考下面资料。
Github:https://github.com/fastlane/fastlane
官网:https://fastlane.tools/
文档:https://docs.fastlane.tools/
截止目前fastlane Github上Star数已3W+。
安装fastlane
1、首先要安装正确的 Ruby 版本。需要2.0及以上版本,在终端窗口中用下列命令来确认:
ruby -v
2、然后检查 Xcode 命令行工具是否安装。在终端窗口中输入命令:
xcode-select --install
如果未安装,终端会开始安装,如果报错误:command line tools are already installed, use "Software Update" to install updates.
代表已经安装。
3、以上配置好之后就可以安装fastlane了,可以通过RubyGems或Homebrew 安装
//RubyGems (macOS/Linux/Windows)
sudo gem install fastlane
//Homebrew (macOS)
brew install fastlane
安装过程中有可能被墙导致卡在bundle update,解决方法可自行谷歌.
初始化
打开终端,cd到你的工程目录,然后执行
fastlane init
执行后会在当前目录下创建fastlane文件夹,并有下面4个选项供选择,这里选择4,其他三项功能可查阅官方文档
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文件结构如下
fastlane
├── Appfile
├── Deliverfile
├── Fastfile
├── metadata
│ ├── copyright.txt
│ ├── en-US
│ │ ├── description.txt
│ │ ├── keywords.txt
│ │ ├── marketing_url.txt
│ │ ├── name.txt
│ │ ├── privacy_url.txt
│ │ ├── release_notes.txt
│ │ └── support_url.txt
│ ├── primary_category.txt
│ ├── primary_first_sub_category.txt
│ ├── primary_second_sub_category.txt
│ ├── secondary_category.txt
│ ├── secondary_first_sub_category.txt
│ ├── secondary_second_sub_category.txt
│ └── zh-Hans
│ ├── description.txt
│ ├── keywords.txt
│ ├── marketing_url.txt
│ ├── name.txt
│ ├── privacy_url.txt
│ ├── release_notes.txt
│ └── support_url.txt
└── screenshots
├── README.txt
├── en-US
│ ├── 一堆png图片
-
这里肯定会被创建的是Appfile和Fastfile。
如果Deliverfile,screenshots和metadata目录没被创建,可以运行fastlane deliver init重新初始化
,在执行deliver init的过程中,会同步iTC中的所有语言的元数据和截图。 -
fastlane的配置会要求输入开发者账号密码,所有的密码都加密保存在系统的Keychain里
-
Matchfile: match 这个action的配置文件,fastlane match init 自动生成,存放git地址等
fastfile文件配置
- Appfile:用于指定 app_identifier, apple_id, team_id
- Fastfile:配置管理 lane
- Deliverfile:配置应用在 ITC 中的各种信息,和 ICC 中的数据是一一对应的
- metadata:包含应用在 ITC 中的各种信息
- screenshots:包含截图数据
为了方便可以在fastlane目录下创建一个.env配置文件,存储相关配置信息
touch .env
配置信息参考如下
#APP唯一标识符
APP_IDENTIFIER = "com.xxx.xxx.xxx"
#发布版本号
APP_VERSION_RELEASE = "1.0.0"
#苹果开发者账号
APPLE_ID = "xxxxxxxxxxxx"
#TeamID
TEAM_ID = "xxxxxxx"
#应用名称
SCHEME_NAME = "xxxxx"
# AppIcon
APPICON_PATH = './fastlane/metadata/app_icon.jpg'
# Firim Token
Firim_Api_Token = "xxxxxxxxxx"
#Firim short url
Firim_Short_url = "http://xxxxxxxxx"
配置 Appfile
# For more information about the Appfile, see:
# https://docs.fastlane.tools/advanced/#appfile
app_identifier ENV['APP_IDENTIFIER'] # The bundle identifier of your app
apple_id ENV['APPLE_ID'] # Your Apple email address
team_id ENV['TEAM_ID'] # Developer Portal Team ID
配置 Fastfile
default_platform(:ios)
platform :ios do
lane :dev do |option|
increment_build_number
scheme_name = ENV['SCHEME_NAME']
app_ipa_name = "#{scheme_name}"
print("app_ipa_name: #{app_ipa_name}")
puts "请输入版本描述:"
desc = STDIN.gets
#打包
gym(
scheme: "#{scheme_name}",
export_method: "development",#打包所选的种类(就是App Store,生产测试,企业,开发测试那四种), app-store,ad-hoc,enterprise,development
output_directory: "./build",
output_name: "#{app_ipa_name}.ipa"
)
#上传到firim,上传Fir.im需要提前安装Fir.im插件 fastlane add_plugin fir_cli
firim(
firim_api_token:ENV['Firim_Api_Token'],
app_changelog:"#{desc}",
icon:ENV['APPICON_PATH']
)
#上传成功后 弹窗通知提醒
notification(
subtitle: "Finished upload to fir.im",
message: "all work done",
open: ENV['Firim_Short_url']
)
clean_build_artifacts
end
end
metadata文件夹
如果只是简单的打包提交到蒲公英,Firim分发平台,metadata目录下的所有文件都可以删除,只保留app_icon.jpg,(图片名称不要修改,图片为1024x1024的App icon,否则打包后上传Fir.im 包没有App icon)
metadata文件夹结构如下
├── metadata
│ └── app_icon.jpg
自动打包 发布
最后在工程目录下 输入命令 fastlane dev
(dev 为Fastfile中lane 对应的名称)
几分钟后打包成功并自动上传到Fir.im,Mac 会弹出通知提醒
(上传Fir.im需要安装Fir.im插件 fastlane add_plugin firim
)