一、环境检测
点此处跳转到官网说明
因为fastlane是ruby书写的,所以需要检测当前ruby的版本, 需要保证ruby的版本在2.0以上,在终端输入以下命令:
$: ruby -v (# or `ruby --version`)
如果ruby低于2.0.需要进行以下步骤:
$:rvm remove versionNumber (#versionNumber是通过上述命令得出的当前Mac的ruby版本号)
$:rvm list known (#列出已知可用的ruby版本号)
$:rvm install versionNumber (#versionNumber是需要安装的ruby版本号)
二、fastlane配置
- 需要安装Xcode,命令行安装需要执行终端输入:
xcode-select --install
- 继续安装fastlane,有两种方式,第一种通过RubyGems安装:
sudo gem install fastlane -NV
第二种通过HomeBrew:
brew cask install fastlane
- set up Environment variables(配置环境参数) , 此时显示mac系统的隐藏文件,同事点按cmd + shift + . 三个按钮,显示user级别下的隐藏文件,找到 .bash_profile进行编辑。
<1> 可以通过拖动此文件到快捷栏上的Xcode图标上会自己打开,也可以通过终端vi .bash_profile来进行编辑。编辑方式在此文件中添加以下配置(同事附上官网说明fastlane requires some environment variables set up to run correctly. In particular, having your locale not set to a UTF-8 locale will cause issues with building and uploading your build. In your shell profile add the following lines):
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
引自官网原文:You can find your shell profile at ~/.bashrc
, ~/.bash_profile
, ~/.profile
or ~/.zshrc
depending on your system.
<2>: 新买的电脑是没有.bash_profile文件(本人电脑就是如此,惊了一瞬),这种情况需要手动创建bash_profile文件,终端cd到macUser(用户名)文件下(或者直接打开或者command+T另开一个终端界面),逐步输入以下命令:
$: touch .bash_profile
$:vi .bash_profile (#也可使用open .bash_profile)
打开bash_profile后,添加<1>中的命令。
4,使用Gemfile
其实这步不用,管网给出的文档说,Gemfile是通过需要手动终端输入命令生成的,但是fastlane init之后显示是直接连带生成,其中给出了两句代码如下:
source "[https://rubygems.org](https://rubygems.org/)"
gem "fastlane"
(禁不住吐槽了,官网也是坑啊,坑了大约估计1-2个小时左右,百度bing搜索有说,把source换成淘宝的镜像https://ruby.taobao.org/,在此还有一个可能就是代理原因导致的坑吧,也可能有其他未在认知内的坑吧,稍后说什么坑,若不是思维敏捷测试,脑壳痛到头发根)
三、项目中使用自动化打.ipa包
1,对于fastlane配置好之后,可以开始对工程目录进行使用。
cd到对应的项目工程下,继续终端输入:
fastlane init
会看到生成至少包含fastfile和Appfile的fastlane文件和Gemfile文件。其中会出现4个选项,1-2-3会涉及到需要登录账号和密码操作,本人是p12授权操作,因为作为team成员,不需要密码。p12文件含有打企业包所需要的描述文件。
Appfile: 用来存储一些公共信息,比如app_identifier
、apple_id
、team_id
、itc_team_id
等。
fastfile: 用来定义所有的lane任务。
Gemfile: 目前没有配置过,在出现不少error和issue后的搜索感觉是管理fastlane的工具。
2, 对fastlane进行任务定义coding。
默认是iOS平台,输入命令可以修改。
默认的生成的fastlane模板是:
default_platform(:ios)
platform :ios do
desc "Description of what the lane does"
lane :custom_lane do
# add actions here: [https://docs.fastlane.tools/actions](https://docs.fastlane.tools/actions)
end
end
custom_lane即如函数名一样,终端输入fastlane custom_lane即可执行此lane当前最小定义域内do{...}end中的行为。
<1>: 定义lane。
>>>get_certificates #获取证书
>>>get_provisioning_profile #获取描述文件
>>>sigh(adhoc:false)
>>>build_app(workspace: "Sakura.xcworkspace", scheme: "Sakura") //假如你使用了cocoapod
>>>upload_to_app_store(skip_metadata: true, skip_screenshots: true) //上传到appStore
>>>changelog = prompt(
text: "Changelog: ",///提交change的日志信息
multi_line_end_keyword: "END",///当想结束本次信息输入时,输入END点按Enter键即可
)
>>>upload_to_testflight(changelog: changelog) //上传到testflight进行测试
eg: upload_to_testflight(changelog: "Add rocket emoji")
eg: upload_to_testflight(skip_waiting_for_build_processing: true)
skip the "Waiting for processing" of the binary
While this will speed up your build, it will not distribute
the binary to your tests, nor set a changelog
通过以下命令,可以实现在p12授权的情况下,进行自动打.ipa包,这里以Sakura为例
>>>build_app(
workspace: "Sakura.xcworkspace", #使用了cocoapod就需要有workspace了
scheme: "Sakura", #工程下要打包的项目,如果一个工程有多个项目则用[项目1,项目2]
configuration: "Release", # Debug or Release
clean: true, #清空上次打包信息
export_method:"enterprise", # app-store, ad-hoc, package, enterprise, development, developer-id
output_directory: './build', #指定ipa最后输出的目录
output_name: "Sakura.ipa",
//export_xcargs: "-allowProvisioningUpdates",
export_options: {
provisioningProfiles: {
"当前scheme对应的target工程的bundle id" => "当前scheme所对应的profile描述文件",
}
}
)
>>>enable_automatic_code_signing(path: "Sakura.xcworkspace") //开启自动签名
四、fastlane添加插件
1,搜索插件,可以通过以下命令(默认是在当前工程目录下,以firim为例):
$:fastlane search_plugins fir
实际的要安装的插件是firim,因此搜索的结果会展示多个包含多个fir的插件名,当看到firim的时候,可以锚定即是它(fir.im)。
2,添加插件
$:fastlane add_plugin firim
在这一步,会出现以下错误:
An error occurred while installing unf_ext (0.0.7.6), and Bundler cannot
continue.
Make sure that `gem install unf_ext -v '0.0.7.6'` succeeds before bundling.
把Gemfile文件的source注释即可。
3,在fastlane中添加插件命令
上传ipa到fir.im服务器,在fir.im获取firim_api_token
firim(firim_api_token: '123456fdedftyuioopa9988hnai9')
如果是上传到蒲公英,需要再蒲公英获取api_key和userKey(登录成功,点击Api信息)
pgyer(api_key: "2bd73d92030", user_key: "f0c61905ed")
五、查询更多参数
当已知的某个ruby命令中参数不能够功能时,可以使用
fastlane action ****
//such as 'upload_to_testflight', to get a list of all available options
fastlane action upload_to_testflight
"当前scheme所对应的profile描述文件名"指当前工程在打包的时候非自动配置时需要选择的此profile文件。
一个项目在发布时,bundleid对应的Provisioning Profiles会存在多个,有效即可。
当选择Automatically manage signing的时候,需要cd到~/Library/Mobile Device/profile文件夹中找对应有效的描述文件。
如果一个工程中存在多个target会有多个Provisioning Profiles同时存在。则需要在fastlane文件定义环境变量或手动切换进行选择Provisioning Profiles。