杏z学習帳

Swiftを中心にFlutterやらUnityなどに手を出してます

Alternate Iconsの設定の仕方(2019/10/16)

[Xcode]Alternate Iconsの設定の仕方

ざっくりまとめ。

です。

環境

やりたいこと

Alternate Icons を利用したい!!

やっていき

ここらへんググればたくさんでてくるので、さくっと行きますw

用意している画像名は

です。

Info.plist あたりに下記の感じで記述したらおkです

<key>CFBundleIcons</key>
<dict>
    <key>CFBundleAlternateIcons</key>
    <dict>
        <key>icon</key>
        <dict>
            <key>CFBundleIconFiles</key>
            <array>
                <string>wataten_icon</string>
            </array>
        </dict>
    </dict>
    <key>CFBundlePrimaryIcon</key>
    <dict>
        <key>CFBundleIconFiles</key>
        <array>
            <string></string>
        </array>
        <key>UIPrerenderedIcon</key>
        <false/>
    </dict>
</dict>

で設定するコードは

UIApplication.shared.setAlternateIconName("icon") { error in
}

これだけです。

<key>icon</key> で指定する文字列が setAlternateIconName("icon") で指定する文字列に連動します。なのでこちらは任意です。
<string>wataten_icon</string> で指定する文字列は画像ファイルの名前と連動します。
追加する画像ファイルはアセットカタログに追加ではだめで、直接リソースとして追加する必要があります。

これで、アプリアイコンも変更できますね!
ちなみに、アイコンサイズを間違うと動作しません

iPad では。。?

このままだと、iPad では動きません。
前述したとおり、アイコンサイズが違うとエラーになるからです。
上記だけだと iPhone 用のアプリアイコンサイズでしか用意してないため、iPad では設定できないという流れ。

ここで疑問になるのが、iPad 用の設定はどうするのだろう?🤔 ということ。

こうなります!

<key>CFBundleIcons</key>
<dict>
    <key>CFBundleAlternateIcons</key>
    <dict>
        <key>icon</key>
        <dict>
            <key>CFBundleIconFiles</key>
            <array>
                <string>wataten_icon</string>
            </array>
        </dict>
    </dict>
    <key>CFBundlePrimaryIcon</key>
    <dict>
        <key>CFBundleIconFiles</key>
        <array>
            <string></string>
        </array>
        <key>UIPrerenderedIcon</key>
        <false/>
    </dict>
    <key>CFBundleAlternateIcons~ipad</key>
    <dict>
        <key>icon</key>
        <dict>
            <key>CFBundleIconFiles</key>
            <array>
                <string>wataten_icon_ipad</string>
            </array>
        </dict>
    </dict>
    <key>CFBundlePrimaryIcon</key>
    <dict>
        <key>CFBundleIconFiles</key>
        <array>
            <string></string>
        </array>
        <key>UIPrerenderedIcon</key>
        <false/>
    </dict>
</dict>

<key>CFBundleAlternateIcons~ipad</key> っていうのを追加して iPhone と同じように記述します。

画像は

を新たに用意して追加してます。
これで無事に iPad でも使えるようになります!!💪

あれれぇ?アイコンはサイズあってないとダメじゃないの??

そう、iPad には3種類アプリアイコンのサイズがあります。

83.5x2pt ... iPad Pro(3rd) の設定用のアイコンです。
上記までだとこれの設定は特にしていません。
が、iPad Pro(3rd) でも上記設定のママ、アプリアイコンを変更することはできます。
ただし、サイズがあってないことには変わらないので、ほかアプリアイコンと見比べるとあらく見えるかもしれません。
専用にちゃんと設定したくなりますが、どうしたら...🤔

<key>CFBundleIcons</key>
<dict>
    <key>CFBundleAlternateIcons</key>
    <dict>
        <key>icon</key>
        <dict>
            <key>CFBundleIconFiles</key>
            <array>
                <string>wataten_icon</string>
            </array>
        </dict>
    </dict>
    <key>CFBundlePrimaryIcon</key>
    <dict>
        <key>CFBundleIconFiles</key>
        <array>
            <string></string>
        </array>
        <key>UIPrerenderedIcon</key>
        <false/>
    </dict>
    <key>CFBundleAlternateIcons~ipad</key>
    <dict>
        <key>icon</key>
        <dict>
            <key>CFBundleIconFiles</key>
            <array>
                <string>wataten_icon_ipad</string>
                <string>wataten_icon_ipadpro</string>
            </array>
        </dict>
    </dict>
    <key>CFBundlePrimaryIcon</key>
    <dict>
        <key>CFBundleIconFiles</key>
        <array>
            <string></string>
        </array>
        <key>UIPrerenderedIcon</key>
        <false/>
    </dict>
</dict>

<string>wataten_icon_ipadpro</string> というのを追記しました。
もちろん、wataten_icon_ipadproというファイル名で画像も追加します。
これで、iPad Pro(3rd) でもしっかりちゃんと変更できるようになります!

画像ファイル名の指定は array でできるので、多分ですが、@2xとかで命名しなくても

<array>
    <string>icon_60.png</string>
    <string>icon_120.png</string>
</array>

という書き方でもいけそうなきがします(やってませんが)