2009-12-08 97 views
9

现在,Apple正在运行某种静态分析来自动检查私有API的使用情况,由于Three20库的存在,许多人已被捕获。我使用另一个第三方库(我从代码编译我自己),我想在提交给Apple之前自动对它进行审核以供私有API使用,以便我可以删除/重写这些部分。如何检测和避免在第三方库中使用私有API

如果我在我的应用程序可执行文件上运行nm,我得到一个符号列表,我看到那里没有使用的符号。例如,我看到_AudioServicesPlaySystemSound,并且如果我在XCode中搜索“AudioServicesPlaySystemSound”,则不会得到任何结果。有没有什么办法可以自动区分对私有API的调用,例如我注意到Apple有习惯用初始下划线对它们进行命名。

但是:如果我故意将一个调用包含到私有API中,它不会显示在nm的输出中,但是如果我在二进制文件上运行strings,它会显示出来。基于此,我的一个想法是将所有私有API调用的庞大列表编译成一个巨大的表格,并自动在字符串输出中搜索它们。我还没有这样做。

有没有人有关于如何自动捕捉这些东西的任何提示,所以我只通过审查过程一次?

+0

他们反对Three20?这实际上是由为iPhone创建Facebook应用程序的开发人员编写的。如果您的应用因Three20而被拒绝,Facebook应用应该也是如此...... heh。只是说;-) – 2009-12-08 01:04:49

+0

是的... http://groups.google.com/group/three20/browse_thread/thread/c442af6e39a918b0/6d5046771539d139 – 2009-12-08 02:25:35

+0

我想象下一次Facebook提交更新时,他们将被拒绝如果他们不使用符合Apple政策的最新版本。 – bpapa 2009-12-08 04:26:56

回答

4

你可以尝试在目标文件而不是链接的可执行文件运行处:

nm -g -j *.o | sort | uniq 

的对象应该是在build/<app>.build/*/<app>.build/Objects-normal子目录。

您看到对AudioServicesPlaySystemSound的引用,因为您确实调用的某个功能依次调用AudioServicesPlaySystemSound

Objective C的通话一般不会在nm转储显示出来,你就需要使用otool为:

otool -ov <object file> 
3

使用该工具开发,App Scanner。它会扫描您的.app文件以获取私有API方法。未来版本还将检查私有API实例变量。

+1

该链接被破坏。试试这个:https://github.com/ChimpStudios/App-Scanner – chown 2012-10-31 20:12:46

+0

是APP扫描仪真的有效吗? 确切的说是 – Kiarash 2013-05-06 06:48:14

+0

项目已经死了,没有发布。 – 2017-03-28 01:24:51

相关问题