使用初衷

公司产品版本比较多,很多版本都需要独立化部署。导致产生了每个地址需要打包,每次打包就是一件麻烦的事情,常常一下午的时间过去了却都浪费在打包这件事情上了。So….研究了下Fastlane。爬了很多坑。写出来让大家参考下,遇到问题了可以私信我。尽我所能帮助你。

基础名词

  • Ruby,一种简单快捷的面向对象(面向对象程序设计)脚本语言
  • RVM是一个命令行工具,它允许您轻松地安装,管理和使用从解释器到多组gems多个ruby环境。
  • Gems RubyGems简称gems,是一个用于对 Ruby组件进行打包的 Ruby 打包系统。例如经常用的cocoapods就需要 gem 来管理。
  • Fastlane是Felix Krause大神写的fastlane是一套使用Ruby写的自动化工具集,用于iOS和Android的自动化打包、发布等工作。
  • pgyer/fir 第三方发布测试平台。

Fastlane 安装初始化

  • 确保你已经安装了最新版本的Xcode命令行工具:
xcode-select --install
  • 选择你的安装方法:推荐使用RubyGems 安装【不出问题就直接进行,最后指出问题点】
方法 os支持 描述
Homebrew 苹果系统 brew cask install fastlane
安装程序脚本 苹果系统 下载zip文件。然后双击install脚本(或在终端窗口中运行)。
RubyGems 带有Ruby 2.0.0或更高版本的macOS或Linux sudo gem install fastlane -NV

- 初始化

安装完毕后,在终端进入到你的项目目录下。初始化fastlane

fastlane init

按照提示输入开发者账号(付费账号) 输入Bundle Identifier 用于初始化配置,后期可在配置文件改。随便输入
根据提供的信息,fastlane会自动为您生成一个配置。\
您可以看到新创建的./fastlane目录,包含Appfile和Fastfile文件。

最有趣的文件是fastlane/Fastfile,其中包含分发您的应用程序所需的所有信息。\
这样就完成了初始化

蒲公英插件安装

初始化完毕后直接在终端输入

//fastlane fastlane search_plugins//列出可用插件
fastlane add_plugin pgyer//安装插件

插件安装成功\
./fastlane目录下会生成Pluginfile的一个文件。\
插件安装不成功,就是fastlane安装的有问题。

配置Fastlane

文件名 描述
Appfile 从 Apple Developer Portal 获取和项目相关的信息 详情
Fastfile 核心文件,存放lane任务
Deliverfile deliver的配置文件,从 iTunes Connect 获取和项目相关的信息详细
metadata 同步iTC中的元数据
screenshots 同步iTC中的截图

- #### fastlane工具集是配置fastlane最重要的

文件名 描述
match 证书和配置文件管理工具会重置证书,推荐新项目使用。����������
cert 自动创建管理iOS代码签名证书,会去自动创建证书,永远不会撤销现有的证书。如不能创建会报错。
sigh 用来创建、更新、下载、修复Provisioning Profile的工具
gym 自动化编译打包工具.shenzhen的代替品.����������
pem 自动生成、更新推送配置文件
produce 如果你的产品还没在iTunes Connect(iTC)或者Apple Developer Center(ADC)建立,produce可以自动帮你完成这些工作
deliver 自动上传截图,APP的元数据,二进制(ipa)文件到iTunes Connect
snapshot 自动截图(基于Xcode7的UI test)
frameit 可以把截的图片自动套上一层外边框
pilot 管理TestFlight的测试用户,上传二进制文件
boarding 建立一个添加测试用户界面,发给测试者,可自行添加邮件地址,并同步到iTunes Connect(iTC)
scan 自动运行测试工具,并且可以生成漂亮的HTML报告
spaceship 为pilot,boarding和deliver等工具提供和 iTC 和 ADC 的交互API。spaceship本来是个独立的项目,后来被Fastlane收编进来
WatchBuild 是一个独立的iTC监控工具,开启WatchBuild可以监控iTC上的文件状态,弹出MacOS自带的Notification
supply Android自动上传到Google Play工具(如果有时间,我想把国内提供API的Android Store都写个插件自动上传,这个问题从10年我刚开始工作就觉得是个痛点)
screengrab Android的自动截图工具

