可能是最简单的iOS自动化打包方式:无需手动配置证书,无需填写配置文件名称,更无需配置Bundle Identifer,总之无需很多繁琐配置,让打包流程一句命令完成!下面将会分享两种打包方式,一种是快速打包(打包时间就在一眨眼),一种是基于shenzhen(速度会比较慢),都实现了一行命令完成打包并上传蒲公英!
注意:
- iOS自动化打包脚本:https://github.com/ys323945/iOSAutoPage/tree/master
- AppStore的包,还是建议使用Xcode打包。
Python实现iOS自动化打包详解
基于编译的打包
这种打包方式应该是目前所有打包方式中最快的,就是编译工程–找到.app文件–新建Payload文件夹–拷贝.app到Payload文件夹–压缩成zip–更改后缀名为ipa–完成!
演示过程如下图
过程自动化
注意:输入日志描述只能输入数字,非数字会报错。
在上图中,我们只需要执行python脚本,可以看到桌面很快生成了一个ProgramBag的文件夹,打开文件夹,彩蛋就在里面了!由于我写的脚本里包含了上传蒲公英的代码,网络不太好会影响上传时间,真正的打包时间是可以忽略不记的,也就是执行脚本,敲击回车就好了的事!
这里我们将打好的包自动上传到蒲公英网站,完成后自动打开下载地址,这个过程在网络好的条件下2分钟左右完成,99.9%的时间是发在上传包上!这里上传完成会自动打开到下载的网页。
原理实现
Python的具体代码:
1 | #!/usr/bin/env python |
def bulidIPA():其实就是liunx命令,通过脚本包装了一层,可以理解为我们以前在terminal手动输入的命令,现在是自动帮我们输入并执行了,大大解放了我们的双手!
1 | #打包之前先删除packBagPath下的文件夹 |
分析上面这一句,我用OC的伪代码来实现的话对应下面这句:所以上面的%s相当于OC中的%@,代表一种格式符,后面的appFileFullPath代表我们工程的.app存放的路径,PayLoadPath代表我们在桌面上新建的PayLoad文件路径
1 | copy("%@,%@",A,B) |
结合注释基本上代码的执行过程我们就一目了然了,至于前面的commands.getoutput是基于commands组件的命令,理解为可以在terminal执行命令即可,下面有一句代码需要说明:这是一句切换当前目录的命令
1 | os.chdir(packBagPath) |
等价于
1 | commands.getoutput('cd %s'%packBagPath) |
不要问我为什么没有用下面的命令,那是因为这句命令我这边执行不成功,被坑了很久,至于原因,还不知道为什么(如果你解决了,欢迎骚扰我),所以用上面python提供的命令代替了。
上传蒲公英脚本
1 | def uploadIPA(IPAPath): |
requests是一个网络请求的组件,我们可以把它类比为AFNetWorking,data是要传递的参数,files是要传递的文件,至于上传的参数key都是根据蒲公英提供的API来写的。上面的password代表安装app时所需要的密码,同时还有两个参数,USER_KEY和API_KEY,在蒲公英应用的位置可以找到,如图:
1 | def openDownloadUrl(): |
webbrowser也是一个组件库,这些组件库在使用时,和OC一样都要先import里面的地址代表蒲公英上应用的地址,拷过来粘贴即可!
配置永久参数
1 | appFileFullPath = '/Users/wubin/Library/Developer/Xcode/DerivedData/FotileStyle-doiplszeqpeztmcrysurltpnhepy/Build/Products/Debug-iphonesimulator/FotileStyle.app' |
上图中appFileFullPath就是我们工程文件中.app的地址,至于PayLoadPath和packBagPath只需要你将wubin用户名修改为你自己电脑的用户名即可!
shenzhen打包
shenzhen是一个打包相关的库,使用也非常方便,比第一中打包方式还要少一个路径配置,当然打包的速度相对比较慢,要使用下面的脚本,首先得安装shenzhen链接。
1 | #!/usr/bin/env python |
这里我主要是将shenzhen的打包命令”ipa build”封装在pythone脚本中,同时记录了打包的时间,经过测试打包的时间在4 ~ 7分钟左右,这个脚本中只需要配置蒲公英的USER_KEY和API_KEY,然后cd到当前工程目录,执行脚本即可!打包成功会在当前工程目录下生成ipa包和符号化文件!使用如下: