更换AppIcon

动态更换App图标这件事,在用户里总是存在需求的:有些用户喜欢“美化”自己的手机。至于用户们喜欢美化到什么程度,这得看个人需求。有的用户想定制个性的App图标,那么各大iPhone论坛里都有方法可以不越狱更改App图标;有的用户想让App图标“动”起来(如系统应用时钟),那么不越个狱还真不好办。

在不重新安装App的情况下,可以实现更新App的图标。但是会弹出一个提示,告知用户当前图标已更换。

应用场景

  1. 白天/夜间模式切换,在切换App主色调同时切换App图标。
  2. 各类皮肤主题(淘宝就可换肤),附带App图标一块更换。
  3. 利用App图标表达某种特定功能,如Demo中的,提示当前天气。
  4. 图标促销提示,如淘宝京东特定节日:11.11、6.18,提前更换App图标。

API

该功能(API)当前只支持iOS10.3以上的系统。

@interface UIApplication (UIAlternateApplicationIcons)
// 如果为NO,表示当前进程不支持替换图标
@property (readonly, nonatomic) BOOL supportsAlternateIcons NS_EXTENSION_UNAVAILABLE("Extensions may not have alternate icons") API_AVAILABLE(ios(10.3), tvos(10.2));
// 传入nil代表使用主图标. 完成后的操作将会在任意的后台队列中异步执行; 如果需要更改UI,请确保在主队列中执行.
- (void)setAlternateIconName:(nullable NSString *)alternateIconName completionHandler:(nullable void (^)(NSError *_Nullable error))completionHandler NS_EXTENSION_UNAVAILABLE("Extensions may not have alternate icons") API_AVAILABLE(ios(10.3), tvos(10.2));
// 如果alternateIconName为nil,则代表当前使用的是主图标.
@property (nullable, readonly, nonatomic) NSString *alternateIconName NS_EXTENSION_UNAVAILABLE("Extensions may not have alternate icons") API_AVAILABLE(ios(10.3), tvos(10.2));
@end

Info.plist

CFBundleIcons是 Info.plist 字典里的一个键,它对应的value是个字典。
CFBundleIcons 里面能够包含的键有:CFBundlePrimaryIcon、CFBundleAlternateIcons、UINewsstandIcon。

CFBundleAlternateIcons所对应的value是个字典,字典中的键是备用图标的名字。
每个键对应的value是个包含 CFBundleIconFiles 和 UIPrerenderedIcon 两个键的字典。

CFBundleIconFiles 的value是字符串或者数组(数组内容也为字符串)。字符串的内容为各尺寸备用图标的名字。

UIPrerenderedIcon 的value是BOOL值。这个键值所代表的作用在iOS7之后(含iOS7)已失效,我们可以不用关心。

eg:

@"CFBundleAlternateIcons" : @{
    @"newAppIcon1" : @{
        @"CFBundleIconFiles" : @[
            @"newAppIcon1_60"
        ],
        @"UIPrerenderedIcon" : NO
    },
    @"newAppIcon2" : @{
        @"CFBundleIconFiles" : @[
            @"newAppIcon2_20",
            @"newAppIcon2_29",
            @"newAppIcon2_40",
            @"newAppIcon2_60"
        ],
        @"UIPrerenderedIcon" : NO
    }
}

注意事项

  1. 文件扩展名,如@2x,@3x,要么统一不写,那么系统会自动寻找合适的尺寸;要写就需要把每张icon的扩展名写上。
  2. 每个图标,可以只提供最大的一张,其他的由操作系统生成;也可以提供全部所需的尺寸。

你可能感兴趣的:(更换AppIcon)