İOS versiyasını necə yoxlamaq olar?

iOS cihaz versiyasının 3.1.3 dən çox olub-olmadığını yoxlamaq istərdim 3.1.3

 [[UIDevice currentDevice].systemVersion floatValue] 

amma işə yaramır, yalnız istəyirəm:

 if (version > 3.1.3) { } 

Bunu necə edə bilərəm?

795
27 июля '10 в 2:30 2010-07-27 02:30 John 27 iyul 10: 00-da saat 02 : 30-da başlayacaq
@ 40 cavab
  • 1
  • 2

Tez cavab ...


Swift 2.0 ilə, yalnız müəyyən sistemlərdə işlədilmək üçün kodun qorunması üçün və ya guard üçün # istifadə edə bilərsiniz.

if #available(iOS 9, *) {}


Objective-C-də sistem versiyasını yoxlamaq və müqayisə etmək lazımdır.

İOS 8 və daha yüksək [[NSProcessInfo processInfo] operatingSystemVersion] .

Xcode 9-da olduğu kimi:

if (@available(iOS 9, *)) {}


Tam cavab ...

Objective-C və Swift-də, nadir hallarda əməliyyat sisteminin versiyasını cihazın və ya OS-nin imkanlarının göstəricisi kimi istifadə etməmək daha yaxşıdır. Bəzi funksiyaların və ya siniflərin mövcudluğunu yoxlamaq üçün adətən daha etibarlı bir üsul var.

API üçün yoxlayın:

