web-dev-qa-db-ja.com

iOS 10.3の代替アイコン

Info.plistにキーを追加してiOS 10.3で代替アイコンを設定する方法についての情報があります。しかし、私が確信していないのは、各代替案に必要なサイズです。私は現在アセットフォルダを使用しており、スポットライト、iphoneやipadのサイズなど、約12の異なるサイズのアイコンを配置する必要があります。代替のルールは何ですか?

19
user717452

最大の問題はアイコン画像のソースとinfo.plistを設定する方法なので、 here は、Swift 3。

Assets.xcassetsinfo.plist

  1. アプリがiPadをサポートしていない場合、アイコン画像のソースは60pt @ 2xおよび60pt @ 3x(120x120 180x180)にすることができ、20pt 29ptおよび40ptはすべて60pt画像から生成できます。したがって、iPhone専用アプリの場合、代替アイコン画像ソースも60pt @ 2xおよび60pt @ 3xにする必要があります。アプリがiPad Proをサポートしている場合は、83.5ptになります。

  2. 写真で見たように、代替アイコン画像はpngファイルとしてプロジェクトに追加する必要があります(サンプルではblackBgColor画像)が、Assets.xcassets。

  3. Info.plistの代替アイコンの設定は少し複雑なので、これが初めての場合は、plistにコードをコピーすることをお勧めします。また、代替のアイコンの名前(blackBgColor)がplistで2回使用されていることに注意してください。私のバージョンに基づいてアイコンの名前を変更する場合は、 2つの場所の両方で名前を変更しました。

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

これで、ViewControllerのコードは単純になります。

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))")
            }
        }
    }

}
20
Kaiyuan Xu

アイコンを変更するには、使用する必要があります set​Alternate​Icon​Name(_:​completion​Handler:​)

CFBundleAlternateIconsInfo.plistに入れる必要があります。代替アイコンのサイズは、ここにリストされているプラ​​イマリ アイコンのサイズと同じです

CFBundleAlternateIconsディクショナリエントリの内容で完全なドキュメントを読むことができます

enter image description here


編集:この抜粋は、上記のドキュメントからです icon sizes listed here

必要なすべてのサイズで視覚的に一貫した代替アイコンを提供します。プライマリアプリアイコンと同様に、各代替アプリアイコンは、サイズが異なる関連画像のコレクションとして配信されます。ユーザーが代替アイコンを選択すると、そのアイコンの適切なサイズが、ホーム画面、Spotlight、およびシステムの他の場所にあるプライマリアプリアイコンに置き換わります。代替アイコンがシステム全体で一貫して表示されるようにするには、たとえば、ホーム画面にアイコンの1つのバージョンが表示されないようにし、[設定]にまったく異なるバージョンを表示するなど、プライマリアプリアイコンに提供するのと同じサイズでアイコンを提供します。 (大きなApp Storeアイコンを除いて)。 App Icon Sizes を参照してください

3