Settings Bundle on iOS — iOS üzerinde Bundle Ayarları

Enes Karaosman
Etiya
Published in
3 min readJan 27, 2020

Bu yazıda uygulamamız için iOS Ayarlar menüsünden uygulamamızı seçtiğimizde konfigüre edebileceğimiz ayarları nasıl ekleyebiliriz, bu ayarlar ile koddan nasıl haberleşebiliriz (okuma, yazma yapabiliriz). Bundan bahsetmeye çalışacağım.

Neden kullanalım?

Gerçek bir örnek vermek gerekirse, geliştirme yaptığımız bir uygulamanın development, preproduction, production gibi farklı ortamlarda test edilmesi ihtiyacı vardı. Bunu da her bir ortam için ayrı ayrı paket (uygulama) oluşturarak yapmak malumunuz oldukça zahmetli olurdu ve de bir hayli vakit kaybettirirdi.

Tam da bu gibi senaryolar için oldukça uygun olan bu Settings.bundle kullanımını bir de beraber incelemeye ne dersiniz.

Belki de devam ettikçe sizin uygulamanız için daha uygun olan bir senaryo aklınıza gelir.

O zaman demo için yeni bir proje oluşturalım ve işe koyulalım.

Projeyi oluşturduktan sonra yeni dosya oluşturalım (⌘ + N) ve Settings.bundle dosyasını seçelim.

Settings.bundle

Dosyamızı seçtikten sonra tüm UI bileşenlerini görebilelim diye 6 tanesini de ekledim.

Evet meşhur dosyamız budur (Root.plist), Preference Items altında kullanabileceğimiz UI elemanlarını görebiliriz.

Zaten Xcode otomatik tamamlama ile bize yardımcı oluyor yani elemanların (Item) isimlerini ezberlememize gerek yok.

UI bileşenlerin listesi

  1. Group
  2. Multi Value
  3. Slider
  4. Text Field
  5. Title
  6. Toggle Switch

Yazıyı çok da uzatmamak adına tüm bileşenleri incelemeyeceğiz. Zaten uygulama içerisinde aşina olduğunuz bileşenler. (Textfield, Toggle gibi)

1 ve 2 numaralı bileşeni kullanalım.

Kaçırdığımız bir yer yok ise, telefonun Ayarlar menüsünden uygulamamızı seçtiğimizde aşağıdaki gibi bir görsel elde etmeliyiz.

Peki bu bileşenler ile uygulama içinden nasıl haberleşebiliriz?

Bu bileşenlerin identifier isimli bir parametresi var, bu parametreyi kullanarak koddan ilgili arkadaşa erişebiliriz.

Malum örneğimizi network environment ile alakalı seçtiğimizden bunun için uygun kullanım yeri de uygulamamızın başlangıcı yani AppDelegate olsa gerek.

Evet buraya kadar takip ettiyseniz seçtiğimiz 2 değer arasında değişiklik yaparak, konsoldan ilgili değeri okuyabilirsiniz.

Benim de bu yazıyı yazarken farkettiğim, önemli bir detayı da paylaşmak istiyorum. Settings.bundle dosyasının plist’inde setlediğimiz varsayılan değer (Default Value) gösteriş içinmiş, yani yukarıda bahsettiğimiz adımları takip edip ayarlardan uygulamamıza girmedikçe ve değişiklik yapmadıkça işletim sistemi UserDefaults’a ilk kaydı yapmıyor, özetle plist’te ki varsayılan değeri değil de koddan setlenilen değeri göz önünde bulundurmalıyız.

Yine uygulama içinden ilgili identifier kullanılarak bundle’a yazma işlemi de yapabiliriz ancak bu durumla alakalı mantıklı bir senaryo aklıma gelmiyor, sadece mümkün olduğu bilgisini vermek istedim.

1'den fazla bundle kullanabilir miyim?

Evet, misalen Release ve Debug paketleri için farklı Bundle dosyaları kullanılabilir.

Sadece development için bundle kullanabilir miyim?

Tabii ki, basitçe bir script ile bunu sağlamak mümkün.

BUILD_APP_DIR=${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app

if [ "$CONFIGURATION" == "Release" ]; then
rm -Rf $BUILD_APP_DIR/Settings.bundle
fi

Bundle dosyasını oluştururken kaydettiğiniz konumu da dikkate alarak uygun path i yazdığımıza emin olalım.

Uygulamayı store için hazırladığımızda bu ayarlar kullanıcıda gözükmemiş olacak.

Evet vakit ayırdığınız için teşekkür ederim, umarım uygulamanızda kullanabileceğiniz bu ya da farklı senaryolar için faydalı bir yazı olmuştur.

Projeye de buradan erişebilirsiniz.

--

--