iOS7-8上面设备唯一标示

请问一下各位大神。 在不越狱的情况下(不需要提交到appstore),有可能获取到程序的UDID 、Mac 地址、序列号、IMEI等其中的某一个来唯一标识设备吗? 我尝试过一些方法,但都不能获取。Mac地址一获取就返回一个常量。
http://bbs.iosre.com/t/ios7-udid/296
http://bbs.iosre.com/t/ios-7-udid-3/45

有帖子说不越狱的情况下无法获取。 因为app的沙盒机制权限问题,所以无法获取。 那么如果是这样,有什么方法可以永久唯一标识一台iOS设备么?
其他诸如 uuid + 钥匙串 推送token 等都会有变的可能性,而我的需求是 完全不可变。

//序列号#import <dlfcn.h>
#import <mach/port.h>
#import <mach/kern_return.h>

@implementation UIDevice (serialNumber)

  • (NSString *) serialNumber
    {
    NSString *serialNumber = nil;

    void *IOKit = dlopen("/System/Library/Frameworks/IOKit.framework/IOKit", RTLD_NOW);
    if (IOKit)
    {
    mach_port_t *kIOMasterPortDefault = dlsym(IOKit, “kIOMasterPortDefault”);
    CFMutableDictionaryRef (*IOServiceMatching)(const char *name) = dlsym(IOKit, “IOServiceMatching”);
    mach_port_t (*IOServiceGetMatchingService)(mach_port_t masterPort, CFDictionaryRef matching) = dlsym(IOKit, “IOServiceGetMatchingService”);
    CFTypeRef (*IORegistryEntryCreateCFProperty)(mach_port_t entry, CFStringRef key, CFAllocatorRef allocator, uint32_t options) = dlsym(IOKit, “IORegistryEntryCreateCFProperty”);
    kern_return_t (*IOObjectRelease)(mach_port_t object) = dlsym(IOKit, “IOObjectRelease”);

      if (kIOMasterPortDefault && IOServiceGetMatchingService && IORegistryEntryCreateCFProperty && IOObjectRelease)
      {
          mach_port_t platformExpertDevice = IOServiceGetMatchingService(*kIOMasterPortDefault, IOServiceMatching("IOPlatformExpertDevice"));
          if (platformExpertDevice)
          {
              CFTypeRef platformSerialNumber = IORegistryEntryCreateCFProperty(platformExpertDevice, CFSTR("IOPlatformSerialNumber"), kCFAllocatorDefault, 0);
              if (CFGetTypeID(platformSerialNumber) == CFStringGetTypeID())    //iOS8  在这一行崩溃
              {
                  serialNumber = [NSString stringWithString:(__bridge NSString*)platformSerialNumber];
                  CFRelease(platformSerialNumber);
              }
              IOObjectRelease(platformExpertDevice);
          }
      }
      dlclose(IOKit);
    

    }

    return serialNumber;
    }

@end

是企业账号开发的App还是一般开发者账号?如果是前者,给签个entitlements还有可能实现;如果是后者,估计难度比较大了,我没见过实现了的

是用企业开发者账号。 我添加了entitlements后运行的时候会报图片上面的错

这个报错信息很明显了,看起来是entitlements文件的问题,google一下看看有没有解决方案

OPENUUID OPENIDFA 地球人都知道

这个问题我也google了很久,实在找不到解决方案,求版主指点明路

我没搞过这个,你搜搜Xcode报的那个错,应该可以找到线索

google出来都是app id没有设置正确的

获取设备序列号就行了啊,不用UDID,UUID什么的

ios8下面怎么获得?

楼主别想了,苹果禁止永久性识别设备

其实iphone的机器序列号是唯一的,而且无论越狱是否都可以读取.

设置->通用->关于本机->序列号

不越狱怎么读?也还是用私有API吧?不受沙盒的影响吗?

楼主您好,最近我开发中也有和你一样的需求。需要获取到设备的唯一UDID就是IOS5被封那个。
看了@snakeninny http://bbs.iosre.com/t/ios-7-udid-3/45 本以为能获取到。看评论后发现是需要越狱的。。
我和你一样。企业证书。要求不越狱的设备下获取udid。不知后面楼主找到好的解决办法没有。如果有希望能提供相应的文章供我了解下。
很早前在知乎上好像看到过。可以像设备的某个芯片发信息。。然后就怎么获取到了。
现在我了解到有应用试客 是做到了的。做积分墙的。

请问你获取到UDID了吗