首先声明一点:上面地址的文章其实已经讲述的很详细了,但是我为什么还要写这篇文章呢。因为我早上洗脸的时候突然想到我为什么不把app的文件路径直接作为参数传过去呢,那样的话我的py文件就不用每个项目都再打开修改路径了不是。

鉴于此,我就想到了写这篇文章。

显然,我就是在原有基础上进行了参数传递这个操作,我们将需要打包的app文件路径在终端作为Python执行的一个input部分输入,就可以生成一个和项目名称相同的ipa文件(这点也做了优化,原文生成的统一是Payload.ipa,个人感觉不是很便于区分。拙见勿喷~~~)。

那么,具体的代码实现是怎么样的呢。

# 输入路径
fullPath = input('请输入您要打包文件的路径:')
print ("\n您输入的文件路径为:%s\n" % fullPath)
# 倒序查找全路径中的项目名称,rfind方法获取到的是索引值
print("----rfind:%s"%fullPath.rfind('/'))
# 进行名称字符串的截取(原来的路径字符串并没有被改变)
projectName = fullPath[fullPath.rfind('/')+1:-4]
# 设置打包文件的路径
ipaPath = '/Users/UserName/Desktop/'+projectName
ipaDir = '/Users/UserName/Desktop/'+projectName+'Ipa'

以上是优化代码的主要部分。

主要操作就是对输入的内容进行了字符串截取,拿到了一个项目名称相同的字符串作为后面要用到的ipa包的包名。

其中的用户名UserName其实就是你电脑的用户名,大家用到的时候记得更改就好。

下面贴出最终的代码:

#!/usr/bin/env python
#coding=utf-8
import os
import commands
def bulidIPA():
# 输入路径
fullPath = input('请输入您要打包文件的路径:')
print ("\n您输入的文件路径为:%s\n" % fullPath)
# 倒序查找全路径中的项目名称,rfind方法获取到的是索引值
print("----rfind:%s"%fullPath.rfind('/'))
# 进行名称字符串的截取(原来的路径字符串并没有被改变)
projectName = fullPath[fullPath.rfind('/')+1:-4]
# 设置打包文件的路径
ipaPath = '/Users/UserName/Desktop/Payload'
ipaDir = '/Users/UserName/Desktop/'+projectName+'Ipa'
# 创建Payload文件夹
commands.getoutput('mkdir -p %s' % ipaPath)
# 将app拷贝到PayLoadPath路径下
commands.getoutput('cp -r %s %s'% (fullPath, ipaPath))
# 在桌面上创建packBagPath的文件夹
commands.getoutput('mkdir -p %s' % ipaDir)
# # 将PayLoadPath文件夹拷贝到packBagPath文件夹下
commands.getoutput('cp -r %s %s' % (ipaPath, ipaDir))
#
# # 删除桌面的PayLoadPath文件夹
commands.getoutput('rm -rf %s' % ipaPath)
#
# 切换到当前目录
os.chdir(ipaDir)
# 压缩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')
bulidIPA()

注意点:

1-python对换行对齐要求很严格,代码缩进如果不对的话就会编译不过,这个需要特别注意

2-终端输入路径时候,要保证你的项目是在“Generic iOS Device”选项下编译出来的。并且输入路径需要在前后加上单引号。切记。

3-rfind是Python字符串倒序查找索引的方法。

4-文件路径的查找方法,直接通过Xcode找到打开项目找到编译后的.app文件,拖过来就是全路径了。

以上就是关于使用Python实现iOS自动化打包的方法了,希望可以帮到大家。

要不是因为我懒我也不会想到这个优化方法了,不知道是不是真正算得上优化,但是我个人觉得还是有点好处的。

0511更新:通过和原文作者的沟通,对代码进行了修正更改

主要是因为打包的文件夹和文件需要用Payload来命名,如果不是Payload的话虽然也会生成一个ipa文件,但是这个文件是不能正常安装使用的。亲测。