当前位置: 首页 > 编程日记 > 正文

Fastlane 入门实战教程从打包到上传iTunes connect

有关神器 Fastlane 持续集成\部署的文章网上挺多,本文定位是入门教程,针对 iOS 应用的持续部署,只需一条命令就可实现从 Xcode 项目到 编译\打包\构建\提交审核

文章稍微有点长,涵盖内容为:fastlane 简介\安装\配置 + Snapshot 截图 + XCTest + 一键上传App Store

说明:本文将 Apple Dev Center 简称为 ADC; iTunes Connect 简称为 ITC

先放图看 fastlane 实现自动上传功能:

提交进度:

提交成功,等待审核 

Fastlane 简介

fastlane 是一个完全开源的项目,包含一组 Ruby 实现的工具集,能完成 iOS 和 Android 工程 的自动化构建\测试和发布等功能,现被Twitter收购,是Fabric的一部分.fastlane 强大之处就在于其提供的工具全,基本可以覆盖打包测试发布的所有流程,如下图:

fastlane 的每一个工具都对应一个 Ruby 脚本,用来执行某一特定的任务,而最妙的是可以通过配置文件将不同的工具灵活的结合在一起,从而形成一个完整的自动化流程,实现一键上传 ITC,从而缩短用于构建发布的时间.

1.主要使用场:
  • 提交时执行测试(包括单元测试和集成测试)
  • 构建并分发内部测试\公开测试版本
  • 构建生产版本并上传至 ITC(包括更新配置文件,创建新的屏幕截图,上传应用并提交审核)
  • ...
2.工具集

fastlane 将如下的工具套件有机地结合起来,从管理证书到单元测试,从编译打包到上传发布,都能通过命令行轻松完成.该套件支持与 Jenkins 和 CocoaPods,xctools 等其他第三方工具的集成,并且能够定义多个通道(lanes)以支持不同的部署目标.

  • deliver: 将应用在 ITC 上所需数据提交至 ITC (包括:截图,配置文件,ipa包)
  • snapshot: 依靠 UI Test 完成截图
  • frameit: 快速地把应用截图放入设备框里
  • pem: 可以自动化地生成和更新应用推送通知描述文件
  • sigh: 创建\更新\下载和修复 provisioning profiles,支持App Store, Ad Hoc, Development和企业profiles
  • gym: 编译\打包iOS app,生成签名的ipa文件
  • ...
3.常见命令

fastlane 命令中,个人觉得下面两个较为常用:

  • 列出所有的 fastlane 的 actions:
$ fastlane actions
  • fastlane action [action_name]: 显示某一个 action 的详细配置
$  fastlane action match

fastlane 入门实战

1.安装 fastlane

1.1 创建App ID\描述文件
  • 本教程目标是上传 ITC ,因此需要提前在 ADC 和 ITC 中创建 App ID\描述文件\App
  • 这里使用的项目是 AD Demo,代码见 GitHub

1.2 安装

查看 Ruby 版本,低于2.0最好升级

$ ruby -v

检查 Xcode CLT 是否安装

$ xcode-select --install

安装 fastlane

$ sudo gem install -n /usr/local/bin fastlane

检查版本 fastlane

$ fastlane --version
fastlane installation at path:
/Library/Ruby/Gems/2.0.0/gems/fastlane-2.14.2/bin/fastlane
-----------------------------
fastlane 2.14.2

OK,安装完成

1.3 为项目配置 fastlane
$ cd 项目目录
$ fastlane init

如果期间报错 Connection reset by peer - SSL_Connect,就需要执行:

$ brew update && brew install ruby
// 重装
$ sudo gem install -n /usr/local/bin fastlane

然后重新执行

$ fastlane init
  • 期间会让你输入 Apple ID 账号密码(这个信息会存在钥匙串中,后续使用无需再输入密码)
  • 会检测当前的 app identifier 是否在 ADC 中
  • 会检测当前 app 是否在 ITC 中
  • 如果已经在 ADC 和 ITC 中创建相应的信息,那么过程会很顺利,如下图:

