iOS新特性: iOS10.3教你如何动态更换APP图标?

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

  1. [[UIApplication sharedApplication] setAlternateIconName:nil completionHandler:^(
  2. }];

这是官方文档,但是你还需要在 info.plist 里面填一些东西才能让它起作用,这部分官方注释内容在这里。

2、 info.plist 如何填写呢?一时可能搞不清楚如何操作,下面做个实例:

3、具体如下:

[objc] view plaincopy print?
  1. <key>CFBundleIcons</key>
  2. <dict>
  3. <key>CFBundleAlternateIcons</key>
  4. <dict>
  5. <key>newIcon</key>
  6. <dict>
  7. <key>CFBundleIconFiles</key>
  8. <array>
  9. <string>newIcon</string>
  10. </array>
  11. <key>UIPrerenderedIcon</key>
  12. <false/>
  13. </dict>
  14. </dict>
  15. <key>CFBundlePrimaryIcon</key>
  16. <dict>
  17. <key>CFBundleIconFiles</key>
  18. <array>
  19. <string>Icon60X60</string>
  20. </array>
  21. </dict>
  22. </dict>

<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>Icon60X60</string></array></dict></dict>

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

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

如果你需要支持 iPad,建议这里使用 83.5pt(iPad Pro)的图片资源。另外还有些其他关于在 iPad 上替换图标的注意事项,在这里有说明,注意我们这里在 info.plist 里面所用的 key 是 CFBundleIcons,还有另外一个 key 是 CFBundleIcons~ipad

4、替换图标部分的代码:

[objc] view plaincopy print?
  1. - (void)changeAppIcon
  2. {
  3. if ([UIApplication sharedApplication].supportsAlternateIcons) {
  4. NSLog(@"you can change this app's icon");
  5. }else{
  6. NSLog(@"you can not change this app's icon");
  7. return;
  8. }
  9. NSString *iconName = [[UIApplication sharedApplication] alternateIconName];
  10. if (iconName) {
  11. // change to primary icon
  12. [[UIApplication sharedApplication] setAlternateIconName:nil completionHandler:^(NSError * _Nullable error) {
  13. if (error) {
  14. NSLog(@"set icon error: %@",error);
  15. }
  16. NSLog(@"The alternate icon's name is %@",iconName);
  17. }];
  18. }else{
  19. // change to alterante icon
  20. [[UIApplication sharedApplication] setAlternateIconName:@"newIcon" completionHandler:^(NSError * _Nullable error) {
  21. if (error) {
  22. NSLog(@"set icon error: %@",error);
  23. }
  24. NSLog(@"The alternate icon's name is %@",iconName);
  25. }];
  26. }
  27. }

