Назад к вопросам
Middle
102
questionbank
Как изменить иконку приложения в зависимости от среды?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
В зависимости от среды (например, Dev, Staging, Prod) можно использовать:
- Создание отдельных целей (Targets) для каждой среды.
- Использование конфигурационных файлов (
.xcconfig). - Добавление кастомных ключей в
Info.plist.
Процесс:
- Создать дубликаты основной цели приложения для каждой среды.
- В настройках каждой новой цели изменить
Info.plist Fileили добавить ключCFBundleIconFilesи указать имя файла с иконкой. - В
.xcconfigфайлах для каждой среды определить переменную, указывающую на соответствующийInfo.plist. - В Build Settings основной цели установить
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.