iOS 10.3 開放了更換 app 圖標的 API,核心方法是下面這個:javascript
func setAlternateIconName(_ alternateIconName: String?,
completionHandler: ((Error?) -> Void)? = nil)複製代碼
這是官方文檔,可是你還須要在 info.plist 裏面填一些東西才能讓它起做用,這部分官方註釋內容在這裏。
html
但 info.plist 如何填寫這部分讀起來仍是有些晦澀,一時可能搞不清楚如何操做,下面作個示範。java
<key>CFBundleIcons</key>
<dict>
<key>CFBundleAlternateIcons</key>
<dict>
<key>blackBgColor</key>
<dict>
<key>CFBundleIconFiles</key>
<array>
<string>blackBgColor</string>
</array>
<key>UIPrerenderedIcon</key>
<false/>
</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 的圖片資源圖標所需最高質量,更低分辨率的版本系統會自動壓縮以展現。git
blackBgColor
是個人用於替換原生圖標的圖片資源。文件名須要和 info.plist 中保持一致(注意 info.plist 中用到了兩次 "blackBgColor"),同時這也是你在代碼中設置圖標時,須要給 API 傳入的參數。一樣是 60pt@2x 和 60pt@3x 的圖片資源,文件不經過 Assets.xcassets 添加進來,而是直接放到目錄中。github
若是你須要支持 iPad,建議這裏使用 83.5pt(iPad Pro)的圖片資源。另外還有些其餘關於在 iPad 上替換圖標的注意事項,在這裏有說明,注意咱們這裏在 info.plist 裏面所用的 key 是 CFBundleIcons
,還有另一個 key 是 CFBundleIcons~ipad
。app
替換圖標部分的代碼就超級簡單了:ide
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
}
@IBAction func changeAppIcon(_ sender: Any) {
if UIApplication.shared.supportsAlternateIcons {
print("you can change this app's icon")
}else {
print("you cannot change this app's icon")
return
}
if let name = UIApplication.shared.alternateIconName {
// CHANGE TO PRIMARY ICON
UIApplication.shared.setAlternateIconName(nil) { (err:Error?) in
print("set icon error:\(String(describing: err))")
}
print("the alternate icon's name is \(name)")
}else {
// CHANGE TO ALTERNATE ICON
UIApplication.shared.setAlternateIconName("blackBgColor") { (err:Error?) in
print("set icon error:\(String(describing: err))")
}
}
}
}複製代碼