iOS 10.3 加入了了更换应用图标的新功能,当应用安装后,开发者可以为应用提供多个应用图标选择。用户可以自由的在这些图标之间切换。这也是 iOS 主屏首次支持应用图标更换。如下介绍如何更新应用图标。
一、API介绍
UIApplication 的对象方法,setAlternateIconName:completionHandler:可以用来更换应用的图标,但是还要设置plist文件内容,后面细致讲解。
//alternateIconName 参数是应用图片名字,如果该参数是nil,默认是最初图标的名字
//completionHandler 是回调,如果更换图片成功,error 为nil,否则不为nil;
- (void)setAlternateIconName:(NSString *)alternateIconName
completionHandler:(void (^)(NSError *error))completionHandler;
讨论
在调用此方法时,要用supportsAlternateIcons 方法,来判断是否支持换应用图标。另外还要在plist文件中用 CFBundleIcons 键声明 primary 和 alternate 图标,如何设置 CFBundleIcons 键,请参考Information Property List Key Reference。
二、Plist文件的配置
下图是最初应用的图标。
下图中是plist 文件的设置,最初图标的名字 和 更新图标和名字要一一对应。
<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>Icon</string>
</array>
</dict>
</dict>
三、代码实现
如下代码实现如何更换应用的图标,主要思路如下
1 系统能否支持更换图标
2 判断是否已经更新过图标
3 更新图标
- (IBAction)changeIcon:(id)sender {
if ([UIApplication sharedApplication].supportsAlternateIcons) {
NSLog(@"U can change icon image");
//应用是否更新过图标
NSString *iconName = [[UIApplication sharedApplication] alternateIconName];
if (iconName) {
//setAlertnateIconName方法有二个参数
//第一个参数是 要换图标的名字,如果写nil,系统默认是最初图标名字
//第二个参数是 方法执行的回调
[[UIApplication sharedApplication] setAlternateIconName:nil completionHandler:^(NSError * _Nullable error) {
if (error) {
NSLog(@"errpr = %@",error);
}else{
NSLog(@"suceess");
}
}];
}else{
//换图标
[[UIApplication sharedApplication] setAlternateIconName:@"newIcon" completionHandler:^(NSError * _Nullable error) {
if (error) {
NSLog(@"errpr = %@",error);
}else{
NSLog(@"suceess");
}
}];
}
}