自动化打包工具集Fastlane

更新于20181025,
最近更新:

  1. export_options,
  2. fir上传命令修改

什么是Fastlane

Fastlane是一套使用Ruby写的自动化工具集,旨在简化Android和iOS的部署过程,自动化你的工作流。它可以简化一些乏味、单调、重复的工作,像截图、代码签名以及发布App.

如何安装Fastlane

  1. 安装xcode命令行工具
xcode-select --install

如果没有安装,会弹出对话框,点击安装;

如果已经安装,就会提示

xcode-select: error: command line tools are already installed, use "Software Update" to install updates。

  1. 安装Fastlane

使用下面的命令

sudo gem install fastlane -NV

或是

brew cask install fastlane

来安装Fastlane。

安装完成后,可以执行下面命令,检查是否安装好。

fastlane --version
  1. 初始化Fastlane

cd到你的项目目录执行

fastlane init

过一会会出现如下提示,让你选择一个选项:


我这里希望打包上传到app store,所以选择了3.

如果你的工程是用cocoapods的那么可能会提示让你勾选工程的Scheme,步骤就是打开你的xcode,点击Manage Schemes,在一堆三方库中找到你的项目Scheme,在后面的多选框中进行勾选,然后rm -rf fastlane文件夹,重新fastlane init一下就不会报错了。

接着会提示你输入开发者账号和密码。

[20:48:55]: Please enter your Apple ID developer credentials
[20:48:55]: Apple ID Username:

登录成功后会提示你是否需要下载你的App的metadata。点y等待就可以。

初始化成功以后,就会生成一个如下图所示的fastlane文件夹:


fastlane

其中metadatascreenshots分别对应App元数据和商店应用截图。

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 : release do
  app_identifier "com.bbb.bbb"
  apple_id "bbb@bbb.com"
  team_id "AAAAAAAAAA"
end

这里就是为Fastfile中定义的: release设置单独的信息。

Deliverfile

Deliverfile中为发布的配置信息,一般情况用不到。

Fastfile

Fastfile是我们最应该关注的文件,也是我们的工作文件。
下面是我的fastfile文件中上传至app store的lane:

platform :ios do
#------------------------------APP STORE-----------------------------------
desc "Push a new release build to the App Store"
lane :to_appStore do
#gym用来编译ipa
gym(clean:true,# 编译前执行 clean,可减少 ipa 文件大小 
scheme: "MobileChecking",#要编译的scheme名称
export_method: "app-store", # Xcode 9增加export_method标签
silent: true, # 隐藏没有必要的信息
output_directory: "./fastlane/appstoreIPA", # ipa输出目录
output_name:"mobileChecking", #输出的ipa名称
archive_path:"./fastlane/appstoreIpaArchive", #archive文件导出地址 
export_xcargs: "-allowProvisioningUpdates",
export_options: {
        method: "ad-hoc",
            provisioningProfiles: {
                "com.whty.xxxx" => "对应provisioningProfiles文件名",
            }
        }
) 
upload_to_app_store
end

其中一个lane就是一个任务,里面是一个个的action组成的工作流。

export_method:指定打包所使用的输出方式,目前支持app-store, package, ad-hoc, enterprise, development, 和developer-id,即xcodebuild的。

如何使用Fastlane

定义完lane之后怎么执行呢?打开终端,切换到项目的根目录:执行fastlane [lane'name]就可以了。比如我的lane名称叫appStore,那么久执行如下命令:

fastlane  appStore

或者采用下面的命令会更快:

bundle exec fastlane  appStore

成功之后会在相应的路径下生成ipa文件,并会自动上传至app store。

如何配置Fastfile

上传到fir

安装 插件

bundle exec fastlane add_plugin fir 

安装fir

使用如下命令,安装fir:

sudo gem install fir-cli

如果报如下错误:

ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions for the /usr/bin directory.

可以改为:

sudo gem install -n /usr/local/bin fir-cli

安装完成以后,登录fir:

fir login

会让你输入你的fir.im API Token,去fir网站即可获得此token。

fir上传的lane:

#-----------------------------------FIR-------------------------------

desc "Push a new release build to the FIR"
lane :to_fir do
#build_app(workspace: "MobileChecking.xcworkspace", scheme: "MobileChecking")
#gym用来编译ipa
gym(clean: true,  # 编译前执行 clean,可减少 ipa 文件大小 
scheme: "MobileChecking", # 要编译的scheme名称
export_method: "ad-hoc", # Xcode 9增加export_method标签
silent: true, # 隐藏没有必要的信息
output_directory: "./fastlane/firIPA", # ipa输出目录
output_name:"mobileChecking", # 输出的ipa名称
archive_path:"./fastlane/firIpaArchive", #archive文件导出地址 
export_xcargs: "-allowProvisioningUpdates", 
export_options: {
        method: "ad-hoc",
            provisioningProfiles: {
                "com.xxxx" => "对应provisioningProfiles文件名",
            }
        }
) 
# 上传ipa到fir.im服务器,在fir.im获取firim_api_token
#firim(firim_api_token: "451d867c8860da31exxxxxxxxxxxx")
fir(
    api_token: '451d867c8860da31e5e4xxxx',
    apk_path: "./fastlane/firIPA/Communication.ipa", #生成ipa路径
    changelog: 'hehe123' #上传日志
)
end

如果你想上传到蒲公英,可以参考这篇文章:使用 fastlane 实现 iOS 持续集成(二)

常见错误处理

  1. FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT
[14:57:59]: fastlane finished with errors

[!] xcodebuild -showBuildSettings timed out after 4 retries with a 
base timeout of 3. You can override the base timeout value with the 
environment variable FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT, and the 
number of retries with the environment variable 
FASTLANE_XCODEBUILD_SETTINGS_RETRIES 

在遇到这个错误之后,在命令窗口运行下面代码来更新timeout时间:

#更新timeout
export FASTLANE_XCODEBUILD_SETTINGS_TIMEOUT=120

参考

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 143,639评论 1 302
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 61,591评论 1 258
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 95,050评论 0 213
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 41,169评论 0 180
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 48,976评论 1 258
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 38,876评论 1 178
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 30,476评论 2 273
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,229评论 0 167
  • 想象着我的养父在大火中拼命挣扎,窒息,最后皮肤化为焦炭。我心中就已经是抑制不住地欢快,这就叫做以其人之道,还治其人...
    爱写小说的胖达阅读 29,095评论 6 234
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 32,579评论 0 213
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,356评论 2 215
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 30,698评论 1 232
  • 白月光回国,霸总把我这个替身辞退。还一脸阴沉的警告我。[不要出现在思思面前, 不然我有一百种方法让你生不如死。]我...
    爱写小说的胖达阅读 24,272评论 0 32
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,168评论 2 214
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 31,605评论 3 210
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,645评论 0 9
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,035评论 0 166
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 33,609评论 2 232
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 33,698评论 2 233

推荐阅读更多精彩内容