并在 Xcode 项目目录中生成如下文件:

注意:如果没有在 ITC 中创建 App ,也就不会创建上述两个文件夹;当然也可以后续创建,执行如下操作即可:

$ fastlane produce init

2.fastlane 文件配置

fastlane 的各文件解释如下:

  • Appfile:用于存储应用程序标识符和Apple ID 等信息
  • Fastfile:配置管理 lane
  • Deliverfile:配置应用在 ITC 中的各种信息,和 ICC 中的数据是一一对应的
  • metadata:包含应用在 ITC 中的各种信息
  • screenshots:包含截图数据

需要注意的是,metadata 和 Deliverfile,都可以配置 ITC 的数据,但后者优先级高.正如下图:

下文先在 metadata 文件夹中进行配置用于演示,在文末会删除 metadata 中的配置文本,全部配置在 Deliverfile 中.

2.1 配置 metadata 文件夹

修改 App 描述:

$ cd metadata 
$ cd zh-Hans
$ vim description.txt

修改关键字:

$ vim keywords.txt

修改 support_url:

$ vim support_url.txt

修改 copyright:

$ vim copyright.txt

等等,其他信息的修改类似.

然后创建分级文件:itunes_rating_config.json,这个和 ICC 中的分级是对应的.

{"CARTOON_FANTASY_VIOLENCE": 0,
"REALISTIC_VIOLENCE": 0, 
"PROLONGED_GRAPHIC_SADISTIC_REALISTIC_VIOLENCE": 0,
"PROFANITY_CRUDE_HUMOR": 0,
"MATURE_SUGGESTIVE": 0, 
"HORROR": 2,
"MEDICAL_TREATMENT_INFO": 0,
"ALCOHOL_TOBACCO_DRUGS": 0, 
"GAMBLING": 0, 
"SEXUAL_CONTENT_NUDITY": 0,
"GRAPHIC_SEXUAL_CONTENT_NUDITY": 0, 
"UNRESTRICTED_WEB_ACCESS": 0,
"GAMBLING_CONTESTS": 0
}

此处配置参见官方文档

然后将 App 图标添加至文件夹中,接下来要创建证书:

2.2 配置证书

修改 Fastfile:

$ vim Fastfile

修改内容如下:

fastlane_version "2.14.2"default_platform :iosplatform :ios do# 当前任务的描述desc "Creating a code signing certificate and provisioning profile"# 任务名称lane :provision do# 创建 ITC 中的 App 信息produce(app_name: 'AD_Demo',language: 'zh-Hans',app_version: '1.0',sku: 'com.3code.ADDemo.Test')# 使用证书创建私钥及签名cert# 每次运行时创建新的配置文件sigh(force: true)enderror do |lane, exception|endend

如果想创建 ad hoc 配置文件,需要指定sigh(adhoc: true).更多的信息参见:

  • 官方文档
  • fastlane actions
2.3 将 fastlane 本地配置上传至 ITC

重新进入项目目录,执行如下操作:

$ fastlane provision

等待一小会儿,终端提示成功创建证书配置:

fastlane.tools finished successfully ��

打开 ICC 网页,会发现本地的配置,已经成功上传.

3.Xcode 配置

xcode 配置也简单,只需要将项目修改至生产状态即可(描述文件).其它像构建版本号之类的不用理会, fastlane 会处理的.

4.Snapshot 截图和 XCTest

snapshot 需要和 XCTest 配合使用,关于 XCTest,我的博客中有一篇文章做了简单介绍.

$ fastlane snapshot init

目录中会生成一个 Snapfile 文件,用于配置截图信息,修改内容如下:

# 图片尺寸
devices(["iPhone 5","iPhone 6","iPhone 6 Plus"
])# 支持语言
languages(['zh-Hans'
])# 储存位置
output_directory "./fastlane/screenshots"# 删除之前图片
clear_previous_screenshots true

然后打开 Xcode 工程,添加截图设置(需要增加 UI Test, 因为截图是在 UI Test 时截取的):

