三分钟集成自动打包

推荐一个自动打包库 Fastlane 该库在Git上已有1.4w+ Star,功能齐全,是现有持续自动化更新最好的解决方案。

还在被测试紧紧地追着要安装包而不断点击“下一步”进行手动打包么?其实你完全可以运行一个脚本,然后去倒杯茶,跟测试吹吹牛,脚本将为你做好一切。生活就应如此惬意!也许你会说:我也想,可是臣妾做不到啊。没关系,本文将会让你三分钟内集成自动打包功能。

自动打包资源

开源文件以及 Demo 源码已经上传到 Git

https://github.com/liutongchao/Autobuild

自动打包环境

Xcode 必须为 Xcode 8.0 以上 (因为8.0整合了证书配置,大大简化了配置文件的配置)

集成自动打包功能

1. 把开源文件 Resource 中的三个文件拉到项目根目录中
Resource
根目录文件

autobuild.py 为一个 Python 脚本,是实现自动打包的主要文件。
AutoBuild 文件夹存放着三种配置文件的plist。
Packge 为自动打包后 ipa 文件的输出路径,默认为这个可根据自己需要改动。

2. 用 Xcode 打开 autobuild.py 文件,修改里面的配置信息。
# 需要改动的地方 (根据自己的项目信息改动改动)
PROJECT_NAME = "Name"                   #项目名称
VERSION = "1.0.0"                       #打包版本号 会根据不同的版本创 建文件夹(与项目本身的版本号无关)
TAGREAT_NAME = "%s" %(PROJECT_NAME)     #就是对应的target

CONFIGURATION = "Release"               #Release 环境  Debug 环境
PROFILE = "Dev"                         #配置文件分为四种 AdHoc  Dev  AppStore  Ent 分别对应四种配置文件
OUTPUT = "./Packge/%s" %(CONFIGURATION) #打包导出ipa文件路径(请确保 “%s” 之前的文件夹正确并存在)

WORKSPACE = "%s.xcworkspace" %(PROJECT_NAME)
PROJECT = "%s.xcodeproj" %(PROJECT_NAME)
SDK = "iphoneos"
#注意:如果在项目中用到 pod 请启用此行!!!!!!
#PROJECT = None

#蒲公英上传
OPEN_PYUPLOAD = False   #是否开启蒲公英上传功能  True  False
USER_KEY = "********************"
API_KEY = "********************"

#fir.im 上传
OPEN_FIR_UPLOAD = True      #是否开启fir.im上传功能  True  False

#AppStore上传
OPEN_APPSTORE_UPLOAD = False  #是否开启AppStore上传上传功能  True  False
USER_NAME = "***************"
USER_PASSWORD = "***************"

PROJECT_NAME 就是你项目工程的名字
VERSION 打包版本号 会根据不同的版本创建文件夹(与项目本身的版本号无关)
CONFIGURATION Release 环境 Debug 环境
TAGREAT_NAME 就是target名(如果项目有多个target那么要指定target,如果只有一个target 则不用修改)
PROFILE 配置文件分为四种 AdHoc Dev AppStore Ent 分别对应四种配置文件
OUTPUT 打包导出ipa文件路径,比如想导出到桌面上就把“./Packge/” 替换成 “/Users/用户名/Desktop/”(请确保 “%s” 之前的文件夹正确并存在)
PROJECT = None 如果你的工程是以 .xcworkspace 运行的,请启用此行!!!
OPEN_PYUPLOAD 蒲公英应用托管上传,默认为False,如果需要上传请设置为True,并填入蒲公英账号的 USER_KEY 和 API_KEY。
OPEN_FIR_UPLOAD Fir.im上传,需要自己配置fir-cli,后面会有相关资料,如何配置fir-cli
OPEN_APPSTORE_UPLOAD AppStore自动上传,默认为False,如果需要上传到AppStore,请设置为True,并填入开发者账号 和 密码。

注意: PROJECT = None 如果你的工程是以 .xcworkspace 运行的,请启用此行!!!
3. 确保你的项目已经启用自动签名功能,并能够在真机上运行。

启动自动签名:TARGETS -> General

自动签名配置
4. 运行脚本

运行脚本有两种方式(建议用第二种方式)
①. 打开终端,cd 到你的项目根目录下,然后把 autobuild.py 拖入终端里,再回车,神奇的事即将发生。

把脚本文件拖进终端里

②. 把资源中名为 Python Launcher 的小应用拉到 应用程序 中,然后找到项目根目录中的 autobuild.py 文件。
右键 -> 打开方式 -> Python Launcher

Python Launcher
右键 -> 打开方式 -> Python Launcher
5. 运行结果
最终打包结果

