Да, это возможно. Если таргетинг на .Net Standard 4.6.1+ или Core, я думаю, достаточно просто получить шифрование Sqlite, чтобы использовать Microsoft.Data.Sqlite для моего ответа здесь .
Начиная со 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).
+(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;
}
}
if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) {
// Your code here
}
Где, конечно, NSFoundationVersionNumber_iOS_6_1
должно быть изменено на применимое для версии iOS, которую вы хотите проверить. То, что я сейчас написал, вероятно, будет часто использоваться при тестировании устройства под управлением iOS7 или предыдущей версии.
Попробуйте:
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
}