Ответ 1
Да, это возможно, так как iOS 10.3.
Сначала вам нужно определить все альтернативные значки в вашем файле Info.plist, вы не сможете их динамически импортировать.
Например, здесь мы определяем 2 альтернативных значка: "de" и "fr":
<key>CFBundleIcons</key>
<dict>
<key>CFBundleAlternateIcons</key>
<dict>
<key>de</key>
<dict>
<key>CFBundleIconFiles</key>
<array>
<string>ic_de</string>
</array>
<key>UIPrerenderedIcon</key>
<false/>
</dict>
<key>fr</key>
<dict>
<key>CFBundleIconFiles</key>
<array>
<string>ic_fr</string>
</array>
<key>UIPrerenderedIcon</key>
<false/>
</dict>
</dict>
<key>CFBundlePrimaryIcon</key>
<dict>
<key>CFBundleIconFiles</key>
<array>
<string>ic_none</string>
</array>
</dict>
</dict>
Затем вы можете установить имя значка на основе всего, что вам нравится (ход игры, погодные условия, премиум-пользователь и т.д.). Чтобы изменить значок, используйте:
UIApplication.shared.setAlternateIconName("de") { (error) in
if let error = error {
print("err: \(error)")
// icon probably wasn't defined in plist file, handle the error
}
}
Результат:
Гиф из Средняя статья Жюльена Кере.