iOS 10.3增加了动态更换图标的功能。这样我们就可以在不经过App Store更新图标。
实现
- 满足手机系统在iOS 10.3或者之上
-
supportsAlternateIcons
这个布尔值为yes - 在
Info.plist
中增加所需改变的图标 - 在项目中添加素材,注意不要添加到
Assets.xcassets
- 以上基础上调用
setAlternateIconName:alternateIconName completionHandler:
分析
supportsAlternateIcons :在苹果官方的文档中解释如下:
/*
A Boolean value indicating whether the app is allowed to change its icon.
*/
@property(readonly, nonatomic) BOOL supportsAlternateIcons;
解释:一个布尔值,表示该应用是否允许更改其图标。
并且这个值当系统允许你改变你的应用的图标时才会出现。且你需要声明你的应用的其他图标,将它们包含在你的应用信息的
CFBundleAlternateIcons
图标键中Info.plist
文件。
setAlternateIconName:completionHandler: :这是一个自带Block回调的方法,通过传递你info中设置的icon名来改变图标。
[[UIApplication sharedApplication]setAlternateIconName:iconName completionHandler:^(NSError * error){
NSLog(@"error %@",error);
}];
当走到
error
回调的时候该参数包含指示发生的错误对象,且交流符号属性的值保持不变。
Info.plist
<key>CFBundleIcons</key>
<dict>
<key>CFBundleAlternateIcons</key>
<dict>
<key>图标</key>
<dict>
<key>CFBundleIconFiles</key>
<array>
<string>文件名</string>
</array>
<key>UIPrerenderedIcon</key>
<false/>
</dict>
</dict>
<key>CFBundlePrimaryIcon</key>
<dict>
<key>CFBundleIconFiles</key>
<array>
<string>AppIcon-49x49</string>
</array>
</dict>
</dict>
Info.plist
这里我去搜索一下UIPrerenderedIcon
这个布尔的意思,解释如下:
Key | Xcode name | Summary |
---|---|---|
UIPrerenderedIcon | “Icon already includes gloss effects” | Specifies whether the app’s icon already includes a shine effect. See UIPrerenderedIcon for details. |
指定该应用的图标是否已经包含了一个发光效果,所以默认选择No即可~
方法调用
#pragma mark - 更换图标
- (void)setUpChangeIcon:(NSString *)iconName
{
if (@available(iOS 10.3, *)) { //10.3以上系统支持跟换图标
if ([[UIApplication sharedApplication] supportsAlternateIcons]) {
[[UIApplication sharedApplication]setAlternateIconName:iconName completionHandler:^(NSError * error){
NSLog(@"error %@",error);
}];
}
} else {
NSLog(@"手机系统不支持更换图标~");
}
}
演示GIF