Как проверить версию iOS?

Да, это возможно. Если таргетинг на .Net Standard 4.6.1+ или Core, я думаю, достаточно просто получить шифрование Sqlite, чтобы использовать Microsoft.Data.Sqlite для моего ответа здесь .

819
задан James Webster 7 August 2015 в 13:42
поделиться

4 ответа

Быстрый ответ…


Начиная со Swift 2.0, вы можете использовать #available в if или охраннике для защиты кода, который следует запускать только в определенных системах.

if #available (iOS 9, *) {}


В Objective-C вам необходимо проверить версию системы и выполнить сравнение.

[[NSProcessInfo processInfo] operatingSystemVersion] в iOS 8 и более поздних версиях.

Начиная с Xcode 9:

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


Полный ответ…

В Objective-C и Swift в редких случаях лучше не полагаться о версии операционной системы как показатель возможностей устройства или ОС.Обычно существует более надежный метод проверки доступности той или иной функции или класса.

Проверка наличия API:

Например, вы можете проверить, доступен ли UIPopoverController на текущем устройстве, используя NSClassFromString :

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

Для слабо связанных классов, напрямую сообщать классу безопасно. Примечательно, что это работает для фреймворков, которые явно не связаны как «Обязательные». Для отсутствующих классов выражение принимает нулевое значение, что не соответствует условию:

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

Некоторые классы, такие как CLLocationManager и UIDevice , предоставляют методы для проверки возможностей устройства:

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

Проверка наличия наличие символов:

В очень редких случаях необходимо проверять наличие константы. Это появилось в iOS 8 с введением UIApplicationOpenSettingsURLString , используемого для загрузки приложения «Настройки» через -openURL: . Значение не существовало до iOS 8. Передача nil в этот API приведет к сбою, поэтому вы должны сначала проверить наличие константы:

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

Сравнение с версией операционной системы:

Предположим, вы ' столкнулся с относительно редкой необходимостью проверить версию операционной системы. Для проектов, ориентированных на iOS 8 и выше, NSProcessInfo включает метод для выполнения сравнения версий с меньшей вероятностью ошибки:

- (BOOL)isOperatingSystemAtLeastVersion:(NSOperatingSystemVersion)version

Проекты, ориентированные на более старые системы, могут использовать systemVersion на UIDevice . Apple использует его в своем примере кода GLSprite .

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

Если по какой-либо причине вы решите, что systemVersion - это то, что вам нужно, убедитесь, что рассматриваете это как строку, иначе вы рискуете усечь номер версии патча (например, 3.1.2 -> 3.1).

978
ответ дан 22 November 2019 в 21:14
поделиться
+(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
ответ дан kleopatra 7 August 2015 в 13:42
поделиться
if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) {
        // Your code here
}

Где, конечно, NSFoundationVersionNumber_iOS_6_1 должно быть изменено на применимое для версии iOS, которую вы хотите проверить. То, что я сейчас написал, вероятно, будет часто использоваться при тестировании устройства под управлением iOS7 или предыдущей версии.

4
ответ дан OscarWyck 7 August 2015 в 13:42
поделиться

Попробуйте:

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
}
37
ответ дан 22 November 2019 в 21:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: