Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>I would also suggest changing over from <code>uniqueIdentifier</code> to <a href="https://github.com/gekitz/UIDevice-with-UniqueIdentifier-for-iOS-5" rel="nofollow">this open source library</a> (2 simple categories really) that utilize the device’s MAC Address along with the App Bundle Identifier to generate a unique ID in your applications that can be used as a UDID replacement.</p> <p>Keep in mind that unlike the UDID this number will be different for every app.</p> <p>You simply need to import the included <code>NSString</code> and <code>UIDevice</code> categories and call <code>[[UIDevice currentDevice] uniqueDeviceIdentifier]</code> like so:</p> <pre><code>#import "UIDevice+IdentifierAddition.h" #import "NSString+MD5Addition.h" NSString *iosFiveUDID = [[UIDevice currentDevice] uniqueDeviceIdentifier] </code></pre> <p>You can find it on Github here:</p> <p><a href="https://github.com/gekitz/UIDevice-with-UniqueIdentifier-for-iOS-5" rel="nofollow">UIDevice with UniqueIdentifier for iOS 5</a></p> <hr> <p>Here are the categories (just the .m files - check the github project for the headers):</p> <blockquote> <p>UIDevice+IdentifierAddition.m</p> </blockquote> <pre><code>#import "UIDevice+IdentifierAddition.h" #import "NSString+MD5Addition.h" #include &lt;sys/socket.h&gt; // Per msqr #include &lt;sys/sysctl.h&gt; #include &lt;net/if.h&gt; #include &lt;net/if_dl.h&gt; @interface UIDevice(Private) - (NSString *) macaddress; @end @implementation UIDevice (IdentifierAddition) //////////////////////////////////////////////////////////////////////////////// #pragma mark - #pragma mark Private Methods // Return the local MAC addy // Courtesy of FreeBSD hackers email list // Accidentally munged during previous update. Fixed thanks to erica sadun &amp; mlamb. - (NSString *) macaddress{          int mib[6];     size_t len;     char *buf;     unsigned char *ptr;     struct if_msghdr *ifm;     struct sockaddr_dl *sdl;          mib[0] = CTL_NET;     mib[1] = AF_ROUTE;     mib[2] = 0;     mib[3] = AF_LINK;     mib[4] = NET_RT_IFLIST;          if ((mib[5] = if_nametoindex("en0")) == 0) {         printf("Error: if_nametoindex error\n");         return NULL;     }          if (sysctl(mib, 6, NULL, &amp;len, NULL, 0) &lt; 0) {         printf("Error: sysctl, take 1\n");         return NULL;     }          if ((buf = malloc(len)) == NULL) {         printf("Could not allocate memory. error!\n");         return NULL;     }          if (sysctl(mib, 6, buf, &amp;len, NULL, 0) &lt; 0) {         printf("Error: sysctl, take 2");         return NULL;     }          ifm = (struct if_msghdr *)buf;     sdl = (struct sockaddr_dl *)(ifm + 1);     ptr = (unsigned char *)LLADDR(sdl);     NSString *outstring = [NSString stringWithFormat:@"%02X:%02X:%02X:%02X:%02X:%02X",                            *ptr, *(ptr+1), *(ptr+2), *(ptr+3), *(ptr+4), *(ptr+5)];     free(buf);          return outstring; } //////////////////////////////////////////////////////////////////////////////// #pragma mark - #pragma mark Public Methods - (NSString *) uniqueDeviceIdentifier{     NSString *macaddress = [[UIDevice currentDevice] macaddress];     NSString *bundleIdentifier = [[NSBundle mainBundle] bundleIdentifier];       NSString *stringToHash = [NSString stringWithFormat:@"%@%@",macaddress,bundleIdentifier];     NSString *uniqueIdentifier = [stringToHash stringFromMD5];       return uniqueIdentifier; } - (NSString *) uniqueGlobalDeviceIdentifier{     NSString *macaddress = [[UIDevice currentDevice] macaddress];     NSString *uniqueIdentifier = [macaddress stringFromMD5];         return uniqueIdentifier; } @end </code></pre> <blockquote> <p>NSString+MD5Addition.m:</p> </blockquote> <pre><code>#import "NSString+MD5Addition.h" #import &lt;CommonCrypto/CommonDigest.h&gt; @implementation NSString(MD5Addition) - (NSString *) stringFromMD5{          if(self == nil || [self length] == 0)         return nil;          const char *value = [self UTF8String];          unsigned char outputBuffer[CC_MD5_DIGEST_LENGTH];     CC_MD5(value, strlen(value), outputBuffer);          NSMutableString *outputString = [[NSMutableString alloc] initWithCapacity:CC_MD5_DIGEST_LENGTH * 2];     for(NSInteger count = 0; count &lt; CC_MD5_DIGEST_LENGTH; count++){         [outputString appendFormat:@"%02x",outputBuffer[count]];     }     return [outputString autorelease]; } @end </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload