码迷,mamicode.com
首页 > 其他好文 > 详细

OpenUDID冲突的问题

时间:2016-05-12 14:11:41      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:

苹果在iOS6中禁用了[UIDevice uniqueIdentifier],在iOS7中又把mac地址的获取给堵上了,所以大家想到了使用OpenUDID这个解决方案,毕竟开源,使用方便。


我们的一个SDK中使用了OpenUDID标识设备,使用起来好像一切都很正常,但某一天,产品突然抱怨说,我们的SDK出现crash了:

技术分享


   这是主线程的崩溃堆栈,从上面的信息来看,是在粘贴版操作出现错误。所以我们首先查找我们的代码,没发现异常,因为这是使用的OpenUDID的源代码;然后又去OpenUDID的官网查看,是否有用户上报这类bug或者解决方案,没有有用的信息;继续去各大论坛搜索,也是一无所获。最后再去把Apple的文档看一遍,查看[UIPasteboard pasteboardWithName]的用法,即使参数传递为nil,也不会出现crash的情况。


技术分享

从它的说明上看,在使用的时候也没有什么需要注意的地方。后来实在没有找到crash产生的原因,突然想到以前做C/C++开发时,经常遇到的多线程同步的问题,这个crash是不是也是这个原因呢?因为从产品的反馈来看,出现crash的概率很低,几百万出现一两个。所以让产品把其他线程的堆栈也发给我们,如下:

技术分享

果然,功夫不负有心人,真的发现还有一个线程也在使用OpenUDID的功能,现在基本断定就是这个问题了,我的猜测是,既然[UIPasteboard pasteboardWithName]的参数传递不会出现问题,那么问题就出现里面的实现代码,可能的原因是它的实现是线程不安全的,这只是猜测,无从考证,如果真是这样的话,Apple的文档上应该做一些多线程同步的提示。


所以,果断放弃OpenUDID的使用,直接使用Keychain方式,安全还持久。

OpenUDID冲突的问题

标签:

原文地址:http://blog.csdn.net/skylin19840101/article/details/51361311

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!