iOS 动态修改app图标

在开发过程中,我们有时候会遇到对线上的项目进行更改icon的需求.
譬如,明天双十一抢购,要做一个活动图标.后天什么节日的,要做一个节日图标来应景一下.那么怎么去实现呢?

在苹果官方文档中有相应的API方法去更换Icon.

- (void)setAlternateIconName:(NSString *)alternateIconName 
           completionHandler:(void (^)(NSError *error))completionHandler;

参数:

alternateIconName 为要替换的icon名字,(在这里注意一下,icon文件不要设置在Assets 里面,新建一个目录,里面存放即可).
1.png

completionHandler 为响应的回调处理

要使用结果执行的处理程序。在尝试更改应用程序的图标后,系统通过调用处理程序报告结果。(处理器是在uikit提供的队列上执行的,不一定是在应用程序的主队列上。)处理程序没有返回值,并接受以下参数:

error 处理返回的错误信息.

到这里就已经了解如何完成任务,下面就让我们跟着实践一下.

首先导入所要更换的icon,
然后修改infoplist文件icon api,新建一个key为 Icon files (iOS 5)的字典类型item,输入icon就可选择.

这里的Primary Icon是设置app的主icon,可以在这里的Icon files数组内添加,有多个的话,依次添加,也可以这里不用填写,直接在Assets.xcassets 里配置

F7E956018A8955B1058ED59AF361FA8E.png

在 Icon files(iOS 5)内添加一个Key: CFBundleAlternateIcons ,类型为字典,

在这个字典里配置我们所有需要动态修改的icon:键为icon的名称,值为一个字典(这个字典里包含两个键:CFBundleIconFiles,其值类型为Array,内容为icon的名称;UIPrerenderedIcon,其值类型为bool,内容为NO,也可以不加此key)
5A075B0519FFAABB303C33F62B44B45D.png

到这里配置部分就完成了,

代码实现就更简单了


CDBC225A-3979-4015-826E-B008EA963E90.png

然后就完成了.
这里有一个小小的问题:就是在修改icon的时候会出来一个系统弹框.


C59B6F8D-CDA3-4923-A978-3196FADC704E.png

如果不想用户操作的话,可以利用runtime动态替换方法去修改.


8F1C224B-1F45-419A-AEEA-825DA36829BB.png

到这里就完美的完成的.

附上本文icon修改demo,欢迎各位大大指点与批评.

你可能感兴趣的:(iOS 动态修改app图标)