美文网首页iOS开发心得iOS开发常用iOS开发
iOS10.3新特性之动态更换APP图标

iOS10.3新特性之动态更换APP图标

作者: Dosun | 来源:发表于2017-03-31 16:46 被阅读4590次

iOS 10.3 加入了了更换应用图标的新功能,当应用安装后,开发者可以为应用提供多个应用图标选择。用户可以自由的在这些图标之间切换。这也是 iOS 主屏首次支持应用图标更换。如下介绍如何更新应用图标。

一、API介绍

UIApplication 的对象方法,set​Alternate​Icon​Name:​completion​Handler:​可以用来更换应用的图标,但是还要设置plist文件内容,后面细致讲解。

//alternateIconName  参数是应用图片名字,如果该参数是nil,默认是最初图标的名字
//completionHandler 是回调,如果更换图片成功,error 为nil,否则不为nil;
- (void)setAlternateIconName:(NSString *)alternateIconName 
           completionHandler:(void (^)(NSError *error))completionHandler;
讨论

在调用此方法时,要用supports​Alternate​Icons 方法,来判断是否支持换应用图标。另外还要在plist文件中用 CFBundle​Icons 键声明 primary 和 alternate 图标,如何设置 CFBundle​Icons 键,请参考Information Property List Key Reference

二、Plist文件的配置

下图是最初应用的图标。


Snip20170331_5.png

下图中是plist 文件的设置,最初图标的名字 和 更新图标和名字要一一对应。


Snip20170331_1.png
<key>CFBundleIcons</key>  
    <dict>  
        <key>CFBundleAlternateIcons</key>  
        <dict>  
            <key>newIcon</key>  
            <dict>  
                <key>CFBundleIconFiles</key>  
                <array>  
                    <string>newIcon</string>  
                </array>  
                <key>UIPrerenderedIcon</key>  
                <false/>  
            </dict>  
        </dict>  
        <key>CFBundlePrimaryIcon</key>  
        <dict>  
            <key>CFBundleIconFiles</key>  
            <array>  
                <string>Icon</string>  
            </array>  
        </dict>  
    </dict>  

三、代码实现

如下代码实现如何更换应用的图标,主要思路如下
1 系统能否支持更换图标
2 判断是否已经更新过图标
3 更新图标

- (IBAction)changeIcon:(id)sender {
    
    if ([UIApplication sharedApplication].supportsAlternateIcons) {
        NSLog(@"U can change icon image");
        
        //应用是否更新过图标
        NSString *iconName = [[UIApplication sharedApplication] alternateIconName];
        
        if (iconName) {
        //setAlertnateIconName方法有二个参数
       //第一个参数是 要换图标的名字,如果写nil,系统默认是最初图标名字
      //第二个参数是 方法执行的回调
            [[UIApplication sharedApplication] setAlternateIconName:nil completionHandler:^(NSError * _Nullable error) {
                if (error) {
                    NSLog(@"errpr = %@",error);
                }else{
                
                    NSLog(@"suceess");
                }
            }];
        }else{
            //换图标
            [[UIApplication sharedApplication] setAlternateIconName:@"newIcon" completionHandler:^(NSError * _Nullable error) {
                if (error) {
                    NSLog(@"errpr = %@",error);
                }else{
                    
                    NSLog(@"suceess");
                }
            }];
        }  
    }
    

四、效果图如下

换图标效果图.gif

相关文章

网友评论

  • 七肋:有人知道怎么去除弹框吗?在不影响其他弹框的前提下。
  • 权欣权忆:有个问题我想请教一下,在我尝试这个功能的过程中,发现好像必须要通过主动触发(比如点击按钮后调用更换icon的方法)来实现这个功能,静默触发(比如在didFinishLaunch:或者ViewdidLoad方法调用更换icon的方法)会提示“The operation was cancelled.”,不知道这是什么原因呢?
    七肋:延时运行可解决这个问题
    权欣权忆:@魂之挽歌啊 并没有,估计系统就是希望这个事情是主动触发的吧😂
    桑古纳尔:你好我试了也是这样,请问找到解决方法了吗
  • 纪叙:我想问下,设置的newIcon,往项目里面要放哪些尺寸的呢?就一个两倍三倍的???
  • 幸福的鱼:16年有10.3系统吗
    Dosun:@5eb4a16edd8a 今年才有的
  • 2b019d314aea:谢谢!
    请问这个支持开发者在后台统一更新图标么?用于比如节日活动的运营
    2b019d314aea:@olivewang 非常感谢!
    Dosun:在网上找到,如果不重新提交到苹果审核,不能在后台实现换图标。https://forums.developer.apple.com/message/174755#174755。请知悉。
    Dosun:不好意思,这么晚回复你,暂时没有找到后台换图标的方法
  • 付庆平:这个是xcode8.2里才有的api么,我8.1弹不出方法来
    Dosun:@付庆平 xcode8.3
  • 44d3387e09f3:大神,这个官方的文档里面有Demo吗?
    Dosun:@Marcello_Gong 不是的

本文标题:iOS10.3新特性之动态更换APP图标

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