Назад к вопросам
Middle
102
questionbank

Как изменить иконку приложения в зависимости от среды?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

В зависимости от среды (например, Dev, Staging, Prod) можно использовать:

  1. Создание отдельных целей (Targets) для каждой среды.
  2. Использование конфигурационных файлов (.xcconfig).
  3. Добавление кастомных ключей в 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.