Iphone 如何检测&;避免在第三方库中使用私有API
现在苹果正在运行某种静态分析来自动检查私有API的使用情况,许多人因为Three20库而被捕。我使用另一个第三方库(我自己从代码中编译),我想在提交给苹果之前自动审核它以供私人API使用,这样我就可以删除/重新编写这些部分 如果我在我的应用程序可执行文件上运行Iphone 如何检测&;避免在第三方库中使用私有API,iphone,iphone-privateapi,Iphone,Iphone Privateapi,现在苹果正在运行某种静态分析来自动检查私有API的使用情况,许多人因为Three20库而被捕。我使用另一个第三方库(我自己从代码中编译),我想在提交给苹果之前自动审核它以供私人API使用,这样我就可以删除/重新编写这些部分 如果我在我的应用程序可执行文件上运行nm,我会得到一个符号列表,我会在其中看到我不使用的符号。例如,我看到_AudioServicesPlaySystemSound,如果我在XCode中搜索“AudioServicesPlaySystemSound”,我不会得到任何结果。是否
nm
,我会得到一个符号列表,我会在其中看到我不使用的符号。例如,我看到_AudioServicesPlaySystemSound,如果我在XCode中搜索“AudioServicesPlaySystemSound”,我不会得到任何结果。是否有任何方法可以自动区分对私有API的调用,例如,我注意到苹果有一个习惯,即使用初始下划线命名它们
但是:如果我故意包含对私有API的调用,它不会显示在nm
的输出中,但是如果我在二进制文件上运行字符串
,它会显示出来。基于此,我的一个想法是将所有私有API调用的巨大列表编译成一个巨大的表,并在字符串输出中自动搜索它们。我还没做那件事
有没有人知道如何自动捕获这些内容,以便我只进行一次审查过程的技巧?您可以尝试在对象文件而不是链接的可执行文件上运行nm:
nm -g -j *.o | sort | uniq
对象应位于build/.build/*/.build/objects normal
子目录中
您看到了对AudioServicesPlaySystemSound
的引用,因为您调用的函数之一依次调用了AudioServicesPlaySystemSound
目标C呼叫通常不会出现在nm
转储中,您需要使用otool
:
otool -ov <object file>
otool-ov
使用此开发工具。它会扫描.app文件中的私有API方法。将来的版本还将检查私有API实例变量。它们反对Three20?这实际上是由为iPhone开发Facebook应用程序的开发人员编写的。如果你的应用程序因为Three20而被拒绝,Facebook应用程序应该太。。。呵呵。只是说;-)是的。。。我可以想象,下次Facebook提交更新时,如果他们不使用符合苹果政策的最新版本,他们将被拒绝。Project已经停止,没有发布。