【IconOverlaying】在AppIcon上显示自定义信息

前言

在项目的QA阶段,如果有一种途径可以让测试的小姐姐们知道当前App是什么版本,以及包是inhouse还是adhoc的,就可以节省不少确认当前App包信息的时间,定位Bug也会更方便许多。
例如这样:


在AppIcon上显示版本信息

一目了然有没有!每次要验证问题前都可以方便的知道要不要更新新包(以svn版本号为判断基准)、清楚需要在哪种打包方式打的包上验证,甚至可以尽情打开自己的脑洞,DIY自己的AppIcon!

而这一切都得益于krzysztofzablocki这位大神写一个脚本IconOverlaying,github地址在这IconOverlaying。实际上这位大神已经将IconOverlaying集成到KZBootstrap这个插件中了,同样奉上github地址KZBootstrap

在项目中用CocoaPods添加KZBootstrap后,我们的App就已经具有了一个经过默认修改的AppIcon。但如果不想只因为用到这个小功能就多引用一个Pod,或者需要定制属于自己的AppIcon,那本文接下来的内容也许会对你有帮助。

1、说明

在真正配置IconOverlaying前,可以简单了解一下它是怎么运作的。简单来说就是在App编译打包成.app之后,到利用证书签名为.ipa之前的这两个步骤中,利用脚本将我们需要的信息合成到.app包中的AppIcon.png上。

阅读大神提供的Shell脚本,我们可以发现以下几点:

  1. .app包的路径、icon文件名称、项目信息等都可以通过Xcode的环境变量和info.plist获取。
  2. git(svn)的版本信息、当前分支,可以通过git(svn)的相关脚本命令获取。
  3. 图片的合成依赖ImageMagick这个工具,而ImageMagick则依赖于GhostScript,所以这两个工具都需要先安装好。

知道这些之后也算心里有数了,接下来开始集成这个功能到我们的项目中。

2、集成

配置IconOverlaying十分简单,步骤大概为:

  1. 确保ImageMagickGhostScript已经安装,安装方法是在命令行中用brew安装。
Tidus$ brew install imagemagick
Tidus$ brew install ghostscript
  1. 在我们的项目中随便创建一个.sh文件,然后复制大神提供的Shell脚本中的内容粘贴到我们的.sh文件。
  2. 在Xcode中选中对应的Target -> Build Phases -> 左上角New Run Script Phase,在Shell文本框中输入
"${SRCROOT}/你的项目名/刚才新建的sh文件.sh"
##在这里我的是
"${SRCROOT}/CommonDemo/processIcon.sh"

配置到此结束,然后运行我们的项目后返回模拟器桌面,如无意外就应该可以看到我们的AppIcon被添加上了一些版本信息了。

3、可能会出现的问题

尽管配置IconOverlaying本身十分简单,但在这过程中我也遇到了一点问题。

1)编译时报错Permission denied

比如:


Permission denied

这是由于脚本没有运行权限导致的,给脚本加上运行权限即可

Tidus$ chmod +x /Users/tidus/Applications/SourceTree/CommonDemo/CommonDemo/processIcon.sh 

2)脚本提示找不到入口

比如:


这是由于脚本是根据打包后.app中的info.plist中的CFBundleIconFiles字段来确定AppIcon的名字的,参考脚本中的这段代码,输出的就是指定plist中指定字段的值:

icon=`/usr/libexec/PlistBuddy -c "Print CFBundleIcons:CFBundlePrimaryIcon:CFBundleIconFiles:$i" "${CONFIGURATION_BUILD_DIR}/${INFOPLIST_PATH}"`

输出

所以需要在info.plist中加上icon files (iOS 5)的节点,即使没有配置值也可以。
加上icon files (iOS 5)

3)生成的AppIcon.png有样式问题

个别AppIcon.png在处理后会出现异常情况,比如:


具体原因未知,但问题出在用ImageMagick生成mask.png时,后来查阅ImageMagick的相关文档后用新的代码替换了原来的生成mask的代码,问题解决。

#脚本中原来的代码
convert /tmp/blurred.png -gamma 0 -fill white -draw "rectangle 0,$band_position,$width,$height" /tmp/mask.png
#用另一种方式创建mask
convert -size ${width}x${height} -set colorspace RGB xc:none -fill black -draw "rectangle 0,$band_position,$width,$height" -colorspace sRGB /tmp/mask.png

顺带贴上ImageMagick的相关文档:
http://www.imagemagick.org/Usage/
https://www.imagemagick.org/script/index.php

4)其他问题

另外脚本中还存在几处语法错误,例如在判断是否Release环境时:

#编译时这里报了语法错误
if [ $CONFIGURATION = "Release" ]; then
#修复并加入其他判断
if [[ $CONFIGURATION == "Release" ]] && [[ $PRODUCT_BUNDLE_IDENTIFIER != *.inhouse ]] && [[ $PRODUCT_BUNDLE_IDENTIFIER != *.adhoc ]]
    then

将其修正后,也加入了根据BUNDLE_IDENTIFIER判断打包方式的逻辑。

4、参考资料:

phzean写的一篇文章:ios 脚本实现程序Icon显示APP版本信息

文章就到此结束了,DEMO:https://github.com/Tidusww/CommonDemo.git,有兴趣的朋友可以去看看

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

推荐阅读更多精彩内容