Swift'de SceneDelegate nedir?

SceneDelegate, iOS 13 ile duyurulan çoklu pencere desteğine yardımcı olmak için geliştirilmiştir. UISceneDelegate protokolü, uygulamanızın yaşam döngüsünü yönetmek için kullanılmaktadır. Apple, WWDC 2019 açılış konuşmasında diğer uygulamalarla birlikte kullanılabilirliği açısından güzel bir örnektir. Özellik not uygulamasından örnek verilmiştir.

SceneDelegate'i AppDelegate'in alt kırılımı olarak düşünebiliriz. AppDelegate, ilk sahneleri yapılandırma ve bildirim, analitik vb. hizmetleri eklemek gibi işleri yaparken uygulamanın yaşam döngüsünde yer alması gereken şeyleri SceneDelegate üstlenerek AppDelegate'in sorumluğunu paylaşmaktadır.

Bir iOS uygulamasında ilk olarak AppDelegate içerisindeki application(_:didFinishLaunchingWithOptions:) metodu çalıştırılmaktadır. Bu ve bunun gibi metotlar appdelegate içerisinde uygulamanın yaşam döngüsünde çalışmaktadır. Örneğin, uygulamanız çalışırken arkaplana atıldığında bir işlemi durdurmak istenildiğinde ve geri döndüğünde ise devam etmesi için kullanılmaktadır.  Benzer şekilde SceneDelegate içerisinde de benzer metotlar yer almaktadır. Aşağıda bu metotlar gösterilmiştir.

  • SceneDidDisconnect(_:), bir sahnenin uygulamayla bağlantısı kesildiğinde çağrılır. (Daha sonra yeniden bağlanabileceğini unutulmamalıdır.)
  • SceneDidBecomeActive(_:), kullanıcı uygulama değiştiriciden bir seçme işlemi gerçekleştirdiğinde, etkileşime geçilen sahne metodu çağrılır.
  • SceneWillResignActive(_:), kullanıcı bir sahneyle etkileşimi durdurduğunda, örneğin bu durum başka bir sahneye geçerek olabilir. Bu method çağrılır.
  • SceneWillEnterForeground(_:) bir sahne ön plana geldiğinde, yani bir arka plan durumundayken uygulama başlatıldığında veya devam ettiğinde çağrılır.
  • SceneDidEnterBackground(_:), bir sahne arka plana gittiğinde çağrılır, yani uygulama simge durumuna küçültüldüğünde yani arka plana atıldığında çağrılır.

Bu yazı SceneDelegate için oldukça temel bir düzeyde oldu. Ancak, yazının da çok uzun olmaması için başka bir yazıda örnekler ile detaylı anlatımı planlanmaktadır.