iOS 10.3 如何更換 app 圖標

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

func setAlternateIconName(_ alternateIconName: String?, 
    completionHandler: ((Error?) -> Void)? = nil)複製代碼

這是官方文檔,可是你還須要在 info.plist 裏面填一些東西才能讓它起做用,這部分官方註釋內容在這裏
html

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

Assets.xcassets

info.plist

<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~ipadapp

替換圖標部分的代碼就超級簡單了: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))")
            }
        }
    }

}複製代碼

這是上述全部內容的完整 demo 地址ui

screentshot0

screentshot1
相關文章
相關標籤/搜索