Iconos de aplicación alternativos en Xamarin.iOS

En este artículo se describe el uso de iconos de aplicación alternativos en Xamarin.iOS.

Apple ha agregado varias mejoras a iOS 10.3 que permiten a una aplicación administrar su icono:

  • ApplicationIconBadgeNumber: obtiene o establece el distintivo del icono de la aplicación en Springboard.
  • SupportsAlternateIcons: si es true, la aplicación tiene un conjunto alternativo de iconos.
  • AlternateIconName: devuelve el nombre del icono alternativo seleccionado actualmente o null si se usa el icono principal.
  • SetAlternameIconName: use este método para cambiar el icono de la aplicación al icono alternativo especificado.

Una alerta de ejemplo cuando una aplicación cambia su icono

Agregar iconos alternativos a un proyecto de Xamarin.iOS

Para permitir que una aplicación cambie a un icono alternativo, deberá incluirse una colección de imágenes de icono en el proyecto de aplicación Xamarin.iOS. Estas imágenes no se pueden agregar al proyecto mediante el método típico Assets.xcassets, deben agregarse directamente a la carpeta Recursos.

Haga lo siguiente:

  1. Seleccione las imágenes de icono necesarias en una carpeta, seleccione todas y arrástrelas a la carpeta Recursos en el Explorador de soluciones:

    Seleccionar las imágenes de iconos de una carpeta

  2. Cuando se le solicite, seleccione Copiar, Usar la misma acción para todos los archivos seleccionados y haga clic en el botón Aceptar:

    Cuadro de diálogo Agregar archivo a Carpeta

  3. La carpeta Recursos debe ser similar a la siguiente cuando se complete:

    La carpeta Recursos debe tener este aspecto

Modificar el archivo Info.plist

Con las imágenes necesarias agregadas a la carpeta Recursos, será necesario agregar la clave CFBundleAlternateIcons al archivo Info.plist del proyecto. Esta clave definirá el nombre del nuevo icono y las imágenes que lo componen.

Haga lo siguiente:

  1. En el Explorador de soluciones, haga doble clic en el archivo Info.plist para abrirlo para su edición.
  2. Cambie a la vista Código fuente.
  3. Agregue una clave de iconos de agrupación y deje el tipo establecido en Diccionario.
  4. Agregue una clave CFBundleAlternateIcons y establezca el tipo enDiccionario.
  5. Agregue una clave AppIcon2 y establezca el tipoen Diccionario. Este será el nombre del nuevo conjunto de iconos de aplicación alternativa.
  6. Agregar una clave CFBundleIconFiles y establecer el tipo enMatriz
  7. Agregue una nueva cadena a la matriz CFBundleIconFiles para cada archivo de icono dejando fuera la extensión y los sufijos @2x, @3x, etc. (por ejemplo 100_icon). Repita este paso para cada archivo que compone el conjunto de iconos alternativo.
  8. Agregue una clave UIPrerenderedIcon al diccionarioAppIcon2, establezca el tipo en Booleano y el valor en No.
  9. Guarde los cambios en el archivo.

El archivo Info.plist resultante debe ser similar al siguiente cuando se complete:

Archivo Info.plist completado

O bien, si se abre en un editor de texto:

<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>

Administrar el icono de la aplicación

Con las imágenes de icono incluidas en el proyecto de Xamarin.iOS y el archivo Info.plist configurado correctamente, el desarrollador puede usar una de las muchas características nuevas agregadas a iOS 10.3 para controlar el icono de la aplicación.

La propiedad SupportsAlternateIcons de la clase UIApplication permite al desarrollador ver si una aplicación admite iconos alternativos. Por ejemplo:

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

La propiedad ApplicationIconBadgeNumber de la clase UIApplication permite al desarrollador obtener o establecer el número de distintivo actual del icono de la aplicación en Springboard. El valor predeterminado es cero (0). Por ejemplo:

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

La propiedad AlternateIconName de la clase UIApplication permite al desarrollador obtener el nombre del icono de aplicación alternativo seleccionado actualmente o devuelve null si la aplicación usa el icono principal. Por ejemplo:

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

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

La propiedad SetAlternameIconName de la clase UIApplication permite al desarrollador cambiar el icono de la aplicación. Pase el nombre del icono para seleccionar o null volver al icono principal. Por ejemplo:

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);
    });
}

Cuando se ejecuta la aplicación y el usuario selecciona un icono alternativo, se mostrará una alerta como la siguiente:

Una alerta de ejemplo cuando una aplicación cambia su icono

Si el usuario vuelve al icono principal, se mostrará una alerta como la siguiente:

Una alerta de ejemplo cuando una aplicación cambia al icono principal

Resumen

En este artículo se ha tratado cómo agregar iconos de aplicación alternativos a un proyecto de Xamarin.iOS y usarlos dentro de la aplicación.