iOS-Fastlane自动化打包上传蒲公英+踩坑、

简介

Fastlane是一套使用Ruby写的自动化工具集,用于iOS和Android的自动化打包、发布等工作,可以节省大量的时间。

官网:https://fastlane.tools/
文档:https://docs.fastlane.tools/
Github:https://github.com/fastlane/fastlane

前言

项目上线之际总需要打包测试,每次使用Xcode - Archive等待好几分钟的Buliding,然后Export,通过Application Loader上传到 AppStore,或者分发到蒲公英,Fir等发布平台。一系列操作是耗时且没有技术含量的工作,所以自动化打包ipa,很有必要掌握。点击前往Github下载Demo

工具

脚本工具有很多,这里使用的是 FastLaneGithub里面24+K的Star和3.7K的Fork,说明大量的开发者信任并一起维护使用。

安装

使用 FastLane需要以下内容:

  • OS X10.9及以上版本
  • Ruby2.0及以上版本
  • Xcode命令行工具(CLT)
  • 付费Apple开发者帐户

FastLaneRuby脚本的集合,首先需要正确版本的Ruby,从OS X10.9及以后默认Ruby2.0
我们可以通过命令确认,打开终端输入如下命令:

ruby -v

检测是否安装了 Xcode CLT 打开终端输入如下命令:

xcode-select --install

如果已经安装了Xcode CLT ,则会收到

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

如果未安装,它将为您安装Xcode CLT
完成先决条件后,您就可以安装FastLane了。 输入以下命令:

sudo gem install -n /usr/local/bin fastlane --verbose

正常情况,输入系统密码之后,终端窗口会有一系列活动,表明安装正在进行中,需要等待几分钟。
备注:这里如果报错,参考文章最下面 踩坑一

配置FastLane

1、fastlane init

新建一个项目工程,名字暂定 fastlaneTest,cd 到项目根目录执行

fastlane init

这里会弹出四个选项,问你想要用Fastlane做什么? 这里我选的是3

1. 📸  Automate screenshots
2. 👩‍✈️  Automate beta distribution to TestFlight (自动testfilght型配置)
3. 🚀  Automate App Store distribution (自动发布型配置)
4. 🛠  Manual setup - manually setup your project to automate your (需要手动配置内容)

如果你的工程是用cocoapods的那么可能会提示让你勾选工程的Scheme;
步骤就是打开你的xcode,
点击Manage Schemes,
找到你的项目Scheme,在后面的多选框中进行勾选,
然后可以手动删除 fastlane文件夹,重新fastlane init一下。

2、登录Apple ID

[11:10:04]: ----------------------------------------------------------
[11:10:04]: --- Setting up fastlane for iOS App Store distribution ---
[11:10:04]: ----------------------------------------------------------
[11:10:04]: Parsing your local Xcode project to find the available schemes and the app identifier
[11:10:05]: $ xcodebuild -showBuildSettings -scheme fastlaneTest -project fastlaneTest.xcodeproj
[11:10:06]: $ cd /Users/hans3d/Desktop/fastlaneTest && agvtool what-version -terse
[11:10:07]: --------------------------------
[11:10:07]: --- Login with your Apple ID ---
[11:10:07]: --------------------------------
[11:10:07]: To use App Store Connect and Apple Developer Portal features as part of fastlane,
[11:10:07]: we will ask you for your Apple ID username and password
[11:10:07]: This is necessary for certain fastlane features, for example:
[11:10:07]: 
[11:10:07]: - Create and manage your provisioning profiles on the Developer Portal
[11:10:07]: - Upload and manage TestFlight and App Store builds on App Store Connect
[11:10:07]: - Manage your App Store Connect app metadata and screenshots
[11:10:07]: 
[11:10:07]: Your Apple ID credentials will only be stored in your Keychain, on your local machine
[11:10:07]: For more information, check out
[11:10:07]:     https://github.com/fastlane/fastlane/tree/master/credentials_manager
[11:10:07]: 
[11:10:07]: Please enter your Apple ID developer credentials
[11:10:07]: Apple ID Username:

输入Apple Developer的账号和密码,因为2019.03苹果开启二级认证,需要手机登录开发者账号,进行允许权限。
登陆成功如下:

[11:41:06]: ✅  Logging in with your Apple ID was successful
[11:41:06]: Checking if the app 'com.cz.****.fastlaneTest' exists in your Apple Developer Portal...
[11:41:07]: It looks like the app 'com.cz.****.fastlaneTest' isn't available on the Apple Developer Portal
[11:41:07]: for the team ID '9A77SS**JG' on Apple ID '****@163.com '
[11:41:07]: Do you want fastlane to create the App ID for you on the Apple Developer Portal? (y/n)

选择 y

+----------------+--------------------------+
|        Summary for produce 2.118.1        |
+----------------+--------------------------+
| username       | ****@163.com           |
| team_id        | 9A77SS**JG               |
| itc_team_id    | 118370***                |
| platform       | ios                      |
| app_identifier | com.cz.****.fastlaneTest |
| skip_itc       | true                     |
| sku            | 1552967***               |
| language       | English                  |
| skip_devcenter | false                    |
+----------------+--------------------------+

然后会提示输入App Name:

[11:43:46]: App Name: fastlane_wnkp_demo

然后根据操作点击回车即可!此时目录结构大概如下所示:

Appfile,用于存储应用程序标识符和Apple ID。
Fastfile,用于管理您创建的用于调用某些操作的通道。最主要的文件,在这个文件中可以编写我们需要使用的各个工具的顺序、方式等。

