移动开发之Fastlane自动化

【iOS】Fastlane一键打包上传到TestFlight、蒲公英 废话不多说,能知道fastlane的,代表您已经对fastlane的用处有了初步了解,并且想使用在自己项目中,本文只适用于iOS项目的fastlane配置(Android端未验证),直接开始配置。 阅读详情

fastlane_text

  • 原文博客地址: 移动开发之Fastlane自动化
  • 在组件化开发过程中, 提交一个私有库需要执行很多操作和命令, 详情可参考iOS组件化之私有库
  • 然而开发和更新私有库的大量操作却都是重复性的: 修改spec文件, 提交到远程仓库, 打标签等
  • 所以有没有什么办法可以自动执行, 实现自动化管理呢?
  • 何为自动化: 自动化就是通过一条简单的命令, 去执行一组固定的操作
    • 自动创建和维护iOS代码签名证书
    • 自动创建和打包iOS的APP
    • 上传屏幕截图、元数据和App到APP商店审核
    • …….

Fastlane介绍

简介

  • 用于配置iOS和Android的持续集成的神器
  • Fastlane是一套工具,帮助你简化和自动化 App 发布或部署的过程,将之变成一条平直的工作流
  • Fastlane是用Ruby语言编写的一套自动化工具集和框架,每一个工具实际都对应一个Ruby脚本,用来执行某一个特定的任务
  • Fastlane核心框架则允许使用者通过类似配置文件的形式,将不同的工具有机而灵活的结合在一起,从而形成一个个完整的自动化流程
  • Fastlane是一个ruby脚本集合,它可以按照我们指定的路线,在指定位置执行我们所要执行的操作。这里我们称这样的路线为「航道(lane)」,这样的操作称为Action
  • 到目前为止,Fastlane的工具集大约包含170多个小工具,基本上涵盖了打包,签名,测试,部署,发布,库管理等等移动开发中涉及到的内容, 工具的描述和使用可参考: Action官方文档和Github源码
  • 如果这些工具仍然没有符合你需求的,没有关系,得益于Fastlane本身强大的Action和Plugin机制,如果你恰好懂一些Ruby开发的话,可以很轻易的编写出自己想要的工具

安装

  1. 确保ruby为最新版本
brew update
brew install ruby
  1. 安装fastlane
sudo gem install -n /usr/local/bin fastlane
  1. fastlane相关操作命令
// 查看当前fastlane版本
fastlane --version

// 查看所有action
fastlane actions

// fastlane初始化
fastlane init
  1. 如果出现类似的错误, 则可能是ruby源问题, 可更换ruby源后重新安装
ERROR:  Could not find a valid gem 'fastlane' (>= 0), here is why:
          Unable to download data from https://gems.ruby-china.org/ - bad response Not Found 404 (https://gems.ruby-china.org/specs.4.8.gz)

更换`ruby`源

// 官方https://gems.ruby-china.com/把org改成了com, 使用时注意替换
// 查看gem源
gem sources

// 删除默认的gem源
gem sources --remove https://gems.ruby-china.org/

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

// 查看当前的gem源
gem sources

// 清空源缓存
gem sources -c

// 更新源缓存
gem sources -u

fastlane提交私有库

初始化fastlane

cd 到当前目录, 执行fastlane init命令

但是对于提交私有库来说这个过程会创建一些无用的文件, 包括双穿需要的appleID等, 有雨我们不涉及这些, 所以我们还可以直接创建所需文件

cd 根目录

// 创建一个fastlane文件夹
mkdir fastlane

// 进入fastlane目录
cd xxx/xxx/fastlane

// 创建一个Fastfile文件
touch Fastfile

接下来就是编写Fastfile文件内容

