iOS更改app的icons
来源:互联网 发布:服务器托管数据安全 编辑:程序博客网 时间:2024/09/21 06:16
最近公司做一个换皮肤的功能,简单的说就是动态替换项目中的图片、导航栏、颜色什么的;还涉及到替换app的icons。经过调研发现,在iOS10.3版本以前是没有办法替换app的icons(系统不支持也没办法,还是做平台系统的牛叉),iOS10.3版本提供了对应的API:
经过尝试后替换APP的icons需要以下几步:
1.配置Info.plist文件:
大概意思是需要设置CFBundleAlternateIcons,如果想显示最初的icon则设置成nil。具体配置如下:
Primary Icon为默认的icon,只需要将Icon files目录下面的Item0设置成实际项目中icon名称。下面主要介绍CFBundleAlternateIcons设置,如上图所示主要是两个红线画出的地方,这个名称必须和项目中设置的图片名称一样,其他没有什么需要注意的了。下面贴上元数据形式:
<key>CFBundleIcons</key><dict><key>CFBundlePrimaryIcon</key><dict><key>CFBundleIconFiles</key><array><string>AppIcon</string></array><key>UIPrerenderedIcon</key><false/></dict><key>CFBundleAlternateIcons</key><dict><key>APPiconNew60</key><dict><key>UIPrerenderedIcon</key><false/><key>CFBundleIconFiles</key><array><string>APPiconNew60</string></array></dict></dict></dict>
2.设置好Info.plist后需要在代码中替换。API中明确指出在使用setAlternateIconName:completionHandler:方法之前需要使用supportsAlternateIcons判断是否支持。废话不说上代码:
dispatch_async(dispatch_get_main_queue(), ^{ if(![UIApplication sharedApplication].supportsAlternateIcons){ return; } NSString *iconName = [[UIApplication sharedApplication] alternateIconName]; if(iconName){ [[UIApplication sharedApplication] setAlternateIconName:nil completionHandler:^(NSError * _Nullable error) { }]; }else{ [[UIApplication sharedApplication] setAlternateIconName:@"APPiconNew60" completionHandler:^(NSError * _Nullable error) { NSLog(@"---error----:%@",error.description); }]; } });
当然替换必须在主线程中进行。
替换成功后界面弹出提示,下面是项目中替换成功后弹出框:
0 0
- iOS更改app的icons
- iOS App Icons for iOS 8
- App Icons
- App Icons
- iOS中各种图片的要求 App Icons on iPad and iPhone
- APP-ICONS尺寸大小的总结--图示
- iOS 更改app的显示名称
- iOS更改app项目的名字
- 更改iOS APP name
- 【Topic Generic】App Icons
- XCode5中APP iCons必须图片的尺寸
- App图标(App Icons)
- 【iOS开发】更改App图标下方显示的名称
- iOS 动态更改APP(logo) icon
- 更改app图标的方法
- Icons
- Icons
- icons
- 区间K大数
- word入门操作
- 企业实施ERP的先后步骤,你真的了解吗?
- Android-LayoutInflater中inflate方法两个参数和三个参数的区别
- 功能总结之车载方案AutoPlay功能总结
- iOS更改app的icons
- C++类模板分离模式
- reactnative "borderBottom" is not a valid style property.styleError
- Mybatis——Invalid bound statement (not found)-Could not find result map java.lang.Integer
- Qt5.8我目前遇到的一些问题及解决方法
- vue2.0—— Vue.directive
- jquery版本对浏览器的兼容
- 题目1479:移位和旋转
- Glide加载网络图片,服务器内容更新但是Glide缓存无法清理的解决办法