iOS 10.3 如何更換 app 圖標

iOS 10.3 開放了更換 app 圖標的 API,核心方法是下面這個:

[[UIApplication sharedApplication] setAlternateIconName:nil completionHandler:^(NSError * _Nullable error) {
                NSLog(@"error = %@", error.localizedDescription);
            }];

這是官方文檔,但是你還需要在 info.plist 里面填一些東西才能讓它起作用,這部分官方注釋內(nèi)容在這里

但 info.plist 如何填寫這部分讀起來還是有些晦澀,一時可能搞不清楚如何操作,下面做個示范。

Assets.xcassets
info.plist
<key>CFBundleIcons</key>
      <dict>
        <key>CFBundleAlternateIcons</key>
        <dict>
            <key>Test1</key>
            <dict>
                <key>CFBundleIconFiles</key>
                <array>
                    <string>Test1</string>
                </array>
                <key>UIPrerenderedIcon</key>
                <false/>
            </dict>
            <key>Test2</key>
            <dict>
                <key>CFBundleIconFiles</key>
                <array>
                    <string>Test2</string>
                </array>
            </dict>
        </dict>
        <key>CFBundlePrimaryIcon</key>
        <dict>
            <key>CFBundleIconFiles</key>
            <array>
                <string>AppIcon60x60</string>
            </array>
        </dict>
    </dict>

如圖,Primary Icon 字段寫為 AppIcon60x60 是因為這里 xcassets 里面我只導入了 60pt@2x 和 60pt@3x 的圖片資源,這里選為 60 是因為對于 iPhone,60pt 的圖片資源圖標所需最高質(zhì)量,更低分辨率的版本系統(tǒng)會自動壓縮以展示。

Test1 是我的用于替換原生圖標的圖片資源。文件名需要和 info.plist 中保持一致(注意 info.plist 中用到了兩次 "Test1"),同時這也是你在代碼中設(shè)置圖標時,需要給 API 傳入的參數(shù)。同樣是 60pt@2x 和 60pt@3x 的圖片資源,文件不通過 Assets.xcassets 添加進來,而是直接放到目錄中。

如果你需要支持 iPad,建議這里使用 83.5pt(iPad Pro)的圖片資源。另外還有些其他關(guān)于在 iPad 上替換圖標的注意事項,在這里有說明,注意我們這里在 info.plist 里面所用的 key 是CFBundleIcons
,還有另外一個 key 是 CFBundleIcons~ipad
。

替換圖標部分的代碼就超級簡單了:


-(void)setIcon:(UISegmentedControl *)sender
{
    switch (sender.selectedSegmentIndex) {
        case 0:
            [[UIApplication sharedApplication] setAlternateIconName:nil completionHandler:^(NSError * _Nullable error) {
                NSLog(@"error = %@", error.localizedDescription);
            }];
            break;
        case 1:
            [[UIApplication sharedApplication] setAlternateIconName:@"Test1" completionHandler:^(NSError * _Nullable error) {
                NSLog(@"error = %@", error.localizedDescription);
            }];
            break;
        case 2:
            [[UIApplication sharedApplication] setAlternateIconName:@"Test2" completionHandler:^(NSError * _Nullable error) {
                NSLog(@"error = %@", error.localizedDescription);
            }];
            break;
            
        default:
            break;
    }
    
}
Simulator Screen Shot
Simulator Screen Shot

demo 地址

寫在最后:國外的app如NHL、MLB.com At Bat已經(jīng)集成到項目中了,有興趣的可以下載下來看看。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

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

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