Hızlı cevap…
Swift 2.0'dan itibaren, yalnızca belirli sistemlerde çalıştırılması gereken bir kodu korumak #available
için if
veya içinde kullanabilirsiniz guard
.
if #available(iOS 9, *) {}
Objective-C'de sistem sürümünü kontrol etmeniz ve bir karşılaştırma yapmanız gerekir.
[[NSProcessInfo processInfo] operatingSystemVersion]
iOS 8 ve sonraki sürümlerinde.
Xcode 9'dan itibaren:
if (@available(iOS 9, *)) {}
Tam cevap…
Objective-C ve Swift nadir durumlarda, cihaz veya işletim sistemi yeteneklerinin bir göstergesi olarak işletim sistemi sürümüne güvenmekten kaçınmak daha iyidir. Belirli bir özelliğin veya sınıfın mevcut olup olmadığını kontrol etmek için genellikle daha güvenilir bir yöntem vardır.
API'lerin varlığını kontrol etme:
Örneğin UIPopoverController
, geçerli aygıtta kullanılabilir olup olmadığını aşağıdakileri kullanarak kontrol edebilirsiniz NSClassFromString
:
if (NSClassFromString(@"UIPopoverController")) {
// Do something
}
Zayıf bağlantılı sınıflar için, sınıfa doğrudan mesaj göndermek güvenlidir. Özellikle bu, açıkça "Zorunlu" olarak bağlanmayan çerçeveler için geçerlidir. Eksik sınıflar için ifade, koşulu başarısız olarak nil olarak değerlendirir:
if ([LAContext class]) {
// Do something
}
Bazı sınıflar, gibi CLLocationManager
ve UIDevice
çek Cihaz özelliklerine yöntemleri sağlar:
if ([CLLocationManager headingAvailable]) {
// Do something
}
Sembollerin olup olmadığını kontrol etme:
Çok zaman zaman, bir sabit olup olmadığını kontrol etmelisiniz. Bu, iOS 8'de UIApplicationOpenSettingsURLString
, Ayarlar uygulamasını yüklemek için kullanılan tanıtımıyla geldi -openURL:
. Değer iOS 8'den önce yoktu. Bu API'ya nil iletilmesi kilitlenecek, bu nedenle öncelikle sabitin varlığını doğrulamaya dikkat etmelisiniz:
if (&UIApplicationOpenSettingsURLString != NULL) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
}
İşletim sistemi sürümüyle karşılaştırma:
İşletim sistemi sürümünü kontrol etmek için nispeten nadir bir gereksinimle karşılaştığınızı varsayalım. İOS 8 ve sonraki sürümlerini hedefleyen projeler NSProcessInfo
için, daha az hata olasılığı olan sürüm karşılaştırmaları gerçekleştirmek için bir yöntem içerir:
- (BOOL)isOperatingSystemAtLeastVersion:(NSOperatingSystemVersion)version
Eski sistemleri hedefleyen projeler systemVersion
üzerinde kullanılabilir UIDevice
. Apple bunu GLSprite örnek kodlarında kullanır .
// A system version of 3.1 or greater is required to use CADisplayLink. The NSTimer
// class is used as fallback when it isn't available.
NSString *reqSysVer = @"3.1";
NSString *currSysVer = [[UIDevice currentDevice] systemVersion];
if ([currSysVer compare:reqSysVer options:NSNumericSearch] != NSOrderedAscending) {
displayLinkSupported = TRUE;
}
Herhangi bir nedenle ne istediğinize karar verirseniz, systemVersion
ona bir dize gibi davrandığınızdan emin olun ya da düzeltme eki düzeltme numarasını (örneğin 3.1.2 -> 3.1) kesme riskiyle karşı karşıyasınız.