iOS 如何动态切换app图标

作者: 流云_henry | 来源:发表于2020-06-29 16:01 被阅读0次

    UIApplication的UIAlternateApplicationIcons类别可以支持动态切换应用的图标,当然这个类别的接口只能在iOS10.3后使用,其中接口解析如下:

    //检测是否允许替换图标
    @property (readonly, nonatomic) BOOL supportsAlternateIcons
    
    //获取当前的图标名
    @property (nullable, readonly, nonatomic) NSString *alternateIconName
    
    //设置要进行替换的图标模块名,若设置为nil,那么使用默认图标
    - (void)setAlternateIconName:(nullable NSString *)alternateIconName completionHandler:(nullable void (^)(NSError *_Nullable error))completionHandler
    

    需要注意的是,需要将替换的图标放入应用程序内,而不是Assets.xcassets文件夹内。然后在Info.plist文件中需要配置图标模块:


    image.png

    为了更隐蔽的更换图标(防止更换图标是系统弹提醒框),我们可以在自定义的Application中,通过运行时来动态更新图标:
    首先我们新建一个基础UIApplication的MyApplication类,并在APP的main.m入口函数中修改如下:

    #import <UIKit/UIKit.h>
    #import "AppDelegate.h"
    #import "MyApplication.h"
    int main(int argc, char * argv[]) {
        NSString * appDelegateClassName;
        @autoreleasepool {
            // Setup code that might create autoreleased objects goes here.
            appDelegateClassName = NSStringFromClass([AppDelegate class]);
        }
        /// (argc, argv, nil, NSStringFromClass([AppDelegate class]));
        ///4个参数中,前两个参数为main()函数传递进来的,我们可以忽略,第三个参数设置应用程序类,需要我们将其设置为UIApplication或其子类,如果不设置,则默认为UIApplication,最后一个参数是设置应用程序的代理类
        return UIApplicationMain(argc, argv, NSStringFromClass([MyApplication class]), appDelegateClassName);
    }
    

    MyApplication代码如下:

    #import <UIKit/UIKit.h>
    
    NS_ASSUME_NONNULL_BEGIN
    
    @interface MyApplication : UIApplication
    
    @end
    
    NS_ASSUME_NONNULL_END
    
    
    
    #import "MyApplication.h"
    
    @implementation MyApplication
    - (instancetype)init {
        self = [super init];
        if (self) {
            //图标更换需要iOS10.3及以后版本支持
            if (@available(iOS 10.3, *)) {
                if (self.supportsAlternateIcons) {
                    [self setAlternateIconName:@"icon1" completionHandler:^(NSError * _Nullable error) {
                        NSLog(@"%@",error);
                    }];
                }
            } else {
    
            }
        }
        return self;
    }
    @end
    
    

    相关文章

      网友评论

        本文标题:iOS 如何动态切换app图标

        本文链接:https://www.haomeiwen.com/subject/ximofktx.html