はじめに
先日、アプリのアイコンを変更することでユーザのアプリを開く手間を削減するといった内容のアプリをリリースしました。
そこで、アイコンを動的に変更する方法とリリース方法を自分なりにメモとして残しておきます。
開発環境
Xcode 10.1
Swift 4.2.1
準備するもの
アイコンを3つ(サイズ:1024px)
ストーリボードにボタンを配置

こんな感じ
ボタンが押されたタイミングでアイコンが変更されるようにする。
関連付けは忘れずにしておくように。
プロジェクトにアイコン画像を入れる
今回は以下の画像を使用
白のアイコンをデフォルトのアイコンとする。
コーディング
CFBundleAlternateIconsというKeyをDictionary型で追加
さらにDictionary型でIcon1を追加
さらにその下にCFBundleIconFilesというKeyをArray型で追加
その下にitemをString型で追加し,Valueにアイコン画像の名前を入れる(拡張子は不要)
あとは同じものを残りのアイコンの分も行う.コピペが可能。
このようになっていればOK
あとは,アイコンを変更するコードを書くだけ.
今度こそコーディング
といっても,簡単にできてしまう.
let iconName = "Info.plistに書き込んだアイコンのKey"
UIApplication.shared.setAlternateIconName(iconName, completionHandler: { error in print(error as Any) })
今回作ったサンプルにプロジェクトだとこうなる。
// アイコン1のボタンに関連付け済み
@IBAction func changeIconBtn1(_ sender: Any) {
let iconName = "Icon1" // icon1.png(赤色のアイコン)
UIApplication.shared.setAlternateIconName(iconName, completionHandler: { error in print(error as Any) })
}
ちなみにnilにするとデフォルトのアイコンになる。
UIApplication.shared.setAlternateIconName(nil, completionHandler: { error in print(error as Any) })
実際に動かしてみた
でけた。ほんとに簡単。それでは。
1/28追記 リリースする際の注意事項
必ずユーザからの入力(ボタンタップなどの操作)のみにおいて変更する
リリース済みアプリでは開発段階では天気が変更されたタイミングで自動的にアイコンも変更していました。しかしそれではHuman Interface Guidelinesにそぐわない為リジェクトされました。
デフォルトのアイコンへ戻すことができるようにしておく
こちらもHuman Interface Guidelinesに記載されています
@2x.png(120 x 120),@3x.png(180 x 180)のサイズのアイコンをプロジェクトに入れておく
こちらも(ry
Human Interface Guidelinesをよく読めということですね。
詳しくはこちらに載っています。英語ですが頑張って読みましょう。