关于fastfile:

  • 里面存放了很多lane,每个lane相当于按顺序执行的工作流。每个lane可以存放多个action,action可以看做具体的执行动作
  • 生命周期
执行顺序 方法名 说明
1 before_all 在执行 lane 之前只执行一次
2 before_each 每次执行 lane 之前都会执行一次
3 lane 自定义的任务
4 after_each 每次执行 lane 之后都会执行一次
5 after_all 在执行 lane 成功结束之后执行一次
6 error 在执行上述情况任意环境报错都会中止并执行一次

- 任务定义

定义 是否必须 说明 备注
desc false 方法描述 可多次使用打到换行的目的
name true 方法名 符号化的方法名
options false 方法参数 返回 Hash 类型
task true 方法主体 参考 ruby 的方法代码且支持 ruby 代码

- 一个简单的lane

lane :deploy do# 执行 pod instasllcocoapods# 执行 carthage bootstrapcarthage# 增加build版本号increment_build_number# 编译代码gym# 发布到Apple Storedeliver(force: true)
end
  • fastlane示例

  • 这个是我自己 配置到蒲公英的。同时导出ipa到./build文件夹下,以版本号和打包时间命名。这样就保留了每一版本包了。

只需要项目根目录下执行即可

fastlane topgyer desc:更新内容
desc "上传到测试版本到蒲公英"desc "生成本地版本"lane :topgyer do|option|#自动增加build# increment_build_number#自动生成证书cert#自动生成配置文件# sigh(force: true)//我使用的是手动配置关闭这个。如需自动则打开即可#gym配置,打包输出。#fastlane gym --export_method ad-hoc#fastlane gym --export_method enterprise#fastlane gym --export_method app-storescheme_name = "xxxx"//应用名词#获取version和build版本号version = get_info_plist_value(path: "./#{scheme_name}/Info.plist", key: "CFBundleShortVersionString")build = get_info_plist_value(path: "./#{scheme_name}/Info.plist", key: "CFBundleVersion")#导出路径output_directory = "./build"#导出名称output_name = "#{scheme_name}_#{version}_#{build}_#{option[:desc]}_#{Time.now.strftime('%Y%m%d%H%M%S')}.ipa"gym(export_method: "enterprise",//企业账号scheme: scheme_name, //名词clean: true,//是否清理上次编译output_directory: output_directory,//导出路径output_name: output_name//导出名词)pgyer(api_key: "1212121", user_key: "121212", update_description: "#{option[:desc]}")//蒲公英设置查看keyend
  • 手动配置证书。 fastlane初始化Gym fastlane gym会生成一个Gymfile的文件。增加下面代码,同时不要使用自动生成配置文件\
    sigh(force: true)
export_options(provisioningProfiles: { "com.xxx.xxx" => "profilesName","com.xxx.xxxxxx" => "profilesName1"})
  • scheme 设置
    没有在gym或者fastfile写应用的名字的话。打包的时候会自动检测当前目录下的文件。列出来供你选择。\
    也可以设置一下在gym中直接赋值,或者fastfile中增加即可。

问题汇总

使用过程中出现了很多问题,大部分问题都已经有人躺过水了,所以有问题先去看看issues

问题 解决方案
ruby -v 版本低于2.0.0 gem版本不对 请升级ruby请更新gems
cocoapods没有放到Gemfile中 Gemfile文件中增加cocoapods
fastlane init 提示sudo 请检查ruby路径。如果没问题请检查user目录下.bash_profile。环境变量设置是否有效。export PATH=”HOME/.fastlane/bin:HOME/.fastlane/bin:PATH”
如果初始化成功 其他的问题大部分都是证书问题了。

如需转载请备注简书地址

http://www.jianshu.com/u/bee103cd1f97

不懂的可以Q719251357
参考
https://whlsxl.github.io/fastlane1/

