更換AppIcon

動態(tài)更換App圖標(biāo)這件事,在用戶里總是存在需求的:有些用戶喜歡“美化”自己的手機(jī)。至于用戶們喜歡美化到什么程度,這得看個(gè)人需求。有的用戶想定制個(gè)性的App圖標(biāo),那么各大iPhone論壇里都有方法可以不越獄更改App圖標(biāo);有的用戶想讓App圖標(biāo)“動”起來(如系統(tǒng)應(yīng)用時(shí)鐘),那么不越個(gè)獄還真不好辦。

在不重新安裝App的情況下,可以實(shí)現(xiàn)更新App的圖標(biāo)。但是會彈出一個(gè)提示,告知用戶當(dāng)前圖標(biāo)已更換。

應(yīng)用場景

  1. 白天/夜間模式切換,在切換App主色調(diào)同時(shí)切換App圖標(biāo)。
  2. 各類皮膚主題(淘寶就可換膚),附帶App圖標(biāo)一塊更換。
  3. 利用App圖標(biāo)表達(dá)某種特定功能,如Demo中的,提示當(dāng)前天氣。
  4. 圖標(biāo)促銷提示,如淘寶京東特定節(jié)日:11.11、6.18,提前更換App圖標(biāo)。

API

該功能(API)當(dāng)前只支持iOS10.3以上的系統(tǒng)。

@interface UIApplication (UIAlternateApplicationIcons)
// 如果為NO,表示當(dāng)前進(jìn)程不支持替換圖標(biāo)
@property (readonly, nonatomic) BOOL supportsAlternateIcons NS_EXTENSION_UNAVAILABLE("Extensions may not have alternate icons") API_AVAILABLE(ios(10.3), tvos(10.2));
// 傳入nil代表使用主圖標(biāo). 完成后的操作將會在任意的后臺隊(duì)列中異步執(zhí)行; 如果需要更改UI,請確保在主隊(duì)列中執(zhí)行.
- (void)setAlternateIconName:(nullable NSString *)alternateIconName completionHandler:(nullable void (^)(NSError *_Nullable error))completionHandler NS_EXTENSION_UNAVAILABLE("Extensions may not have alternate icons") API_AVAILABLE(ios(10.3), tvos(10.2));
// 如果alternateIconName為nil,則代表當(dāng)前使用的是主圖標(biāo).
@property (nullable, readonly, nonatomic) NSString *alternateIconName NS_EXTENSION_UNAVAILABLE("Extensions may not have alternate icons") API_AVAILABLE(ios(10.3), tvos(10.2));
@end

Info.plist

CFBundleIcons是 Info.plist 字典里的一個(gè)鍵,它對應(yīng)的value是個(gè)字典。
CFBundleIcons 里面能夠包含的鍵有:CFBundlePrimaryIcon、CFBundleAlternateIcons、UINewsstandIcon。

CFBundleAlternateIcons所對應(yīng)的value是個(gè)字典,字典中的鍵是備用圖標(biāo)的名字。
每個(gè)鍵對應(yīng)的value是個(gè)包含 CFBundleIconFiles 和 UIPrerenderedIcon 兩個(gè)鍵的字典。

CFBundleIconFiles 的value是字符串或者數(shù)組(數(shù)組內(nèi)容也為字符串)。字符串的內(nèi)容為各尺寸備用圖標(biāo)的名字。

UIPrerenderedIcon 的value是BOOL值。這個(gè)鍵值所代表的作用在iOS7之后(含iOS7)已失效,我們可以不用關(guān)心。

eg:

@"CFBundleAlternateIcons" : @{
    @"newAppIcon1" : @{
        @"CFBundleIconFiles" : @[
            @"newAppIcon1_60"
        ],
        @"UIPrerenderedIcon" : NO
    },
    @"newAppIcon2" : @{
        @"CFBundleIconFiles" : @[
            @"newAppIcon2_20",
            @"newAppIcon2_29",
            @"newAppIcon2_40",
            @"newAppIcon2_60"
        ],
        @"UIPrerenderedIcon" : NO
    }
}

注意事項(xiàng)

  1. 文件擴(kuò)展名,如@2x,@3x,要么統(tǒng)一不寫,那么系統(tǒng)會自動尋找合適的尺寸;要寫就需要把每張icon的擴(kuò)展名寫上。
  2. 每個(gè)圖標(biāo),可以只提供最大的一張,其他的由操作系統(tǒng)生成;也可以提供全部所需的尺寸。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容