Du's Time

使用 iOS 10.3 新 API 给 app 更换 icon

Word count: 405 / Reading time: 2 min
2017/08/16 Share

iOS 10.3 出来好长一段时间了,其中有一个换 icon 的 API setAlternateIconName 感觉挺好玩的一直想试一把。实验结果如下。

  1. 首先准备好几个icon,根据苹果爸爸的要求,icon 2x 图尺寸为 120x120,3x 图尺寸为 180x180。
  2. 把这几个 icon 拖到工程中,这里有几个注意点:

    1. 图片直接当做资源拖到工程中,不要放到Assets里
    2. 如果之前app的icon是用Assets管理的,把Assets里的AppIcon删掉,并把 Target -> General -> App Icons and Launch Images 里的 App Icon Source 改成 Don’t use assets catalogs
  1. Info.plis 中加入以下字段,CFBundleAlternateIcons字段部分

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    <key>supportsAlternateIcons</key>
    <true/>
    <key>CFBundleIcons</key>
    <dict>
    <key>CFBundlePrimaryIcon</key>
    <dict>
    <key>CFBundleIconFiles</key>
    <array>
    <string>主icon文件名,不带后缀</string>
    </array>
    <key>UIPrerenderedIcon</key>
    <false/>
    </dict>
    <key>CFBundleAlternateIcons</key>
    <dict>
    <key>此处填入自定义icon的文件名,不带后缀</key>
    <dict>
    <key>CFBundleIconFiles</key>
    <array>
    <string>此处填入自定义icon的文件名,不带后缀</string>
    </array>
    <key>UIPrerenderedIcon</key>
    <false/>
    </dict>
    <key>此处填入另一个自定义icon的文件名</key>
    <dict>
    <key>CFBundleIconFiles</key>
    <array>
    <string>此处填入另一个自定义icon的文件名</string>
    </array>
    <key>UIPrerenderedIcon</key>
    <false/>
    </dict>
    </dict>
    </dict>
  2. 在代码中调用 setAlternateIconName 更换icon

    1
    2
    3
    4
    5
    6
    //Swift版本
    UIApplication.shared.setAlternateIconName(iconName, completionHandler: { (error) in
    if let error = error {
    print(error.localizedDescription)
    }
    })
    1
    2
    3
    4
    //Objective-C 版本
    [[UIApplication sharedApplication] setAlternateIconName:@"icon_new" completionHandler:^(NSError * _Nullable error) {
    NSLog(@"error = %@", error.localizedDescription);
    }];

调用成功之后,系统会自动弹出 icon 更换的提示框

CATALOG