使用脚本管理xcode多渠道图片资源

在实际开发过程中,经常会遇到使用一个xcode工程来管理多个渠道定制版的情况,这些定制版往往代码都大部分相同,差别可能在于每个页面上面的UI、切图不一样~,如果我们把每个定制版不同的切图全部放进工程里面,这样打包出来的安装文件ipa就会增加额外的大小,所以这篇文章就是介绍在编译时怎样利用一个简单的脚本把多余的定制版资源去掉。

新建一个工程,在TARGETS——Build Phases下我们看到�下方的是xcode在构建阶段的顺序,无论是平时在Build、Run、或是Archive的时候都会按顺序执行下面的几项。最后一项是Copy Bundle Resources,会将项目中的.bundle、.xib� 、.storyboard文件、图片asset文件等一起复制进去,所以我们新建一个New Run Script Phase, 并将它放置在Copy Bundle Resources之上。

96CA0069-9FEB-4699-91AD-7D673AE3E0CA.png
597652B3-C16F-409E-80CA-2534F5D59751.png

脚本的思路是:
1、从xcassets中删除上一个定制版的资源图片
2、把本次需要运行的定制版的图片复制到xcassets中去,由于平时在xcassets中每添加一张图片,xcode都会在资源目录下自动创建一个content.json文件(如图所示),里面包含了对应的图片名称以及比例信息,所以使用脚本添加图片时候还需创建相应的json文件。

15FE66C6-F48D-496B-8C74-26BC4D5D352F.png

由于在脚本中创建并为每个文件创建一个content.json文件太麻烦,所以事先我们在工程目录下复制一个content.json文件,并把json里面的描述改为“filename”为“123”、“scale”为“2x”。
在脚本中只要进行把这个json文件在每张图片目录下复制一份,并把json中的文件名改为对应的图片名即可。

下面是完整的脚本代码:

echo -e "\n==== Start Copy Channel Resource ===\n"

##
## Copy Channel Resource Script
##

#---------------- Channel Config 路径 ----------------------------------------------------------------
ChannelConfigFolderPath="${SRCROOT}/ChannelConfig"                      #定制版文件夹路径
ChannelName="123"                                                               #渠道名称
ChannelResourceFullPath="${ChannelConfigFolderPath}/${ChannelName}"        #对应的资源路径
TargetAssetsFullPath="${SRCROOT}/ScriptDemo/Assets.xcassets/"                    #工程中xcassets的位置
ReSourceDirName="ChannelResource"                                           #存放定制版图片的文件夹名字

echo "-ShellWork- Channel Path: ${ChannelConfigFolderPath} -"

#---------------- Remove Others Channel Resource 删除多余定制版资源 ---------------------------------
AppChannelResource="${ChannelResourceFullPath}/ChannelResource"
ImageJson="${ChannelResourceFullPath}/ChannelResource/Contents.json"
echo "________${AppChannelResource}"

for fileDir in "${TargetAssetsFullPath}"/*; do
    if [[ ${fileDir} =~ ${ReSourceDirName} ]]
    then
    echo "删除现有资源:${fileDir}"
    rm -r ${fileDir}
    fi
done
#将定制版的资源图片转化为xcode能够识别的格式
for somePng in "${AppChannelResource}"/*; do
    if [[ "${somePng##*.}" == "json" ]]
    then
echo ${somePng}
    elif [[ "${somePng##*.}" == "png" ]]
    then
        imageFile=$(basename ${somePng})
        echo "_______${imageFile}"
        imageDir=${imageFile/\.png/\.imageset}
        echo "_______${imageDir}"
        cd ${AppChannelResource}
        mkdir ${imageDir}
        #将图片拷贝入“文件名.imageset”文件夹,并进入该文件夹
        mv -f ${imageFile} ${imageDir}
        cp -f ${ImageJson} ${imageDir}
        cat ${imageDir}/Contents.json
        sed 's/123.png/'${imageFile}'/g' ${imageDir}/Contents.json > ${imageDir}/Contents.json.tmp
        mv ${imageDir}/Contents.json.tmp ${imageDir}/Contents.json
    fi
done

#复制定制版资源文件到工程Assets
cp -r ${AppChannelResource} "${TargetAssetsFullPath}/${ReSourceDirName}"

把脚本拉进去工程刚才新建的Build Phases之中,注意开放脚本文件的权限

B923C8CE-927D-4F04-8664-D1167F8C5F0A.png

点击Run,可以在xcassets中看到三张图片已经被替换,并且在finder中生成了对应的content.json文件。

A4A55010-2FB6-4966-967D-FFB7B362060D.png
CD9E9F90-B026-440D-822C-E4365D185FDA.png

最后是更换图片前后运行的效果


7AEB63FD-2DA2-456B-8351-0319FC87CD59.png

另外appicon与启动页也可以采用同样的方法来进行更换。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,440评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,814评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,427评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,710评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,625评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,014评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,511评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,162评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,311评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,262评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,278评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,989评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,583评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,664评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,904评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,274评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,856评论 2 339

推荐阅读更多精彩内容