3、配置脚本

通过Xcode打开Fastfile文件如下

default_platform(:ios)

platform :ios do
  desc "Push a new release build to the App Store"
  lane :release do
    build_app(scheme: "fastlaneTest")
    upload_to_app_store(skip_metadata: true, skip_screenshots: true)
  end
end

编写内容代码如下:

default_platform(:ios)

platform :ios do

    desc "fastlane 打包上传到蒲公英发布网站"
    lane :fsv_pgyer do

    gym(
        clean:true,                      # Clean项目
        scheme:"fastlaneTest",           # 项目名称
        export_method:"ad-hoc",          # 打包的类型
        configuration:"Release",         # 模式,默认Release,还有Debug
        output_directory:"./build",      # 输出的位置
    )
end
end

一个lane就是一个任务,fsv_pgyer 名字可以自己改。
gym是fastlane提供的打包工具,括号里面就是你自己配置的一些东西。gym科普

4、执行命令、本地打包

最后就是打开终端,在你的工程目录下,运行fastlane fsv_pgyer就行了。

fastlane fsv_pgyer 

编译成功:

[15:49:55]: Successfully exported and compressed dSYM file
[15:49:55]: Successfully exported and signed the ipa file:
[15:49:55]: /Users/hans3d/Desktop/fastlaneTest/build/fastlaneTest.ipa

+------+------------------+-------------+
|           fastlane summary            |
+------+------------------+-------------+
| Step | Action           | Time (in s) |
+------+------------------+-------------+
| 1    | default_platform | 0           |
| 2    | gym              | 12          |
+------+------------------+-------------+

[15:49:55]: fastlane.tools finished successfully 🎉

打开项目目录,会发现有一个bulid文件夹,打开即是我们的ipa包


5、上传到蒲公英或者fir配置

1、cd到项目下,安装pgyer插件执行命令 、

 fastlane add_plugin pgyer

执行结果:

[15:55:52]: Plugin 'fastlane-plugin-pgyer' was added to './fastlane/Pluginfile'
[15:55:52]: It looks like fastlane plugins are not yet set up for this project.
[15:55:52]: fastlane will modify your existing Gemfile at path '/Users/hans3d/Desktop/fastlaneTest/Gemfile'
[15:55:52]: This change is necessary for fastlane plugins to work
[15:55:52]: Should fastlane modify the Gemfile at path '/Users/hans3d/Desktop/fastlaneTest/Gemfile' for you? (y/n)
y
[15:55:59]: Successfully modified '/Users/hans3d/Desktop/fastlaneTest/Gemfile'
[15:55:59]: Make sure to commit your Gemfile, Gemfile.lock and Pluginfile to version control
Installing plugin dependencies...
Successfully installed plugins

2、重新编写项目目录下的Fastfile文件,如下:

default_platform(:ios)

platform :ios do

    desc "fastlane 打包上传到蒲公英发布网站"
    lane :fsv_pgyer do

    gym(
        clean:true,                      # Clean项目
        scheme:"fastlaneTest",           # 项目名称
        export_method:"ad-hoc",          # 打包的类型
        configuration:"Release",         # 模式,默认Release,还有Debug
        output_directory:"./build",      # 输出的位置
    )

    time      = Time.new.strftime("%Y%m%d")
    version   = get_version_number
    api_key   = "06e5563d5a8b94aac1c297426d351df6"
    user_key  = "974d1feb99ad49c955ed82a16ae2c21a"
    usipaName = "Release_#{version}_#{time}.ipa"

    pgyer(api_key: "#{api_key}", user_key: "#{user_key}")

end
end

pgyer中的api_keyuser_key为蒲公英的应用->API中查看,如下图:
蒲公英配置 蒲公英文档

2、cd到项目根目录下,执行命令:

fastlane fsv_pgyer 

输出结果:

[16:03:23]: Upload success. Visit this URL to see: https://www.pgyer.com/jnfC

+------+--------------------+-------------+
|            fastlane summary             |
+------+--------------------+-------------+
| Step | Action             | Time (in s) |
+------+--------------------+-------------+
| 1    | default_platform   | 0           |
| 2    | gym                | 12          |
| 3    | get_version_number | 0           |
| 4    | pgyer              | 1           |
+------+--------------------+-------------+
[16:03:23]: fastlane.tools finished successfully 🎉

打包上传成功,收到短信:



踩坑一

执行命令sudo gem install -n /usr/local/bin fastlane --verbose之后如下提示:

Could not find a valid gem 'fastlane' (>= 0), here is why:
          Unable to download data from https://ruby.taobao.org - SSL_connect returned=1 errno=0 state=error: certificate verify failed (https://ruby.taobao.org/specs.4.8.gz)

错误原因:
查看gem

gem sources

输出结果:

*** CURRENT SOURCES ***
https://ruby.taobao.org
所以需要更换源

删除之前的源

gem sources --remove https://ruby.taobao.org

增加新的源

gem sources -a https://gems.ruby-china.com

查看源:

*** CURRENT SOURCES ***
https://gems.ruby-china.com
然后再执行:
sudo gem install -n /usr/local/bin fastlane --verbose

即可正常下载、问题解决!!!

踩坑二

打包失败还有需要开发者账号配置:


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,874评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,151评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,270评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,137评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,116评论 5 370
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,935评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,261评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,895评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,342评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,854评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,978评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,609评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,181评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,182评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,402评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,376评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,677评论 2 344