ios 10.3 替换桌面图标
iOS 10.3 开放了更换 app 图标的 API,核心方法是下面这个:
[[UIApplication sharedApplication] setAlternateIconName:@"blackBgColor" completionHandler:^(NSError * _Nullable error) {
NSLog(@"set icon error:%@",error);
}];
替换步骤如下:
<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的方法里。且要在主线程里替换。
执行过代码,会有如下弹框提示,说明替换成功