3

我使用了这个问题的答案如何检测是否有任何外部库正在调用 [UIDevice currentDevice] uniqueIdentifier]?

获取调用 uniqueIdentifier 的日志。但是我无法从日志中提取很多有用的信息。如何确定调用 uniqueIdentifier 的类或库。

* thread #7: tid = 0x2603, 0x01850690 UIKit`-[UIDevice uniqueIdentifier], stop reason = breakpoint 6.1
frame #0: 0x01850690 UIKit`-[UIDevice uniqueIdentifier]
frame #1: 0x02743663 libobjc.A.dylib`-[NSObject performSelector:] + 62
frame #2: 0x001038ff SmackTalk`CLSHostDataInit + 843
frame #3: 0x028b4014 libdispatch.dylib`_dispatch_client_callout + 14
frame #4: 0x028a52e8 libdispatch.dylib`_dispatch_root_queue_drain + 335
frame #5: 0x028a5450 libdispatch.dylib`_dispatch_worker_thread2 + 39
frame #6: 0x9a597e72 libsystem_c.dylib`_pthread_wqthread + 441
4

2 回答 2

4

CLS 是否引用了您可能添加的任何框架?似乎是您发布的日志中最好的线索。

您可以尝试反复试验。从最有可能的问题开始,例如分析或广告框架,取消链接并注释掉相关代码,看看该断点是否仍然被命中。

根据您正在谈论的库的数量,查找这些库的项目页面并检查其代码的最新程度以及您的代码版本的最新程度也可能有意义。最好的情况是他们已经更新了他们的库并提取了 UDID 代码,而您所要做的就是更新到最新版本。

于 2013-05-15T06:45:31.883 回答
0

从跟踪来看,调用者可能试图通过使用来屏蔽调用-[NSObject performSelector:],并在调度块中这样做。但是,由于您知道某个库正在进行此调用,因此您应该能够缩小哪个库的范围。例如,您可以在所有链接库上尝试此命令:

$ strings libFoo.a | grep uniqueIdentifier

这应该有助于确定哪个库可能调用了有问题的方法。

于 2013-05-15T13:27:44.457 回答