iOS开发笔记之通过ipa母包生成多个ipa渠道包的自动化实现

本文的实现方案包括脚本参照的是简书的一篇文章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打渠道包

猜你喜欢

转载自blog.csdn.net/zzyeeaa/article/details/80651218