\\ 1)在项目添加UI测试,已经添加略过
\\ 2)将./fastlane/SnapshotHelper.swift 添加到UI测试中
\\ 3)打开 AD_DemoUITests.swift ,删除setUp和tearDown方法,然后在其中添加以下代码testExample:let app = XCUIApplication()setupSnapshot(app)app.launch()app.buttons["next"].tap()snapshot("01firstPage") // 此处截图app.buttons["back"].tap()snapshot("02secondPage") // 此处截图

打开 Fastfile ,并添加如下信息,用于配置截图

  desc "Take screenshots"lane :screenshot dosnapshotend

执行 $ fastlane screenshot, fastlane 会自动调用模拟器,执行测试并生成快照,可能会由于模拟器启动慢而导致时间稍微有点长.

成功截图的提示:

5.创建 IPA 文件

打开 fastfile,加入如下代码,配置创建 ipa

desc "Create ipa"lane :build doincrement_build_numbergymend

保存并执行如下操作,将自动创建 IPA 包

$ fastlane build

如果出现错误: There does not seem to be a CURRENT_PROJECT_VERSION key set for this project. Add this key to your target's expert build settings. 请查阅此处

这是一个自动增加构建版本号的设置,需要手动修改.

6.上传 IPA 文件到 ITC

打开 Fastfile ,添加如下代码:

desc "Upload to App Store"lane :upload dodeliverend

然后执行命令,上传到 ITC :

$ fastlane upload

期间,会创建一个 html 形式的预览文件,确认没问题输入 y;

当然最有可能的错误就是网络链接的问题: Please use diagnostic mode to check connectivity. You need to have outbound access to TCP port 443. 重新配置代理即可.

7.配置 Deliverfile

其实上传 ITC 最主要的文件是 Deliverfile,配置好 Deliverfile 后,可以删除 metadata 文件夹中的文本配置.最终配置如下图:

以下是主要的配置,更多更详细的请戳文件,里面有详细的注释,拿来即可使用


# 1 app_identifier
app_identifier "com.3code.ADDemo"# 2 用户名,Apple ID电子邮件地址
username "Apple ID电子邮件地址"  # 3 支持语言
supportedLanguages = {"cmn-Hans" => "zh-Hans"
}# 4 app 名称
name({
'zh-Hans' => "ADDemo"
})# 5 描述
description({'zh-Hans' => "简体中文版"
})# 6 提交审核信息
submission_information({    export_compliance_encryption_updated: false,export_compliance_uses_encryption: false,content_rights_contains_third_party_content: false,add_id_info_uses_idfa: false
})# 7 应用审核小组的联系信息 app 审核信息
app_review_information(first_name: "name",last_name: "name",phone_number: "手机号",email_address: "email",demo_user: "测试账号用户名",demo_password: "测试账号密码",notes: "noting"
)# 8 copyright 
copyright "#{Time.now.year} 3code"# 

8.提交 AppStore 审核

继续打开 Fastfile,修改如下代码:

desc "Upload to App Store and submit for review"lane :upload dodeliver(submit_for_review: true)end

然后执行命令,提交审核 :

$ fastlane upload

9.使用一键命令

添加如下的代码,可以一步搞定所有的操作:

desc "Provision, take screenshots, build and upload to App Store"lane :do_everything doprovisionscreenshotbuilduploadend

对应的命令是:

$ fastlane do_everything
  • 代码下载之后是不能直接执行一键上传 ITC ,需要自行在 ADC 配置 App ID\证书\描述文件,ITC 增加 App, 然后方可一键上传 App

  • 本文只是简单的介绍了 fastlane 的使用,更多的资料还请参考文末的链接

  • 如果你对 ITC 不了解,或者很少发布 App ,建议看看官方文档,要知道发布 App 也有官方指南哦

  • 本文是系列文章,后续文章会陆续在这里以及我的博客中发布,喜欢请给个✨吧

10.参考

  • 官网
  • github
  • 文档

