当前位置: 首页 > news >正文

iOS持续集成(一)——fastlane 使用

开篇

回想一下我们发布应用,要进行多少步操作。一旦其中一步失误了,又得重新来。这完完全全不是我们工程师的风格。在软件工程里面,我们一直都推崇把重复、流程化的工作交给程序完成,像这种浪费人生的工作,实在是不应该浪费我们的人生。这次的文章主角就是为了解放我们而来—— fastlane。这个明星库在 github 已经高达 1w 多的start量。

Fastlane

fastlane 是 iOS (还有 Android ) 布署和发布最好的一套工具。它处理了所有重复的工作,例如生成截图,处理签名和发布应用。

安装

fastlane实际是由Ruby写的,使用Ruby的Gem安装是我们的不二选择

sudo gem install fastlane -NV
复制代码

接着在终端进入项目里面(目前fastlane swift 正在测试,就以之前的版本讲解)

fastlane  init
复制代码

按照提示初始化完成之后,在项目下面生成 fastlane 文件夹

基本介绍

先普及两个重要的文件,初始化后在./fastlane文件件即可找到

Appfile

存放着 AppleID 或者 BundleID 等一些fastlane需要用到的信息。基本上我们不需要改动这个文件的内容。 它放到你项目下面的 ./fastlane文件夹下面,默认生成的文件如下:

app_identifier "net.sunapps.1" # The bundle identifier of your app
apple_id "felix@krausefx.com"  # Your Apple email address

# 如果账号里面有多个team,可以指定所有的team
# team_name "Felix Krause"
# team_id "Q2CBPJ58CA"

# 指定 App Store Connect 使用的team
# itc_team_name "Company Name"
# itc_team_id "18742801"
复制代码

更多详细的配置,可以参考一下文档 Appfile Doc

FastFile

一开始生成的Fastlane文件大概如下:

platform :ios do
  before_all do
    
  end

  desc "Runs all the tests"
  lane :test do
    scan
  end

  # You can define as many lanes as you want

  after_all do |lane|

  end

  error do |lane, exception|
    # slack(
    #   message: "Error message"
    # )
  end
end
复制代码

Fastfile里面包含的块类型有四种:

  • before_all 用于执行任务之前的操作,比如使用cocopods更新pod库
  • after_all 用于执行任务之后的操作,比如发送邮件,通知之前的
  • error 用于发生错误的操作
  • lane 定义用户的主要任务流程。例如打包ipa,执行测试等等

如下面,来讲解一下lane的组成。

  desc "Push a new beta build to TestFlight"   //该任务的描述
  lane :beta do  //定义名字为 beta 的任务
    build_app(workspace: "expample.xcworkspace", scheme: "example") //构建App,又叫gym
    upload_to_testflight //上传到testfilght,
  end

复制代码

该任务的作用就是构建应用并上传到 TestFilght。下面有两个 Action

  • build_app 生成 ipa 文件
  • upload_to_testflight 把 ipa 文件上传到 TestFilght

在控制台进入项目所在的文件夹下面,执行下面命令

fastlane beta
复制代码

即可执行任务,按照上面的任务,会生成 ipa 并上传到 TestFilght。其实很简单,定义好任务,控制台执行任务即可。

实践

那么如何写一个我们属于自己的 lane 呢? 就以发布 ipa 到 fir 为例

  desc "发布到Fir"
  lane :pulish_to_fir do
    # 运行 pod install 
    cocoapods 
    # 构建和打包ipa
    gym(
      clean: true,
      output_directory: './firim',
      scheme: 'xxxx',
      configuration: 'Test',
      export_options: {
        method: 'development',
        provisioningProfiles: {
            "xxx.xxx.xxx": "match Development xxx.xxx.xxx"
        },
      }
    )
    # 上传ipa到fir.im服务器,在fir.im获取firim_api_token
    firim(firim_api_token: "fir_token")
  end
复制代码

下面解释一下上面的内容

cocoapods
复制代码

在项目里执行 pod install,详细例子可见 Doc

sh "./update_version.sh"
复制代码

这是由作者本地写的更新版本号的脚本

gym (又名build_app)
复制代码

gym 是fastlane的里面一部分,它可以方便生成和签名ipa,能为开发者省下不少功夫。

Doc

firim
复制代码

firim 是一个插件,执行 fastlane add_plugin firim 即可把插件装好

总结

fastlane里面内置很多常用的Action,具体的使用方法建议多看一下官方文档。

fastlane项目里面也有很多其他公司的 例子,在不清楚怎么使用的时候,看看这些例子也未尝不是一种方法。

相关文章:

  • Python tips(
  • C#窗体越界时鼠标还能回到初始坐标位置
  • SQLServer 2014 本地机房HA+灾备机房DR解决方案
  • Java编程笔试面试题:分析下列程序的执行结果
  • 机器学习常见的优化算法
  • SQL 内连接,外连接(左外连接、右外连接)
  • 进程和任务计划
  • 文件、目录管理
  • centos7安装配置mysql5.6
  • 类的成员和嵌套(建模)
  • vue-组件基础
  • 办公用品管理系统VB——库存数量导出EXCEL,SaveEXCEL
  • 字节、字、bit、byte的关系
  • Timer 控件中的Elapsed事件与tick事件的区别
  • @ConfigurationProperties注解对数据的自动封装
  • SegmentFault for Android 3.0 发布
  • 3.7、@ResponseBody 和 @RestController
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • CSS 提示工具(Tooltip)
  • ECMAScript6(0):ES6简明参考手册
  • es6--symbol
  • golang中接口赋值与方法集
  • JS笔记四:作用域、变量(函数)提升
  • KMP算法及优化
  • mysql 5.6 原生Online DDL解析
  • Redux 中间件分析
  • spring学习第二天
  • Terraform入门 - 1. 安装Terraform
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • Zepto.js源码学习之二
  • 从零开始学习部署
  • 简单数学运算程序(不定期更新)
  • 今年的LC3大会没了?
  • 浅谈web中前端模板引擎的使用
  • 使用docker-compose进行多节点部署
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 微服务核心架构梳理
  • 移动互联网+智能运营体系搭建=你家有金矿啊!
  • RDS-Mysql 物理备份恢复到本地数据库上
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • 如何在招聘中考核.NET架构师
  • 正则表达式-基础知识Review
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • $forceUpdate()函数
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)
  • (java)关于Thread的挂起和恢复
  • (JS基础)String 类型
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (九)One-Wire总线-DS18B20
  • (四)c52学习之旅-流水LED灯
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m