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