最后给点小建议:如果遇到错误首选就是查 issues,你遇到的问题,基本前人都遇到过了.我能在2天里快速入门 fastlane 全靠看 issues

相关文章:

double int char 数据类型

贴心的limits... 测试代码&#xff1a; #include <iostream> #include <stdio.h> #include <limits> #include <math.h> using namespace std;int main() {//double 有效数字16位double test3 1.2345678912345678e17;printf("%.17lf\n", te…

开发工具Drawscript

在Mac App Store上有一款iOS开发工具PaintCode(MAC App Store地址)。它可以通过矢量绘图来绘出你想要生成的用户控件界面&#xff0c;然后由PaintCode来动态生成iOS & OSX绘制代码。这样&#xff0c;你在drawRect函数中就只要粘贴拷贝就能生成自己想要的图案了。奈何&#…

悉尼大学计算机研究生学制,悉尼大学研究生学制

澳大利亚悉尼大学具有丰富的研究生专业课程&#xff0c;学制安排一般在1-2年时间。悉尼大学硕士申请要求要求非211大学申请者&#xff0c;暂不需清华认证 (毕业证、学位证、成绩单)入学要求&#xff1a;工程类专业(Engineering,IT)Master of Professional Engineering985/211学…

2016.04.09 使用Powerdesigner进行创建数据库的概念模型并转为物理模型

2016.04.09 使用Powerdesigner进行创建数据库的概念模型并转为物理模型 2016-04-09 21:10:24 本文原创受版权保护&#xff0c;严禁转载。 请大家不要用于商业用途,支持正版,大家都是做软件的,知道开发一套软件实属不易啊&#xff01; 今天看到了一个很有趣并且很有用的辅助…

ESTabBarController

为什么要使用? 在开发工作中&#xff0c;我们可能会遇到需要自定义UITabBar的情况。例如&#xff1a;改变文字样式、添加一些动画效果、设置一个比默认更大的样式等等&#xff0c;以上需求如果只通过UITabBarItem往往很难实现。 有了ESTabBarController&#xff0c;你可以轻松…

iPhone App开发导航条(Navigation Bar)素材PSD下载

不管是iPhone还是Android的应用App界面基本上最上方都会有个导航条&#xff08;Navigation Bar&#xff09;。于是我决定创建此页面整理收集所有好看的适合在iPhone App应用开发中使用的导航条素材PSD文件&#xff0c;并附有下载链接供需要在自己的iPhone App应用开发中需要使用…

点歌服务器工作原理,KTV点歌系统方案概述

《KTV点歌系统方案概述》由会员分享&#xff0c;可在线阅读&#xff0c;更多相关《KTV点歌系统方案概述(7页珍藏版)》请在人人文库网上搜索。1、一)目前点歌系统的主流方式目前&#xff0c;可以实现的KTV系统的点歌方式很多&#xff0c;但是可以主要归类为以下两大方式&#xf…

Xcode快捷键及代码块

2017-02-16 吴白 CocoaChina手指在键盘上飞速跳跃,终端上的代码也随着飞舞,是的这确实很酷。优秀的程序员总是这么一群人&#xff0c;他们不拘于现状&#xff0c;不固步自封&#xff0c;他们喜欢新奇的事&#xff0c;他们把自己发挥到极致。 指法攻略 放下您钟爱的鼠标吧&#…

使用logrotate管理nginx日志文件

本文转载自&#xff1a;http://linux008.blog.51cto.com/2837805/555829 描述&#xff1a;linux日志文件如果不定期清理&#xff0c;会填满整个磁盘。这样会很危险&#xff0c;因此日志管理是系统管理员日常工作之一。我们可以使用"logrotate"来管理linux日志文件&am…

c 异步中断服务器连接,异步连接和断开与epoll(Linux)

我有一个“完整”的答案在这里以防别人正在寻找这样的&#xff1a;#include #include ........int retVal -1;socklen_t retValLen sizeof (retVal);int status connect(socketFD, ...);if (status 0){// OK -- socket is ready for IO}else if (errno EINPROGRESS){struc…

