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

感谢

  • fastlane 官方文档
  • Fastlane实现自动打包并上次至蒲公英
  • iOS fastlane打包上传蒲公英
  • iOS使用fastlane实现持续集成

你可能感兴趣的:(iOS(Swift) fastlane集成,分发蒲公英,fir(一))