How do you convert an iPhone OSStatus code to something useful? How do you convert an iPhone OSStatus code to something useful? ios ios

How do you convert an iPhone OSStatus code to something useful?


OSStatus is a signed integer value. You cannot convert or "cast" it to a string. You can convert it to a NSError like this:

NSError *error = [NSError errorWithDomain:NSOSStatusErrorDomain code:osStatus userInfo:nil];


No. Not completely.

Some OSStatus are four-character-codes, so you can use (extracted from iPhone SDK's sample code "CAXException.h")

static char *FormatError(char *str, OSStatus error){    // see if it appears to be a 4-char-code    *(UInt32 *)(str + 1) = CFSwapInt32HostToBig(error);    if (isprint(str[1]) && isprint(str[2]) && isprint(str[3]) && isprint(str[4])) {        str[0] = str[5] = '\'';        str[6] = '\0';    } else {        // no, format it as an integer        sprintf(str, "%d", (int)error);    }    return str;}

(See iOS/C: Convert "integer" into four character string for some more ways to convert fourcc into string, including Swift)

NSError's NSOSStatusErrorDomain is able to decode some OS errors. See @tomk's answer.

If you don't need to decode the number in program for the user, you may use the macerror script to manually find out the meaning, as mentioned in @lros's answer. The list of OSStatus supported can be found from its source code in /System/Library/Perl/Extras/5.18/Mac/Errors.pm.

There is also an online service http://osstatus.com/ collecting errors from all public frameworks. They are still not really complete e.g. the mapping to -12792 mentioned in the comment is missing. Probably it is a code from a private framework.


I recently ran across another approach: the macerror command. Print out the OSStatus value as a signed integer. Then in a terminal window (on your Mac, not your iDevice!) type for example macerror -50. It will respond with a brief description. Obviously this is only helpful for you, during development.