iOS(Swift) fastlane集成,分发蒲公英,fir(一)

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 包的自动化上传.

感谢

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

推荐阅读更多精彩内容