动态更换应用图标AppIcon
在 iOS 10.3 以上苹果添加了更换图标的功能,通过这个功能,我们可以在适当的时候采取特定的方式为我们的App更换图标。使用的场景,通常用于公司活动,逢年过节等换一个应用图标AppIcon 来应景,不需要进行发版 。
主要流程如下:
1. 新建测试项目,设置项目的主app图标。方式和正常设置AppIcon方式一样。
-
在Assets.xcassets文件中设置AppIcon,如下图:
-
在TARGETS—>General—>App Icons and Lauch Images—>App Icons Source设置图标来源:AppIcon
屏幕图为
2、配置需要动态展示的App图标图片
-
动态更换的icon不能放在Assets.xcassets里!但是正常的主icon还是可以在Assets.xcassets里设置的. 动态更换的icon 放到工程目录下就可以了,
一个标准的Icon图集, 需要十几种尺寸, 比如: 20, 29, 40, 60 故动态的图片可添加多尺寸 也可不加 但是不能小 否则会模糊
-
配置info.plist文件
这里的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)
CFBundleIcons:
一个字典,包含所有AppIcon信息,即上图的Icon files(iOS 5)
CFBundlePrimaryIcon:
如果已经在Assets.xcassets中设置了AppIcon,那么CFBundlePrimaryIcon中的配置会被忽略,Assets.xcassets的AppIcon将会自动配置到CFBundlePrimaryIcon中。
CFBundleAlternateIcons:
一个数组,负责配置可供替换的icon信息
UIPrerenderedIcon:
是否已经预渲染,如果不设置该项或者设为NO。系统会自动为icon进行渲染增加光泽
3、代码示例
在一段时间进行更换图标
+ (void)changeIconEvent {
NSDate *date = [NSDate date];
NSCalendar *calendar = [NSCalendar calendarWithIdentifier:NSCalendarIdentifierGregorian];
calendar.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:8 * 3600];
NSInteger year =