Альтернативные значки приложений в Xamarin.iOS

В этой статье рассматриваются альтернативные значки приложений в Xamarin.iOS.

Apple добавила несколько улучшений в iOS 10.3, которые позволяют приложению управлять своим значком:

  • ApplicationIconBadgeNumber — Получает или задает значок приложения в Springboard.
  • SupportsAlternateIcons — Если true у приложения есть альтернативный набор значков.
  • AlternateIconName — Возвращает имя альтернативного значка, выбранного в данный момент или null если используется первичный значок.
  • SetAlternameIconName — Используйте этот метод для переключения значка приложения на заданный альтернативный значок.

Пример оповещения при изменении значка приложения

Добавление альтернативных значков в проект Xamarin.iOS

Чтобы разрешить приложению переключиться на альтернативный значок, необходимо включить коллекцию изображений значков в проект приложения Xamarin.iOS. Эти изображения нельзя добавить в проект с помощью типичного Assets.xcassets метода, они должны быть добавлены непосредственно в папку Resources .

Выполните следующие действия.

  1. Выберите необходимые изображения значков в папке, выберите все и перетащите их в папку "Ресурсы" в Обозреватель решений:

    Выбор изображений значков из папки

  2. При появлении запроса нажмите кнопку "Копировать", используйте одно действие для всех выбранных файлов и нажмите кнопку "ОК ":

    Диалоговое окно

  3. Папка Resources должна выглядеть следующим образом после завершения.

    Папка Resources должна выглядеть следующим образом.

Изменение файла Info.plist

При добавлении необходимых изображений в папку Resources ключ CFBundleAlternateIcons необходимо добавить в файл Info.plist проекта. Этот ключ определяет имя нового значка и изображения, составляющие его.

Выполните следующие действия.

  1. В Обозревателе решений дважды щелкните файл Info.plist, чтобы открыть его для редактирования.
  2. Перейдите в представление исходного кода.
  3. Добавьте ключ значков пакета и оставьте тип в словаре.
  4. CFBundleAlternateIcons Добавьте ключ и задайте типсловаря.
  5. AppIcon2 Добавьте ключ и задайте типсловаря. Это будет имя нового альтернативного набора значков приложения.
  6. CFBundleIconFiles Добавление ключа и установка типав массив
  7. Добавьте новую строку в CFBundleIconFiles массив для каждого файла значка, оставляя расширение и @2x@3xсуффиксы и т. д. (например100_icon). Повторите этот шаг для каждого файла, который создает альтернативный набор значков.
  8. UIPrerenderedIcon Добавьте ключ в AppIcon2 словарь, задайте для типалогическое значение и значение No.
  9. Сохраните изменения в файле.

Полученный файл Info.plist должен выглядеть следующим образом после завершения:

Завершенный файл Info.plist

Или же, если он открыт в текстовом редакторе:

<key>CFBundleIcons</key>
<dict>
    <key>CFBundleAlternateIcons</key>
    <dict>
        <key>AppIcon2</key>
        <dict>
            <key>CFBundleIconFiles</key>
            <array>
                <string>100_icon</string>
                <string>114_icon</string>
                <string>120_icon</string>
                <string>144_icon</string>
                <string>152_icon</string>
                <string>167_icon</string>
                <string>180_icon</string>
                <string>29_icon</string>
                <string>40_icon</string>
                <string>50_icon</string>
                <string>512_icon</string>
                <string>57_icon</string>
                <string>58_icon</string>
                <string>72_icon</string>
                <string>76_icon</string>
                <string>80_icon</string>
                <string>87_icon</string>
            </array>
            <key>UIPrerenderedIcon</key>
            <false/>
        </dict>
    </dict>
</dict>

Управление значком приложения

С помощью изображений значков, включенных в проект Xamarin.iOS и файла Info.plist , разработчик может использовать одну из многих новых функций, добавленных в iOS 10.3, для управления значком приложения.

Свойство SupportsAlternateIconsUIApplication класса позволяет разработчику узнать, поддерживает ли приложение альтернативные значки. Например:

// Can the app select a different icon?
PrimaryIconButton.Enabled = UIApplication.SharedApplication.SupportsAlternateIcons;
AlternateIconButton.Enabled = UIApplication.SharedApplication.SupportsAlternateIcons;

Свойство ApplicationIconBadgeNumber класса позволяет разработчику получить или задать текущий номер значка UIApplication приложения в Springboard. Значение по умолчанию равно нулю (0). Например:

// Set the badge number to 1
UIApplication.SharedApplication.ApplicationIconBadgeNumber = 1;

AlternateIconName Свойство UIApplication класса позволяет разработчику получить имя выбранного альтернативного значка приложения или вернутьnull, если приложение использует первичный значок. Например:

// Get the name of the currently selected alternate
// icon set
var name = UIApplication.SharedApplication.AlternateIconName;

if (name != null ) {
    // Do something with the name
}

Свойство SetAlternameIconNameUIApplication класса позволяет разработчику изменить значок приложения. Передайте имя значка, чтобы выбрать или null вернуться на первичный значок. Например:

partial void UsePrimaryIcon (Foundation.NSObject sender)
{
    UIApplication.SharedApplication.SetAlternateIconName (null, (err) => {
        Console.WriteLine ("Set Primary Icon: {0}", err);
    });
}

partial void UseAlternateIcon (Foundation.NSObject sender)
{
    UIApplication.SharedApplication.SetAlternateIconName ("AppIcon2", (err) => {
        Console.WriteLine ("Set Alternate Icon: {0}", err);
    });
}

Когда приложение запускается и пользователь выбирает альтернативный значок, отобразится оповещение, например следующее:

Пример оповещения при изменении значка приложения

Если пользователь переключается обратно на первичный значок, отобразится предупреждение, например следующее:

Пример оповещения при изменении приложения на основной значок

Итоги

В этой статье описано добавление альтернативных значков приложений в проект Xamarin.iOS и их использование внутри приложения.