iOS开发

iOS渠道包相关

2019-01-07  本文已影响10人  蚂蚁牙齿不黑

一、渠道包应用场景:

打包完一个母包.ipa 后,各个渠道商可能会使用到不同的域名,icon 等等,所以各个渠道商就需要拿到他们专属的ipa去进行推广,如果针对每个渠道商都去修改代码单独打包,这样做有些费力,而且来回切换容易出错

二、解决办法:

修改ipa文件中指定的文件内容来区分不同的渠道,而ipa文件如果被修改了就需要重新签名,不然用户无法安装,总结来说就是两个步骤

三、IPA文件目录结构

3.1使用解压缩命令“unzip”解压缩当前文件夹的ipa 文件可以得到一个Payload文件夹,里面又一个.app文件,点击右键显示包内容可以看到ipa中的内容

image.png

3.2 观察ipa 文件目录结构不难发现文件大致可分为3类

四、修改ipa 中指定的文件并重新签名

4.1 准备工作
image.png

如上图我在打包ipa 通过xcode 在工程中预留了一个名为“DChannel”的plist文件,是一个字典格式的数据,其中只有一个字段“Channel”用于存放各个子包的渠道标示
准备好一个名为Entitlements的plist文件


image.png

4.2 通过脚本实现两步 修改文件和重新签名

# 输入的包名
name=$1
# $1 就是传进来的第一个参数 $2就是第二个参数

#echo 是打印的意思

echo "---ahh---"

echo ${name}

appName="${name}.app"

echo ${appName}

plistBuddy="/usr/libexec/PlistBuddy"

#configName="channel.plist"

configName="Payload/${appName}/DChannel.plist"

configNameNew="Payload"

ipa="${name}.ipa"

# 打好包后输出的文件夹名字

outUpdateAppDir="OutApps"

# 获取当前目录,并切换过去

currDir=${PWD}

echo ${currDir}

cd "${currDir}"

echo "-----${currDir}"

# 生成日志目录

#mkdir log

rm -rf Payload

#解压缩

unzip -o -q ${ipa} #>> log/unzipUpdateApp.log

#echo `ls Payload`

# 删除旧的文件,重新生成

rm -rf "${outUpdateAppDir}"

mkdir "${outUpdateAppDir}"

echo "------------------------开始打包程序------------------------"

#echo ""

# 渠道列表文件开始打包

#for line in $(cat TargetChanelList.txt)

#循环数组,批量打包时需要修改的渠道号和渠道Id  ("1174" "1173")
# 这里的参数可以从外面直接传过来,
ChannelID=("111" "222" "333")

echo ${#ChannelID[@]}

for ((i=0;i<${#ChannelID[@]};i++))

do

#echo是输出命令,可以忽略

echo "........正在打包渠道号:${ChannelID[$i]}"

#    cd Payload/${appName}

# 设置Channel.plist

echo "-----1----${PWD}"

#修改

$plistBuddy -c "set :Channel ${ChannelID[$i]}" ${configName}

echo "-----2----${PWD}"

rm -rf Payload/${appName}/_CodeSignature

# ipa包签名: codesign -f -s "iPhone Distribution: Distribution证书名字,打开钥匙串可以看到" --entitlements "Entitlements.plist" "Payload/${appName}"

codesign -f -s "iPhone Distribution: SEEKTOP SERVICE MANAGEMENT INC." --entitlements entitlements.plist Payload/${appName}

#Payload/Demo.app: replacing existing signature :这个时候是已经OK

zip -rq "${outUpdateAppDir}/${ChannelID[$i]}.ipa" "Payload"

echo "........打包已完成"

done

echo "------------------------程序打包已结束------------------------"

五、开始打包

在执行shell脚本打包前,你准备好的文件应该有4个,如下图


image.png

打开终端进入到当前渠道包这个文件夹 执行 脚本 “aibet”为ipa 的名字

sh ChannelPackage.sh aibet

执行完成后,最终会看到渠道包这个文件夹里多出了一个OutApps的文件夹,其中有3个ipa 就是分别贝标示为"111" "222" "333"的子包,为了检测效果,你可以进入到这3个子包的内容区看看他们的DChannel.plist中的Channel字段的值是否已经修改了


image.png
上一篇 下一篇

猜你喜欢

热点阅读