一:Fastlane 安装准备工作
一、安装xcode命令行工具
xcode-select --install
如果没有安装,会弹出对话框,点击安装。如果提示xcode-select: error: command line tools are already installed, use "Software Update" to install updates表示已经安装
二、安装Fastlane
1.Homebrew安装:
brew cask install fastlane
2.安装程序脚本下载zip文件。然后双击install脚本(或在终端窗口中运行)。
3.RubyGems 带有Ruby版本> 2.0.0
gem install fastlane -NV
安装完了执行下方命令,确认下是否安装完成和当前使用的版本号。
fastlane --version
二:Fastlane 安装初始化
一、初始化Fastlane
cd到你的项目目录执行
fastlane init
成功后会出现如下,根据你的需求,选择下方的一个继续:
我这里选的是3,
1.下一步需要登录开发者账号,输入账号密码后
2.验证当前应用identifier是否已在App Store中存在,如果没有的话,会进一步提示你创建App名称...然后自动帮你创建,如果已有的话,那会节省很多时间,也可以避免很多问题
一切正确无误后,初始化成功后会在当前工程目录生成一个fastlane文件夹,文件目录为下:
文件名描述
Appfile 从Apple Developer Portal 获取和项目相关的信息 详情
Fastfile 核心文件,存放lane任务
Deliverfile deliver的配置文件,从 iTunes Connect 获取和项目相关的信息详细
metadata 同步iTunes Connect中的元数据
screenshots 同步iTunes Connect中的截图
Fastfile是我们最应该关注的文件,也是我们的工作文件。这样第二步总算是完成了,接下来第三步就是配置Fastfile文件
三:Fastfile文件配置(示例)
关于fastfile:
里面存放了很多lane,每个lane相当于按顺序执行的工作流。每个lane可以存放多个action,action可以看做具体的执行动作
生命周期:
1 before_all 在执行 lane 之前只执行一次
2 before_each 每次执行 lane 之前都会执行一次
3 lane 自定义的任务
4 after_each 每次执行 lane 之后都会执行一次
5 after_all 在执行 lane 成功结束之后执行一次
6 error 在执行上述情况任意环境报错都会中止并执行一次
任务
desc #false 可多次使用打到换行的目的
name #true 符号化的方法名
options #false 返回 Hash 类型
task #true 参考ruby的方法代码且支持 ruby 代码
default_platform(:ios)
#声明
k_app_name = "ABC"
k_workspace = "GameTrade.xcworkspace"
k_scheme_name = "GameTrade"
k_ipa_time = Time.now.strftime("%Y%m%d_%H%M")
k_output_directory = "packages"
k_app_info_plist_path = './GameTrade/Info.plist'
k_export_method = ""
k_env_prefix = ""
k_ipa_name = ""
platform :ios do
before_all do
# ENV["SLACK_URL"] = "https://hooks.slack.com/services/..."
end
#debug包
lane :debug_package do
k_env_prefix ="debug_"
k_export_method = "development"
package(configuration: "Debug")
end
#release包
lane :release_package do
k_env_prefix ="adhoc_"
k_export_method = "ad-hoc"
package(configuration: "Release")
pgyer(api_key: "2455364b6a08c261b84cfbe7fff55fba", user_key: "ad18b738e7854bf3c689ecfe71f1b7a5", update_description: "update by fastlane")#蒲公英设置查看key
end
#发布包 "Push a new release build to the App Store"
lane :appstore_package do
k_env_prefix ="appstore_"
k_export_method = "app-store"
package(configuration: "Release")
end
#打包函数 desc "打包到pgy"
lane :package do |options|
#自动增加build
increment_build_number
#获取version和build版本号
k_version = get_info_plist_value(path: "./#{k_scheme_name}/Info.plist", key: "CFBundleShortVersionString")
k_build = get_info_plist_value(path: "./#{k_scheme_name}/Info.plist", key: "CFBundleVersion")
k_ipa_name = "#{k_env_prefix}" + "#{k_app_name}_" + "#{k_ipa_time}_" + "#{k_version}" +"_#{k_build}"+ ".ipa"
gym(
clean:true, #打包前clean项目
workspace: "#{k_workspace}",
scheme: "#{k_scheme_name}", #scheme
configuration: options[:configuration],#环境 Debug,Release
export_method: "#{k_export_method}", #导出方式:app-store,ad-hoc,enterprise,development
output_directory: "#{k_output_directory}", #"./ipa",#ipa的存放目录
output_name: "#{k_ipa_name}", #输出ipa的文件名为当前的build号
silent: true, #隐藏没有必要的信息
include_symbols: true,
include_bitcode: true,
export_xcargs: "-allowProvisioningUpdates" #Xcode9 默认不允许访问钥匙串的内容,必须要设置此项才可以,运行过程可能会提示是否允许访问钥匙串,需要输入电脑密码
)
xcclean(
workspace: "#{k_workspace}",
scheme: "#{k_scheme_name}"
)
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
四:Fastlane 插件安装(更多插件)
插件安装成功fastlane目录下会生成Pluginfile的一个文件。插件安装不成功,就是fastlane安装的有问题。
五:发布
执行fastlane release_package 成功后,如下图: