iOS 10.3 以降でアプリのアイコンを動的に変更できるようになった。アイコン変更時に必ずアラートが表示されるので、viewDidLoad などで勝手に変更するような処理をするのはあまり望まれないかもしれない。

手順

  1. アイコン画像を追加する
  2. Info.plist にアイコンを設定する
  3. アイコンを変更する処理を書く

1. アイコン画像を追加する

現時点では xcassets は使用できないようなので、プロジェクトに直接追加する。 追加する画像のサイズは以下の Retina と Retina HD を含む 60px。
ここでは名称を『icon-60』としている。

  • icon-60.png(60 * 60)
  • icon-60@2x.png(120 * 120)
  • icon-60@3x.png(180 * 180)

プロジェクト名など他と被るアイコン名にすると動作しないので注意。

2. Info.plist にアイコンを設定する

CFBundleIcons を追加してアイコンを追加する。アイコンは複数追加可能。

<key>CFBundleIcons</key>
<dict>
    <key>CFBundleAlternateIcons</key>
    <dict>
        <key>icon-60</key>
        <dict>
            <key>CFBundleIconFiles</key>
            <array>
                <string>icon-60</string>
            </array>
            <key>UIPrerenderedIcon</key>
            <false/>
        </dict>
        ・
        ・(複数追加できる)
        ・
    </dict>
    <key>CFBundlePrimaryIcon</key>
    <dict>
        <key>CFBundleIconFiles</key>
        <array/>
        <key>UIPrerenderedIcon</key>
        <false/>
    </dict>
</dict>

3. アイコンを変更する処理を書く

setAlternateIconName(_:completionHandler:) を使用します。

if #available(iOS 10.3, *), UIApplication.shared.supportsAlternateIcons {
    UIApplication.shared.setAlternateIconName("icon-60")
}

UIApplication.shared.setAlternateIconName(nil) とするとデフォルトのアイコンが設定される。

Next PostPrevious Post