如何检测第三方SDK使用UDID?

4

我们使用许多广告提供商的第三方SDK,由于自5月1日起苹果将不允许访问UDID,因此我想检查哪些SDK使用了UDID功能。是否有简单的方法或工具可以做到这一点?

4个回答

8
一个简单且天真的方法是在库文件上运行 stringsgrep 命令。即:
strings libSomething.a | grep uniqueIdentifier

如果你看到任何打印出 uniqueIdentifier 的代码行,那么有可能会调用它。这种方法并非百分之百可靠。但我期望苹果在他们的自动验证中进行类似的检查。


我已经尝试过这种方法并发现一些SDK(最新版本)仍然包含“uniqueIdentifier”方法,我不确定它是来自[[UIDevice currentDevice] uniqueIdentifier]还是他们自己的方法。 - ocean
2
@ocean 你可以尝试为 uniqueIdentifier 添加一个断点,看看会发生什么。 - epatel
@epatel 如果你的代码/库中存在uniqueIdentifier,即使你从未调用它,你也会被拒绝。因此,如果一个库/框架不调用它,但在代码中使用uniqueIdentifier,那么符号断点也无法帮助你! - Fab1n
@Fab1n 这只是一个建议,也许可以显示是否有另一个“Class”在调用它...无论如何,SDK开发人员应该尽快更新。上周我必须提交并进行了这个hack https://dev59.com/6nHYa4cB1Zd3GeqPQtpY#16491455 以通过自动检查。现在正在审核中... - epatel
@epatel 疯狂的马!!! :-) 我只是想要提醒大家,运行时检查并不能保证你不会被拒绝。strings 目前是最好的解决方案,可以帮助你找出哪个框架/库导致了拒绝,这样你就不必更新所有的库,因为那可能需要很长时间来适应这些库的新 api。 - Fab1n

1
您可以为“-[UIDevice uniqueIdentifier]”设置一个符号断点。

0
NSString *uuid = nil;
CFUUIDRef theUUID = CFUUIDCreate(kCFAllocatorDefault);
if (theUUID) {
  uuid = NSMakeCollectable(CFUUIDCreateString(kCFAllocatorDefault, theUUID));
  [uuid autorelease];
 CFRelease(theUUID);
}

试一下这个


0

你为什么不试试secureudid(secureudid.org)呢?


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