java获取真实ip

在JSP里&#xff0c;获取客户端的IP地址的方法是&#xff1a;request.getRemoteAddr&#xff08;&#xff09;&#xff0c;这种方法在大部分情况下都是有效的。但是在通过了Apache&#xff0c;Squid等反向代理软件就不能获取到客户端的真实IP地址了。 如果使用了反向代理软…

卡片式设计的最佳实践分享

2017-02-17 三达不留点gpj CocoaChina卡片本质上是一个简单的信息容器&#xff0c;信息量有限&#xff0c;但设计干净整洁。现如今&#xff0c;在保证界面具有优秀可用性的同时&#xff0c;卡片式的设计甚至成为了平衡界面美学的默认做法。作为最初由Pinterest和Facebook这样的…

Arduino 各种模块篇 光敏感应器 简易光敏

这一款是非常简单的光敏感应器 简单到&#xff0c;只对一定光强度有信号感应&#xff0c;输出TTL电平。 此款也是用电位器来调节的。 都是这么简单。 过段时间我为大家奉上数字版的光敏传感器。 ————————————————————————分割线———————————…

vb打开服务器excel文件路径,咨询下VB如何打开EXCEL文件并将内容显示在listbox中

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 Adodc DataGrid 控件直接连接 Excel 表格&#xff0c; 把 Excel 表格当成数据库。 在窗体中画出 Adodc1 和 DataGrid1 两个控件&#xff0c; 不做任何属性设置&#xff0c;只管大小和位置。 ------------------------------…

iOS动画进阶 - 手摸手教你写ShineButton动画

移动端访问不佳&#xff0c;请访问我的个人博客 前段时间在github上看见一个非常nice的动画效果&#xff0c;可惜是安卓的&#xff0c;想着用Swift写一个iOS版的&#xff0c;下下来源代码研究了一下&#xff0c;下面是我写代码的心路历程 先上图和demo的地址 分析动画过程 刚开…

redis自动过期

