iOS 10.3新特性之动态更换图标

iOS 10.3增加了动态更换图标的功能。这样我们就可以在不经过App Store更新图标。

实现

  • 满足手机系统在iOS 10.3或者之上
  • supportsAlternateIcons这个布尔值为yes
  • Info.plist中增加所需改变的图标
  • 在项目中添加素材,注意不要添加到Assets.xcassets
  • 以上基础上调用setAlternateIconName:alternateIconName completionHandler:

分析

supportsAlternateIcons :在苹果官方的文档中解释如下:

/*
A Boolean value indicating whether the app is allowed to change its icon.
*/
@property(readonly, nonatomic) BOOL supportsAlternateIcons;

解释:一个布尔值,表示该应用是否允许更改其图标。

并且这个值当系统允许你改变你的应用的图标时才会出现。且你需要声明你的应用的其他图标,将它们包含在你的应用信息的CFBundleAlternateIcons图标键中Info.plist文件。

setAlternateIconName:completionHandler: :这是一个自带Block回调的方法,通过传递你info中设置的icon名来改变图标。

[[UIApplication sharedApplication]setAlternateIconName:iconName completionHandler:^(NSError * error){
 NSLog(@"error %@",error);
}];

当走到error回调的时候该参数包含指示发生的错误对象,且交流符号属性的值保持不变。

Info.plist

CFBundleIcons

    CFBundleAlternateIcons
    
        图标
        
            CFBundleIconFiles
            
                文件名
            
            UIPrerenderedIcon
            
        
    
    CFBundlePrimaryIcon
    
        CFBundleIconFiles
        
            AppIcon-49x49
        
    

iOS 10.3新特性之动态更换图标_第1张图片
Info.plist
这里我去搜索一下UIPrerenderedIcon这个布尔的意思,解释如下:
Key Xcode name Summary
UIPrerenderedIcon “Icon already includes gloss effects” Specifies whether the app’s icon already includes a shine effect. See UIPrerenderedIcon for details.

指定该应用的图标是否已经包含了一个发光效果,所以默认选择No即可~

方法调用

#pragma mark - 更换图标
- (void)setUpChangeIcon:(NSString *)iconName
{
    if (@available(iOS 10.3, *)) { //10.3以上系统支持跟换图标
        
        if ([[UIApplication sharedApplication] supportsAlternateIcons]) {

            [[UIApplication sharedApplication]setAlternateIconName:iconName completionHandler:^(NSError * error){
                NSLog(@"error %@",error);
            }];
        }
    } else {
        NSLog(@"手机系统不支持更换图标~");
    }
}
演示GIF

你可能感兴趣的:(iOS 10.3新特性之动态更换图标)