阅读 257

给iOS应用的Logo加上构建信息水印

1 前言:

以前,翻博客看到别人的 app 在 debug 时,应用图标上面显示 git 分支和提交记录,挺好奇,由于不知道搜索关键词,最后没搜到方案. 每次测试同事在持续集成后测试时,分不清构建的版本是否是想要的,很多时候要和开发者沟通,定位问题版本也不及时.可能浪费大家精力,拖慢工程进度.

2 方案:

最近,刚好看到小鱼周凌宇的博客,有这个解决方案. 主要解决思路是在 build app工程以后,执行一个shell脚本,通过ImageMagick(图片处理工具)将 AppIcon 修改成自己想要的 icon, 替换原来的 icon. 小鱼周凌宇的教程写的很详细.本以为按照教程,直接 build, 然后顺利得到结果. But...shell 执行失败. 错误提示:

error: CgBI: unhandled critical chunk AppIcon20x20@2x.png
复制代码

错误提示大概就是:不能处理 AppIcon20x20@2x.png. 接下来就是排查错误: ①.排除不是ImageMagick的问题. 在其他目录下ImageMagick裁剪处理jpg,png 等其他格式的图片都没有问题. ②.定位是 Xcode 构建项目时,修改了 png 图片. 在终端进入项目构建好的文件(路径: /Users/(username)/Library/Developer/Xcode/DerivedData/YourApp-gduslbgdmwwzedausnprzxmwoppu(随机字母)/Build/Products/Debug-iphoneos/YourApp.app/ )下,用ImageMagick修改图片,发现修改 jpg 没有问题,修改 png 就会报错.

#同样的错误提示:
error: CgBI: unhandled critical chunk test01.png
复制代码

用 google 搜索 "Xcode 9.1 convert: CgBI: unhandled critical chunk" 类似这样的关键词,可以看到 Stack Overflow 上有类似的问题: libpng error: CgBI: unhandled critical chunk xcode 7.3 原因大意就是:在 Xcode 7.3以后,在 Xcode build 项目时,默认会把 png 压缩 和 修改.然后得到新的png图片,ImageMagick 在修改是会遇到上述的问题.

3 修改:

既然问题找到了,接下来是就是修改步骤:(只在 Debug 模式下,修改)

YourProjectName => PROJECT => 选中项目 => build setting => Compress Png Files => Debug 的属性由 No 改为 Yes.
YourProjectName => PROJECT => 选中项目 => build setting => Remove Text Metadata From Png Files => Debug 的属性由 No 改为 Yes.
复制代码

接着, clean 项目,重新运行,编译成功.

修改前AppIcon.png
修改后AppIcon.png

点击查看详细操作步骤:

shell 脚本在小鱼周凌宇分享的脚本上做了小小的修改,修改了水印高度,增加了构建时间.1代表 build number, dev 代表 git 分支名字,50f51a8代表 git 最后一次提交记录的短hash值. 如果想要更强大的功能,可以关注 Bootstrap 这个库.

最后,感谢大家的分享.