Sobes.tech
Middle

Como alterar o ícone da aplicação dependendo do ambiente?

sobes.tech IA

Resposta da IA

Dependendo do ambiente (por exemplo, Dev, Staging, Prod), pode-se usar:

  1. Criar objetivos (Targets) separados para cada ambiente.
  2. Utilizar ficheiros de configuração (.xcconfig).
  3. Adicionar chaves personalizadas em Info.plist.

Processo:

  • Duplicar o objetivo principal da aplicação para cada ambiente.
  • Nas configurações de cada novo objetivo, alterar Info.plist File ou adicionar a chave CFBundleIconFiles e indicar o nome do ficheiro de ícone.
  • Nos ficheiros .xcconfig para cada ambiente, definir uma variável que aponta para o Info.plist correspondente.
  • Nas configurações de build do objetivo principal, definir Info.plist File para ${INFO_PLIST_FILE} (onde INFO_PLIST_FILE é uma variável do .xcconfig).

Exemplo de .xcconfig para Dev:

// DEV.xcconfig
INFO_PLIST_FILE = Info_Dev.plist

Exemplo 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> // Nome do asset para o ícone Dev
			</array>
		</dict>
	</dict>
	...
</dict>
</plist>

Outra abordagem sem duplicar objetivos é usar scripts durante a compilação que modificam Info.plist dependendo da configuração atual. No entanto, a abordagem com objetivos separados é mais clara e suportada.

Para gerir os assets de ícones, pode-se usar Catálogos de Assets separados para cada objetivo ou configuração, ou nomear os conjuntos de ícones de forma única (AppIconDev, AppIconStaging, AppIconProd) e indicar o nome correspondente em Info.plist.