见苹果文档,从iOS 5.0开始,UIDevice中uniqueIdentifier属性不再有效:
Deprecated in iOS 5.0
uniqueIdentifier
Do not use the uniqueIdentifier property. To create a unique identifierspecific to your app, you can call the CFUUIDCreate function to create a UUID,and write it to the defaults database using the NSUserDefaults class.
对于许多和设备UDID有关联的应用(尤其是企业应用),这真是一场灾难。然而面对苹果如此强势的做法,我们别无选择。只能如苹果所说的,用CFUUIDCreate函数替代uniqueIdentifier,然后把它保存到程序的defaults数据库中。
我不知道有多少人开始着手更新老的uniqueIdentifier代码,但我在github发现了一个第3方开源库:UIDevice-with-UniqueIdentifier-for-iOS-5,它为我们解决了许多麻烦:
https://github.com/gekitz/UIDevice-with-UniqueIdentifier-for-iOS-5
它实际上包括了2个Category:
NSString+MD5Addition 和 UIDevice+IdentifierAddition
直接将4个.m文件和.h文件拷贝到项目中,然后直接import即可。
根据readme文件所述,有两种Identifier,分别用[[UIDevice currentDevice]uniqueDeviceIdentifier] 和 [[UIDevice currentDevice]uniqueGlobalDeviceIdentifier]来生成。
前者在同一app中唯一,后者在不同的app中仍然唯一。
对于前者,它使用“mac地址+bundleIdentifier”方案生成MD5值作为Identifier:
- (NSString *) uniqueDeviceIdentifier{
NSString *macaddress = [[UIDevice currentDevice] macaddress];
NSString *bundleIdentifier = [[NSBundle mainBundle]bundleIdentifier];
NSString *stringToHash = [NSStringstringWithFormat:@"%@%@",macaddress,bundleIdentifier];
NSString *uniqueIdentifier = [stringToHash stringFromMD5];
return uniqueIdentifier;
}
后者则使用“mac地址”生成的MD5值作为Identifier(因为Mac地址本身就是一个GUID):
- (NSString *) uniqueGlobalDeviceIdentifier{
NSString *macaddress = [[UIDevice currentDevice] macaddress];
NSString *uniqueIdentifier = [macaddress stringFromMD5];
return uniqueIdentifier;
}
如果你想和iOS 4.0保持兼容,那么可以这样写:
// IOS 5.0:uniqueIdentifier is deprecated
#if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_5_0
return [[UIDevicecurrentDevice]uniqueDeviceIdentifier];
#endif
return [[UIDevicecurrentDevice] uniqueIdentifier];
分享到:
相关推荐
安装pip install Deprecated用法要使用此功能,请使用@deprecated装饰器装饰不推荐使用的函数: from deprecated import deprecated@ deprecateddef some_old_function ( x , y ): return x + y 您还可以修饰一个类...
@deprecated Twitterist.org-后端 这是应用程序的后端(API)部分。 我提供了一个JSON API来加载训练集和运行预测。 用法 从git中检出存储库,并使用激活器运行该应用程序: ./activator clean run 应用程序中有一...
ios7.0后ios支付成功返回的票据Receipt的获取方式有了新的方式, 原来的SKPaymentTransaction中的transactionReceipt属性获取票据的方式已经过期,虽然还能使用,但是苹果官方建议使用新的 新版的获取Receipt的方式...
TypeScript定义管理器。 弃用通知:关于TypeScript@2.0 对于typings install dt~<package> --global用户, typings install dt~<package> --global并接收错误。 从TypeScript 2.0开始,用户可以使用npm install @...
带有过渡的基于画布的 UI 框架 这是一个实验项目。 MVC 没有帮助解决视图和动画之间的差距。 Quamolit 正在尝试缩小这一差距的想法。 用法 成分 Quamolit = require ' quamolit ' cardComponent = Quamolit ....
[Deprecated]推荐使用RTPermissionAndroid6.0 运行时权限申请工具,Android Marshmallow runtime permission utilsRTPermission想了解该项目可参考下面的博客:前言Android6.0发布后带来的运行时权限机制,使得...
= 7) 或 UIAlertViewController (iOS >= 8) 的 iOS 的简单 UIAlert Objective-C 类。 ##一些实现信息 由于 ARC 和UIAlertView内部操作块的使用,ARC 在调用show后删除了创建的消息。 为了防止删除它,使用了私有...
Deprecated, move toLEHome_androidLEHome智能家居android客户端
deprecated -- use
appium 最新版 官网下载太慢。
[DEPRECATED] 各大三方推送基本都已支持集成相关厂商的推送,请查阅相关三方推送文档更方便的将各个rom厂商自己的推送服务进行集成,并统一管理,使用前还是需要熟悉各个平台的相关文档请检查各个推送平台官网SDK版本,...
HaidoraCommonWrapperSwift 常用代码的封装。 ##如何使用 ### HDAlertViewManager(再也不用XXXAlertView) Objective-C + (void)alertWithMessage:(NSString *)message; + (void)alertWithTitle:(NSString *)...
ProgressDialogDemo 等待提示框
#米奇零点 iOS 客户端南京某学生团队做的线上线下类型的超市客户端。#注意该项目中大部分库为我自己写的,打包为YFFramework,不久后会开源。未经授权的任何商业使用,均追究责任。
[DEPRECATED] MultiTypeBindings DataBinding库对RecyclerView列表的一种实现方式。 这里提供了gradle添加依赖的方式以方便快速开发,但个人依然建议您fork源码,并进行个性化配置和修改,因为: 这里仅仅是提供了...
自述文件 2014年6月14日星期六00:07:04 致谢 开源项目提供CSS样式。 开源协议(GPLv3) icebox - 一个静态博客生成器 ...This program is free software: you can redistribute it and/or modify ...
主要介绍了iOS中UIButton的三大UIEdgeInsets属性用法,分别讲解了contentEdgeInsets、imageEdgeInsets和titleEdgeInsets三个属性在创建UIButton时对样式的控制,需要的朋友可以参考下
2014-12-05 update: 有一个更好的typecho的导出插件,生成xml文件,直接导入wordpress。地址: typecho 2 wordpress ...注意:使用前备份好自己的数据,建议在本地搭建环境进行转换 typecho 0.8 & Wordpress 3.2.1 测试...
generator-athena JDC构建项目生成工具,生成相应目录和代码,同时提供Gulp配置对项目进行编译 安装 基于node,请确保已具备较新的node环境 需要全局安装yeoman [sudo] npm install -g yo 然后安装本脚手架 ...
百度地图开发java源码 自制Android校园APP涉及的内容: ...2.个人信息查询-->...3.绩点查询(成绩查询+绩点换算) 4.电话查询 7.设置界面(暂时还没有做) 首先呢?Android校园APP网上很多,但都是比较老旧的代码或者涉及个人...