2022-03-11 11:48:21更新: iOS(Swift) fastlane集成,发送 testflight(二)
又是复习阶段,fastlane 用了这么久,也没有做过总结,这里做一个简单化的入门简介(主要是我自己用的也是十分的简单).
安装
先看看自己有没有装过 fastlane
gem 查看自己所安装的版本
gem list --local
如果没有安装就先安装 fastlane
fastlane 有三种安装方式,brew,gem,软件安装,这个没啥好纠结的,选一个安装即可
我这里使用的是 gem 安装
sudo gem install fastlane -NV
安装过程略,安装结束后开始后续步骤
初始化
进入项目目录,执行fastlane init
这里可能会让你选择1234选择 APPStore,testflight等等,主要是帮你生成相应的脚本代码,不过 Fastfile 文件脚本基本是自己手动编写的,随便选一个都行,中间过程会有一堆的选项,翻译一下就知道选什么.
环境变量 env
我目前知道的用法,就是在单次fasttlane 脚本执行过程中,env 支持跨环境跨文件存取变量,不过ENV并不保存到本地,所以下次进来的时候参数都是为空的.
platform :ios do
lane :a do
a = "打印a: ccc"
ENV['aa'] = "asdsaadsadsads"
end
after_all do |lane|
puts ENV['aa']
puts a
end
需要用哪个就用那个
build_app
- 在最后代码展示中会展示我用到的参数信息
钉钉通知
在 fastlane 文件夹下新建一个文件
调用方式
sh("ruby ./dingSuccess.rb")
git 上有大神开发完成了钉钉ruby 脚本库, 戳这
不过我 ruby 不是很懂,只能靠半猜半抄测试 API,不过我需要的功能也不多,测试出来的 API 已经足够
钉钉机器人操作也十分简单,不需要去开放平台操作
安全设置是必须的,可以选择自定义关键词或者加签.
- endpoint: 发送 url,机器人那块复制过来
- access_token: 机器人 url 的参数部分
-
secret: 加签的签名,机器人设置那块儿复制过来
如果采用关键字方式我目前只知道这种方式发送,建议是走签名
测试结果
蒲公英插件
安装蒲公英
fastlane add_plugin pgyer
查看蒲公英插件可用命令
fastlane action pgyer
(查看某个action 的可参数列表,可以用 fastlane action xxxx)
api_key和user_key必传,获取路径
上传示例
pgyer(
api_key: api_key,
user_key: user_key,
update_description: "#{descStr}"
)
上传过程有可能出现报错
Your real-name authentication information has not been face authentication yet, please authenticate now
解决: 在蒲公英个人设置处做实名认证即可
上传成功示例:
-
优点:
集成简单,支持 webhook
- 缺点:
蒲公英公司体系太大,为了合规啊啥的,检测特别严格,很容易封账号,所以为了安全稳定,建议 fir
Fir
安装
市面上有两个插件 fastlane-plugin-fir_cli, firim
fir_cli 好像是官方维护的插件,而firim是一个热心的网友维护的,都能够使用,不过要注意的是
特别感谢作者 whlsxl 对 firim 插件的辛勤开发,这个插件代码优秀的质量可靠,是我学习的本
因为 2020 年 02 月 .im 域名不再支持备案,所以导致fir.im 无法继续的地址 r.im 导致 whlsxl 的 firim 插件需要修改api,whlsxl 提供的解决方案是目前配置总的firim_api_url改为http://api.jappstore.com/或http://api.bq04.com 均可用
,具体可参见他的项目的自述文件或https://github.com/whlsxl/firim/issues/26
我这里使用的是fir_cli.
fastlane add_plugin fir_cli
参看 fir_cli 可用参数
+-----------------+-----------------+-----------------+---------+
| fir_cli Options |
+-----------------+-----------------+-----------------+---------+
| Key | Description | Env Var(s) | Default |
+-----------------+-----------------+-----------------+---------+
| api_token | A description | FIR_CLI_API_TO | |
| | of your option | KEN | |
| specify_file_p | FILE APP PATH | FIR_SPECIFY_FI | |
| ath | | LE_PATH | |
| short | fir short | FIR_APP_SHORT | |
| force_pin_hist | pin this | FIR_APP_FORCE_ | false |
| ory | release to | PIN_HISTORY | |
| | download page | | |
| skip_update_ic | skip upload | FIR_APP_SKIP_U | false |
| on | icon | PDATE_ICON | |
| specify_icon_f | APP ICON FILE | FIR_SPECIFY_IC | |
| ile | PATH | ON_FILE_PATH | |
| changelog | changelog path | FIR_APP_CHANGE | |
| | or content | LOG | |
| open | true/false if | FIR_APP_OPEN | true |
| | open for | | |
| | everyone | | |
| password | Set password | FIR_APP_PASSWO | |
| | for app | RD | |
| switch_to_qini | switch to | FIR_SWITCH_TO_ | false |
| u | qiniu upload | QINIU | |
| need_release_i | would build | FIR_NEED_RELEA | false |
| d | download url | SE_ID | |
| | with release | | |
| | id | | |
| dingtalk_acces | dingtalk_acces | FIR_DINGTALK_A | |
| s_token | s_token | CCESS_TOKEN | |
| dingtalk_custo | dingtalk | FIR_DINGTALK_C | |
| m_message | custom message | USTOM_MESSAGE | |
| dingtalk_at_ph | dingtalk at | FIR_DINGTALK_A | |
| ones | phones, split | T_PHONES | |
| | with ',' | | |
| dingtalk_at_al | dingtalk at | FIR_DINGTALK_A | |
| l | all people | T_ALL | |
| dingtalk_secre | Dingtalk | FIR_DINGTALK_S | |
| t | secret code | ECRET | |
| | (eg: SECxxxxx) | | |
| feishu_access_ | feishu_access_ | FIR_FEISHU_ACC | |
| token | token | ESS_TOKEN | |
| feishu_custom_ | feishu custom | FIR_FEISHU_CUS | |
| message | message | TOM_MESSAGE | |
| wxwork_access_ | wechat work | FIR_WXWORK_ACC | |
| token | webhook | ESS_TOKEN | |
| | access_token | | |
| wxwork_pic_url | wechat work | FIR_WXWORK_PIC | |
| | webhook pic | _URL | |
| | url | | |
| wxwork_custom_ | wechat work | FIR_WXWORK_CUS | |
| message | custom message | TOM_MESSAGE | |
+-----------------+-----------------+-----------------+---------+
可以发现,fir_cli是支持 dingding 和微信的消息通知的,具体详情可以自己去理解一下,但是,我们自己仍然是需要集成钉钉通知的,我司目前的场景是,发布成功后,发送钉钉消息给发包群,发布失败后发送消息给我们自己的开发群,测试人员只关心发布成功的包,而我们开发自己则需要知道的是发布失败的提醒.
配置
官网域名
上传测试
之前已经打过 ipa 包,所以这里直接加了个specify_file_path
参数,上传之前的文件.
集成遇到的问题
账号需进行实名认证,实名有些麻烦 需要上传手持身份证审核不得不说,蒲公英确实有钱些,它做的实名是扫微信二维码做人脸实名,fir 则需要上传拍照,人工审核.
蒲公英的上传逻辑代码
default_platform(:ios)
platform :ios do
desc "发布到蒲公英"
lane :pgr do
# fir_cli(
# api_token: "c8e3*********************e782f7",
# specify_file_path: "fastlane/build/test/quick_202203081745.ipa",
# changelog: "测试 fir",
# )
# sh("ruby ./dingSuccess.rb")
# dingtalk_robot(
# title: "test",
# markdown: "测试测试",
# access_token: "https://oapi.dingtalk.com/robot/send?access_token=d4d823d55b0*********************b54ad63f51"
# )
descStr = ARGV[2] || "暂无说明 (默认为日常更新 / BUG 修复)"
puts descStr
# —————————————————————根据实际项目对应修改—————————————————————————
scheme = "quick"#你的工程名
bundleID = "tandou.quick"#项目的bundleid
#app名称
appName = "quick"#应用名称
#蒲公英获取key,可在蒲公英上点击头像,选择API信息获取
api_key = "70cfb7*********************d0649e188"
user_key = "c4a41*********************37bd7741"
#蒲公英下载地址
downloadURL = "https://www.pgyer.com/eikP*********************"
#—————————————————————————————————————————————————————————————
#输入蒲公英上传ipa包后输入的版本描述信息,会在更新内容里面显示
#构建打包 也叫gym
build_app(
clean: false, #打包前clean
scheme: scheme,
workspace: "#{scheme}.xcworkspace",
export_method: "development", # app-store, ad-hoc, package, enterprise, development, developer-id
include_bitcode: false,
configuration: "Test",#打包方式1:Debug 2:Test 3:PreRelease 4:Release"
output_directory: "fastlane/build/test/", #导出路径 文件夹没有的话会自动新建一个
silent: false, #在构建时隐藏终端不必要输出的信息
output_name: "#{scheme}_#{Time.now.strftime('%Y%m%d%H%M')}.ipa"#命名ipa名称
)
puts "*************| 上传蒲公英 |*************"
pgyer(,
api_key: api_key,
user_key: user_key,
update_description: "#{descStr}"
)
puts "*************| 上传蒲公英成功 |*************"
end
after_all do |lane|
# 上传逻辑如果放这,参数作用域改变,就需要使用环境变量
puts "*************| 打包上传结束 |*************"
end
error do |lane, exception|
puts "操作失败了 #{desc}"
end
end
本篇只是fastlane 开篇,我目前的项目中也仅仅是用来做测试包的上传.虽然说这已经使我的打包测试非常方便了,但实际上 fastlane 最强大的地方,还是在于结合 jekins,gitlab ci/cd做自动化集成,以及做 tf 包和 Appstore 的自动化集成,我司以前有大牛搭过 jekins,做了自动化的打包,不过当时公司只给了一台古董级别的 mac mini ,打包速度极其慢,所以后来改成了 fastlane,做手动化打包,至于,tf 包和上架,我司比较慎重,都是手动进行的,不过,后面有时间的话,我会再调试一期,做 tf 包的自动化上传.
感谢
- fastlane 官方文档
- Fastlane实现自动打包并上次至蒲公英
- iOS fastlane打包上传蒲公英
- iOS使用fastlane实现持续集成