本文的实现方案包括脚本参照的是简书的一篇文章ios打渠道包,根据我项目中的实际情况做了修改,在此记录一下整个实现过程。
首先,我的需求是,在手上已有ipa安装包,也就是母包的情况下,修改母包中的某个文件中作为渠道号的值,生成新的ipa安装包,也就是带有渠道号的渠道包。
ipa包,我们可以视为一个压缩包,使用解压工具对其解压可以得到一个名叫Payload的文件夹:
Payload文件夹中是一个.app文件,右键显示包内容可以看到其中的文件:
其中的Channel.plist文件就是在母包打包之前在Xcode工程中新建的,用于存储渠道号等信息,我在这个plist文件中设置了叫Channel的字段,可以随意给一个默认值。之后我们在给母包打渠道号时,就是要修改plist文件中的Channel值,修改后重新压缩Payload文件夹生成渠道包,此时渠道包运行后,程序中获取的Channel值就变成了对应的渠道号。
下面是操作步骤:
准备文件:
1. ChannelList.txt:
内容为渠道号,如:123 456 789。注意如果使用mac的文本编辑应用新建文件,需要存储为纯文本,否则读取出来会是乱码:
2. ChannelPackage.sh:
脚本文件,执行解压母包、修改Channel值、重新压缩生成渠道包的过程,内容如下,在开头提到的文章ios打渠道包中的脚本上,根据实际情况进行了修改。其中PlistBuddy为mac提供的plist工具,需引用路径/usr/libexec/PlistBuddy使用,用于执行修改Channel值操作:
#!/bin/bash # 输入的包名 name="Demo" echo "------SDK渠道包----------" appName="${name}.app" plistBuddy="/usr/libexec/PlistBuddy" configName="Payload/${appName}/Channel.plist" ipa="${name}.ipa" # 打好包后输出的文件夹名字 outUpdateAppDir="ChannelPackages" # 获取当前目录,并切换过去 currDir=${PWD} cd ${currDir} echo "-----${currDir}" rm -rf Payload #解压缩-o:覆盖文件 -q:不显示解压过程 unzip -o -q ${ipa} # 删除旧的文件,重新生成 rm -rf ${outUpdateAppDir} mkdir ${outUpdateAppDir} echo "------------------------开始打包程序------------------------" # 渠道列表文件开始打包 for line in $(cat ChannelList.txt) #循环数组,修改渠道信息 do #修改 $plistBuddy -c "Set :Channel $line" ${configName} #以下为企业签重签过程,本文不涉及 #rm -rf Payload/${appName}/_CodeSignature #cp AdHoc配置文件 替换 Payload/${appName}文件下的embedded.mobileprovision #cp AdHoc.mobileprovision "Payload/${appName}/embedded.mobileprovision" # ipa包签名: codesign -f -s "iPhone Distribution: Distribution证书名字,打开钥匙串可以看到" --entitlements "Entitlements.plist" "Payload/${appName}" #codesign -f -s "iPhone Distribution: Distribution证书名字" --entitlements "Entitlements.plist" "Payload/${appName}" #Payload/Demo.app: replacing existing signature :这个时候已经OK #重签完毕 #压缩 -r:递归处理,将指定目录下的所有文件和子目录一并处理 -q:不显示处理过程 zip -rq "${outUpdateAppDir}/$line.ipa" Payload echo "........渠道${line}打包已完成" done echo "------------------------程序打包已结束------------------------"
3. 将准备好的3个文件放在同一文件目录下,打开终端,cd到文件所在目录,执行sh ChannelPackage.sh:
文件目录变成这样:
至此,打渠道包流程完成。此时的渠道包是不能安装成功的,ipa包的内容被修改了之后需要进行重新签名才能够正常安装,重签名流程可参考开头提到的文章ios打渠道包。