Bugün dokunduğum önemli bir tuzak şudur:
Pek çok projede tek bir uygulama hedefi ve bu hedefin her bir yapılandırması için farklı paket tanımlayıcıları belirlediğini gördüm. Burada işler karışıyor. Geliştiricilerin amaçladığı şey, hata ayıklama yapılandırması için bir hata ayıklama uygulaması ve sürüm hedefi için bir üretim uygulaması oluşturmaktı.
Bunu yaparsanız, her iki uygulama da böyle ayarlandıklarında aynı NSUserDefaults'u paylaşacaktır.
var userDefaults = NSUserDefaults(suiteName: "group.com.company.myApp")
userDefaults!.setObject("user12345", forKey: "userId")
userDefaults!.synchronize()
Bu birçok yerde sorunlara neden olur:
- Kullanıcıya özel bir uygulama giriş ekranı gösterildiğinde bir anahtar için EVET'i ayarladığınızı hayal edin. Diğer uygulama şimdi de EVET okuyacak ve tanıtımı göstermeyecek.
- Evet, bazı uygulamalar da oAuth belirteçlerini kullanıcı varsayılanlarında depolar. Her neyse ... Uygulamaya bağlı olarak, uygulama bir belirteç olduğunu fark edecek ve yanlış belirteci kullanarak verileri almaya başlayacaktır. Garip hatalarla başarısız olma şansı yüksektir.
Bu problemin çözümü genel olarak varsayılan anahtarların önüne mevcut yapılandırmanın inşa edilmesidir. Konfigürasyonlarınız için farklı paket tanımlayıcıları ayarlayarak konfigürasyonu çalışma zamanında kolayca tespit edebilirsiniz. Ardından paket tanımlayıcısını şuradan okuyun NSBundle.mainBundle()
. Aynı paket tanımlayıcılarına sahipseniz, farklı önişlemci makroları ayarlamanız gerekir.
#ifdef DEBUG
NSString* configuration = @"debug";
#elif RELEASE
NSString* configuration = @"release";
#endif
Swift'de neredeyse aynı görünecek:
#if DEBUG
let configuration = "debug"
#elseif RELEASE
let configuration = "release"
#endif