如图出现 ** EXPORT SUCCEEDED ** 即打包成功,赶紧去Packge 文件夹看看吧。
如果出现了错误,请检查一下配置信息有没有错误。

ipa上传

目前支持三种上传方式,分别为:蒲公英、Fir.im、AppStore

1.蒲公英上传

①需要先到蒲公英申请账号,拿到两个Key,USER_KEYAPI_KEY
②打开上传开关,并填入上述两个key。

OPEN_PYUPLOAD = True    #是否开启蒲公英上传功能  True  False
USER_KEY = "************"
API_KEY = "************"
2. Fir.im上传

①需要先到Fir.im申请账号,拿到 API Token
②配置本地 fir-cli 环境

参考配置资料:https://github.com/FIRHQ/fir-cli

请务必先配置好本地 fir-cli 环境,否则无法上传成功!!

③打开上传开关

 OPEN_FIR_UPLOAD = True     #是否开启fir.im上传功能  True  False
3. AppStore上传

①打开开关,填入开发者账号和密码。

OPEN_APPSTORE_UPLOAD = True  #是否开启AppStore上传上传功能  True  False
USER_NAME = "************"
USER_PASSWORD = "************"

集成问题向导

  1. 请仔细检查脚本中的配置是否有误。
    特别是下面这一行,如果用了 Pod 请启用这一行

     PROJECT = None
    
  2. 确保有Xcode 的自带工具 Command Line Tools ,如果没有请执行如下命令安装。

     xcode-select --install
    
  3. 确保 Xcode 8 在应用程序里,而不是把 Xcode 8 装在其他地方。

  4. 如使用AppStore上传功能,请确保手动上传AppStore不出现错误。
    若出现上传成功,但在 iTunes Connect 中显示包无效,一般是隐私权限问题,需在 info.plist 里添加权限。(相机、麦克风、照片等)

  5. 如果上传蒲公英时失败,出现 curl: (26) couldn't open file "~/Desktop 错误,请替换路径“~/Desktop” 为 “/Users/用户名/Desktop/” 。

自动打包的原理

其实自动打包有两种方式 xcodebuild+xcrunxcodebuild,但xcodebuild+xcrun方式是相对来说早期的方式了,这里就不做过多介绍了,以免误导童鞋们。
如果有童鞋想要了解可以查看文章后面的参考资料。

脚本主要用了 xcodebuild 的几个命令。xcodebuild命令来自 Xcode 的自带工具 Command Line Tools 如果没有可以通过一下命令安装。

  xcode-select --install

用到的 xcodebuild 命令

  'xcodebuild archive -project %s -scheme %s -sdk %s -configuration %s  ONLY_ACTIVE_ARCH=NO -archivePath ./build/%s.xcarchive' %(project, scheme, SDK, CONFIGURATION,APPNAME)

这个是打包project的命令,打包project并导出 .xcarchive文件到相应路径。

  'xcodebuild archive -workspace %s -scheme %s -sdk %s -configuration %s  ONLY_ACTIVE_ARCH=NO -archivePath ./build/%s.xcarchive' %(workspace, scheme, SDK, CONFIGURATION, APPNAME)

这个是打包workspace的命令。

'xcodebuild -exportArchive -archivePath ./build/%s.xcarchive -exportPath %s/%s/%s_%s_%s -exportOptionsPlist ./AutoBuild/plist/%s.plist' %(APPNAME, output, VERSION,APPNAME,VERSION,CONFIGURATION,PROFILE)

最后一个命令是把.xcarchive文件导出为 ipa文件。
整个核心内容也就这几条命令。

自动打包功能前瞻

目前自己做的自动打包也就能导出 ipa 文件 ,其实自动打包的终极形态应该是

  1. 打包ipa 文件然后自动发布到内测网或自动验证并上传到AppStore。(现已实现)
  2. 发布完成后邮件通知相关测试人员。

目前博主正在努力研究中。。。
就目前来看,可能需要的操作很多,不便于在本文中讲述。

本文参考的资料

http://www.jianshu.com/p/bd4c22952e01
http://www.jianshu.com/p/1229476fbce4

这两篇文章给我的帮助很大,有很多地方讲解的比本文详细,但本文的终极目的就是提供一个可用的自动化打包流程。

有好的建议欢迎来与我互相探讨 -- LC.West
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 151,829评论 1 331
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 64,603评论 1 273
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 101,846评论 0 226
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,600评论 0 191
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,780评论 3 272
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,695评论 1 192
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,136评论 2 293
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,862评论 0 182
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,453评论 0 229
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,942评论 2 233
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,347评论 1 242
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,790评论 2 236
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,293评论 3 221
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,839评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,448评论 0 181
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,564评论 2 249
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,623评论 2 249

推荐阅读更多精彩内容