Xcode 5 ve iOS 7 için güncelleme
not: bir sürüm yapısındaki print () ifadelerini kaldırmaya yönelik bir Xcode 7 / Swift 2.1 çözümü için cevabımı burada bulun .
Evet, kodunuzu yavaşlattığı ve yayın sürümünde herhangi bir faydası olmadığı için yayın kodunuzdaki tüm NSLog ifadelerini kaldırmalısınız. Neyse ki, Xcode 5'te (iOS 7), sürüm yapılarında tüm NSLog ifadelerinizi 'otomatik olarak' kaldırmak inanılmaz derecede kolaydır. Öyleyse neden yapmıyorsun?
Önce atılması gereken 3 adım, ardından bazı açıklamalar
1) Xcode projenizde 'yourProjectName-prefix.pch' dosyasını bulun (normalde bunu main.m dosyanızın bulunduğu 'destekleyici dosyalar' grubu altında bulacaksınız.
2) ".pch" dosyasının sonuna şu 3 satırı ekleyin:
#ifndef DEBUG
#define NSLog(...);
#endif
3) 'hata ayıklama' ve 'yayın' sürümünüz arasındaki farkı test edin. Bunu yapmanın bir yolu, 'düzeni düzenle' -> 'uygulama adını çalıştır' -> 'bilgi' sekmesi altında, hata ayıklama ve yayınlama arasındaki açılır kutuyu kullanarak seçim yapmaktır. Yayın sürümünde, hata ayıklama konsolunda herhangi bir NSLog çıktısı görmeyeceksiniz!
Bütün bunlar nasıl çalışıyor?
her şeyden önce, bir önişlemcinin görece 'aptal' olduğunu ve derleyici çağrılmadan önce sadece bir 'metin ikame' görevi gördüğünü bilmek gerekir. '# Tanımladığınız' her şeyi #define
ifadeden sonra gelenle değiştirir .
#define NSLog(...);
(...)
Parantez 'şey' () anlamına gelir. ;
Sonuna da dikkat edin . Derleyici bunu ortadan kaldıracağından bu kesinlikle gerekli değildir, ancak daha 'doğru' olduğu için onu oraya koymaktan hoşlanırım. Kızımız sonra #define
önişlemci 'hiçbir şey' ile değiştirecektir, ve bu yüzden sadece başlayarak tam bir çizgi atmak böylece, 'yok' yok NSLog...
dek dahil ;
.
Tanımlama ifadeleri kullanılarak #ifdef
(tanımlanmışsa) veya #ifndef
( tanımlanmamışsa) koşullu yapılabilir
burada yazıyoruz #ifndef DEBUG
, bunun anlamı 'DEBUG sembolü tanımlı değilse'. #ifdef
Veya #ifndef
olmaya gerek ile 'kapalı'#endif
Xcode 5, derleme modu 'DEBUG' olduğunda bizim için varsayılan olarak 'DEBUG' sembolünü tanımlar. "Sürümde" bu tanımlanmamıştır. bunu proje ayarlarınızdan doğrulayabilirsiniz, 'Yapı ayarları' sekmesi -> 'Apple LLVM 5.0 - Önişleme' -> önişlemci makroları bölümüne gidin. 'DEBUG' sembolünün sürüm yapıları için tanımlanmadığını göreceksiniz!
son olarak, .pch dosyası Xcode tarafından otomatik olarak oluşturulur ve derleme sırasında her kaynak dosyaya otomatik olarak eklenir. Yani, her #define
şeyi kaynak dosyalarınızın her birine yerleştirmişsiniz gibi.