Middle
¿Cómo cambiar el icono de la aplicación según el entorno?
sobes.tech AI
Respuesta de la IA
Dependiendo del entorno (por ejemplo, Dev, Staging, Prod), se puede utilizar:
- Crear objetivos (Targets) separados para cada entorno.
- Utilizar archivos de configuración (
.xcconfig). - Añadir claves personalizadas en
Info.plist.
Proceso:
- Crear duplicados del objetivo principal de la aplicación para cada entorno.
- En la configuración de cada nuevo objetivo, cambiar
Info.plist Fileo añadir la claveCFBundleIconFilesy especificar el nombre del archivo de icono. - En los archivos
.xcconfigpara cada entorno, definir una variable que apunte alInfo.plistcorrespondiente. - En la configuración de compilación del objetivo principal, establecer
Info.plist Fileen${INFO_PLIST_FILE}(dondeINFO_PLIST_FILEes una variable de.xcconfig).
Ejemplo de .xcconfig para Dev:
// DEV.xcconfig
INFO_PLIST_FILE = Info_Dev.plist
Ejemplo de Info_Dev.plist:
<!-- Info_Dev.plist -->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
...
<key>CFBundleIcons</key>
<dict>
<key>CFBundlePrimaryIcon</key>
<dict>
<key>CFBundleIconFiles</key>
<array>
<string>AppIconDev</string> // Nombre del asset para el icono Dev
</array>
</dict>
</dict>
...
</dict>
</plist>
Otra opción sin duplicar objetivos es usar scripts durante la compilación que modifiquen Info.plist según la configuración actual. Sin embargo, el método con objetivos separados es más claro y soportado.
Para gestionar los assets de iconos, se pueden usar Catálogos de Assets separados para cada objetivo o configuración, o nombrar los conjuntos de iconos de forma única (AppIconDev, AppIconStaging, AppIconProd) y especificar el nombre correspondiente en Info.plist.