三分钟集成自动打包
推荐一个自动打包库 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
5. 运行结果
最终打包结果如图出现 ** EXPORT SUCCEEDED **
即打包成功,赶紧去Packge
文件夹看看吧。
如果出现了错误,请检查一下配置信息有没有错误。
ipa上传
目前支持三种上传方式,分别为:蒲公英、Fir.im、AppStore
1.蒲公英上传
①需要先到蒲公英申请账号,拿到两个Key,USER_KEY
和 API_KEY
②打开上传开关,并填入上述两个key。
OPEN_PYUPLOAD = True #是否开启蒲公英上传功能 True False
USER_KEY = "************"
API_KEY = "************"
2. Fir.im上传
①需要先到Fir.im申请账号,拿到 API Token
②配置本地 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 = "************"
集成问题向导
-
请仔细检查脚本中的配置是否有误。
特别是下面这一行,如果用了 Pod 请启用这一行PROJECT = None
-
确保有
Xcode
的自带工具Command Line Tools
,如果没有请执行如下命令安装。xcode-select --install
-
确保
Xcode 8
在应用程序里,而不是把Xcode 8
装在其他地方。 -
如使用AppStore上传功能,请确保手动上传AppStore不出现错误。
若出现上传成功,但在 iTunes Connect 中显示包无效,一般是隐私权限问题,需在 info.plist 里添加权限。(相机、麦克风、照片等) -
如果上传蒲公英时失败,出现
curl: (26) couldn't open file "~/Desktop
错误,请替换路径“~/Desktop” 为 “/Users/用户名
/Desktop/” 。
自动打包的原理
其实自动打包有两种方式
xcodebuild+xcrun
和xcodebuild
,但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 文件 ,其实自动打包的终极形态应该是
- 打包ipa 文件然后自动发布到内测网或自动验证并上传到AppStore。(现已实现)
- 发布完成后邮件通知相关测试人员。
目前博主正在努力研究中。。。
就目前来看,可能需要的操作很多,不便于在本文中讲述。
本文参考的资料
http://www.jianshu.com/p/bd4c22952e01
http://www.jianshu.com/p/1229476fbce4
这两篇文章给我的帮助很大,有很多地方讲解的比本文详细,但本文的终极目的就是提供一个可用的自动化打包流程。