6

I want to get the current os version of user device for some analysis in backend. Im trying to get it as below,

[[[UIDevice currentDevice] systemVersion] floatValue]; **//not returning the minor version number**

When I test this by running in my iPhone which is having iOS 8.0.2, this api returns me 8.000000 as the result but I need the exact iOS version which is 8.0.2

Any help in fixing this problem is appreciated in advance.

2
  • 4
    Note that "8.0.2" is not a numeric value, it is a string. Commented Mar 30, 2015 at 13:28
  • 1
    Possible duplicate of How to check iOS version? Commented Aug 26, 2016 at 12:11

5 Answers 5

14

In iOS 8 and above, you can use:

[[NSProcessInfo processInfo] operatingSystemVersion]

If you want to check the availablity of particular API, then there is a better way than checking OS versions, as explained here.

Sign up to request clarification or add additional context in comments.

Comments

7

you can get it with this, in NSString format:

[UIDevice currentDevice].systemVersion

NEW EDIT

PS

you changed your question... now my answer has no more sense... next time add new lines with an evident edit, to let everyone understand the thread of the question/answers, please

1 Comment

UP for the explanation :)
2

Objective C

// define macro
#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)

then use like that:

if (SYSTEM_VERSION_LESS_THAN(@"10.0")){
   //your code here 
}

Comments

1
NSString *osVersion = [[UIDevice currentDevice] systemVersion];

1 Comment

Thank you for this code snippet, which may provide some immediate help. A proper explanation would greatly improve its educational value by showing why this is a good solution to the problem, and would make it more useful to future readers with similar, but not identical, questions. Please edit your answer to add explanation, and give an indication of what limitations and assumptions apply.
0

maybe not the more elegant solution ever but it definitely does the job, so you can try something like that in ObjC:

- (NumVersion)systemVersion {
    NSArray *_separated = [[[UIDevice currentDevice] systemVersion] componentsSeparatedByString:@"."];
    NumVersion _version = { 0, 0, 0, 0 };
    if (_separated.count > 3) _version.stage = [[_separated objectAtIndex:3] integerValue];
    if (_separated.count > 2) _version.nonRelRev = [[_separated objectAtIndex:2] integerValue];
    if (_separated.count > 1) _version.minorAndBugRev = [[_separated objectAtIndex:1] integerValue];
    if (_separated.count > 0) _version.majorRev = [[_separated objectAtIndex:0] integerValue];
    return _version;
}

then:

NumVersion version = [self systemVersion];
NSLog(@"%d, %d, %d, %d", version.majorRev, version.minorAndBugRev, version.nonRelRev, version.stage);

will print (in my case at the very moment):

11, 0, 2, 0

what you'd be able convert to a more desirable format for your analytics.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.