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:
- Criar objetivos (Targets) separados para cada ambiente.
- Utilizar ficheiros de configuração (
.xcconfig). - 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 Fileou adicionar a chaveCFBundleIconFilese indicar o nome do ficheiro de ícone. - Nos ficheiros
.xcconfigpara cada ambiente, definir uma variável que aponta para oInfo.plistcorrespondente. - Nas configurações de build do objetivo principal, definir
Info.plist Filepara${INFO_PLIST_FILE}(ondeINFO_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.