iOS 버전 확인 방법
문장이 요.iOS이 디이음음음음음음음음음음음음음음음 version version version version version version보다 크다.3.1.3나는 다음과 같은 것을 시도했다.
[[UIDevice currentDevice].systemVersion floatValue]
하지만 효과가 없어, 난 단지 다음을 원해:
if (version > 3.1.3) { }
어떻게 하면 좋을까요?
/*
* System Versioning Preprocessor Macros
*/
#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)
/*
* Usage
*/
if (SYSTEM_VERSION_LESS_THAN(@"4.0")) {
...
}
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"3.1.1")) {
...
}
즉답은…
2.부터는 Swift 2.0을 사용할 수 .#available an if ★★★★★★★★★★★★★★★★★」guard특정 시스템에서만 실행해야 하는 코드를 보호합니다.
if #available(iOS 9, *) {}
Objective-C objective objective objective objective objective objective objective objective objective objective objective objective objective objective objective objective objective objective 。
[[NSProcessInfo processInfo] operatingSystemVersion] 8 버전.iOS 8 の os os os 。
Xcode 9의 경우:
if (@available(iOS 9, *)) {}
완전한 답은 …입니다.
드물게 Objective-C 및 Swift에서는 디바이스 또는 OS 기능의 표시로서 운영체제 버전에 의존하지 않는 것이 좋습니다.일반적으로 특정 기능 또는 클래스를 사용할 수 있는지 여부를 확인하는 보다 신뢰할 수 있는 방법이 있습니다.
API 존재 여부 확인:
를 들어, '아까', '아까', '아까', '아까', '아까', 이런 할 수 있습니다.UIPopoverController는, 로, 「 」를 사용해 할 수 .NSClassFromString:
if (NSClassFromString(@"UIPopoverController")) {
// Do something
}
약하게 연결된 클래스의 경우 클래스에 직접 메시지를 보내는 것이 안전합니다.특히 이 기능은 "필수"로 명시적으로 연결되지 않은 프레임워크에 적용됩니다.누락된 클래스의 경우 식은 0으로 평가되며 다음 조건에 실패합니다.
if ([LAContext class]) {
// Do something
}
클래스: ★★★★★★★★★★★★★★★★★★★★)CLLocationManager ★★★★★★★★★★★★★★★★★」UIDevice 디바이스의을 나타냅니다.「 」 、 [ ]
if ([CLLocationManager headingAvailable]) {
// Do something
}
기호의 존재 확인:
매우 가끔 상수가 존재하는지 확인해야 합니다.에서는, 「iOS 8」의 이 이 도입되었습니다.UIApplicationOpenSettingsURLString하여 설정 하는 데 사용됩니다.-openURL:8 하지 않았습니다크래시가 발생하기 상수의 .
if (&UIApplicationOpenSettingsURLString != NULL) {
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
}
운영 체제 버전과 비교:
운영체제 버전을 확인해야 하는 경우가 비교적 드물다고 가정해 보겠습니다. 8을 대상으로 한 iOS 8은 다음과 같습니다.NSProcessInfo에는 에러 가능성이 적은 버전 비교를 실행하는 방법이 포함되어 있습니다.
- (BOOL)isOperatingSystemAtLeastVersion:(NSOperatingSystemVersion)version
으로 하는 에서는 '사용할 수 있습니다'를 사용할 수 .systemVersionUIDevice애플은 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).
Apple 공식 문서에서 권장하는 바와 같이:를 사용할 수 있습니다.NSObjCRuntime.h헤더 파일
if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) {
// here you go with iOS 7
}
Xcode 9 시작, 목표 C:
if (@available(iOS 11, *)) {
// iOS 11 (or newer) ObjC code
} else {
// iOS 10 or older code
}
Swift에서 Xcode 7 시작:
if #available(iOS 11, *) {
// iOS 11 (or newer) Swift code
} else {
// iOS 10 or older code
}
버전의 경우 MAJOR, MINOR 또는 PATCH 를 지정할 수 있습니다(정의에 대해서는, http://semver.org/ 를 참조해 주세요).예:
iOS 11★★★★★★★★★★★★★★★★★」iOS 11.0미니멀 입니다.iOS 10,iOS 10.3,iOS 10.3.1이 다르다
다음 중 하나의 시스템에 대한 값을 입력할 수 있습니다.
iOS,macOS,watchOS,tvOS
포드에서 가져온 실제 사례:
if #available(iOS 10.0, tvOS 10.0, *) {
// iOS 10+ and tvOS 10+ Swift code
} else {
// iOS 9 and tvOS 9 older code
}
시험:
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
}
바람직한 접근법
Swift 2.0에서는 Apple이 훨씬 편리한 구문을 사용하여 가용성 검사를 추가했습니다(자세한 내용은 여기를 참조하십시오).이제 OS 버전을 보다 깔끔한 구문으로 확인할 수 있습니다.
if #available(iOS 9, *) {
// Then we are on iOS 9
} else {
// iOS 8 or earlier
}
됩니다.respondsToSelector기타 (What's New In Swift)코드를 제대로 보호하지 않으면 컴파일러는 항상 경고를 보냅니다.
Swift 2.0 이전 버전
기능은 iOS 8입니다.NSProcessInfo을 사용법
iOS 8 이상에서의 도입
iOS 8.0 이상의 최소 도입 타깃의 경우
NSProcessInfooperatingSystemVersion★★★★★★★★★★★★★★★★★」isOperatingSystemAtLeastVersion
그 결과, 다음과 같은 결과가 됩니다.
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)
}
iOS 7에서의 도입
iOS 7.1 이하의 최소 도입 타깃에 대해서는
NSStringCompareOptions.NumericSearchUIDevice systemVersion.
그 결과 다음과 같이 됩니다.
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;
}
NSHipster에서 더 읽어볼 수 있습니다.
항상 Constant.h 파일에 저장합니다.
#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)
+(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;
}
}
nv-ios-version 프로젝트(Apache License, Version 2.0)에 포함된 Version 클래스를 사용하면 iOS 버전을 쉽게 입수하고 비교할 수 있습니다.아래 코드 예는 iOS 버전을 덤프하고 버전이 6.0 이상인지 확인합니다.
// 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.
}
프로젝트 페이지: nv-ios 버전
카와사키 / 버전
블로그: 런타임에 iOS 버전을 입수하여 버전 클래스와 비교합니다.
시 을 Version 합니다.
질문인 시 에 대해 가 .Availability.h기타 메서드는 모두 런타임솔루션이며 헤더 파일, 클래스 카테고리 또는 ivar 정의에서는 동작하지 않습니다.
이러한 상황에서는,
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_14_0 && defined(__IPHONE_14_0)
// iOS 14+ code here
#else
// Pre iOS 14 code here
#endif
h/t 이 답변
if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_6_1) {
// Your code here
}
NSFoundationVersionNumber_iOS_6_1확인하려는 iOS 버전에 해당하는 에 의해 변경되어야 합니다.현재 작성한 내용은 iOS7 또는 이전 버전이 동작하고 있는지 테스트할 때 많이 사용될 수 있습니다.
swift Forget [UIDevice current Device] systemVersion]및 NSFoundationVersionNumber 를 사용하여 시스템버전을 체크하는 새로운 방법
NS Process를 사용할 수 있습니다.정보 - is Operating System 최소 버전
import Foundation
let yosemite = NSOperatingSystemVersion(majorVersion: 10, minorVersion: 10, patchVersion: 0)
NSProcessInfo().isOperatingSystemAtLeastVersion(yosemite) // false
파티에는 조금 늦었지만 iOS 8.0에 비추어 볼 때 다음과 같은 문제가 있을 수 있습니다.
사용을 피할 수 있다면
[[UIDevice currentDevice] systemVersion]
대신 메서드/클래스/다른 항목이 있는지 확인합니다.
if ([self.yourClassInstance respondsToSelector:@selector(<yourMethod>)])
{
//do stuff
}
요청 전화를 걸어야 하는 위치 관리자에 도움이 된다는 것을 알았습니다.사용시iOS 8.0 인증은 완료되지만 iOS < 8에서는 사용할 수 없습니다.
UIDevice+IOS Version.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+IOS Version.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
OS 버전 문자열 값만 가져옵니다.
[[UIDevice currentDevice] systemVersion]
일반적으로 개체가 존재해야 하는지 여부를 결정하기 위해 버전 번호를 확인하는 것보다 특정 셀렉터를 실행할 수 있는지 여부를 확인하는 것이 좋습니다.
[@"5.0" compare:@"5" options:NSNumericSearch]NSOrderedDescending하지 않은 , 아마 할 수 것입니다.NSOrderedSame이건 적어도 이론적인 문제일 뿐이고, 제 생각에는 방어할 가치가 있어
또한 합리적으로 비교할 수 없는 잘못된 버전 입력의 가능성도 고려할 필요가 있습니다.은 사전 된 3가지 상수 Apple을 합니다.NSOrderedAscending,NSOrderedSame ★★★★★★★★★★★★★★★★★」NSOrderedDescending하지만 전 '그냥'이라는 용도를 생각해 낼 수 있어요NSOrderedUnordered두 가지를 비교할 수 없는 경우 이 값을 반환하고 싶습니다.
의 사전 수 하는 . 는 what田 가 3 개 3 개 3 개 양 양 양 양 양 양 양 양 양 what what what what what what what what what what what what what what what what what what what 개 what what what what what what what what what what what what what what what what what what what what what what what what != NSOrderedAscending현명하지 못한
이상, 이하의 코드를 검토해 주세요.
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
#define _kisiOS7 ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)
if (_kisiOS7) {
NSLog(@"iOS7 or greater")
}
else {
NSLog(@"Less than iOS7");
}
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
그런 다음 다음과 같이 if 조건을 추가합니다.
if(SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"10.0")) {
//Your code
}
7.0이나 6.0.3과 같은 버전이 있으므로 단순히 비교하기 위해 버전을 숫자로 변환할 수 있습니다.버전이 7.0과 같다면 다른 ".0"을 추가하고 숫자 값을 취하기만 하면 됩니다.
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의 경우
if (version==600) {
// Do something
}
7.0의 경우
if (version==700) {
// Do something
}
다음 코드를 사용해 보십시오.
NSString *versionString = [[UIDevice currentDevice] systemVersion];
yasimturks 솔루션의 변형으로 5개의 매크로 대신 1개의 함수와 몇 개의 열거값을 정의했습니다.그게 더 우아하다고 생각하지만 그건 취향의 문제예요.
사용방법:
if (systemVersion(LessThan, @"5.0")) ...
.h 파일:
typedef enum {
LessThan,
LessOrEqual,
Equal,
GreaterOrEqual,
GreaterThan,
NotEqual
} Comparison;
BOOL systemVersion(Comparison test, NSString* version);
.m 파일:
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;
}
}
앱의.Comparisondiscloss.discloss.
참조된 권장 방법을 사용하여...헤더 파일에 정의가 없는 경우 원하는 IOS version 디바이스와 함께 콘솔에서 언제든지 version을 인쇄할 수 있습니다.
- (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;
}
Swift에서 iOS 버전을 확인하는 솔루션
switch (UIDevice.currentDevice().systemVersion.compare("8.0.0", options: NSStringCompareOptions.NumericSearch)) {
case .OrderedAscending:
println("iOS < 8.0")
case .OrderedSame, .OrderedDescending:
println("iOS >= 8.0")
}
이 솔루션의 단점: OS 버전 번호와 대조하는 것은 단순히 잘못된 방법입니다.이러한 방식으로 코드 종속성을 하드화하지 말고 기능, 기능 또는 클래스의 존재를 항상 확인해야 합니다.예를 들어, Apple은 하위 호환 버전의 클래스를 출시할 수 있습니다.이 경우 사용자가 제안하는 코드가 클래스의 존재 여부가 아닌 OS 버전 번호를 검색하기 위해 이 버전을 사용하지 않을 것입니다.
(이 정보의 출처)
Swift에서의 클래스 유무 확인 솔루션
if (objc_getClass("UIAlertController") == nil) {
// iOS 7
} else {
// iOS 8+
}
「 」를하지 주세요.if (NSClassFromString("UIAlertController") == nil)iOS 7.1과 8.2를 사용하는 iOS 시뮬레이터에서는 정상적으로 동작하지만 iOS 7.1을 사용하는 실제 디바이스에서 테스트하면 코드 스니펫의 다른 부분을 통과하지 못할 것입니다.
#define IsIOS8 (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_7_1)
Obj-C++ 11 의 보다 범용적인 버전(이것들 중 일부를 NSString/C 함수로 대체할 수 있지만, 이것은 보다 상세하지 않습니다).에는 두 메커니즘이 System 것만으로 "Split System Version").★★★★★★★★★★★★★★★★★★★★★★★★★★switch([self splitSystemVersion][0]) {case 4: break; case 5: break; }를 참조해 주세요.
#include <boost/lexical_cast.hpp>
- (std::vector<int>) splitSystemVersion {
std::string version = [[[UIDevice currentDevice] systemVersion] UTF8String];
std::vector<int> versions;
auto i = version.begin();
while (i != version.end()) {
auto nextIllegalChar = std::find_if(i, version.end(), [] (char c) -> bool { return !isdigit(c); } );
std::string versionPart(i, nextIllegalChar);
i = std::find_if(nextIllegalChar, version.end(), isdigit);
versions.push_back(boost::lexical_cast<int>(versionPart));
}
return versions;
}
/** Losslessly parse system version into a number
* @return <0>: the version as a number,
* @return <1>: how many numeric parts went into the composed number. e.g.
* X.Y.Z = 3. You need this to know how to compare again <0>
*/
- (std::tuple<int, int>) parseSystemVersion {
std::string version = [[[UIDevice currentDevice] systemVersion] UTF8String];
int versionAsNumber = 0;
int nParts = 0;
auto i = version.begin();
while (i != version.end()) {
auto nextIllegalChar = std::find_if(i, version.end(), [] (char c) -> bool { return !isdigit(c); } );
std::string versionPart(i, nextIllegalChar);
i = std::find_if(nextIllegalChar, version.end(), isdigit);
int part = (boost::lexical_cast<int>(versionPart));
versionAsNumber = versionAsNumber * 100 + part;
nParts ++;
}
return {versionAsNumber, nParts};
}
/** Assume that the system version will not go beyond X.Y.Z.W format.
* @return The version string.
*/
- (int) parseSystemVersionAlt {
std::string version = [[[UIDevice currentDevice] systemVersion] UTF8String];
int versionAsNumber = 0;
int nParts = 0;
auto i = version.begin();
while (i != version.end() && nParts < 4) {
auto nextIllegalChar = std::find_if(i, version.end(), [] (char c) -> bool { return !isdigit(c); } );
std::string versionPart(i, nextIllegalChar);
i = std::find_if(nextIllegalChar, version.end(), isdigit);
int part = (boost::lexical_cast<int>(versionPart));
versionAsNumber = versionAsNumber * 100 + part;
nParts ++;
}
// don't forget to pad as systemVersion may have less parts (i.e. X.Y).
for (; nParts < 4; nParts++) {
versionAsNumber *= 100;
}
return versionAsNumber;
}
이거 드셔보세요
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
// do some work
}
float deviceOSVersion = [[[UIDevice currentDevice] systemVersion] floatValue];
float versionToBeCompared = 3.1.3; //(For Example in your case)
if(deviceOSVersion < versionToBeCompared)
//Do whatever you need to do. Device version is lesser than 3.1.3(in your case)
else
//Device version should be either equal to the version you specified or above
실제로 효과가 있는 신속한 예:
switch UIDevice.currentDevice().systemVersion.compare("8.0.0", options: NSStringCompareOptions.NumericSearch) {
case .OrderedSame, .OrderedDescending:
println("iOS >= 8.0")
case .OrderedAscending:
println("iOS < 8.0")
}
NS Process 사용 안 함8.0에서는 동작하지 않기 때문에 2016년까지는 거의 사용할 수 없습니다.
다음은 빠른 버전입니다.
struct iOSVersion {
static let SYS_VERSION_FLOAT = (UIDevice.currentDevice().systemVersion as NSString).floatValue
static let iOS7 = (Version.SYS_VERSION_FLOAT < 8.0 && Version.SYS_VERSION_FLOAT >= 7.0)
static let iOS8 = (Version.SYS_VERSION_FLOAT >= 8.0 && Version.SYS_VERSION_FLOAT < 9.0)
static let iOS9 = (Version.SYS_VERSION_FLOAT >= 9.0 && Version.SYS_VERSION_FLOAT < 10.0)
}
사용방법:
if iOSVersion.iOS8 {
//Do iOS8 code here
}
다음은 swift 버전의 yasirmtk 매크로입니다.몇몇 사람들에게 도움이 되길 바란다.
// MARK: System versionning
func SYSTEM_VERSION_EQUAL_TO(v: String) -> Bool {
return UIDevice.currentDevice().systemVersion.compare(v, options: NSStringCompareOptions.NumericSearch) == NSComparisonResult.OrderedSame
}
func SYSTEM_VERSION_GREATER_THAN(v: String) -> Bool {
return UIDevice.currentDevice().systemVersion.compare(v, options: NSStringCompareOptions.NumericSearch) == NSComparisonResult.OrderedDescending
}
func SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v: String) -> Bool {
return UIDevice.currentDevice().systemVersion.compare(v, options: NSStringCompareOptions.NumericSearch) != NSComparisonResult.OrderedAscending
}
func SYSTEM_VERSION_LESS_THAN(v: String) -> Bool {
return UIDevice.currentDevice().systemVersion.compare(v, options: NSStringCompareOptions.NumericSearch) == NSComparisonResult.OrderedAscending
}
func SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v: String) -> Bool {
return UIDevice.currentDevice().systemVersion.compare(v, options: NSStringCompareOptions.NumericSearch) != NSComparisonResult.OrderedDescending
}
let kIsIOS7: Bool = SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO("7")
let kIsIOS7_1: Bool = SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO("7.1")
let kIsIOS8: Bool = SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO("8")
let kIsIOS9: Bool = SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO("9")
언급URL : https://stackoverflow.com/questions/3339722/how-to-check-ios-version
'programing' 카테고리의 다른 글
| WPF에서의 스크롤바의 이니블화 (0) | 2023.04.18 |
|---|---|
| 하나의 워크북에서 복사하여 다른 워크북에 붙여넣기 (0) | 2023.04.18 |
| 목록 평탄화 (0) | 2023.04.18 |
| Xcode: 타깃과 스킴이란 쉬운 언어로 무엇입니까? (0) | 2023.04.18 |
| python에서 작성 날짜별로 정렬된 디렉토리 목록을 가져오려면 어떻게 해야 합니까? (0) | 2023.04.18 |