刚开始听到自动化打包这个词的时候,我表示很惊讶,还可以这样玩儿?
然后心里一直觉得这么高大上的东西应该有点难度吧,在网上搜索了一下,大概扫了几篇文章,发现大片大片的文字,脑袋一下就懵逼了,很不情愿去阅读大量的废话,但是又没有找到一篇简洁易懂,直入正题的文章,后来想想,这东西还是必须要学一学,听着就这么高大上,装逼效果杠杠的,然后耐心去查找资料,原本我是一个iOS程序猿,对于一个刚开始接触python的新手来说,写一个python程序去做iOS的自动打包是有那么一点懵逼,不过还好,有时候真的深有体会,好记性不如烂笔头,但是对于我来说,不光是记性,在网上找了一个python程序自己跟着敲了一遍,然后再回过头去一段一段理解过来,就大概明白是什么意思了,如果光靠眼睛去看,我表示真的很难懂,所以,任何事情还是都需要亲自做过了才更容易明白是怎么回事。
同样废话了一大堆,就当是和大家交流一下学习心得吧,下面进入正题:
我们要明确我们的目的,是做iOS自动打包,所以,我们先要知道,我们是怎样一步一步的去打包iOS项目的,然后再通过python程序,将整个流程串联起来,实现自动进行打包的这么一个功能。(因为现在进行iOS开发,我们都会用到pods这个工具来管理一些三方库,所以这里我就只介绍对于使用pods的工程打包的命令,对于没有使用pods管理工具的项目打包的命令会不一样,有需要的同学可以自己去查一下资料)
我们知道iOS打包时一般有两个步骤:
1.archive
2.导出ipa包
我们就可以根据这两个步骤来进行,既然是自动化,肯定就不能和手动的那样一样的方式,当然是使用终端命令的方式来进行打包,下面直接上命令:
第一步:生成archive命令
xcodebuild -workspace ProjectName.xcworkspace -scheme scheme -archivePath ./build/ProjectName.xcarchive archive
上面这条命令就是archive的命令,我们重点关注里面加粗显示的三个地方,ProjectName是你的工程名字ProjectName.xcworkspace就代表你使用pods时生成的工作区,后面的scheme代表你项目中设置的scheme名,后面的./build/ProjectName.xcarchive这部分是archive后生成的文件的路径,这里我是在我的工程的根目录下面进行的,所以直接在根目录生成一个build文件夹放archive生成的文件。(不用担心会产生垃圾文件,一会我们在写python程序的时候会在导出ipa后将这个文件夹里面的垃圾文件进行删除的,后面如果有需要想看看这个文件是什么的同学可以把python代码里面的清除方法注释一下,到build这个文件夹下查看,build文件夹在工程的根目录中)
第二步:导出ipa命令
xcodebuild -exportArchive -exportOptionsPlist ./ProjectName/info.plist -archivePath ./build/ProjectName.xcarchive -exportPath ~/Desktop/
我们同样只需要关注三个地方的参数就可以了,ProjectName就是我们的项目名字,同样./build/ProjectName.xcarchive就是我们放archive产生的文件的路径,然后~/Desktop/就是我们导出ipa包时存放的位置了,这里我是将导出的ipa包放在了桌面,因为打完包以后可以方便我使用。
了解了我们命令打包iOS项目需要用到的两条主要命令以后,我们接下来就可以编写python程序了,这里我用到的是pyCharm CE这个工具编写python程序,看了网上有一些用python写了自动打包程序的,内容太杂,看起来很费劲,里面还有自动将ipa包上传到第三方托管平台等的代码,这里方便大家学习,我就只说怎么将ipa包自动化打包然后导出来,如果有需要上传第三方平台的同学的可以去看看其他文章,因为我们现在暂时没有用到第三方平台,我们用的自己的服务器,对大家可能不适用,所以就不介绍了,然后后面如果我要用到,会再写一篇文章的。
我们在编写python程序的时候会用到subprocess这个第三方库,直接新建一个python程序,然后import subprocess这个库,如果已经有这个库就可以直接使用了,如果没有这个库,就需要使用python的第三方库管理工具pip进行安装了,这里使用pip安装python的第三方库的时候有可能会有一些小伙伴会遇到报错的情况,我在另外一篇文章《使用python第三方管理工具pip安装三方库时报错解决办法》里面有讲到,遇到这个问题的小伙伴可以去看一下。
准备好这个库以后,我们就来直接开始编写python程序了。
第一步:
import subprocess
引入这个库,然后定义一个全局的属性,用于表示导出ipa包需要存放的位置路径,方便后面根据自己的需要修改
EXPORT_MAIN_DIRECTORY ="~/Desktop/"
然后我们进行第一个步骤:archive
python进行archive的方法
代码里面注释已经写得很清楚了,简单易懂,这里就不和大家废话了,下一个步骤:
将archive的文件导出成ipa包,在上面的代码里面可以看到打包成功后是调用的exportIpa()这个方法进行导出的:
python导出ipa包的方法
在导出ipa包之后我们会调用cleanArchiveFile()这个方法对之前产生的垃圾文件进行清除,以免多次打包以后占用我们的工程目录下的空间,下面是清除这些文件的方法:
python清除文件的方法
请大家忽略我的工程名字,测试使用。
到这里我们的python自动化打包小程序就写完了,等你也写完 的时候就会感觉,其实还是挺简单的嘛。
不要着急,最后一步,没有这一步,这个python程序也运行不起来啊
在主函数中调用我们编写的方法:
然后保存,收工,如果不出意外的话,前提是你得写对,这个小程序就完成了,然后就可以打开终进行测试了,在终端里进入你放这个python程序的目录下,(这里申明一下,我写的这个python程序的名字叫做autobuild.py)直接输入命令:
python autobuild.py
然后回车,如果你看到终端不断的打印出build的信息,那么恭喜你,你成功了,接下了就是等待,等待build完成,主要就是build的时间久一点,build完以后导出ipa包其实不到10秒钟就好了,等到你的桌面出现了一个新的ipa包,你的自动打包功能就完成了,然后我们进入到build这个文件夹下面去查看,build生成的xcarchive文件也被删除了,这个小程序就算是成功完成了,以后我们只要想对工程进行打包测试的时候只需要在终端输入python autobuild.py这个命令就可以先忙着其他的事情等到ipa包自动出现了,再也不用手动去一步一步的点击下一步,随时盯着进度等着点下一步了