Middle
Как да промените иконата на приложението в зависимост от средата?
sobes.tech AI
Отговор от AI
В зависимост от средата (например, Dev, Staging, Prod) може да се използват:
- Създаване на отделни цели (Targets) за всяка среда.
- Използване на конфигурационни файлове (
.xcconfig). - Добавяне на персонализирани ключове в
Info.plist.
Процес:
- Дублиране на основната цел на приложението за всяка среда.
- В настройките на всяка нова цел, променете
Info.plist Fileили добавете ключCFBundleIconFilesи посочете името на файла с иконата. - В
.xcconfigфайловете за всяка среда дефинирайте променлива, която сочи към съответнияInfo.plist. - В настройките за билд на основната цел, задайте
Info.plist Fileна${INFO_PLIST_FILE}(къдетоINFO_PLIST_FILEе променлива от.xcconfig).
Пример за .xcconfig за Dev:
// DEV.xcconfig
INFO_PLIST_FILE = Info_Dev.plist
Пример за 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> // Име на asset за Dev иконата
</array>
</dict>
</dict>
...
</dict>
</plist>
Алтернативен подход без дублиране на цели е използването на скриптове по време на билд, които променят Info.plist в зависимост от текущата конфигурация. Въпреки това, подходът с отделни цели е по-ясен и поддържан.
За управление на asset-ите с иконки може да се използват отделни Asset Catalogs за всяка цел или конфигурация, или да се именуват наборите от иконки по уникален начин (AppIconDev, AppIconStaging, AppIconProd) и да се посочва съответното име в Info.plist.