- (void)changeAppIcon
{if ([UIApplication sharedApplication].supportsAlternateIcons) {NSLog(@"you can change this app's icon");}else{NSLog(@"you can not change this app's icon");return;}NSString *iconName = [[UIApplication sharedApplication] alternateIconName];if (iconName) {// change to primary icon[[UIApplication sharedApplication] setAlternateIconName:nil completionHandler:^(NSError * _Nullable error) {if (error) {NSLog(@"set icon error: %@",error);}NSLog(@"The alternate icon's name is %@",iconName);}];}else{// change to alterante icon[[UIApplication sharedApplication] setAlternateIconName:@"newIcon" completionHandler:^(NSError * _Nullable error) {if (error) {NSLog(@"set icon error: %@",error);}NSLog(@"The alternate icon's name is %@",iconName);}];}
}

5、最终效果如下:

Demo:GitHub  喜欢记得star一下哦!

(0042) iOS 开发之iOS10.3新特性:如何动态更换APP图标相关推荐

  1. (0040) iOS 开发之10.3新特性:程序内评价

    程序内评价之SKStoreReviewController 在ios 10.3之后,系统提供了一个SKStoreReviewController类,可以帮助在app内部实现评价.App实现评价一般有下 ...

  2. iOS开发之iOS10简单适配

    前言 今年6月初的WWDC大会上亮相了iOS10,很多开发者开始了对iOS10的适配,其中也包括Xcode8的一些改变.现在记录一些关于Xcode8适配的一些知识.然后在记录iOS10的适配. 1.X ...

  3. iOS开发之ARC(自动引用计数)

    iOS开发之ARC(自动引用计数) 英文原文:Automatic Reference Counting on iOS 参与翻译(4人): 纶巾客, showme, 李远超, 王宇龙 自动引用计数(AR ...

  4. ios9和ios10的新特性

    ios9和ios10的新特性 昨天面试了一个做ios开发的公司,其中面试官问我最新的ios系统版本是多少,以及它的特性是什么?由于自己是初学者,所以对这些没有关注过.今天特地搜索了一下关于ios9和i ...

  5. iOS开发之AVKit框架使用

    2019独角兽企业重金招聘Python工程师标准>>> iOS开发之AVKit框架使用 一.引言 在iOS开发框架中,AVKit是一个非常上层,偏应用的框架,它是基于AVFounda ...

  6. (0045) iOS 开发之MBProgressHUD 源码学习

    (0045) iOS 开发之MBProgressHUD 源码学习 第一部分:学习所得和分析线程 1.  学习到了kvo 的使用 和屏幕方向的旋转判断. 2. 如果调起这个 HUD 的方法不是在主线程调 ...

  7. 李洪强iOS开发之RunLoop的原理和核心机制

    李洪强iOS开发之RunLoop的原理和核心机制 搞iOS之后一直没有深入研究过RunLoop,非常的惭愧.刚好前一阵子负责性能优化项目,需要利用RunLoop做性能优化和性能检测,趁着这个机会深入研 ...

  8. IOS开发之UI基础LOL英雄展示-15

    IOS开发之UI基础LOL英雄展示-15 // // ViewController.m // 15-英雄展示-单组数据 // // Created by 鲁军 on 2021/2/3. //#impo ...

  9. iOS10.3新特性图文介绍

    iOS10.3有哪些新特性?这是很多苹果用户关心的问题,那么下面小编就为大家带来iOS10.3新特性图文介绍,大家一起来看看吧! 1.新增查找我的AirPods功能 苹果为iOS 10.3加入查找Ai ...

最新文章

  1. 深入理解网络最大流和Ford-Fulkson算法
  2. GDI+编程说明及小结
  3. SYSENTER——快速系统调用
  4. (转载)c++内存池实现 .
  5. 微信小程序页面间传递json数据
  6. 什么是Django?
  7. HDU - 3518 Boring counting(后缀数组)
  8. ring0 ring3 kernel driver
  9. [转载] 什么是Java中的自动拆装箱 integer
  10. 蒙太奇经典例子_剧本中如何写好蒙太奇?这15个硬核案例告诉你!
  11. 用python的turtle库画圣诞树
  12. 达内python培训视频下载
  13. 总结几款国内外在线的神级抠图工具
  14. 数字8(eight )题解
  15. 探索 Sa-Token (三) 权限认证原理
  16. 无线路由器(WIFI)经常掉线断网的可能的原因
  17. woj 1537 Stones I
  18. 微信小程序开发(五)——数据绑定、运算、样式导入、页面跳转
  19. 《凤凰项目:一个IT运维的传奇故事》笔记
  20. java与C++中文字符的问题

热门文章

  1. django框架使用mysql报错,及两种解决方法
  2. bzoj3171: [Tjoi2013]循环格(费用流)
  3. 第55件事 产品疯传的7个基本原则
  4. 时间较宽裕的时候,选择有挑战性的路
  5. 2016百度星资格赛1002 大数相加
  6. 三大平衡树(Treap + Splay + SBT)总结+模板
  7. 第十八章 33用重载输出运算符函数实现字符串的输出
  8. NetBeans 时事通讯(刊号 # 27 - Sep 24, 2008)
  9. (Asp.Net)转载-用Powershell 建立IIS web site
  10. 2017 Multi-University Training Contest - Team 3 Kanade's sum hd6058