曾静的技术博客

但行好事,莫问前程.

嗨,我是曾静 (@devzeng),目前暂居深圳。


这是我用来记录平日学习笔记的地方,欢迎您的访问.

iOS中fastlane的使用

对于一个iOS APP的发布上线,一般来说都需要经历:编译打包 -> 截图 -> 填写一些说明文字 -> 上传ipa到itunes connect -> 提交供审核。每次都要进行这么多“繁琐”的步骤,对于某些步骤可能一次还不能执行成功需要等着界面提示上传错误然后手动重新再来一次(想想都觉得可怕)。

在日常开发中,打包也是最后上线不可缺少的环节,如果需要生成ipa文件通常需要在Xcode里点击Product -> Archive,然后在弹出来的Organizer中选择导出什么类型(ad hoc/enterprise)的包。对于大项目来说动辄编译十分钟以上的来说,一天打几个包就差不多过去了。

为了解决这些问题,Felix Krause大神写了一个工具集fastlane。fastlane是一套使用Ruby写的自动化工具集,用于iOS和Android的自动化打包、发布等工作。

fastlane-logo.png

fastlane简介

1、安装fastlane

(1)Xcode命令行工具

确保Xcode命令行工具安装最新版本,使用如下命令进行安装:

xcode-select --install
(2)安装fastlane

fastlane的安装非常简单,直接使用如下命令:

sudo gem install fastlane

即可完成安装。

2、fastlane组件

fastlane是一个工具集,包含了我们日常开发中上线时需要的大部分操作。比如gym/deliver等。下面对每个工具进行介绍:

名称 说明
deliver 自动上传截图,APP的元数据,二进制(ipa)文件到iTunes Connect
snapshot 自动截图(基于Xcode7的UI test)
frameit 可以把截的图片自动套上一层外边框
pem 自动生成、更新推送配置文件
sigh 用来创建、更新、下载、修复Provisioning Profile的工具
produce 如果你的产品还没在iTunes Connect(iTC)或者Apple Developer Center(ADC)建立,produce可以自动帮你完成这些工作
cert 自动创建管理iOS代码签名证书
pilot 管理TestFlight的测试用户,上传二进制文件
boarding 建立一个添加测试用户界面,发给测试者,可自行添加邮件地址,并同步到iTunes Connect(iTC)
gym 自动化编译打包工具
match 证书和配置文件管理工具
scan 自动运行测试工具,并且可以生成漂亮的HTML报告

3、fastlane核心概念

在运行fastlane命令行工具的时候,会读取当前目录下面的fastlane文件夹里面的Fastfile配置文件。里面定义了一个个的lane,下面是官方提供的一个示例:

lane :beta do
  increment_build_number
  cocoapods
  match
  testflight
  sh "./customScript.sh"
  slack
end

increment_build_numbercocoapods这样的一条命令都是一个action,由这样的一个个action组成了一个lane(lane中可以调用其他的lane)。

fastlane实战

1、初始化

在项目的根目录下面,执行fastlane init命令开始初始化。在执行的过程中会要求填写一些项目的资料,如Apple ID等,fastlane会自动检测当前目录下项目的App Name和App Identifier,可以选择自行输入这些信息。初始化完成会在当前目录下面生成一个fastlane的文件夹。

fastlane-init.png

最重要的两个文件就是Appfile和Fastfile,主要的说明如下:

(1)Appfile里面存放了App的基本信息包括app_identifierapple_idteam_id等,如果在init的时候输入了正确的apple_id和密码会自动获取team_id。

(2)Fastfile是最重要的一个文件,在这个里面可以编写和定制我们的自动化脚本,所有的流程控制功能都写在这个文件里面。

说明:

(1)如果在init的时候选择了在iTunes Connect创建App,那么fastlane会调用produce进行初始化,如果没有创建后续可以手动执行produce init进行创建。如果没有在初始化的时候选择执行produce流程当然deliver也不会执行,后面可以使用deliver init运行是一样的。

(2)在iTunes Connect中成功创建App之后,fastlane文件夹里面会生成一个Deliverfile的文件。Deliverfile文件主要是deliver的一些配置信息。

2、Fastfile文件

Fastfile文件的主要结构如下所示:

fastlane_version "2.14.2"
default_platform :ios

platform :ios do
	before_all do
   		cocoapods
  	end
  	
  	lane :test do
  	end
  	
  	lane :beta do
  	end
  	
  	lane :release do
  	end
  	
  	after_all do |lane|

  	end

  	error do |lane, exception|

  	end
end

说明:

  • (1)fastlane_version:指定fastlane使用的最小版本
  • (2)default_platform:指定当前默认的平台,可以选择ios/android/mac
  • (3)before_all:在执行每一个lane之前都会调用这部分的内容
  • (4)after_all:在每个lane执行完成之后都会执行这部分的内容
  • (5)error:每个lane执行出错就会执行这部分的内容
  • (6)desc:对lane的描述,fastlane会自动将desc的内容生成说明文档
  • (7)lane:定义一个lane(任务),可以理解为一个函数,我们在执行的时候使用fastlane [ios] lane名称

3、Fastfile文件的编写

lane :release do |option|
	#根据传入参数version设置app的版本号
	increment_version_number(version_number: option[:version]) 
	#自动增加build号
	increment_build_number
    #证书签名
    sigh
    #编译打包
    scheme_name = option[:scheme]
    configuration = 'Release'
    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 = File.expand_path("..", Dir.pwd) + File::Separator + 'build'
    output_name = "#{scheme_name}_#{configuration}_#{version}_#{build}_#{Time.now.strftime('%Y%m%d%H%M%S')}.ipa"
    gym(scheme: scheme_name, clean: true, export_method:'appstore', configuration: configuration, output_directory: output_directory, output_name: output_name)
  end

参考资料

1、官方网站

2、小团队的自动化发布-Fastlane带来的全自动化发布

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

4、Fastlane实战(二):Action和Plugin机制

5、Fastlane实战(五):高级用法

最近的文章

iOS中使用Jenkins搭建持续集成环境

在持续集成(Continuous integration,简称CI)这块,Jenkins无疑是目前使用的比较多的一个开源框架。本文就如何快速搭建一个iOS的持续集成环境进行介绍。Jenkins安装系统要求:必须安装JDK 1.5以上版本,推荐安装最新版本的JDK。可以通过java -version查看是否安装JDK。$ java -version java version "1.8.0_91"Java(TM) SE Runtime Environment (build 1.8.0_91-b...…

iOS继续阅读
更早的文章

使用Scrapy开发爬虫初探

近期一直都有关注数据的采集方面的开发,之前也用Python(urllib+BeautifulSoup)写过“爬虫”但是效果不是很好,表现在内存占用过高和做出来的东西不够通用,很多周边的东西(图片下载、缩略图等)都需要自己来实现。趁着近期在公司内部弄到了一台新的CentOS服务器的机会就索性使用Scrapy把前段时间写的空气质量采集的程序改写下,同时把SQLServer换成MySQL,顺便熟悉一下这块的知识。开发环境准备CentOS 6.5自带的是Python 2.6.6,使用Scrapy需...…

Python继续阅读