iOS自动化部署方案Jenkins Fastlane code.aliyun 蒲公英 appStore相关推荐

  1. iOS自动化打包发布之fastlane 实现 发布AppStore 蒲公英

    iOS自动化打包发布之fastlane 实现 fastlane官方文档 前提插件配置 首先要安装xcode-select 然后安装fastlane sudo gem install fastlane ...

  2. 前端教程——前端项目自动化部署(Jenkins、Github Actions)

    本教程主要讲解了怎么使用 Jenkins 和 Github Actions 部署前端项目. 第一部分是使用 Gitea 配置局域网 git 服务器,再使用 Jenkins 将 Gitea 下的项目部署 ...

  3. git自动部署代码到服务器windows,Jenkins-在windows上配置自动化部署(Jenkins+Gitlab+IIS)...

    Jenkins-在windows上配置自动化部署(Jenkins+Gitlab+IIS) web部署样例 windows服务部署样例 系统备份 在服务器上创建后缀名为.ps1的文件,例:BackUpD ...

  4. 自动化部署工具jenkins部署及使用

    需提前部署jdk.maven.git等. 部署: (1)下载jenkins.war包: http://mirrors.jenkins.io/war-stable/latest/jenkins.war ...

  5. 自动化部署之jenkins

    一.什么是持续集成? (1)Continuous integration(CI) 持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员至少集成一次,也就意味着每天可能会发生多次集 ...

  6. network setup service启动后自动停止_一个简单的测试环境下的自动化部署方案

    笔者是公司是一个分前后端开发的公司.而笔者是一个普通的后端开发工程师.在和前端工程师协同开发时,为了给前端工程师提供接口,往往要将写好的代码交付并部署到测试环境.因而这导致笔者经常需要打包项目更新到测 ...

  7. 自动化部署之jenkins及简介

    一.什么是持续集成? (1)Continuous integration(CI) 持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员至少集成一次,也就意味着每天可能会发生多次集 ...

  8. springcloud服务器搭建-自动化部署docker+jenkins

    Hello world,every one! 接触过springcloud分布式系统好久了,今天来整理一下吧,笔者使用的是centos8阿里云服务器. 让我们开始吧 工具安装 安装上传下载工具 yum ...

  9. linux安装自动化部署工具jenkins

    创建工程目录 mkdir /home/software/jenkins 创建工作空间 mkdir /home/workspaces/jenkins 进入工程目录 cd /home/software/j ...

最新文章

  1. Vue-Layout:可视化布局、自动生成代码工具
  2. window下实现在线预览功能
  3. 面试上海阿里体育的一道面试题: 设计模式,多态
  4. 网站与网址现在还有人没搞清二者之间的区别吗?
  5. c语言100以内加减乘除,一百以内的加减乘除法游戏....
  6. Spring Task配置
  7. Spring AOP编程-传统AOP开发切点表达式写法介绍
  8. 汇编语言---键盘KeyCode值列表
  9. confluencejira集成_Jira Service Desk使用教程之如何将Jira Cloud与Confluence集成?
  10. 泰森怎么会输给道格拉斯_泰森24岁就被击败,如果能像他学习巅峰时期至少能延长三年...
  11. [Turn]C# 强制关闭当前程序进程(完全Kill掉不留痕迹)
  12. 开发smartphone应用,无法生成cab文件?
  13. ArcMAP中如何将16位保存的卫星底图,转变为8位表示
  14. jQuery学习笔记(4)-设置元素的属性和样式
  15. rbw数字信号处理_数字中频概述 - 频谱分析
  16. [nssl 1322][jzoj cz 2109] 清兵线 {dp}
  17. 006-Android-ContentProvider习题
  18. Shell脚本切换root用户或获取root权限
  19. 想使用hexo(个人博客的方案) Next(主题)搭建一个个人的照片墙
  20. WideDeep——记忆能力和泛化能力的综合

热门文章

  1. 如何评价吴军《浪潮之巅》?来自反面的声音
  2. BGP劫持原理及如何防御
  3. MySQL processlist的state属性详解
  4. StateFlow 状态流
  5. 【降价提醒】,您关注的商品已降价!
  6. Devexpress PdfViewer预览pdf,禁止下载,打印,复制
  7. 洗地机排名前十的产品、洗地机品牌排行榜最新公布
  8. 不完整拼音模糊匹配算法
  9. 英特尔最新Xeon D-2100系列芯片,高能低耗瞄准边缘计算
  10. 初识Git与GitHub和使用案例