Məsələn, UIPopoverController istifadə edərək cari cihazda bir UIPopoverController varlığını yoxlaya bilərsiniz:

 if (NSClassFromString(@"UIPopoverController")) { // Do something } 

Güzəştli birləşən dərslər üçün bu sinfi birbaşa bildirmək təhlükəsizdir. Qeyd edək ki, bu, "Lazım" kimi aydın olmayan çərçivələr üçün işləyir. Eksiksiz siniflər üçün, şərait təmin edilmədikdə ifadə nil kimi qiymətləndirilir:

 if ([LAContext class]) { // Do something } 

CLLocationManagerUIDevice kimi bəzi dərslər cihazın imkanlarını test etmək üçün üsullar təqdim edir:

 if ([CLLocationManager headingAvailable]) { // Do something } 

Simvolları yoxlayın:

Çox tez-tez daimi bir şey yoxlamalıdır. Bu, iOS 8-də UIApplicationOpenSettingsURLString tətbiqi ilə tətbiq UIApplicationOpenSettingsURLString , bu proqram parametrlərini -openURL: vasitəsilə yükləmək üçün istifadə edildi:. Qiymət iOS 8 əvvəli mövcud deyildi. Bu API üçün nil keçmək uğursuz olacaq, belə ki, bir sabitin mövcud olduğundan əmin olmalısınız:

 if ( != NULL) { [[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]]; } 

Əməliyyat sistemi versiyası ilə müqayisə:

Əməliyyat sisteminin versiyasını yoxlamaq üçün nisbətən nadir bir ehtiyacla qarşılaşdığınızı varsayalım. İOS 8 və daha yüksək səviyyəli layihələr üçün, NSProcessInfo bir səhv müqayisə metodunu ehtiva edir:

 - (BOOL)isOperatingSystemAtLeastVersion:(NSOperatingSystemVersion)version 

Köhnə sistemləri hədəfləyən layihələr systemVersion sisteminin sistemindən istifadə edə bilər. Apple onu GLSprite nümunə kodunda istifadə edir.

 // 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; } 

Əgər hər hansı bir səbəbdən systemVersion istədiyiniz nə systemVersion qərar systemVersion , onu bir simli olaraq systemVersion versiya nömrəsini (məsələn, 3.1.2 → 3.1) kəsin.

929
27 июля '10 в 2:44 2010-07-27 02:44 Cavab Yustin tərəfindən 27 iyul '10' da 2:44 'də 2010-07-27 02:44' də verilir
  #define SYSTEM_VERSION_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame) #define SYSTEM_VERSION_GREATER_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending) #define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending) #define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending) #define SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending)  if (SYSTEM_VERSION_LESS_THAN(@"4.0")) { ... } if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"3.1.1")) { ... } 
border=0
1041
17 марта '11 в 13:28 2011-03-17 13:28 Cavab verilir yasirmturk 17 mart '13 13:28 2011-03-17 13:28

Apple rəsmi sənədləri təklif etdiyi kimi: NSFoundationVersionNumber istifadə NSFoundationVersionNumber başlıq faylından istifadə edə bilərsiniz.

 if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) { // here you go with iOS 7 } 
246
06 авг. Cavab CarlJ 06 aug tərəfindən verilir . 2013-08-06 12:39 '13 at 12:39 2013-08-06 12:39

Objective-C'de Xcode 9'u çalıştırma:

 if (@available(iOS 11, *)) { // iOS 11 (or newer) ObjC code } else { // iOS 10 or older code } 

Swift-da Xcode 7 Running:

 if #available(iOS 11, *) { // iOS 11 (or newer) Swift code } else { // iOS 10 or older code } 

Bir versiya üçün, MAJOR, MINOR və ya PATCH (müəyyənləşdirmək üçün http://semver.org/ səhifəsinə bax) göstərə bilərsiniz. Nümunələr:

  • iOS 11iOS 11.0 - bu minimum versiyasıdır
  • iOS 10 , iOS 10.3 , iOS 10.3.1 - müxtəlif minimum versiyalar

Bu sistemlərdən biri üçün dəyərləri daxil edə bilərsiniz:

  • iOS , macOS , watchOS , tvOS

Konteynerlərimdən götürülmüş bir real vəziyyətin nümunəsi:

 if #available(iOS 10.0, tvOS 10.0, *) { // iOS 10+ and tvOS 10+ Swift code } else { // iOS 9 and tvOS 9 older code } 

sənədlər

72
08 июня '17 в 10:33 2017-06-08 10:33 Cavab 08 İyun 08 'də saat 10:33' də verilir. 2017-06-06 10:33

Keçir:

 NSComparisonResult order = [[UIDevice currentDevice].systemVersion compare: @"3.1.3" options: NSNumericSearch]; if (order == NSOrderedSame || order == NSOrderedDescending) { // OS version >= 3.1.3 } else { // OS version < 3.1.3 } 
36
27 июля '10 в 2:33 2010-07-27 02:33 Cavab Jonathan Grysspan tərəfindən 27 iyul '10, saat 2:33 'də 2010-07-27 02:33' də verilir

Bu, XCode-da SDK versiyasının uyğunluğunu yoxlamaq üçün istifadə olunur, əgər Xcode müxtəlif versiyaları və ya eyni kodu istifadə edən müxtəlif SDK'ları dəstəkləyən bir neçə layihə ilə böyük bir komandanız varsa:

 #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000 //programming in iOS 8+ SDK here #else //programming in lower than iOS 8 here #endif 

Cihazınızdakı iOS versiyasını həqiqətən yoxlamaq istəyirsiniz? Bununla bunu edə bilərsiniz:

 if ([[[UIDevice currentDevice] systemVersion] floatValue] < 8.0) { //older than iOS 8 code here } else { //iOS 8 specific code here } 

Swift versiyası:

 if let version = Float(UIDevice.current.systemVersion), version < 9.3 { //add lower than 9.3 code here } else { //add 9.3 and above code here } 

Swift'in mövcud versiyaları bu istifadə etməlidir:

 if #available(iOS 12, *) { //iOS 12 specific code here } else { //older than iOS 12 code here } 
35
19 сент. Travis M. tərəfindən verilən cavab 19 sentyabr 2014-09-19 00:58 '14 'də 0:58 2014-09-19 00:58

Tercihli yanaşma

Swift 2.0, Apple daha əlverişli sintaksis (daha çox burada ) istifadə edərək, bir əlçatanlıq yoxlamasını əlavə etdi. İndi OS versiyasını daha güclü bir sintaksis ilə yoxlaya bilərsiniz:

 if #available(iOS 9, *) { // Then we are on iOS 9 } else { // iOS 8 or earlier } 

Cavabları yoxlamaq üçün bu respondsToSelector və s. ( Swift-də Yeni ). Kodunuzu düzgün şəkildə qoruyursanız, kompilyator sizi hər zaman xəbərdar edəcəkdir.


Pre Swift 2.0

İOS 8-də yeni semantik versiyaların daha yaxşı yoxlanmasına imkan verən NSProcessInfo .

İOS 8 və yuxarıya yerləşdirin

IOS 8.0 və ya daha yüksək səviyyədə yerləşdirmə məqsədləri üçün NSProcessInfo operatingSystemVersion NSProcessInfo istifadə edin və ya isOperatingSystemAtLeastVersion .

Bu, aşağıdakılara səbəb olacaq:

 let minimumVersion = NSOperatingSystemVersion(majorVersion: 8, minorVersion: 1, patchVersion: 2) if NSProcessInfo().isOperatingSystemAtLeastVersion(minimumVersion) { //current version is >= (8.1.2) } else { //current version is < (8.1.2) } 

İOS 7-də yerləşdirin

İOS 7.1 və ya aşağıda yerləşdirmə məqsədlərinə çatmaq üçün UIDevice systemVersion üzrə NSStringCompareOptions.NumericSearch ilə müqayisə UIDevice systemVersion .

Budur:

 let minimumVersionString = "3.1.3" let versionComparison = UIDevice.currentDevice().systemVersion.compare(minimumVersionString, options: .NumericSearch) switch versionComparison { case .OrderedSame, .OrderedDescending: //current version is >= (3.1.3) break case .OrderedAscending: //current version is < (3.1.3) fallthrough default: break; } 

Daha ətraflı NSHipster .

34
07 окт. Cavab Dan Galasko Oct 07. 2014-10-07 14:33 '14 at 14:33 2014-10-07 14:33

Tövsiyə edirəm:

 if ([[[UIDevice currentDevice] systemVersion] floatValue] > 3.13) { ; // ... } 

Kredit: iPhone'un xüsusi bir versiyasını necə hədəfə alacaqsınız?

18
27 июля '10 в 9:32 2010-07-27 09:32 Cavab 27 İyul, '10 'da 9:32' da veriləcək

Mən həmişə Constants.h faylında saxlayıram:

 #define IS_IPHONE5 (([[UIScreen mainScreen] bounds].size.height-568)?NO:YES) #define IS_OS_5_OR_LATER ([[[UIDevice currentDevice] systemVersion] floatValue] >= 5.0) #define IS_OS_6_OR_LATER ([[[UIDevice currentDevice] systemVersion] floatValue] >= 6.0) #define IS_OS_7_OR_LATER ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) #define IS_OS_8_OR_LATER ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) 
8
15 марта '15 в 13:10 2015-03-15 13:10 Segev tərəfindən 15 Mart 2015 tarixində 1:10 'də verdiyi cavab. 2015-03-15 13:10

Nv-ios-versiyası layihəsində (Apache Lisenziya, versiya 2.0) olan Version sinfi ilə, iOS versiyasını almaq və müqayisə etmək asandır. Aşağıda, iOS versiyasını sıfırlayan və 6.0-dən çox və ya daha yüksək olan çekləri olan bir nümunə kodudur.

 // Get the system version of iOS at runtime. NSString *versionString = [[UIDevice currentDevice] systemVersion]; // Convert the version string to a Version instance. Version *version = [Version versionWithString:versionString]; // Dump the major, minor and micro version numbers. NSLog(@"version = [%d, %d, %d]", version.major, version.minor, version.micro); // Check whether the version is greater than or equal to 6.0. if ([version isGreaterThanOrEqualToMajor:6 minor:0]) { // The iOS version is greater than or equal to 6.0. } // Another way to check whether iOS version is // greater than or equal to 6.0. if (6 <= version.major) { // The iOS version is greater than or equal to 6.0. } 

Layihə səhifəsi: nv-ios-versiyası
TakahikoKawasaki / nv-ios-versiyası

Blog: Sürüm sinfi ilə iş vaxtında iOS versiyasını əldə edin və müqayisə edin
Sürüm sinfi ilə iş vaxtında iOS versiyasını əldə edin və müqayisə edin

6
03 апр. Apr 03- də Takahiko Kawasaki tərəfindən verilmiş cavab 2013-04-03 13:30 '13 saat 13:30 'da 2013-04-03 13:30
 +(BOOL)doesSystemVersionMeetRequirement:(NSString *)minRequirement{ // eg NSString *reqSysVer = @"4.0"; NSString *currSysVer = [[UIDevice currentDevice] systemVersion]; if ([currSysVer compare:minRequirement options:NSNumericSearch] != NSOrderedAscending) { return YES; }else{ return NO; } } 
6
20 нояб. Cavab 20 fevral, Cümə günü verilir. 2012-11-20 15:26 '12 at 15:26 2012-11-20 15:26

Sürətli [[UIDevice currentDevice] systemVersion] və NSFoundationVersionNumber adlı istifadə edərək sistem versiyasını yoxlamaq üçün yeni bir yol.

NSProcessInfo -izOperatingSystemAtLeastVersion istifadə edə bilərsiniz

  import Foundation let yosemite = NSOperatingSystemVersion(majorVersion: 10, minorVersion: 10, patchVersion: 0) NSProcessInfo().isOperatingSystemAtLeastVersion(yosemite) // false 
5
11 июня '14 в 12:02 2014-06-11 12:02 cavab iGo tərəfindən 11 iyun 'da 14:02' də verilir. 2014-06-11 12:02

UIDevice + IOSVersion.h

 @interface UIDevice (IOSVersion) + (BOOL)isCurrentIOSVersionEqualToVersion:(NSString *)iOSVersion; + (BOOL)isCurrentIOSVersionGreaterThanVersion:(NSString *)iOSVersion; + (BOOL)isCurrentIOSVersionGreaterThanOrEqualToVersion:(NSString *)iOSVersion; + (BOOL)isCurrentIOSVersionLessThanVersion:(NSString *)iOSVersion; + (BOOL)isCurrentIOSVersionLessThanOrEqualToVersion:(NSString *)iOSVersion @end 

UIDevice + IOSVersion.m

 #import "UIDevice+IOSVersion.h" @implementation UIDevice (IOSVersion) + (BOOL)isCurrentIOSVersionEqualToVersion:(NSString *)iOSVersion { return [[[UIDevice currentDevice] systemVersion] compare:iOSVersion options:NSNumericSearch] == NSOrderedSame; } + (BOOL)isCurrentIOSVersionGreaterThanVersion:(NSString *)iOSVersion { return [[[UIDevice currentDevice] systemVersion] compare:iOSVersion options:NSNumericSearch] == NSOrderedDescending; } + (BOOL)isCurrentIOSVersionGreaterThanOrEqualToVersion:(NSString *)iOSVersion { return [[[UIDevice currentDevice] systemVersion] compare:iOSVersion options:NSNumericSearch] != NSOrderedAscending; } + (BOOL)isCurrentIOSVersionLessThanVersion:(NSString *)iOSVersion { return [[[UIDevice currentDevice] systemVersion] compare:iOSVersion options:NSNumericSearch] == NSOrderedAscending; } + (BOOL)isCurrentIOSVersionLessThanOrEqualToVersion:(NSString *)iOSVersion { return [[[UIDevice currentDevice] systemVersion] compare:iOSVersion options:NSNumericSearch] != NSOrderedDescending; } @end 
5
07 авг. Oliver Pearmain 07 avqustda cavab verin . 2015-08-07 12:31 '15 at 12:31 pm 2015-08-07 12:31

Ümumiyyətlə, obyektin mövcud olmadığı barədə qərar versin yoxlanılmasını yox, obyektin seçilmiş vericini icra edə biləcəyini soruşmaq daha yaxşıdır.

Bu bir seçim olmadıqda, [@"5.0" compare:@"5" options:NSNumericSearch] NSOrderedDescending qaytarır, çünki bu heç də nəzərdə tutulmayan bir az ehtiyatlı olmalıdır; NSOrderedSame burada gözləmək olar. Bu, ən azı, mənim fikrimcə müdafiə dəyərində nəzəri bir problemdir.

Bununla bərabər pis bir versiyaya daxil olma ehtimalı nəzərə alınaraq, bir müqayisə mümkün olmur. Apple üç əvvəlcədən müəyyən edilmiş sabitləri NSOrderedAscending , NSOrderedSameNSOrderedDescending , lakin mən iki şeyi müqayisə edə bilməyəcəyəm halda NSOrderedUnordered adlı bir şey üçün istifadə edə bilərəm və bunu göstərən bir dəyər qaytarmaq istəyirəm.

Bundan əlavə, Apple birdən çox dönüş dəyərlərinə icazə vermək üçün üç əvvəlcədən müəyyən edilmiş sabitləri uzatmaq mümkündür, müqayisə != NSOrderedAscending .

Bunu nəzərə alaraq, aşağıdakı kodu nəzərdən keçirin.

 typedef enum {kSKOrderedNotOrdered = -2, kSKOrderedAscending = -1, kSKOrderedSame = 0, kSKOrderedDescending = 1} SKComparisonResult; @interface SKComparator : NSObject + (SKComparisonResult)comparePointSeparatedVersionNumber:(NSString *)vOne withPointSeparatedVersionNumber:(NSString *)vTwo; @end @implementation SKComparator + (SKComparisonResult)comparePointSeparatedVersionNumber:(NSString *)vOne withPointSeparatedVersionNumber:(NSString *)vTwo { if (!vOne || !vTwo || [vOne length] < 1 || [vTwo length] < 1 || [vOne rangeOfString:@".."].location != NSNotFound || [vTwo rangeOfString:@".."].location != NSNotFound) { return SKOrderedNotOrdered; } NSCharacterSet *numericalCharSet = [NSCharacterSet characterSetWithCharactersInString:@".0123456789"]; NSString *vOneTrimmed = [vOne stringByTrimmingCharactersInSet:numericalCharSet]; NSString *vTwoTrimmed = [vTwo stringByTrimmingCharactersInSet:numericalCharSet]; if ([vOneTrimmed length] > 0 || [vTwoTrimmed length] > 0) { return SKOrderedNotOrdered; } NSArray *vOneArray = [vOne componentsSeparatedByString:@"."]; NSArray *vTwoArray = [vTwo componentsSeparatedByString:@"."]; for (NSUInteger i = 0; i < MIN([vOneArray count], [vTwoArray count]); i++) { NSInteger vOneInt = [[vOneArray objectAtIndex:i] intValue]; NSInteger vTwoInt = [[vTwoArray objectAtIndex:i] intValue]; if (vOneInt > vTwoInt) { return kSKOrderedDescending; } else if (vOneInt < vTwoInt) { return kSKOrderedAscending; } } if ([vOneArray count] > [vTwoArray count]) { for (NSUInteger i = [vTwoArray count]; i < [vOneArray count]; i++) { if ([[vOneArray objectAtIndex:i] intValue] > 0) { return kSKOrderedDescending; } } } else if ([vOneArray count] < [vTwoArray count]) { for (NSUInteger i = [vOneArray count]; i < [vTwoArray count]; i++) { if ([[vTwoArray objectAtIndex:i] intValue] > 0) { return kSKOrderedAscending; } } } return kSKOrderedSame; } @end 
4
10 дек. Cavab 10 dekabrda SK9 verilir. 2011-12-10 15:07 '11 at 15:07 2011-12-10 15:07

Swift 3-də iOS 10 üçün ən azı test edilir:

 if (ProcessInfo.processInfo.isOperatingSystemAtLeast(OperatingSystemVersion(majorVersion: 10, minorVersion: 0, patchVersion: 0))) { } 
4
04 дек. cavab 04 mart cümə gününə verildi . 2017-12-04 14:38 '17 də 2:38 pm 2017-12-04 14:38

bir tərəf üçün bir az gec, amma iOS 8.0 işığında müvafiq ola bilər:

istifadə etməyinizdən qaçınmaq olar

[[UIDevice currentDevice] systemVersion]

Bunun əvəzinə bir üsul / sinif / hər şeyin mövcudluğunu yoxlayın.

 if ([self.yourClassInstance respondsToSelector:@selector(<yourMethod>)]) { //do stuff } 

Mən bunu iOS 8.0 üçün sorğu çağırmaq üçün lazım olan yeri meneceri üçün faydalı olmasını tapdım, lakin bu üsul iOS üçün mövcud deyil <8

4
24 сент. Cavab 24 sentyabrda Denis Kanygin tərəfindən verilir . 2014-09-24 02:46 '14 da 2:46 2014-09-24 02:46
 if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) { // Your code here } 

Əlbəttə ki, NSFoundationVersionNumber_iOS_6_1 , dəyişdirilməlidir, yoxlamaq istədiyiniz iOS versiyasına müraciət edin. Yazdığım şey, ehtimal ki, cihazın iOS7 və ya əvvəlki versiyasını sınadığında sınaqdan çox istifadə ediləcək.

4
04 окт. cavab OscarWyck 04 oct verilir . 2013-10-04 14:43 '13 at 14:43 2013-10-04 14:43
 #define _kisiOS7 ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0) if (_kisiOS7) { NSLog(@"iOS7 or greater") } else { NSLog(@"Less than iOS7"); } 
3
17 мая '14 в 14:19 2014-05-17 14:19 Cavab Gaurav Gilani tərəfindən verilir 17 May '14 14:19 2014-05-17 14:19
 #define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending) 

Sonra bir vəziyyət əlavə edin: -

 if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"10.0")) { //Your code } 
3
08 февр. Cavab Sumit Kumar Saha tərəfindən verilir 08 fevral. 2017-02-08 17:15 '17 saat 17:15 'də 2017-02-08 17:15

Aşağıdakı kodu cəhd edin:

 NSString *versionString = [[UIDevice currentDevice] systemVersion]; 
2
23 марта '14 в 13:10 2014-03-23 13:10 Cavab 23 mart, '14 'də saat 13:10' da veriləcək 2014-03-23 ​​13:10

Yalnız OS versiyasının simli dəyərini almaq üçün:

 [[UIDevice currentDevice] systemVersion] 
2
10 авг. Cavier Calatrava Llavería tərəfindən verilmiş cavab 10 Avqust. 2015-08-10 10:49 '15 at 10:49 2015-08-10 10:49
 NSString *deviceVersion = [[UIDevice currentDevice] systemVersion]; 
2
04 дек. Cavab Ankit garg 04 Dekabr. 2017-12-04 14:38 '17 də 2:38 pm 2017-12-04 14:38

7.0 və ya 6.0.3 kimi bir versiya mövcuddur, buna görə müqayisə üçün sadəcə versiyaya çevirə bilərik. versiyası 7.0-a bənzərsə, sadəcə başqa bir ".0" əlavə edin və sonra ədədi dəyərini daxil edin.

  int version; NSString* iosVersion=[[UIDevice currentDevice] systemVersion]; NSArray* components=[iosVersion componentsSeparatedByString:@"."]; if ([components count]==2) { iosVersion=[NSString stringWithFormat:@"%@.0",iosVersion]; } iosVersion=[iosVersion stringByReplacingOccurrencesOfString:@"." withString:@""]; version=[iosVersion integerValue]; 

6.0.0 üçün

  if (version==600) { // Do something } 

7.0 üçün

  if (version==700) { // Do something } 
2
11 нояб. Cavab NaXir 11 noyabrda verilir. 2013-11-11 13:05 '13 at 13:05 2013-11-11 13:05
 #define IsIOS8 (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_7_1) 
1
30 мая '15 в 12:48 2015-05-30 12:48 Cavab Gank tərəfindən May 30, '15 də 12:48 2015-05-30 12:48 'də verilir

Tövsiyə olunan metodu istifadə edərək ... başlıq fayllarında heç bir tərif yoxdursə, istədiyiniz hər hansı bir IOS versiyasının cihazını istifadə edərək, həmişə konsolda yaza bilərsiniz.

 - (BOOL) isIOS8OrAbove{ float version802 = 1140.109985; float version8= 1139.100000; // there is no def like NSFoundationVersionNumber_iOS_7_1 for ios 8 yet? NSLog(@"la version actual es [%f]", NSFoundationVersionNumber); if (NSFoundationVersionNumber >= version8){ return true; } return false; } 
1
02 окт. cavab tyoc213 02 oktyabr verilir . 2014-10-02 18:59 '14 saat 18:59 'də 2014-10-02 18:59

Mən bu köhnə bir sual olduğunu bilirəm, amma kimsə Availability.h -də tərtib vaxt makrolarını qeyd etməlidir. Buradaki bütün digər üsullar müvəqqəti həllərdir və başlıq faylında, sinifdə və ya İvar tərifində işləməyəcəkdir.

Bu vəziyyətlərdə istifadə edin

 #if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_6_0 // iOS 6+ code here #else // Pre iOS 6 code here #endif 

bu cavabı verməyin

1
18 сент. Cavab batttle 18 sep verilir . 2014-09-18 06:19 '14 da 6:19 2014-09-18 06:19

Yaşımtürklərə bir həll kimi, mən beş makro yerinə bir funksiya və bir neçə enum dəyərini təyin etdim. Mən onu daha zərif tapıram, amma dadı bir sual.

İstifadə edin:

 if (systemVersion(LessThan, @"5.0")) ... 

.h fayl:

 typedef enum { LessThan, LessOrEqual, Equal, GreaterOrEqual, GreaterThan, NotEqual } Comparison; BOOL systemVersion(Comparison test, NSString* version); 

.m fayl:

 BOOL systemVersion(Comparison test, NSString* version) { NSComparisonResult result = [[[UIDevice currentDevice] systemVersion] compare: version options: NSNumericSearch]; switch (test) { case LessThan: return result == NSOrderedAscending; case LessOrEqual: return result != NSOrderedDescending; case Equal: return result == NSOrderedSame; case GreaterOrEqual: return result != NSOrderedAscending; case GreaterThan: return result == NSOrderedDescending; case NotEqual: return result != NSOrderedSame; } } 

Adlara tətbiq prefiksini əlavə etməlisiniz, xüsusən də Tip Comparison .

1
07 окт. Cavab 07 oktyabr tarixində verilir . 2013-10-07 20:47 '13 at 8:47 pm 2013-10-07 20:47

Swift-da iOS versiyasını yoxlamaq üçün həll

 switch (UIDevice.currentDevice().systemVersion.compare("8.0.0", options: NSStringCompareOptions.NumericSearch)) { case .OrderedAscending: println("iOS < 8.0") case .OrderedSame, .OrderedDescending: println("iOS >= 8.0") } 

Bu həlli Con: sadəcə OS əməliyyat sisteminin versiya nömrələrini yoxlayın, necə etdiyinizə bağlı olaraq. Buna görə də, heç vaxt kod bağımlılıklarını bağlamamalısınız, həmişə bir sinif imkanları, imkanları və ya mövcudluğunu yoxlayın. Bunu düşünün; Apple sınıfın geriyə dönük uyğun bir versiyasını buraxa bilər, əgər etdikləri təqdirdə, kodunuz OS-lərin versiya nömrəsini və sinfi mövcudluğunu yox, çünki istifadə etdiyiniz kod heç vaxt istifadə etməyəcəkdir.

( Bu məlumatın mənbəyi )

Swift-də sinif mövcudluğunu yoxlamaq üçün həll

 if (objc_getClass("UIAlertController") == nil) { // iOS 7 } else { // iOS 8+ } 

İOS 7.1 və 8.2 istifadə edərək iOS simulyatorunda düzgün işlədiyindən, if (NSClassFromString("UIAlertController") == nil) istifadə etməyin, amma iOS 7.1 istifadə edərək real cihazda test etsəniz, təəssüf ki, kod snippetinin qalan hissəsindən heç vaxt keçməyəcək.

1
19 марта '15 в 19:33 2015-03-19 19:33 Cavab King-Wizard tərəfindən 19 Mart 19-da saat 19:33 'də verilir 2015-03-19 19:33

Aşağıdakı Swift kodunu layihəinizə əlavə edin və iOS versiyası və cihaz kimi məlumatlara asanlıqla daxil olun.

 class DeviceInfo: NSObject { struct ScreenSize { static let SCREEN_WIDTH = UIScreen.main.bounds.size.width static let SCREEN_HEIGHT = UIScreen.main.bounds.size.height static let SCREEN_MAX_LENGTH = max(ScreenSize.SCREEN_WIDTH, ScreenSize.SCREEN_HEIGHT) static let SCREEN_MIN_LENGTH = min(ScreenSize.SCREEN_WIDTH, ScreenSize.SCREEN_HEIGHT) } struct DeviceType { static let IS_IPHONE_4_OR_LESS = UIDevice.current.userInterfaceIdiom == .phone  ScreenSize.SCREEN_MAX_LENGTH < 568.0 static let IS_IPHONE_5 = UIDevice.current.userInterfaceIdiom == .phone  ScreenSize.SCREEN_MAX_LENGTH == 568.0 static let IS_IPHONE_6 = UIDevice.current.userInterfaceIdiom == .phone  ScreenSize.SCREEN_MAX_LENGTH >= 667.0 static let IS_IPHONE_6P = UIDevice.current.userInterfaceIdiom == .phone  ScreenSize.SCREEN_MAX_LENGTH == 736.0 static let IS_IPHONE_X = UIDevice.current.userInterfaceIdiom == .phone  ScreenSize.SCREEN_MAX_LENGTH == 812.0 static let IS_IPAD = UIDevice.current.userInterfaceIdiom == .pad  ScreenSize.SCREEN_MAX_LENGTH == 1024.0 static let IS_IPAD_PRO = UIDevice.current.userInterfaceIdiom == .pad  ScreenSize.SCREEN_MAX_LENGTH == 1366.0 } struct VersionType{ static let SYS_VERSION_FLOAT = (UIDevice.current.systemVersion as NSString).floatValue static let iOS7 = (VersionType.SYS_VERSION_FLOAT < 8.0  VersionType.SYS_VERSION_FLOAT >= 7.0) static let iOS8 = (VersionType.SYS_VERSION_FLOAT >= 8.0  VersionType.SYS_VERSION_FLOAT < 9.0) static let iOS9 = (VersionType.SYS_VERSION_FLOAT >= 9.0  VersionType.SYS_VERSION_FLOAT < 10.0) static let iOS10 = (VersionType.SYS_VERSION_FLOAT >= 9.0  VersionType.SYS_VERSION_FLOAT < 11.0) } } 
0
17 апр. cavab Kiran K 17 apr verilir. 2018-04-17 07:39 '18 saat 7:39 'da 2018-04-17 07:39

Burada cihazla əlaqəli bütün məlumatları əldə edə bilərsiniz, burada https://github.com/aleemrazzaq/ARCompactDeviceInfo

0
29 марта '18 в 16:26 2018-03-29 16:26 Cavab Aleem tərəfindən 29 Mart 18: 04-də 2018-03-29 16:26 tarixində verilir
  • 1
  • 2

etiketinə aid digər suallar və ya sual