anz blog

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

2019-01-17 #Xcode #Swift

ざっくりまとめ。

  • アイコンを用意します
  • info.plist を編集します
  • 任意のタイミングで setAlternateIconName(_:completionHandler:) を実行する

です。

環境

  • Xcode v10.1
  • Swift v4.2

やりたいこと

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

実装

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

  • 対象となるアプリアイコンを用意する
  • info.plist の編集をして選択可能なアイコン設定をする
  • 任意のタイミングで setAlternateIconName(_:completionHandler:) を実行する

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

選択させる分のアプリアイコンを用意して、リソースとして登録します
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+ です。

補足

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

  • ホームでのアプリアイコン
  • Share時(UIAcitivtyViewController)に表示されるアイコン
    • ツイートスクラップは Share Extension 機能を持っているアプリなのです
  • Spotlight 検索時に出てくるアイコン

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

雑感

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

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

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

参考