如何找到调用UIDevice上uniqueIdentifier的文件?

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
2个回答

4

CLS是否指任何您可能添加的框架?从您发布的日志中看来,这似乎是最好的线索。

您可以尝试试错法。从最有可能的嫌疑人开始,比如分析或广告框架,取消链接并注释掉依赖代码,然后查看是否仍会触发断点。

根据您所涉及的库的数量,查找这些库的项目页面并检查它们的代码有多新以及您使用的代码版本是否最新也可能是有意义的。最好的情况是,他们已经更新了库并删除了UDID代码,您只需更新到最新版本即可。


是 Crashlytics 引起的问题!我猜这就是 CLS 的意思。谢谢! - ZappyCode

0

从跟踪信息来看,调用者可能正在尝试使用-[NSObject performSelector:]在调度块内部掩盖调用。但是,由于您知道某个库正在进行此调用,因此应该能够缩小范围并确定是哪个库。例如,您可以在所有链接的库上尝试此命令:

$ strings libFoo.a | grep uniqueIdentifier

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接