美文网首页
iOS动态更换应用icon

iOS动态更换应用icon

作者: i_苏 | 来源:发表于2021-06-16 16:01 被阅读0次

首先需要注意的是,动态更换图标需要在iOS10.3之后才可以使用

第一步、需要在info.plist中配置图标的一些信息,具体如下

根据自己的需求修改图标样式

如下为info.plist中的配置,拿走不谢
<key>CFBundleIcons</key> <dict> <key>CFBundleAlternateIcons</key> <dict> <key>10.1</key> <dict> <key>UIPrerenderedIcon</key> <false/> <key>CFBundleIconFiles</key> <array> <string>Icon-29</string> <string>Icon-60</string> <string>Icon-Spotlight-40</string> <string>icon-1024</string> </array> </dict> <key>7.1</key> <dict> <key>UIPrerenderedIcon</key> <false/> <key>CFBundleIconFiles</key> <array> <string></string> </array> </dict> </dict> <key>CFBundlePrimaryIcon</key> <dict> <key>CFBundleIconName</key> <string></string> <key>CFBundleIconFiles</key> <array> <string></string> </array> <key>UIPrerenderedIcon</key> <false/> </dict> <key>UINewsstandIcon</key> <dict> <key>CFBundleIconFiles</key> <array> <string></string> </array> <key>UINewsstandBindingType</key> <string>UINewsstandBindingTypeMagazine</string> <key>UINewsstandBindingEdge</key> <string>UINewsstandBindingEdgeLeft</string> </dict> </dict>

第二步、需要执行代码去进行更换图标的操作,这种情况下会有弹框提示更换,点击确定会进行更换图标操作

- (void)setAppIconWithName:(NSString*)iconName {

    if(@available(iOS10.3, *)) {

        if (![[UIApplication sharedApplication] supportsAlternateIcons]) {

            return;

        }

    }else{

        // Fallback on earlier versions

    }

    if([iconNameisEqualToString:@""]) {

        iconName =nil;

    }

    if(@available(iOS10.3, *)) {

        [[UIApplication sharedApplication] setAlternateIconName:iconName completionHandler:^(NSError * _Nullable error) {

            if(error) {

                NSLog(@"更换app图标发生错误了 : %@",error);

            }

        }];

    }else{

        // Fallback on earlier versions

    }

}

第三步、优化弹框,在用户无感知的情况下进行图标切换,需要通过runtime来处理此操作,写一个UIViewController扩展类,具体处理如下

+ (void)load{

    staticdispatch_once_tonceToken;

    dispatch_once(&onceToken, ^{

        MethodpresentM =class_getInstanceMethod(self.class,@selector(presentViewController:animated:completion:));

        MethodpresentSwizzlingM =class_getInstanceMethod(self.class,@selector(dy_presentViewController:animated:completion:));

        method_exchangeImplementations(presentM, presentSwizzlingM);

    });

}

- (void)dy_presentViewController:(UIViewController*)viewControllerToPresentanimated:(BOOL)flagcompletion:(void(^)(void))completion {

    if([viewControllerToPresentisKindOfClass:[UIAlertControllerclass]]) {

        UIAlertController*alertController = (UIAlertController*)viewControllerToPresent;

        if(alertController.title==nil&& alertController.message==nil) {

            return;

        }else{

            [selfdy_presentViewController:viewControllerToPresentanimated:flagcompletion:completion];

            return;

        }

    }

    [selfdy_presentViewController:viewControllerToPresentanimated:flagcompletion:completion];

}

到这里完整的更换图标就可以了,亲测可用

相关文章

  • iOS动态更换应用icon

    首先需要注意的是,动态更换图标需要在iOS10.3之后才可以使用 第一步、需要在info.plist中配置图标的一...

  • 上次发版我就改了一行代码!

    动态更换应用Icon 产品:我们可以动态更换App在Launcher里面的Icon吗开发:不可以产品:我们可以动态...

  • iOS 动态更换icon

    此方法只适用于iOS10.3 // Pass nil to use the primary application...

  • iOS 动态更换Icon

    动态切换 App 的 icon 这个需求,在上一家公司做一款定制 App 时遇到过一次,这次领导说可能需要做,就又...

  • [Android]动态更换应用Icon

    作者: 徐宜生 《Android群英传》《Android群英传:神兵利器》作者博客: http://blog.cs...

  • Android动态更换应用Icon

    一、动态更换应用icon步骤 1、在AndroidManifiest.xml中添加: 标签。 2、Java代码控制...

  • iOS 动态更换App Icon

    查文档发现有两种配置方式,并且iOS10.3版本以上才可以使用。 配置 配置方案一: 配置Info.plist中的...

  • iOS 10.3应用内更换icon

    前言:前段时间iphone更新了iOS 10.3系统,就关注了一下10.3的一些新增功能。看到有一个是更换图标功能...

  • Android 动态更换icon

    前言 最近公司app要做活动,要求活动当天app使用活动icon,之后变回普通icon。让前后上架不同版本来实现,...

  • html动态更换icon

    看推文的时候, 发现当有通知的时候, 网站标签页上的标签会变成带红点的, 所以就了解下如何动态更换 其实很简单, ...

网友评论

      本文标题:iOS动态更换应用icon

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