我当时设置如登陆自动过期的时间。自己找的做了下。 设置自动过期时间。 public static PooledRedisClientManager poolreds; static RedisPool() { try { poolreds new PooledRedisClientManager(10, new string[] { “101210.212.&#xff1a;1213” }); } catch (Exception…

Java中使用LUA脚本语言

Lua 是一个小巧的脚本语言。是巴西里约热内卢天主教大学&#xff08;Pontifical Catholic University of Rio de Janeiro&#xff09;里的一个研究小组&#xff0c;由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo所组成并于1993年开发。简单介绍可详…

电脑显示服务器地址无法ping通,网关无法Ping通故障及解决方法

很多网络故障是常见问题&#xff0c;一般的三板斧方法就能解决问题&#xff0c;但有些故障容易让我们多走弯路&#xff0c;我们不妨拓宽故障排查范围&#xff0c;换换思路。在与网络亲密接触的过程中&#xff0c;我们或多或少地会遇到一些网络故障&#xff0c;对于许多网络故障…

VVeboTableView 源码解析

原文链接&#xff1a;http://www.jianshu.com/p/78027a3a2c41最近在看一些 iOS 性能优化的文章&#xff0c;我找到了 VVeboTableView 这个框架。严格来说这个不属于框架&#xff0c;而是作者用自己的方式优化 UITableView 的一个实践。 VVeboTableView 展示了各种类型的 cell&a…

人工智能第二次作业

2.9设有如下语句&#xff0c;请用相应的谓词公式分别把他们表示出来 (1) 有的人喜欢梅花&#xff0c;有的人喜欢菊花&#xff0c;有的人既喜欢梅花又喜欢菊花 。 解&#xff1a; P(x)&#xff1a;x是人 L(x,y)&#xff1a;x喜欢y 其中&#xff0c;y的个体域是{梅花&#xff0c;…

Perl 校验命中的脚本

这个脚本无比的重要&#xff0c;虽然代码简单&#xff0c;但是在判断是否准确上&#xff0c;有着很重要的地位。 通过icmp和解析&#xff0c;它有一定意义所在。 mark!.. #!/usr/bin/perl use Net::Ping; sub icmp_domain{$ktrue;local($host)shift;$pNet::Ping->new("…

从基于网络的安装服务器安装操作系统,PXE 概述 - Sun Fire X4800 服务器安装指南(适用于 Linux 操作系统)...

PXE 概述使用 Linux 预引导执行环境 (preboot execution environment, PXE) 可从网络接口而不是本地存储引导服务器。对于 OS 安装&#xff0c;从基于 PXE 的OS 分发映像引导目标服务器就像从 DVD 引导一样&#xff0c;不同之处在于介质位于网络中。要使用 PXE&#xff0c;您需…

下载最新Android代码的方法

之前我是去Android官方网站下载最新Android代码&#xff0c;但是这种方法需要翻墙&#xff0c;而且有时候翻墙又不太方便&#xff0c;今天我发现一个不错的网站&#xff0c;是清华大学搞的&#xff0c;跟Android官方的代码基本保持同步&#xff0c;而且下载方法跟Android官方的…

socket编程缓冲区大小对send()的影响

1. 概述 Socket编程中&#xff0c;使用send()传送数据时&#xff0c;返回结果受到以下几个因素的影响&#xff1a; • Blocking模式或non-blocking模式 • 发送缓冲区的大小 • 接收窗口大小 本文档介绍通过实验的方式&#xff0c;得出&#xff08;收发&#xff09;缓冲区大…

不用任何第三方,写一个RTMP直播推流器

2016年是移动直播爆发年&#xff0c;不到半年的时间内无数移动直播App掀起了全民直播的热潮。然而个人觉得直播的门槛相对较高,从推流端到服务端器到播放端&#xff0c;无不需要专业的技术来支撑&#xff0c;仅仅推流端就有不少需要学习的知识。目前大部分直播采用的都是RTMP协…

手机连接服务器数据库文件,手机连接服务器数据库文件夹

手机连接服务器数据库文件夹 内容精选换一换GaussDB(DWS)支持使用gs_dump工具导出某个数据库级的内容&#xff0c;包含数据库的数据和所有对象定义。可根据需要自定义导出如下信息&#xff1a;导出数据库全量信息&#xff0c;包含数据和所有对象定义。使用导出的全量信息可以创…

开源一个上架 App Store 的相机 App

原创 2017-02-21 伯乐专栏/陈浩 iOS大全&#xff08;点击上方公众号&#xff0c;可快速关注&#xff09; 来源&#xff1a;伯乐在线 - Hawk0620 如有好文章投稿&#xff0c;请点击 → 这里了解详情 如需转载&#xff0c;发送「转载」二字查看说明 Osho 相机是我独立开发上架的…

WIN7下,联想A30T通过USB连接上网

1.手机连接3G信号 2.手机上在设置里 "设置" |"应用程序" |"USB模式" |勾选"网卡模式" 3.连接上Win7,会出现驱动安装程序,手动安装这里的驱动.(驱动在百度网盘:) 4.在设备管理,网络适配器里查看驱动是否安装成…

在bootstrap ace样式框架上修改的后台管理型模板(Tab页后台管理模板)

后台管理模板开始用frameset布局&#xff0c;但是有时候会遮挡比如上面导航或者左边导航的二级三级弹出菜单&#xff0c;因为宽度被限制了&#xff0c;所以有时候就用easyui或者ext的&#xff0c;但是样式不好看&#xff0c;然后看到了bootstrap ace的后台管理模板&#xff0c;…

文件服务器的内存要多少,文件服务器内存要多大

文件服务器内存要多大 内容精选换一换Windows场景中&#xff0c;当把源端服务器迁移到华为云后&#xff0c;目的端服务器C盘的已用空间比对应源端服务器C盘的已用空间大至少1GB&#xff0c;而不是与源端服务器C盘的已用空间一致&#xff0c;这正常吗&#xff1f;正常现象。您可…