iOS 10.3增加了動(dòng)態(tài)更換圖標(biāo)的功能。這樣我們就可以在不經(jīng)過(guò)App Store更新圖標(biāo)。
實(shí)現(xiàn)
- 滿(mǎn)足手機(jī)系統(tǒng)在iOS 10.3或者之上
-
supportsAlternateIcons
這個(gè)布爾值為yes - 在
Info.plist
中增加所需改變的圖標(biāo) - 在項(xiàng)目中添加素材,注意不要添加到
Assets.xcassets
- 以上基礎(chǔ)上調(diào)用
setAlternateIconName:alternateIconName completionHandler:
分析
supportsAlternateIcons :在蘋(píng)果官方的文檔中解釋如下:
/*
A Boolean value indicating whether the app is allowed to change its icon.
*/
@property(readonly, nonatomic) BOOL supportsAlternateIcons;
解釋?zhuān)阂粋€(gè)布爾值抡句,表示該應(yīng)用是否允許更改其圖標(biāo)。
并且這個(gè)值當(dāng)系統(tǒng)允許你改變你的應(yīng)用的圖標(biāo)時(shí)才會(huì)出現(xiàn)。且你需要聲明你的應(yīng)用的其他圖標(biāo)睬愤,將它們包含在你的應(yīng)用信息的
CFBundleAlternateIcons
圖標(biāo)鍵中Info.plist
文件。
setAlternateIconName:completionHandler: :這是一個(gè)自帶Block回調(diào)的方法纹安,通過(guò)傳遞你info中設(shè)置的icon名來(lái)改變圖標(biāo)尤辱。
[[UIApplication sharedApplication]setAlternateIconName:iconName completionHandler:^(NSError * error){
NSLog(@"error %@",error);
}];
當(dāng)走到
error
回調(diào)的時(shí)候該參數(shù)包含指示發(fā)生的錯(cuò)誤對(duì)象砂豌,且交流符號(hào)屬性的值保持不變。
Info.plist
<key>CFBundleIcons</key>
<dict>
<key>CFBundleAlternateIcons</key>
<dict>
<key>圖標(biāo)</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
這個(gè)布爾的意思光督,解釋如下:
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. |
指定該應(yīng)用的圖標(biāo)是否已經(jīng)包含了一個(gè)發(fā)光效果阳距,所以默認(rèn)選擇No即可~
方法調(diào)用
#pragma mark - 更換圖標(biāo)
- (void)setUpChangeIcon:(NSString *)iconName
{
if (@available(iOS 10.3, *)) { //10.3以上系統(tǒng)支持跟換圖標(biāo)
if ([[UIApplication sharedApplication] supportsAlternateIcons]) {
[[UIApplication sharedApplication]setAlternateIconName:iconName completionHandler:^(NSError * error){
NSLog(@"error %@",error);
}];
}
} else {
NSLog(@"手機(jī)系統(tǒng)不支持更換圖標(biāo)~");
}
}
演示GIF