苹果如何在应用审核期间检测UDID访问?

6
显然,苹果已经开始拒绝使用[UIDevice uniqueIdentifier]的应用程序。我听说过在过去一周中使用它的应用程序被拒绝和批准的报告(有些能通过,有些不能)。但是,所有主要广告网络(为我的应用程序生成收入)都还没有推出不使用UDID的API。它们在我的应用程序中包含的所有API都使用它。它们都表示正在开发新的API,并将很快推出,但可能还需要几个月。
对我来说,苹果通过应用审核流程执行此策略似乎非常奇怪,而不是通过新版本的操作系统,该操作系统简单地不允许它(人们有时间在测试期间针对其进行编程)。
话虽如此,我的问题是苹果如何精确检测您在应用审查期间是否访问了UDID?他们是否以某种方式扫描包以查看其中是否存在调用,还是在测试应用程序时监视实际进行的系统调用?我在考虑如果用户想付费,可以不访问广告API,或者给他们选择支持广告并因此提供他们的UDID的选择。但是,我需要了解苹果是基于将[UIDevice uniqueIdentifier]编译到代码中而拒绝,还是基于在应用程序审查测试期间调用[UIDevice uniqueIdentifier]而检测到。
请不要用不应使用[UIDevice uniqueIdentifier]的原因或如何创建自己的UDIDs等回答此问题。我的问题是我需要的第三方库目前没有替代方案。问题是:苹果如何在应用审核期间检测UDID访问?

1
但是这样一来,苹果就不能使用它了。;) 相比之下,通过操作系统的新版本来禁止它并不是一个好的解决方案。 - Joel
如果在不强制开发人员先更新应用程序的情况下删除API,将会破坏当前正在客户设备上运行的现有批准和购买的应用程序,可能导致客户对操作系统升级非常不满意。 - hotpaw2
2个回答

7
他们已经被知晓使用静态分析,基本上扫描您的编译二进制文件以查找对特定方法的调用的编译版本。他们还使用此方法来检测对私有API的调用。通过以创造性方式从字符串构造选择器可能会欺骗静态分析。但这绝不是诚实或推荐的方法。
但更健壮的方法可能是通过HTTP代理,通过使用您的应用程序,他们可以监视任何发送出去的UDID的HTTP流量。这可能可以通过哈希或双向加密来解决。这也不是诚实或推荐的方法。
而当iOS6在今年夏天推出时,该方法很可能会完全删除,使得所有使用它的混淆都变得无意义。

第三方广告网络API已经预编译,因此无法在源代码中对[UIDevice uniqueIdentifier]的调用进行“混淆”。我只是考虑给用户提供选项,而不是在启动时自动连接API。但是非常感谢你的回答。谢谢。 - user1301928

2

据报道,苹果公司对应用程序中使用的所有方法签名都使用静态扫描(有时会因为开发人员自定义类的消息签名与苹果的非公共API之一相同而拒绝应用程序)。

此外,他们还曾经被报道在特殊硬件或未发布的操作系统版本上审查应用程序,这些版本可能包括某种形式的仪器化,例如网络流量。


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