配置Fastfile`文件

语法解析

fastlane init创建好文件后, 打开Fastfile文件, 默认内容如下

default_platform(:ios)

platform :ios do
  desc "Description of what the lane does"
  lane :custom_lane do
    # add actions here: https://docs.fastlane.tools/actions
  end
end
  • platform: 使用的平台
  • desc: 描述航道的作用
  • lane: 命名航道名称和相关Action
    • custom_lane: 即为航道名称, 可自定义
    • 如需外界传递参数, 可在do后面添加|options|
  • 接受外界传递参数, 在添加options后, 可定义如下参数
tagName = options[:tag]

外部使用命令是, 即可通过xxx tag: 0.0.1进行传值

`Fastfile`文件

  • Fastfile文件的作用就是把正常使用的命令转成fastlane的语法, 并在该文件中执行, 可在官方文档中查找对应的语法
  • 以==提交私有库到远程==为例, 就是把所有相关命令, 找到对应的fastlane命令写在Fastfile文件中执行
Fastfile文件配置

提交私有库时, 需要执行的命令如下

// 将本地库更像到测试项目
pod install

// 将本地代码加入本地仓库里
git add .

// 提交修改到本地仓库
git commit -m '你的修改记录'

// 添加名称为origin的远程连接
git remote add origin '你的github项目地址'

// 在push之前, 查看spec是否配置有问题
// 验证本地spec文件是否有误
pod lib lint

// 推送master分支的代码到名称为origin的远程仓库
git push origin master

// 设置tag值
git tag "0.0.1"  

// 上传提交tag
git push --tags
  • 打开官方文档搜索
  • 例如: 搜索pod install, 对应的即为cocoapods, 如下

fastlanepod

Fastfile文件配置内容如下, 可做响应的参考

default_platform(:ios)

platform :ios do
  desc "用于对私有库的升级维护和提交"
  lane :DownloadLane do |options|

    # 0. 需要外界传入的参数
    tagName = options[:tag]
    targetName = options[:target]


    # 1. 将本地库更像到测试项目
    # pod install
    cocoapods(
        clean: true,
        # 该目录为执行Podfile未见的相对路径
        podfile: "./Example/Podfile"
    )

    # 2. 将本地代码加入本地仓库里
    # git add .
    # path为需要提交的文件的路径, 这里是所有文件
    git_add(path: ".")

    # 3. 提交修改到本地仓库
    # git commit -m '你的修改记录'
    # message: 提交信息
    git_commit(path: ".", message: "这里是提交信息")

    # 4. 在push之前, 查看spec是否配置有问题
    #  验证本地spec文件是否有误
    # pod lib lint
    # allow_warnings: 允许警告的存在
    pod_lib_lint(allow_warnings: true)

    # 5. 推送master分支的代码到名称为origin的远程仓库
    # git push origin master
    push_to_git_remote  # 更多的信息可查看官网

    # 6. 判断标签是否存在, 重复添加标签会报错
    # if-else-end和if-end判断语句
    if git_tag_exists(tag: tagName)
        # UI.message: 打印信息
        UI.message("发现tag:#{tagName} 该标签已经存在")
    end

    # 7. 设置tag值
    # git tag "0.0.1"  
    add_git_tag(
        tag: tagName
    )

    # 8. 上传提交tag
    # git push --tags
    push_git_tags

    # 9. 更新索引库
    # pod repo push XXXX xxx.podspec
    pod_push(path: "#{targetName}.podspec", repo: "TitanjunSpec", allow_warnings: true)

  end
end
  • Fastfile文件编写完成, 需要检测文件语法是否有误, cd 进入根目录, 执行fastlane lanes
  • 如果没问题, 执行命令fastlane 航道名称 参数1:值1 参数2:值2
  • 示例: fastlane DownloadLane tag:0.1.0 target:TKDownLoad
  • 正常情况下, 私有库已经被提交到远程仓库了, 并更新了对应的索引库

自定义Action

  • 有的时候官方提供的所有的Action并不能满足我们的需求, 不过fastlane具有很好的扩展性, 支持自定义Action
  • 找了半天才发现一个删除远程私有库标签的命令, 官方文档中没有提供
  • 这里我们就自定义一个删除远程私有库标签的Action

创建ruby文件

  • 首先打开终端, cd 进入fastlane文件夹所在的上级目录
  • 执行fastlane new_action命令, 创建新的Action, 过程中会让你输入你自定义的Action名字
  • 注意命令规范, 单词之间可用下划线连接

fastlaneaction

之后fastlane文件内会多一个actions的文件件, 内有delete_tag.rb文件, 如下

actionsName

  • 最后就是编辑该rb文件, 当然可能需要懂一些ruby语言的语法, 如果不懂也没关系, 到Github源码找一个类似功能的rb文件, 照葫芦画瓢吧!

下面把我自定义的actions的相关代码贴出来

module Fastlane
  module Actions
    module SharedValues
      DELETE_TAG_CUSTOM_VALUE = :DELETE_TAG_CUSTOM_VALUE
    end

    class DeleteTagAction < Action
      def self.run(params)
        # 运行该action最终需要执行的代码, 在这里写
        tagName = params[:tag]
        isRemoveLocalTag = params[:rL]
        isRemoveRemoteTag = params[:rR]

        # 1. 先定义一个数组, 用来存储所有需要执行的命令
        cmds = []

        # 2. 往数组里面, 添加相应的命令
        # 删除本地标签
        # git tag -d 标签名称
        if isRemoveLocalTag
          cmds << "git tag -d #{tagName} "
        end

        # 删除远程标签
        # git push origin :标签名称
        if isRemoveRemoteTag
          cmds << " git push origin :#{tagName}"
        end

        #3. 执行数组里面的所有命令
        result = Actions.sh(cmds.join('&'));
        return result

      end

      def self.description
        # 间断的说明该Action的作用是什么, 不超过80个字符
        "删除标签"
      end

      def self.details
        # 详细的描述当前的Action
        "使用该action, 可删除本地或远程标签"
      end

      def self.available_options
        # 该action需要的参数, 使用同构数组进行分割的, 可以根据每一个参数, 确定其作用
        [
          # key: 参数名称, description: 参数描述或作用, optional: 是否是可选, is_string: 是否是string类型, default_value: 默认值, verify_block: 验证的block
          FastlaneCore::ConfigItem.new(key: :tag,
                                             description: "需要被删除的标签名称",
                                             optional: false,
                                             is_string: true),
          FastlaneCore::ConfigItem.new(key: :rL,
                                       description: "是否需要删除本地标签",
                                       optional: true,
                                       is_string: false,
                                       default_value: true),
          FastlaneCore::ConfigItem.new(key: :rR,
                                       description: "是否需要删除远程标签",
                                       optional: true,
                                       is_string: false,
                                       default_value: true)
        ]
      end

      def self.output
        # 表示输出的内容
      end

      def self.return_value
        # 返回值
        nil
      end

      def self.authors
        # 作者
        ["CoderTitan"]
      end

      def self.is_supported?(platform)
        # 支持的平台
        platform == :ios
      end
    end
  end
end

最后需要验证rb文件是否格式正确, 终端输入fastlane action delete_tag

fastlaneTest

fastlane-plugin-android_keystore:生成一个Android密钥库文件 android_keystore插件 入门 该项目是插件。 要开始使用fastlane-plugin-android_keystore ,请通过运行以下命令将其添加到您的项目中: fastlane add_plugin android_keystore 关于android_keystore 生成一个Android密钥库文件。 密钥库将放置的默认目录是.android_signing但是可以在操作参数中更改此目录。 例子 查看以了解如何使用此插件。 通过克隆仓库,运行fastlane install_plugins和bundle exec fastlane test 。 带有环境变量 ANDROID_KEYSTORE_KEYSTORE_NAME = fastlanescreencast.keystore ANDROID_KEYSTORE_ALIAS_NAME = fastlanescree 立即下载

相关推荐

1014. 福尔摩斯的约会 (20)-PAT乙级真题

1014. 福尔摩斯的约会 (20) 大侦探福尔摩斯接到一张奇怪的字条:“我们约会吧!3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm”。大侦探很快就明白了,字条上奇怪的乱码实际上就是约会的时间“星期四 14:04”,因为前面两字符串中第1对相同的大写英文字母(大小写有区分)是第4个字母’D’,代表星期四;第2对相同的字符是’

柳婼 の blog 2644

自动化打包之fastlane--(1) 研究之必须提前了解的几点

1. rvm RVM 是一个命令行工具,可以提供一个便捷的多版本 Ruby 环境的管理和切换。 就是方便管理Ruby的 如何安装rvm //亲测,这个命令是很好用的,可以很快安装rvm curl -L https://get.rvm.io | bash -s stable zhouyudeMacBook-Pro:~ zhouyu$ curl -L https://get.rvm.io...

高级软件开发工程师--周玉的博客 5241

硬件开发实践:高速 PCB 差分信号与时钟同步优化

由两条互补信号线组成(正负极)接收端只关注两线之间电压差共模噪声对两线同时作用,可被抵消。

2501_93174775的博客 392

使用Fastlane编写Android自动打包脚本

Fastlane 是一款为 iOS 和 Android 开发者提供的自动化构建工具,它可以帮助开发者将 App 打包、签名、测试、发布、信息整理、提交 App Store 等工作完整的连接起来, 实现完全自动化的工作流。Fastlane本身没有一套特殊语法,使用的Ruby语言。Fastlane的插件工具叫做action,每一个action都对应一个具体的功能。

XBlithe的博客 3921

【数据分析生命周期全揭秘】从零开始打造你的数据科学项目 | 最全指南

在当今数据驱动的世界中,数据科学正在颠覆传统行业,成为企业决策和价值创造的重要引擎。然而,如何科学、系统地开展一个数据分析项目?这是很多人关心的核心问题。本篇文章基于经典数据分析课程内容,深入解读数据分析生命周期的每个阶段,让你快速掌握从“发现问题”到“落地应用”的完整流程。如果你正在学习或准备从事数据分析领域,这篇文章一定会对你大有帮助!数据分析生命周期的六大阶段数据分析生命周期的六个阶段相辅相成,每个阶段都至关重要:发现问题:明确需求,提出假设。数据准备:清洗、转换和可视化数据。

AI手套的博客 1739

ISCE+Mintpy进行SBASInSAR处理(持续更新)

通过调用pairs_misregistration方法,利用safe_dict中的数据信息,对每对SLC数据进行配准误差的计算和分析,以确定数据之间的精确差异,为后续的时间序列处理提供基础。给定同一地区的两景SAR影像,经过配准之后,对应像元进行共轭相乘得到相位差,并形成干涉图,但是从干涉图中得到的相位差实际上是主值,即在(-π,π)呈周期性变化,为了还原其真实的相位差,必须在主值的基础上加或减整数倍的相位周期2π,把被卷叠的相位展开,才能顺利地反演出地面目标的高程和形变。

Cyy2511250589的博客 3732

自动化打包之fastlane--(3) 安装fir插件图文教程

1. 安装插件 例如安装fir, 打开终端,cd到当前项目,运行下面代码 bundle exec fastlane add_plugin fir 会报CFPropertyList的版本冲突 2. CFPropertyList版本冲突处理 根据提示bundle update处理 提示需要输入密码 输入密码后有提示报错!!! rest-client (2.0.2)...

高级软件开发工程师--周玉的博客 8298

手把手教你用ET-BERT预训练模型搞定加密流量分类(附完整代码)

本文详细介绍了如何使用ET-BERT预训练模型实现加密流量分类,包括环境配置、数据预处理、模型微调及优化策略。通过实战代码示例,帮助开发者快速掌握这一技术,提升网络安全领域的加密流量分析能力。

weixin_29166013的博客 493

推荐开源项目:Fastlane - 简化 iOS 和 Android 应用部署的利器

推荐开源项目:Fastlane - 简化 iOS 和 Android 应用部署的利器 【免费下载链接】fastlane ???? The easiest way to automate building and releasing your iOS and Android apps ...

gitblog_00069的博客 594

STM32HAL库学习笔记九——LCD显示

本文不会对驱动编写做特别详细的描述,以记录CubeMX的部署流程为主。

weixin_44762233的博客 6918

【OpenClaw从入门到精通】第45篇:Skill供应链安全——如何识别并避开恶意技能插件?(2026实测版)

随着OpenClaw生态爆发式增长,全球Skills总量近75万个,日均新增2.1万个,但恶意/问题插件已超600个,数十万用户受影响。本文基于奇安信威胁报告及360安全实践,拆解恶意技能的五大核心特征,提出"安装前三步法"安全审查流程,详解安全技能来源白名单与定期审计方案,并深度解析360龙虾Skill安全超市的分级认证机制。读者可掌握从技能筛选、安装审查到术后审计的全流程安全防护手段,通过实操命令与案例演示,零成本构建Skill供应链安全防线,避免遭遇私钥窃取、资产损失等安全事件。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 561

Fastlane实战(一):移动开发自动化之道

Fastlane-移动开发自动化之道 本人一直认为:在程序的世界里,一切重复性的,流程化的工作都可以交给自动化去完成。 在移动开发中也是如此:其实写代码只是我们开发过程中的一部分,除此之外我们还需要进行编译,打包,上传,部署,库管理,版本控制等等Coding之外的杂事,而正是这些乏味而重复的工作占用了我们宝贵的时间。 所以在“懒人”遍布的工程师世界中,总会有人想尽办法做出改变,于

u011344883的专栏 3441

【RV1126/RV1109学习笔记】#基础篇#(2)基础入门使用

一、调试方式 1、串口调试 2、ADB调试 3、网络调试 二、基础外设使用 音频使用(aplay,arecord,amixer) 三、WIFI连接 四、屏幕背光控制

丨晋丨 1855

Fastlane - 移动开发自动化之道

Fastlane - 移动开发自动化之道 阅读 709 收藏 27 2016-09-26 原文链接:http://mp.weixin.qq.com/s?__biz=MzA3ODg4MDk0Ng==&mid=2651112713&idx=1&sn=dd049e7edf3402af887c1fc295f43b98&scene=0 本文为『移动前线』群在8月11日的

ff_wwb的专栏 912

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

fastlane二开java_Fastlane 2.114.0 发布,跨平台移动自动化开发流程工具

[deliver/frameit] frame latest iOS devices, skip uploading iPhone61 (#13774) via Dave Anderson[produce] allow to enable/disableaccess_wifiservice (#13552) via Taimur Ayaz[scan] use slack action to p...

weixin_33315608的博客 196

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Jenkins和Fastlane的原理、优缺点、用法、如何选择

Jenkins 和 Fastlane 是软件开发中用于自动化流程的工具Jenkins 本质上是一个基于 Java 的持续集成和持续交付(CI/CD)工具。它通过轮询代码仓库(如 Git、SVN 等),检测代码是否有更新。当发现有更新时,根据配置的构建任务,拉取最新代码到构建服务器,然后执行配置好的构建脚本,完成项目的编译、打包等操作。Jenkins 利用其插件生态系统,能够与各种版本控制系统、构建工具和通知系统集成,实现自动化的持续集成和交付流程。

idealPC的专栏 1176

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

为什么选择fastlane.ci?5大核心优势助你构建移动CI/CD流水线

fastlane.ci是一款开源、自托管且针对移动优化的CI工具,由fastlane强力驱动,专为移动应用开发团队打造高效的持续集成/持续部署(CI/CD)解决方案。无论是独立开发者还是大型团队,都能通过fastlane.ci轻松构建稳定可靠的移动应用发布流水线。 ## 1. 专为移动开发深度优化的自动化流程 📱 fastlane.ci深度整合了fastlane生态系统,提供从代码提交到应用

gitblog_00346的博客 381
上一篇: iOS组件化之私有库
下一篇: iOS的静态库和动态库
CodeTitan
博客等级 码龄9年 51粉丝 102原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值