iOS如何实现自动化打包
iOS如何实现自动化打包
前言
在我们的日常开发工作中,避免不了会出现这样的场景:需求迭代开发完成之后,需要提供ipa包给QA同学进行测试,一般会执行如下流程:1.执行Git Pull命令,拉最新的代码到本地 2.Pod Install安装最新的依赖库 3.在Xcode点击Archive编译并打包 4.选择输出一个iOS AdHoc模式的ipa文件 5.将ipa上传到Fir平台,生成二维码供测试同学安装。
即便整个过程很顺利,也需要消耗开发同学十到二十分钟的时间,但如果测试过程中发现有问题,那么需要修复完毕后重复上面的这几个步骤。对于开发同学来说,这种重复且没有技术含量的机械工作简直是噩梦啊!
正文
那么什么样的工具可以帮助开发同学解决这个问题呢?下面就介绍一下,目前市面上比较流行的自动化流程工具——Fastlane。Fastlane是用Ruby语言编写的一套自动化工具集和框架,每一个工具实际都对应一个Ruby脚本,用来执行某一个特定的任务,而Fastlane核心框架则允许使用者通过类似配置文件的形式,将不同的工具有机而灵活的结合在一起,从而形成一个个完整的自动化流程。到目前为止,Fastlane的工具集基本上涵盖了打包,签名,测试,部署,发布,库管理等等移动开发中涉及到的内容。同时该套件也支持与 Jenkins 、CocoaPods、xctools 等其他第三方工具的集成。
初步了解之后,让我们来看一下在如何项目里面应用fastlane。
第一步、安装及初始化:
1.安装 Xcode command line tools:
xcode-select—install
2.安装fastlane
sudogem install fastlane -NV
3.进入项目路径下,初始化fastlane(这部分可根据实际项目需要配置)
fastlane init复制代码
3.1.选择想使用fastlane做什么?
3.2.要求你输入Apple开发证书的App ID
3.3.是否管理APP的metadata
3.4.一路enter,直到初始化成功
3.5.初始化完成后的文件目录结构
第二步、知识准备:
1.文件介绍
Appfile:存储App信息,比如Apple ID,App Identifier,Team ID等信息。
Fastfile:自动化脚本配置文件,所有的任务都是在这个文件来调度的。
.env:全局的环境配置文件,文件里面我们可以配置一些全局的信息,其他文件可以通过类似ENV['Apple_Id']这种方式获取。
Deliverfile:上传AppStore包需要的配置文件,在这个文件里面可以设置App Store Connect的所有配置项。
metadata:存放APP元数据文件,包括关键词、版本更新日志、图标等。
screenshots:存放应用截图
2.常用的工具集(action)介绍
scan(run_tests):自动运行测试工具。
cert(get_certificates):自动创建iOS代码签名证书(.cert文件),如果存在则下载已存在的证书文件。
sigh(get_provisioning_profile): 下载provisioning profiles。
gym(build_ios_app): 编译、打包,生成签名的ipa文件 。
deliver(upload_to_app_store): 上传App到App Store Connect。
snapshot(capture_ios_screenshots): 截图。
。。。
更多的action介绍可以参考fastlane文档中的介绍:docs.fastlane.tools/actions/
3.lane介绍
当我们对Fastfile文件进行编写时,实际上就上通过在自定义的lane中添加合适的工具集action让fastlane按照我们的意愿去顺序执行任务,当然fastlane默认就有一些系统级lane。
系统级lane:
before_all,就是在执行一次脚本之前首先执行的代码,我们可以在这里面执行一些公共的东西,比如git_pull,cocoapods。
after_all, 成功结束之后,处理共有的后置逻辑。
before_each,每次执行 lane 之前都会执行一次。
after_each,每次执行 lane 之后都会执行一次。
error,在执行上述情况任意环境报错都会中止并执行一次。
第三步、代码示例:
有了上面的知识准备,我们就以上传ipa包到Fir为例,来看看fastlane自动化打包具体的代码是怎么实现的。
首先看一下.env文件:
然后是Appfile:
最后就是我们的FastFile:
当我们完成上面的操作以后,我们就可以在终端工具内通过fastlane upload_fir build:PublicDebug log:update_info一行代码来实现打包并上传ipa包到Fir平台了,是不是很酷!
当然你也可以在我们的项目目录中找到我们的ipa包、dsym文件、fastlane的打包日志文件等等。
结语
通过使用Fastlane实现自动化打包以后,开发同学终于可以跟繁琐的机械工作说拜拜了~
除了本文介绍的功能,fastlane还有更多的妙用等着大家去挖掘,比如自定义action,Plugin,又比如持续集成,等等。在此本文也仅是起一个抛砖引玉的作用,希望大家能共同探讨fastlane的更深层的用途。
最后声明,本文主要是为了用于阶段性学习记录,不会用于商业用途,如不慎存在侵权行为,请随时联系maojiadong921@gmail.com。
参考资料:
fastlane GitHub地址:github.com/fastlane/fa…
fastlane 文档说明地址:docs.fastlane.tools/
可参考:https://juejin.im/post/5bf2477a51882572ac7f1a26
iOS如何实现自动化打包的更多相关文章
- iOS使用fastlane自动化打包到fir(最全最详细流程)
# iOS使用fastlane自动化打包到fir(最全最详细流程)1. **首先确认是否安装了ruby,终端查看下ruby版本**> ruby -v终端输出:ruby 2.4.1p111 (20 ...
- ios实现fastlane自动化打包
终于抽出时间来学习自动化打包了,app在测试阶段一天总会经历好几次的打包,每次打包真是身心疲惫,刚打完的包说不定就被测试妹子反应还要微调什么地方,我就真的有气没法出,打一次包怎么也得浪费十几分钟,还不 ...
- Jenkins+ Xcode+ 蒲公英 实现IOS自动化打包和分发
Jenkins+ Xcode+ 蒲公英 实现IOS自动化打包和分发 直接入正题: Screen Shot 2015-09-18 at 16.56.20.png Mac上安装Jekins jekins下 ...
- iOS Jenkins 自动化打包构建
前言 在测试app项目过程中,通常都是需要开发打测试包给到测试,但是无论是iOS还是Android的打包过程都是相当漫长的,频繁的回归测试需要频繁的打包,对于开发同学影响还是蛮大的.因此在这种情况下, ...
- IOS自动化打包介绍
IOS自动化打包介绍 标签: app打包 , Ios打包 , iphone打包 , iphone自动化打渠道包 分类:无线客户端技术, 贴吧技术 摘要 随着苹果手持设备用户的不断增加,ios应 ...
- iOS自动化打包上传的踩坑记
http://www.cocoachina.com/ios/20160624/16811.html 很久以前就看了很多关于iOS自动打包ipa的文章, 看着感觉很简单, 但是因为一直没有AppleDe ...
- Mac Jenkins+fastlane 简单几步实现iOS自动化打包发布 + jenkins节点设置
最近在使用jenkins 实现ios自动化打包发布蒲公英过程实践遇到了一些坑,特意记录下来方便有需要的人. 进入正题: 一.安装Jenkins 1.Mac上安装Jenkins 遇到到坑 因为 Jenk ...
- iOS自动化打包 Jenkins+Gitlab+Fastlane+蒲公英+钉钉
前言 这两天花时间整理一下自动化打包的整套流程,现在iOS端的整套流程是没有问题了,这个过程中踩得坑也的确是特别多,所以这周末把整个流程整理一下,总结出来这篇文章,希望能对有需要的小伙伴有点点帮助. ...
- iOS自动化打包发布(fastlane)
一.FastLane介绍 1.1 FastLane是什么? FastLane是一种配置iOS和Android自动化Beta部署和发布的最简单的方法之一.它可以简化一些乏味.单调.重复的工作,像截图.代 ...
随机推荐
- HTML+CSS基础知识(6)背景的设置、表格的设计、表单的设计和框架集
文章目录 1.背景 1.1 代码 1.2 测试结果 2.背景练习 2.1 代码 2.2 测试结果 3.表格 3.1 代码 3.2 测试结果 4.练习 4.1 代码 4.2 测试结果 5.表单 5.1 ...
- 微服务组件--注册中心Spring Cloud Eureka分析
Eureka核心功能点 [1]服务注册(register):Eureka Client会通过发送REST请求的方式向Eureka Server注册自己的服务,提供自身的元数据,比如ip地址.端口.运行 ...
- rocky8删除/etc/fstab 和/boot/所有文件,通过光盘救援模式恢复
rocky8删除/etc/fstab 和/boot/所有文件,通过光盘救援模式恢复 mkdir /rootdir 先通过df和lsblk确定那个分区是根,如果确定不了,就先挂载一个分区,查看里边的文件 ...
- Golang 和 Python 随机生成N位字符串
Golang: func RandomString(n int) string { var letters = []byte("ABCDEFGHIGKLMNOPQRSTUVWXYZabcde ...
- 死磕面试系列,Java到底是值传递还是引用传递?
Java到底是值传递还是引用传递? 这虽然是一个老生常谈的问题,但是对于没有深入研究过这块,或者Java基础不牢的同学,还是很难回答得让人满意. 可能很多同学能够很轻松的背出JVM.分布式事务.高并发 ...
- Jekyll于windows中使用
安装 安装Ruby http://rubyinstaller.org/downloads/ 于其中选择最新的带dev套件的. 在安装时,安装目录不能有空格,检查是否已经安装成功 ruby -v gem ...
- 修改input标签里面的提示文字(placeholder)的样式
使用 ::-webkit-input-placeholder 伪类 input::-webkit-input-placeholder{ // 修改字体大小 font-size:12px; // 修改文 ...
- vivo霍金实验平台设计与实践-平台产品系列02
vivo 互联网平台产品研发团队 - Bao Dawei 本篇介绍了vivo霍金实验平台的系统架构以及业务发展过程中遇到的问题以及对应的解决方案. <平台产品>系列文章: 1.vivo平台 ...
- Swing常用窗体
Swing常用窗体 Swing 主要具有以下特点: ( 1 )轻量级组件. ( 2 )可插入外观组件. 窗体作为Swing的应用程序中组件的承载体,处于非常重要的地位.Swing中常用的窗体包括JFr ...
- SpringBoot2.5.1+Mybatis-Plus3.4.3:(Property ‘sqlSessionFactory‘ or ‘sqlSessionTemplate‘ are required)
项目引发这个问题: Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required <parent> <group ...