Sobes.tech
Middle

Jak zmienić ikonę aplikacji w zależności od środowiska?

sobes.tech AI

Odpowiedź od AI

W zależności od środowiska (np. Dev, Staging, Prod), można użyć:

  1. Tworzenia oddzielnych celów (Targets) dla każdego środowiska.
  2. Używania plików konfiguracyjnych (.xcconfig).
  3. Dodawania własnych kluczy w Info.plist.

Proces:

  • Utwórz duplikaty głównego celu aplikacji dla każdego środowiska.
  • W ustawieniach każdego nowego celu zmień Info.plist File lub dodaj klucz CFBundleIconFiles i wskaż nazwę pliku ikony.
  • W plikach .xcconfig dla każdego środowiska zdefiniuj zmienną wskazującą na odpowiedni Info.plist.
  • W ustawieniach kompilacji głównego celu ustaw Info.plist File na ${INFO_PLIST_FILE} (gdzie INFO_PLIST_FILE to zmienna z .xcconfig).

Przykład .xcconfig dla Dev:

// DEV.xcconfig
INFO_PLIST_FILE = Info_Dev.plist

Przykład 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> // Nazwa asset dla ikony Dev
			</array>
		</dict>
	</dict>
	...
</dict>
</plist>

Alternatywnie, bez duplikowania celów, można użyć skryptów podczas kompilacji, które modyfikują Info.plist w zależności od aktualnej konfiguracji. Jednak podejście z oddzielnymi celami jest bardziej przejrzyste i obsługiwane.

Do zarządzania assetami ikon można używać osobnych katalogów assetów dla każdego celu lub konfiguracji albo nadawać zestawom ikon unikalne nazwy (AppIconDev, AppIconStaging, AppIconProd) i wskazywać odpowiednią nazwę w Info.plist.