在IOS5之后,苹果为避免根据UDID获得用户的信息,而禁止使用uniqueIdentifier获得UDID,但是仍有些应用需要根据UDID区分设备

有一个系统的库IOKit.framework可以获得设备的唯一标识

    NSString *serialNumber = nil;

    NSString * path = [[NSBundle mainBundle]pathForResource:@"IOKit.framework" ofType:nil];

    const char * a =[path UTF8String];

//    void *IOKit = dlopen(a, RTLD_NOW);

    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("IOPlatformUUID"), kCFAllocatorDefault, );

                if (CFGetTypeID(platformSerialNumber) == CFStringGetTypeID())

                {

                    serialNumber = [NSString stringWithString:(__bridge NSString*)platformSerialNumber];

                    CFRelease(platformSerialNumber);

                }

                IOObjectRelease(platformExpertDevice);

            }

        }

        dlclose(IOKit);

    }

    return serialNumber;

但是这个方法只能获得模拟器上的UDID很坑爹啊

那还有另外的方法获得设备的信息,那就是走苹果的MDM

详情参考http://www.cnblogs.com/liyy2015/p/6030032.html

最新文章

  1. Entity Framework 6 Recipes 2nd Edition(9-3)译->找出Web API中发生了什么变化
  2. 你知道JavaScript中的结果值是什么吗?
  3. div垂直居中的几种方法
  4. SQL 查询所有表名、字段名、类型、长度、存储过程、视图
  5. Vijos P1459 车展 treap求任意区间中位数
  6. [vim] vim入门
  7. java在url传输前更改字符编码
  8. 设置TOMCAT的JVM虚拟机内存大小
  9. [复变函数]第10堂课 3.2 Cauchy 积分定理
  10. Selenium2Library系列 keywords 之 _SelectElementKeywords
  11. BZOJ 4311: 向量( 按时间分治 + 线段树 )
  12. HttpClient, HttpClientHandler, and WebRequestHandler介绍
  13. HDU 3001 Travelling:TSP(旅行商)【节点最多经过2次】
  14. redis服务问题解决办法
  15. 【转】详解在visual studio中使用git版本系统(图文)
  16. 生日蛋糕 POJ - 1190 搜索 数学
  17. vi/vim 命令速查手册
  18. Mysql-基础+安装指南
  19. js怎样得出数组中某个数据最大连续出现的次数
  20. wordpress | 网站访问速度优化方案(Avada)

热门文章

  1. Pramp mock interview (4th practice): Matrix Spiral Print
  2. Hyper-V上运行的Linux虚拟机验证是否安装了集成服务
  3. centos 7 安装mono 和 monodevelop
  4. 在Mac OS X上安装ASP.NET 5(译文)
  5. CSharpGL(9)解析OBJ文件并用CSharpGL渲染
  6. egret调用页面js的方法。
  7. exportfs 入门/ 错误
  8. Android开发学习之路-关于Exception
  9. 判断一个值是否为null或者undefined
  10. Vertica集群扩容实验过程记录