Sobes.tech
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:

  1. Crear objetivos (Targets) separados para cada entorno.
  2. Utilizar archivos de configuración (.xcconfig).
  3. 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 File o añadir la clave CFBundleIconFiles y especificar el nombre del archivo de icono.
  • En los archivos .xcconfig para cada entorno, definir una variable que apunte al Info.plist correspondiente.
  • En la configuración de compilación del objetivo principal, establecer Info.plist File en ${INFO_PLIST_FILE} (donde INFO_PLIST_FILE es 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.