2017年7月11日火曜日

iOS10.3のアプリアイコンの変更で気をつけること


Appleのカレンダーアプリは、今日の曜日と日付がアプリアイコンになる。
これはサードパーティのアプリでは不可能で、なんとも羨ましいと常々思っていた。

iOS10.3でその制限が少し緩和されて、サードパーティアプリでもアップデートなしでアプリアイコンが変更できるようになった。

該当のメソッドは、UIApplicationの setAlternateIconName
アイコン名を引数に渡す。UIImageのオブジェクトでは渡せない。
つまり、サーバーからダウンロードした画像や、アプリ内で作成した画像を設定することはできない。
Staticな画像をアプリに入れ、Info.plistに設定した名前を渡す必要がある。


Info.plistに設定が必要なのは少々面倒だが、アプリアイコンもレビューの審査対象になっていることを考えると、しょうがないのかもしれない。
とはいえ、できることが増えたのは嬉しい限り。

アプリアイコンを変更すること自体はすぐにできたのだが、混乱したのは変更時に表示されるダイアログ。


このダイアログは、setAlternateIconName で変更すると強制的に表示されるもので、削除することはできない。

「アプリアイコンが変更されたことをユーザに知らせるべきだろう」というAppleのポリシーは理解できるので、表示自体は問題ではないのだけれど、実は、このダイアログが表示されないパターンがある。

ダイアログが表示される/表示されない の差が何かは実はよくわからなかった。
このコードを呼ぶときに表示されている画面の種類に依存するような....?

ただ、iOS10では表示されないコードを、iOS11 beta2で試すと表示されたことから、表示されないということ自体がバグなのであろう と思う。

私がsetAlternateIconNameを最初に試した時、ダイアログが表示されないパターンだったためこのダイアログの存在を暫く気づかなかった。
気づいていない場合、とても危険なことをしてしまう可能性がある。
たとえば、setAlternateIconNameをアプリ起動時の度にを呼ぶ とか、一定時間たったら自動的に呼ぶとか。

ダイアログが表示される以上、
勝手に裏でアプリアイコンを変更する という仕様はNGで、
ユーザが画面上で「アイコンを変える」という操作をした時のみ変わる
ように仕様を考えないといけない...ということ。

罠には気をつけてお使いください!


• • •