美文网首页iOS开发
iOS渠道包相关

iOS渠道包相关

作者: 蚂蚁牙齿不黑 | 来源:发表于2019-01-07 18:18 被阅读10次

一、渠道包应用场景:

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

二、解决办法:

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

  • 修改ipa文件
  • 重新签名

三、IPA文件目录结构

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

image.png

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

  • 项目中所用到的资源文件
  • _CodeSignature文件夹(签名文件)
  • embedded.mobileprovision (证书配置文件)

四、修改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

相关文章

  • iOS渠道包相关

    一、渠道包应用场景: 打包完一个母包.ipa 后,各个渠道商可能会使用到不同的域名,icon 等等,所以各个渠道商...

  • 配置Flutter+VSCode运行iOS多渠道

    前言:iOS多渠道配置比较普遍,能很方便解决生产包和测试包分开进行打包 一、iOS 多渠道配置实践 1、创建多个t...

  • iOS渠道包分析

    最近老大喊我们研究下渠道包的统计,要求是安卓和iOS都能用;参看个各位大大的文章,最终觉得App推广渠道追踪的5种...

  • ios打渠道包

    前提: 游戏嵌入SDK,用Adhoc配置文件打出母包.ipa,其中渠道id存储在SDK的.bundle的plist...

  • iOS自动化打包思路及方法

    为何要自动化打包 iOS程序包和渠道包格式 自动化打包思路

  • iOS创建大量类似的渠道包

    iOS创建大量类似的渠道包 何为渠道包 同一个项目源码,但是名字,启动图,bundleid等不一样。同样请求里面也...

  • iOS 配置多套 App 图标

    需求背景: iOS Testflight公测包因渠道限制存在过期问题(最长90天)有效,过期后公测包无法打开使用,...

  • IOS游戏马甲包SDK应该如何正确混淆

    iOS游戏渠道马甲包提审,必然是要接入渠道的SDK,进行,登录,注册,角色信息提交以及支付等。不敢确认SDK是否会...

  • iOS自动化发布--Fastlane本地构建IPA并分发

    此篇文章相关代码已经上传至GitHub,相关代码请移步build_ios_app iOS自动化发布测试包到fir....

  • Android_腾讯VasDolly多渠道打包神器(2021版)

    本文目标 高效构建渠道包 什么是多渠道包 渠道包就是要在安装包APK中添加渠道信息,也就是channel,对应不同...

网友评论

    本文标题:iOS渠道包相关

    本文链接:https://www.haomeiwen.com/subject/quhprqtx.html