可能是最简单的iOS自动化打包方式:无需手动配置证书,无需填写配置文件名称,更无需配置Bundle Identifer,总之无需很多繁琐配置,让打包流程一句命令完成! 快速打包(打包时间就在一眨眼),都实现了一行命令完成打包并上传蒲公英!

一:基于编译的打包

这种打包方式应该是目前所有打包方式中最快的,就是编译工程--找到.app文件--新建Payload文件夹--拷贝.app到Payload文件夹--压缩成zip--更改后缀名为ipa--完成

我们演示过程如下图,手动操作

自动化上面的过程:

其实上面的打包过程快的话2分钟左右可以完成,作为一个追求效率的攻城狮,怎么可能满足在此,而基于测试包的频繁性,我们肯定不想一直做这样重复性而没多少技术含量的工作,接下来,我们就把这个过程自动化!

在上图中,我们只需要执行python脚本,可以看到桌面很快生成了一个ProgramBag的文件夹,打开文件夹,彩蛋就在里面了!由于我写的脚本里包含了上传蒲公英的代码,这个包有28.3M,网络不太好会影响上传时间,真正的打包时间是可以忽略不记的,也就是执行脚本,敲击回车就好了的事!

这里我们将打好的包自动上传到蒲公英网站,完成后自动打开下载地址,这个过程在网络好的条件下2分钟左右完成,99.9%的时间是发在上传包上!这里上传完成会自动打开到下载的网页。

源码实现:

演示过程完毕,接下来我们就来看看原理是怎么实现的吧!下面开始讲解Python的具体代码~ 静心看完,相信你能看懂,说不定自己也可以很快写一个脚本,用来解决平常重复性的工作。下面是核心打包脚本:

#编译打包流程
def bulidIPA():
    mkdir(PayLoadPath)
    #将app拷贝到PayLoadPath路径下
    commands.getoutput('cp -r %s %s'%(appFileFullPath,PayLoadPath))
    #在桌面上创建packBagPath的文件夹
    commands.getoutput('mkdir -p %s'%packBagPath)
    #将PayLoadPath文件夹拷贝到packBagPath文件夹下
    commands.getoutput('cp -r %s %s'%(PayLoadPath,packBagPath))
    #删除桌面的PayLoadPath文件夹
    commands.getoutput('rm -rf %s'%(PayLoadPath))
    #切换到当前目录
    os.chdir(packBagPath)
    #压缩packBagPath文件夹下的PayLoadPath文件夹夹
    commands.getoutput('zip -r ./Payload.zip .')
    print "\n*************** 打包成功 *********************\n"
    #将zip文件改名为ipa
    commands.getoutput('mv Payload.zip Payload.ipa')
    #删除payLoad文件夹
    commands.getoutput('rm -rf ./Payload')

有没有似曾相识的感觉?看绿色文字的部分,其实就是liunx命令,通过脚本包装了一层,可以理解为我们以前在terminal手动输入的命令,现在是自动帮我们输入并执行了,大大解放了我们的双手!

 #将app拷贝到PayLoadPath路径下
    commands.getoutput('cp -r %s %s'%(appFileFullPath,PayLoadPath))

我们来分析上面这一句,我用OC的伪代码来实现的话对应下面这句:所以上面的%s相当于OC中的%@,是一种格式符,后面的appFileFullPath代表我们工程的.app存放的路径,PayLoadPath代表我们在桌面上新建的PayLoad文件路径

copy("%@,%@",A,B)

然后结合注释基本上代码的执行过程我们就一目了然了,至于前面的commands.getoutput是基于commands组件的命令,理解为可以在terminal执行命令即可,下面有一句代码需要说明:这是一句切换当前目录的命令

 os.chdir(packBagPath)

等价于

commands.getoutput('cd %s'%packBagPath)

不要问我为什么没有用下面的命令,那是因为这句命令我这边执行不成功,被坑了很久,至于原因,还不知道为什么(如果你解决了,欢迎骚扰我),所以用上面python提供的命令代替了。

上传蒲公英、fir等平台

至此,我们将第一步的手动打包过程实现了自动话,如果不需要上传蒲公英,上面的9行命令就够用了!接下来我们实现上传蒲公英的脚本:

#上传蒲公英
def uploadIPA(IPAPath):
    if(IPAPath==''):
        print "\n*************** 没有找到对应上传的IPA包 *********************\n"
        return
    else:
        print "\n***************开始上传到蒲公英*********************\n"
        url='http://www.pgyer.com/apiv1/app/upload'
        data={
            'uKey':USER_KEY,
            '_api_key':API_KEY,
            'installType':'2',
            'password':'',
            'updateDescription':"测试自动化打包"
        }
        files={'file':open(IPAPath,'rb')}
        r=requests.post(url,data=data,files=files)
def uploadIPA(IPAPath):
表示定义了一个函数uploadIPA,接受一个参数

requests是一个网络请求的组件,我们可以把它类比为AFNetWorking,data是要传递的参数,files是要传递的文件,至于上传的参数key都是根据蒲公英提供的API来写的。上面的password代表安装app时所需要的密码,同时还有两个参数,USER_KEY和API_KEY,在蒲公英应用的位置可以找到,如图:

上传完成

最后一步就是上传成功,帮我们自动打开下载页:

def openDownloadUrl():
    webbrowser.open(r'https://www.pgyer.com/manager/dashboard/app/40c633aa8dc0ba15191632860558825e',new=1,autoraise=True)
    print "\n*************** 更新成功 *********************\n"

webbrowser也是一个组件库,这些组件库在使用时,和OC一样,都要先import,里面的地址代表蒲公英上应用的地址,拷过来粘贴即可!

整体流程:

整体的脚本就完了,最后在使用时配置下面的几个参数即可,一次配置,永久使用!

appFileFullPath = '/Users/Qinz/Library/Developer/Xcode/DerivedData/DDDS-bcghxucdqelptddawpsfmvjtoefm/Build/Products/Debug-iphoneos/DDDS.app'
PayLoadPath = '/Users/Qinz/Desktop/Payload'
packBagPath = '/Users/Qinz/Desktop/ProgramBag'

#上传蒲公英
USER_KEY = "61ded40a68axxxxxxe9fd278acd2"
API_KEY = "a4fe2724dc6d8cxxxxxxf1994eec219e"

上图中appFileFullPath就是我们工程文件中.app的地址,至于PayLoadPath和packBagPath只需要你将"Qinz"用户名修改为你自己电脑的用户名即可!
下图演示快速设置appFileFullPath的过程:

到此,自动化打包方式讲解完毕!


基于上面的思路,同样可以写shell脚本,在AI的帮助下很快就可以完成。


# 参考文章 https://www.jianshu.com/p/1f47066da6f7

Sourse=/Users/lele/Library/Developer/Xcode/DerivedData/meiyimei-ggzkxcmdryswuwcvamlxpyjvwkav/Build/Products/Debug-iphoneos/meiyimei.app

PayLoad=/Users/lele/Desktop/Payload

bag=/Users/lele/Desktop/ProgramBag

mkdir -p ${PayLoad}

cp -r ${Sourse}  ${PayLoad}

mkdir -p ${bag}

cp -r ${PayLoad} ${bag}

cd ${bag}

zip -r ./Payload.zip .

mv Payload.zip Payload.ipa

fir p ${bag}/Payload.ipa -T a3142038f1aaxx1b7c2f2c80xd891bed5588


rm -r ${PayLoad}
rm -r ${bag}

open https://fir.im/xxxx


链接:https://www.jianshu.com/p/1f47066da6f7

Logo

一站式 AI 云服务平台

更多推荐