Sobes.tech
Middle

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

sobes.tech AI

Отговор от AI

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

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