学计算机的那个

不是我觉到、悟到,你给不了我,给了也拿不住;只有我觉到、悟到,才有可能做到,能做到的才是我的.

0%

iOS图标版本化

写在前面

通常一个App会有多个版本,企业版,调试版等,不同版本下也会有debug,release之分,有时候需要知道测试所测的版本是否是最新的,虽然可以在App内部添加版本信息进去,但是试想一下如果直接在ICON上添加这些信息是不是更显而易见。

如何实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 1. 判断执行 Build 的机器是否安装了 ImageMagic
// |- 如果没有安装:提示安装,退出脚本
// |- 如果安装:继续执行
// 2. 获取 commit 号 hash 值、分支名、build 号,并将其拼接成一个字符串
// 3. 判断编译环境
// |- 如果是 Release 环境:提示当前是 Release 环境,退出脚本
// |- 如果是非 Release 环境:继续执行
// 4. 获取 Plist 中 CFBundleIconFiles 的数量
// 5. 根据数量循环,执行调用『生成记号图方法』


// 『生成记号图方法』
// function generateIcon() {
// 1. 模糊图片
// 2. 截取图片下半部分
// 3. 添加 commit+brach+build 组成的字符串在截取图片上
// 4. 合成截取图片和原图
// 5. 清除多余图片
// }

ImageMagick

ImageMagick 可以创建、编辑、合成或转换图片。它可以读和写各种格式的图像(超过 200 种格式)包括 PNG、JPEG、JPEG - 2000、GIF、TIFF、DPX、EXR、WebP、Postscript、PDF、SVG。ImageMagick 可以调整、翻转、镜像、旋转、扭曲、剪切和转换图像、图像色彩调整,适用于各种特殊效果,或绘制文本、线、多边形、椭圆和贝塞尔曲线。

安装(建议翻墙)

1
2
3
4
5
brew update

brew install ImageMagick

brew install ghostscript

常用用法:

  1. 查看图片信息
1
2
identify original.png 
original.png PNG 120x120 120x120+0+0 8-bit sRGB 46c 2.58KB 0.010u 0:00.000
  1. 合并图像
    1
    2
    # 给图片添加水印
    convert original.png -compose over watermark.png -composite new-image.png
  2. 高斯模糊
    1
    2
    convert -blur 80x5 original.jpg blur.png
    -blur radiusxsigma,两个分别是高斯模糊需要的两个参数

存在的问题 unhandled critical chunk

error: CgBI: unhandled critical chunk AppIcon20x20@2x.png

分析原因

在 Xcode 7.3以后,在 Xcode build 项目时,默认会把 png 压缩 和 修改.然后得到新的png图片,ImageMagick 在修改是会遇到上述的问题.stackoverflow

如何解决

build settting里面设置Compress PNG FIles debug模式下为NO(注意只有项目路径下存在png图片资源时build setting才会有该选项)

存在的问题 ICON未发生更改

项目路径下的ICON已经更改,但是没有显示

分析原因

使用 Xcode9 构建 iOS11 系统的 App 图标,默认读取资源文件,而非App包的Icon图标,导致不显示

1
2
3
Xcode管理app的icon,通过asset资源目录。
Xcode还包含app的icon文件和Info.plist,是为了向后兼容。
该脚本替换了app根目录中的文件,而不是asset资源目录,在iOS11中使用asset资源目录,而不是app根目录中的文件。

解决

通过生成独立的 AppIcon_Debug资源文件:

1
2
3
4
5
1.对AppIcon.appiconset文件的每一图标。
2.添加模糊效果,版本信息,提交信息。
3.将处理好的图标,复制到AppIcon_Debug.appiconset文件。
4.Xcode中配置使用AppIcon_Debug图标资源文件。
5.删除无用的构建生成的图标。

参考

  1. iOS—写一个快速定位问题的脚本
  2. iOS App图标版本化
  3. iOS APP图标版本化