既然Apple正在运行某种静态分析来自动检查私有API的使用,那么很多人都因为Three20库被抓住了。我使用另一个第三方库(我自己从代码编译),我想在提交给Apple之前自动审核它以供私有API使用,所以我可以删除/重写那些部分。
如果我在我的应用程序可执行文件上运行nm
,我会得到一个符号列表,我看到那些我不使用的符号。例如,我看到_AudioServicesPlaySystemSound,如果我在XCode中搜索“AudioServicesPlaySystemSound”,我得不到任何结果。有没有办法自动区分对私有API的调用,例如我注意到Apple习惯用初始下划线命名它们。
但是:如果我故意包含对私有API的调用,它不会显示在nm
的输出中,但如果我在二进制文件上运行strings
,它会显示出来。基于此,我的一个想法是将所有私有API调用的大量列表编译成一个巨大的表,并在字符串输出中自动搜索它们。我还没有那样做。
有没有人有关于如何自动捕获这些内容的任何提示,所以我只会进行一次审核过程?
答案 0 :(得分:6)
您可以尝试在目标文件上运行nm而不是链接的可执行文件:
nm -g -j *.o | sort | uniq
对象应位于build/<app>.build/*/<app>.build/Objects-normal
子目录中。
您看到AudioServicesPlaySystemSound
的引用,因为您拨打的其中一个功能会依次调用AudioServicesPlaySystemSound
。
目标C调用通常不会显示在nm
转储中,您需要使用otool
:
otool -ov <object file>
答案 1 :(得分:3)
使用此开发工具App Scanner。它会扫描您的.app文件以获取私有API方法。未来版本还将检查私有API实例变量。