上篇文章介绍了自动化打包上传蒲公英,适合单个应用的打包上传。由于公司业务需要,需要给不同客户个性化定制APP,这些定制APP功能相同,不同的只是bundle id和资源图片,之前一直手工定制。但是我们公司的销售人员太给力,现在有四十多个定制版APP,每次发新的版本,需要重新定制,所以每次发版就很苦逼。狠了狠心研究了一下自动化批量打包上传,和大家分享一下。
首先是项目工程结构的变化:
这里参考了唐巧大神写的一篇博客:猿题库iOS客户端的技术细节(一):使用多target来构建大量相似App
先简单介绍一下 Xcode 中 target 的概念,苹果在文档中写道:
Targets that define the products to build. A target organizes the files and instructions needed to build a product into a sequence of build actions that can be taken.
在 Xcode 的一个项目中,可以允许建立多个编译的 target,每个 target 代表着最终编译出来的一个 App 文件,在每个 target 中,可以添加不同的编译源文件和资源文件。最终,通过我们在不同 target 之间,修改其Copy Bundle Resources和Compile Sources配置,使课程之间的差异性得到实现。
1.先创建第二个target
点击工程名称,右侧会出现PROJECT和TARGETS,点击你现在的target,假如叫WRC,右键弹出菜单中,选择Duplicate,复制一个相同的target,复制的target一般叫WRC copy,WRC copy和WRC的设置(编译条件、源文件、资源文件)完全一样,此时你可以根据需要修改WRC copy的编译条件和资源文件了。
创建完新的target后,修改名称<WRC_标记>,Xcode也会自动帮我们创建对应Info.plist文件,修改成<WRC_标记-info.plist>。点击xcode左上角Run右边的工程名称,在下拉框中选择Manage Schemes,在弹出框中修改scheme名称。
创建新的targets通过预编译宏来区分
当创建多个target后,你添加资源文件时,通过选择添加的target来控制不同版本的内容,当你在公共的代码片段内做使用不同target做不同的操作(如:target1和target2的环境地址不一样),预编译宏可以帮到你,再说一下预编译宏的事情:target->Build Setting
再此创建一个宏,比如TARGET_VERSION_LITE,等于不同的值代表不同的target,代码中通过这个标记来做相应处理。
#if TARGET_VERSION_LITE==0
#define SERVER_URL @"https://test1.feezu.cn"
#elif TARGET_VERSION_LITE==1
#define SERVER_URL @"https://test2.feezu.cn"
......
#else
#endif
2.配置不同的Copy Bundle Resources
通过配置不同target的Copy Bundle Resources资源图片来定制显示不同的APP,配置不同target的Compile Sources来实现功能逻辑上的不同。target->Build Phases
3.创建新的类、添加图片资源
当我们创建类或者添加图片资源时,可以通过勾选相应的target来区分。
4.批量化打包上传蒲公英
使用Python语言和苹果提供的xcodebuild来构建脚本文件来实现批量自动化打包上传。
这里借鉴了大神写的脚本文件
功能流程介绍:
打包IPA --- > 上传蒲公英 ---> 打包IPA --- > 上传蒲公英 ...
使用说明(针对iOS开发者)代码地址
1、安装HomeBrew
安装命令:
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
2、安装xctool用于iOS项目打包
$ brew install xctool
3、安装pip
(1).我们先获取pip安装脚本:
$ wget https://bootstrap.pypa.io/get-pip.py
如果没有安装wget可以执行安装
$ brew install wget
(2).安装pip
$ sudo python get-pip.py
4、安装Python虚拟环境virtualenv
$ sudo pip install virtualenv
5、进入下载的项目所在的目录
$ cd(you path)
$ virtualenv venv 执行此命令后会在当前目录下创建一个venu文件夹
New python executableinvenv/bin/python
Installing distribute............done.
$ venv/bin/pip install -r requirements.txt
6、配置项目
修改Config.py文件,如何配置根据注释来。修改template文件夹下的config.plist,根据config.plist中的数据来批量定制不同的APP。
7、自动打包(需要在脚本文件的根目录下)
$ venv/bin/python Client.py
打包完成后,可以在history文件夹下看到生成的ipa包