Xamarin.Forms iOS Uygulamasında Dinamik Olarak İkon Değiştirme

iOS 10.3’de uygulamamızın ikon’unu dinamik olarak değiştirmemizi sağlayan bir işlev eklendi. Apple dokümentasyonunda şöyle tanımlanıyor:

  • supportsAlternateIcons – readonly bir özelliktir ve uygulamanın ikon’unun değişip değişmeceğinin ayarlanmasını sağlar. True yapmak için info.plist’te alternatif ikon’ları ayarlamamız gerekiyor.
  • ApplicationIconBadgeNumber – İkon’un üzerindeki sayıyı ayarlamamızı sağlar.
  • alternateIconName – readonly bir özelliktir. O anda kullanılan ikon’un adıdır. Uygulamanın birincil ikon’u kullanılıyorsa değeri null’dur.
  • setAlternateIconName – görüntülenecek ikon’u ayarlamamızı sağlayan işlevdir. Eğer ikon ismine nulll atarsak, uygulamamız birincil ikon’u kullanır.


Detaylı bilgi için Apple’ın API dokümantasyonunu inceleyebilirsiniz.

Xamarin.Forms uygulamamızda ikon değiştirebilmemiz için takip etmemiz gereken bir kaç adım var.

1.Info.plist’de kullanacağımız alternatif ikon’ları tanıtmalıyız.

Bu ikon’ları her zaman yaptığımız gibi Assets olarak tanımlamıyoruz, Resources klasörüne atıyoruz. 

Info.plist ise şöyle:


2.Dependency Service yazmamız gerekiyor. Bunun için Portable katmanında  IChanceIconService interface’ini tanımlıyoruz:

 public interface IChangeIconService
{
  void ChangeIcon(string iconName);
}

iOS projesindeki sınıf:

Buradaki SetAlternateIcon metodu, UIApplication sınıfından gelen bir metoddur. UIApplication sınıfı da Singleton desenine göre tasarlandığı için bir uygulamanın yaşam döngüsünde sadece bir kopyası kullanılabilir. Eğer bunu dikkate almadan türetmeye kalkışırsak :

NSInternalInconsistencyException: There can only be one UIApplication instance

exception’ı ile karşılaşırız. Xamarin Dokümantasyonunda da belirtildiği üzere:

Application developers may subclass UIApplication and use the principalClassName argument to the UIApplication.Main(string[],string,string) method to specify their subclass. In that situation, developers must create a public constructor for their subclass that the runtime will call appropriately.

Eğer kendimiz bir UIApplication oluşturup kullanmak istiyorsak, UIApplication sınıfını miras alan bir sınıf oluşturup, Main sınıfında onu tanıtmamız gerekir.

UIApplication.SharedApplication

bize o anki UIApplication nesnesini döner. Biz de bunu kullanarak SetAlternateIcon metoduna erişir ve uygulamamızın ikonu’unu değiştirebiliriz.  

Kaynak kodlarına buradan erişebilirsiniz.

xamarinforms changeicon ios ios10

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir