Today Extension — Widget 📈
Merhaba,
Bu yazı uygulamanıza nasıl Today Extension ekleyeceğiniz ve uygulamanız ile nasıl iletişime geçeceği hakkında olacak.
Today Extension aynı zamanda widget olarak adlandırılır. Bir widget, az miktarda güncel ve yararlı bilgi veya uygulamaya özel işlevler gösteren bir uzantıdır. Örneğin, Haber widget’ı en üstteki başlıkları gösterir. Takvim, günümüzün etkinliklerini gösterir. Notlar son notları önizlemenize ve hızlı bir şekilde yeni notlar, hatırlatıcılar, çizimler oluşturmanıza olanak tanır.
Kullanıcılar ayrıca, ilgilendikleri widget’ları Ana ekran ve Kilit ekranı üzerinde sağa kaydırılarak erişilen arama ekranına ekler. Amacımız, kullanıcıların arama ekranına eklemek istedikleri bir widget tasarlamak olmalıdır.
Widget’ın sağlamak istediğimiz işlevsellik için uygun olduğundan emin olmalıyız. En iyi widget’lar, kullanıcılara hızlı güncellemeler verir veya çok basit görevleri etkinleştirir. Çok adımlı işlemler için tercih edilmesi hızlı bir yarar sağlamayacaktır ve mantıklı değildir.
Örneğin QR kod ile işlem yapan bir uygulama’nın widget’ında QR gösterebilir, ya da günlük döviz kurunu gösteren uygulamada widget üzerinde grafik gösterebiliriz. Bunun gibi kullanıcının uygulamayı açmadan ulaşabileceği verileri gösterebilmemizi sağlayan bir özelliktir.
Burada yapacağım örnek
- projeye widget ekleme
- widget’ın görüntüleyeceği veriyi alma (UserDefaults ile)
- widget üzerine tıklandığında uygulamaya yönlendirme
şeklinde olacaktır.
Widget’ı projemize yeni bir target olarak ekleyeceğiz. Bu sebeple uygulama ile iletişim sağlayabilmesi için de ek ayarlar yapacağız.
Projeyi seçtikten sonra File>New>Target diyerek Today Extension yaratıyor ve onu activate ediyoruz.
Klasör yapısı içerisinde verdiğiniz isimde bir Widget klasörü oluşacak ve içerisinde bir viewController, bir storyboard ve bir tane de plist dosyası bulunacak.
Storyboard üzerinde widget’ın görünmesini istediğimiz tasarımını uyguluyoruz.
Şimdi, proje target’ımızdan widget target’ına veri aktarmamız gerekecek. Bu noktada App Groups devreye giriyor. İki target aynı app groups’a dahil olurlarsa veri aktarımı sağlayabilirler. Projenizin provizyon dosyalarını oluştururken app groups özelliğini aktif etmeniz gerektiği anlamına da geliyor bu. Şuan yalnızca test için proje target’ımızın app groups özelliğini aktif edip, bir app group tanımlayalım.
Burada önerilen group.com.projectname.widget gibi bir isimlendirmedir.
Ardından widget target’ına geçiyor, orada da aynı isimde app group tanımlayıp ikisinde de seçili duruma getiriyoruz. Artık proje target’ım ve widget target’ım aynı app groups’a ait oldu.
App groups özelliğini aktif ettiğimizde ise her iki target’da da entitlements uzantılı dosyalarımız oluştu.
Bu entitlements dosyaları içerisinde de app group isimlerimiz tanımlı olacak. Burada seçtiğimiz için entitlements dosyalarının içeriği aşağıdaki gibi olacaktır.
Şimdi, proje target’ından widget’a veri aktaracağız. Bu durumda UserDefaults kullanabiliriz. Ancak Userdefaults.standard, yalnızca proje target’ı içerisinde erişilebilir durumdadır. Bu yüzden suiteName’i app groups id’si olan bir userDefaults tanımlarsak bu userDefaults her iki target’dan da ulaşılabilir olacaktır.
Widget tarafında da aynı UserDefaults içerisinden verimizi alıp widget sayfamızı güncelleyebiliyoruz.
Yukarıdaki kullanım sayesinde proje target’ımızdan widget’a veri aktarmış bulunduk.
Widget klasörü içerisindeki plist dosyasından widget’ın görünür ismini de değiştirebilmemiz mümkün. Bu plist dosyalarını ihtiyaç dahilinde güncelleyebiliriz.
URL Scheme kullanımı:
Eğer widget’a tıklandığında kullanıcıyı uygulamaya yönlendirmek isterseniz, proje target’ı içerisindeki Info sekmesinin altındaki URL Types bölümünde url scheme yaratmalısınız.
Ardından ise widget üzerindeki bir butona basıldığında uygulamayı açtırmak istiyorsanız, scheme adını url olarak vermeniz yeterli olacaktır.
Örnek Uygulama;
Aşağıdaki uygulamada yine aynı mantık ile gönderdiğim metinden bir QR Kimlik yaratıyorum. Ve widget üzerinden tekrar uygulamayı çalıştırabiliyorum.
Widget’lara küçük bir giriş yaptık, umarım işinize yarar.
Görüşmek üzere 👾