美文网首页
iOS 动态更换 APP图标

iOS 动态更换 APP图标

作者: yuebiubiu | 来源:发表于2021-11-24 11:30 被阅读0次

背景

项目开发过程中,可能会有更换项目图标的需求,比如一些电商的应用,在双11,618,新年等节日的时候需要显示特定的图标,但如果单单为了修改图标就要更新新版本的话,感觉有点得不偿失。这里介绍一种不需要通过更新版本就可以动态修改APP图标的方法。

注意:该方法在iOS10.3及以上有效

实现

  1. 导入待替换的新图片,不要放在Assets中,放到项目工程中;
  2. 配置 Info.plist 文件:
<key>CFBundleIcons</key>
<dict>
    <key>CFBundleAlternateIcons</key>
    <dict>
        <key>icon1</key>
        <dict>
            <key>CFBundleIconFiles</key>
            <array>
                <string>icon1</string>
            </array>
            <key>UIPrerenderedIcon</key>
            <false/>
        </dict>
        <key>icon2</key>
        <dict>
            <key>CFBundleIconFiles</key>
            <array>
                <string>icon2</string>
            </array>
            <key>UIPrerenderedIcon</key>
            <false/>
        </dict>
        <key>icon3</key>
        <dict>
            <key>CFBundleIconFiles</key>
            <array>
                <string>icon3</string>
            </array>
            <key>UIPrerenderedIcon</key>
            <false/>
        </dict>
    </dict>
    <key>CFBundlePrimaryIcon</key>
    <dict>
        <key>CFBundleIconFiles</key>
    <array>
        <string>AppIcon60x60</string>
    </array>
    </dict>
</dict>

  1. 通过代码替换
- (void)changeAppIconWithName:(NSString *)iconName {
    
    if (![[UIApplication sharedApplication] supportsAlternateIcons]) {
        return;
    }
    
    if ([iconName isEqualToString:@""]) {
        iconName = nil;
    }
    [[UIApplication sharedApplication] setAlternateIconName:iconName completionHandler:^(NSError * _Nullable error) {
        if (error) {
            NSLog(@"更换app图标发生错误了 : %@",error);
        }
    }];
}
  1. 去掉更换图标时的弹框
    更换图标时会出现如下弹框,可以使用Runtime来隐藏弹框


    弹框.jpg

具体代码:

#import "UIViewController+Category.h"

#import <objc/runtime.h>

@implementation UIViewController (Category)

+ (void)load {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        Method presentM = class_getInstanceMethod(self.class, @selector(presentViewController:animated:completion:));
        Method presentSwizzlingM = class_getInstanceMethod(self.class, @selector(dismissAlertViewController:animated:completion:));
        //runtime方法交换,通过拦截弹框事件,实现方法转换,从而去掉弹框
        method_exchangeImplementations(presentM, presentSwizzlingM);
    });
}

- (void)dismissAlertViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)animated completion:(void (^)(void))completion {
    
    if ([viewControllerToPresent isKindOfClass:[UIAlertController class]]) {
        UIAlertController *alertController = (UIAlertController *)viewControllerToPresent;
        if (alertController.title == nil && alertController.message == nil) {
            return;
        }
    }
    
    [self dismissAlertViewController:viewControllerToPresent animated:animated completion:completion];
}

@end

说明

  1. 替换的方法不要直接放在didFinishLaunchingWithOptions 或者viewDidLoad里面,如果要放的话,给替换的图标的方法加个延时。
  2. 替换的图标并不需要上传多张,上传一张就可以了,不过不要太小,

相关文章

  • Flutter 更换App图标

    以Flutter2.0+版本为示例 iOS App图标更换 Android App图标更换

  • 【iOS】动态更换 App 图标

    动态更换图标 在iOS 10.3苹果添加了更换图标的功能,通过这个功能,我们可以在适当的时候采取特定的方式为我们的...

  • iOS 动态更换App图标

    该功能应用的场景 1、白天/夜间模式切换,在切换App主色调同时切换App图标。 2、各类皮肤主题(淘宝就可换肤)...

  • iOS动态更换App图标

    应用场景 起跳版本 实现方案 官方文档 应用场景 各类皮肤主题切换,附带App图标一块更换。 图标促销提示,如某宝...

  • iOS 动态更换 APP图标

    背景 项目开发过程中,可能会有更换项目图标的需求,比如一些电商的应用,在双11,618,新年等节日的时候需要显示特...

  • iOS 动态更换App图标

    一、准备好icon图标 然后放到项目中 如图所示 注意:1、图片一定不要放到 Assets.xcassets 里面...

  • iOS 动态更换app图标(AppIcon)

    动态更换app的图标,就是在不重新安装app的情况下,可以动态更黄当前的icon图标。该方法只能在系统版本iOS1...

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

    iOS 10.3增加了动态更换图标的功能。这样我们就可以在不经过App Store更新图标。 实现 满足手机系统在...

  • [iOS开发] iOS动态更换图标系列(一)

    在iOS 10.3之前,苹果是不提供已上线的app动态更换图标功能的,这就导致我们即便只是一个更改节日图标的小需求...

  • iOS 无弹框更换 app 图标

    上篇文章我们详细查看了更换App图标的使用方法,并做了个小Demo。尽管当前我们可以实现动态更换App图标了,但是...

网友评论

      本文标题:iOS 动态更换 APP图标

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