ios 10.3 替换桌面图标

iOS 10.3 开放了更换 app 图标的 API,核心方法是下面这个:

[[UIApplication sharedApplication] setAlternateIconName:@"blackBgColor" completionHandler:^(NSError * _Nullable error) {
                    NSLog(@"set icon error:%@",error);
                }];


替换步骤如下:

ios 10.3 替换桌面图标


ios 10.3 替换桌面图标


<key>CFBundleIcons</key><dict> <key>CFBundleAlternateIcons</key> <dict> <key>blackBgColor</key> <dict> <key>CFBundleIconFiles</key> <array> <string>blackBgColor</string> </array> <key>UIPrerenderedIcon</key> <false/> </dict> </dict> <key>CFBundlePrimaryIcon</key> <dict> <key>CFBundleIconFiles</key> <array> <string>AppIcon60x60</string> </array> </dict></dict>

 

如图,Primary Icon 字段写为 AppIcon60x60 是因为这里 xcassets 里面我只导入了 [email protected][email protected] 的图片资源,这里选为 60 是因为对于 iPhone,60pt 的图片资源图标所需最高质量,更低分辨率的版本系统会自动压缩以展示。

blackBgColor 是我的用于替换原生图标的图片资源。文件名需要和 info.plist 中保持一致(注意 info.plist 中用到了两次 "blackBgColor"),同时这也是你在代码中设置图标时,需要给 API 传入的参数。同样是 60[email protected][email protected] 的图片资源,文件不通过 Assets.xcassets 添加进来,而是直接放到目录中。

 
代码很简单了,如下:

  if ([UIApplication sharedApplication].supportsAlternateIcons) {
            NSLog(@"you can change this app's icon");
            
            NSString *name = [UIApplication sharedApplication].alternateIconName;
            
            if (name) {
                [[UIApplication sharedApplication] setAlternateIconName:nil completionHandler:^(NSError * _Nullable error) {
                    NSLog(@"set icon error:%@",error);
                }];
                
                NSLog(@"the alternate icon's name is %@",name);
            }else{
                [[UIApplication sharedApplication] setAlternateIconName:@"blackBgColor" completionHandler:^(NSError * _Nullable error) {
                    NSLog(@"set icon error:%@",error);
                }];
            }
            
        }else{
            NSLog(@"you cannot change this app's icon");
        }

注:不要放到APPDelegate的方法里。且要在主线程里替换。


执行过代码,会有如下弹框提示,说明替换成功

ios 10.3 替换桌面图标