杏z学習帳

Swift、Unityなどを中心に節操なく手を出してますまる

アプリアイコンをユーザが選択可能にする方法(2019/01/17)

[Swift]アプリアイコンをユーザが選択可能にする方法

ざっくりまとめ。

です。

環境

やりたいこと

ユーザがアプリアイコンを選択できるようにしたい。

実装

大きく3ステップで可能です。

アプリアイコンを用意する

選択させる分のアプリアイコンを用意して、リソースとして登録します
AssetCatalog で登録してはダメみたいです。
(AssetCatalog だとできないと参考サイトで見たので自分では検証していませんが(笑))

アプリアイコンの登録

info.plist の編集

info.plist

こんな感じで設定します。
同じ名前にしちゃったんでわかりづらいですが...
上記画像の Key がコードで指定する名前になって、
画像ファイル名 がそのとおりでリソース登録したファイル名です。

任意のタイミングでアプリを変える

setAlternateIconName(_:completionHandler:) を呼ぶだけです

func clickSomething() {

    UIApplication.shared.setAlternateIconName("AlternalIcon1", completionHandler: { (error) in
        if let error = error {
            print(error)
        } else {
            print("sucess!!")
        }
    })
}

これを実行してあげると AlternalIcon1 で登録した画像にアプリアイコンが変わります。
簡単ですね!
これだけだと選択できるとかってなにもないので、命題のやつを実現するためにはアプリアイコンを選ばせる画面なりメニューなりを用意する必要があります。

先日この機能をつけて、ツイートスクラップ をアプデしたのでどんな挙動なのか見てみたい人はDLどぞ!
(唐突な宣伝(笑))

注意事項

ここまでの実装の仕方を見て分かる通り、完全に動的に変更というわけではないです。
(アプリアイコンをサーバーからDLしてきてそれで選択できる。みたいなわけじゃない)
あくまでもリリース時にリソースとしてちゃんと登録しておく必要があるということです。

あとはこの機能がつかえるのは iOS 10.3+ です。

補足

この変更はどこまで波及してるのか?っていうのを気になってツイートスクラップで確認してみました。

上記箇所はいずれも変更したアイコンが適用されていたので、結構ちゃんと(?)変わりそうです

雑感

と、お手軽にアプリアイコンを変更できるようになります。
キャラガチャがあるソシャゲとか相性良さそうですけどね?

予めキャラ分のキャラverアイコンを登録しておいて、ガチャで手に入れたときとかにアプリアイコンに選択できるようにしておく。。みたいな?
推しキャラがアプリアイコンになるとか良くないですか??
あんまりそういう話聞かないのだけれど実装してるものないんでしょかね。。🤔

あれですかね。Android で同等の機能がなさそうなので(多分)、
不公平だとおもわれてしまいそうだから敬遠してるとかなんでしょか。

参考