Connect with us

Программирование

Динамическое изменение иконки приложения в iOS

Начиная с iOS 10.3 вы можете менять иконки приложения прямо из кода. В этой статье мы рассмотрим простой пример кода, который реализует эту возможность.

Анна Гуляева

Опубликовано

/

     
     

C iOS 10.3 Apple запустила для разработчиков возможность менять иконку приложения не только при заливке нового билда, но и при помощи кода. Хотя эта функция не такая гибкая, как в официальном приложении “Часы” с двигающимися стрелками, на основе неё можно создать отличную динамику. Давайте посмотрим, как это работает.

Теория

В документе Apple API стоит взглянуть на три вещи:

var supportsAlternateIcons: Bool { get }
var alternateIconName: String? { get }
func setAlternateIconName(String?, completionHandler: ((Error?) -> Void)? = nil)
  • supportsAlternateIcons — это свойство только для чтения, оно решает, может ли приложение менять иконку. Чтобы установить его как true, нам нужно добавить альтернативные иконки в файл info.plist.
  • alternateIconName — также свойство только для чтения, это название текущей иконки приложения. Оно обозначено как nil. если приложение отображает первоначальную иконку.
  • setAlternateIconName — функция, которая устанавливает отображаемую иконку. Если мы установим название на nil, приложение покажет первоначальную иконку.

Больше деталей — на официальной странице Apple API. Давайте зайдем в Xcode и начнем.

Подготовка

Сделаем три изображения с иконками: pichu.png, pikachu.png, raichu.png. Изображения бесполезно размещать в папке Assets, нужно поместить их в директорию проекта. Вот мой пример:

Затем нам нужно подготовить info.plist:

  1. Добавьте файлы иконок в Information Property List.
  2. Добавьте CFBundleAlternateIcons как словарь.
  3. Добавьте 3 вложенных словаря в CFBundleAlternateIcons: pichu, pikachu и raichu.
  4. Для каждого массива нужно определить два свойства: UIPrerenderedIcon и CFBundleIconFiles.

Больше деталей можно найти на странице Core Foundation Keys. Вот мой скриншот info.plist:

Пример кода

Предположим, у нас есть три кнопки. Нажмем на любую из них, чтобы приложение показывало соответствующую иконку.

// change app icon to "pichu"
@IBAction func pichuButtonDidTap(_ sender: UIButton) {
       changeIcon(to: "pichu")
}

// change app icon to "pikachu"
@IBAction func pikachuButtonDidTap(_ sender: UIButton) {
        changeIcon(to: "pikachu")
}

// change app icon to "raichu"
@IBAction func raichuButtonDidTap(_ sender: UIButton) {
        changeIcon(to: "raichu")
}

func changeIcon(to iconName: String) {
 // 1
        guard UIApplication.shared.supportsAlternateIcons else {
               return
 }

// 2
 UIApplication.shared.setAlternateIconName(iconName, completionHandler: { (error) in
 // 3
        if let error = error {
               print("App icon failed to change due to \(error.localizedDescription)")
        } else {
               print("App icon changed successfully")
        }
})
}

 

  1. Проверьте, поддерживает ли приложение альтернативные иконки.
  2. Измените иконку на конкретное изображение с соответствующим названием.
  3. После изменения иконки выведите сообщение с ошибкой или успешным завершением.

Запустите приложение и наслаждайтесь шоу.

Комментарии
Если вы нашли опечатку - выделите ее и нажмите Ctrl + Enter! Для связи с нами вы можете использовать info@apptractor.ru.
Advertisement
Click to comment

You must be logged in to post a comment Login

Leave a Reply

Популярное

X
X

Спасибо!

Теперь редакторы в курсе.