动态修改App的Icon
第一步:把资源文件导入到项目中
- 新增的icon不能放在Assets.xcassets
-
项目的主要icon可以继续放在Assets.xcassets下面
Appicon
第二步:修改info.plist文件
在info.plist中,添加Icon files(iOS 5),这里的Icon files(iOS 5)是个字典,其中默认包含两个Key值,分别是:
- Primary Icon(主icon):设置app的主icon,可以在这里的Icon files数组内添加,有多个的话,依次添加,也可以这里不用填写,直接在Assets.xcassets 里配置;
- Newsstand Icon(期刊icon):设置所有用户订阅的报刊和杂志类的图标,目前我们用不到,先不用管。
- 在 Icon files(iOS 5)内添加一个Key:CFBundleAlternateIcons ,类型为字典。
-
在这个字典里配置我们所有需要动态修改的icon:键为icon的名称,值为一个字典(这个字典里包含两个键:CFBundleIconFiles,其值类型为Array,内容为icon的名称;UIPrerenderedIcon,其值类型为bool,内容为NO,也可以不加此key)。
info.plist
第三步:修改icon代码
- 1.系统提供的修改代码: 缺点:有一个alert弹框告诉修改了icon
[[UIApplication sharedApplication] setAlternateIconName:@"appicon" completionHandler:^(NSError * _Nullable error) {
if (error) {
NSLog(@"报错了");
}
}];
- 去掉alert弹框方法: 自测成功!
if ([[UIApplication sharedApplication] respondsToSelector:@selector(supportsAlternateIcons)] && [[UIApplication sharedApplication] supportsAlternateIcons]) {
NSMutableString *selectorstring = [[NSMutableString alloc] initWithCapacity:40];
[selectorstring appendString:@"_setAlternate"];
[selectorstring appendString:@"IconName:"];
[selectorstring appendString:@"completionHandler:"];
SEL selector = NSSelectorFromString(selectorstring);
IMP imp = [[UIApplication sharedApplication] methodForSelector:selector];
void (*func)(id, SEL, id, id) = (void *)imp;
if (func) {
func([UIApplication sharedApplication], selector, @"appicon", ^(NSError *error){
if (error) {
NSLog(@"报错了");
}
});
}
}
网友评论