App动态更换图标Logo

一、应用场景

  1. 碰到各种节假日,促销活动等,需要更换App图标 logo。如天猫双十一,春节等。
  2. 根据App主题切换应用logo。

从iOS10.3开始,苹果开始支持动态更换应用logo了,新增的Api如下所示

// If false, alternate icons are not supported for the current process.( 如果为NO,表示当前进程不支持替换图标)
@property (readonly, nonatomic) BOOL supportsAlternateIcons NS_EXTENSION_UNAVAILABLE("Extensions may not have alternate icons") API_AVAILABLE(ios(10.3), tvos(10.2));

// Pass `nil` to use the primary application icon. The completion handler will be invoked asynchronously on an arbitrary background queue; be sure to dispatch back to the main queue before doing any further UI work.(传入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));

// If `nil`, the primary application icon is being used.(如果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));

二、首先配置info.plist信息

截屏2020-11-09 下午4.39.32.png

三、添加icon图片,以及写加载代码

注意这里需要更换的图片不要放到Assets.xcassets,只要把主图标放里面就可以。

截屏2020-11-09 下午4.44.10.png

更换icon的代码,记住不要放到Appdelegate里,可以放在主控制器的某个监听里即可。
调接口来切换图标logo,或者在通知里进行图标切换。

    if (![[UIApplication sharedApplication] supportsAlternateIcons]) {
        return;
    }
    
    if ([iconName isEqualToString:@""]) {
        iconName = nil;
    }
    [[UIApplication sharedApplication] setAlternateIconName:iconName completionHandler:^(NSError * _Nullable error) {
        if (error) {
            NSLog(@"更换app图标发生错误了 : %@",error);
        }
    }];

这样就可以动态的改变App图标了,目前更换应用logo,只支持率先把图标配置到应用里,再进行切换,暂时无法支持,动态获取图片替换。

你可能感兴趣的:(App动态更换图标Logo)