Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何检测&;避免在第三方库中使用私有API_Iphone_Iphone Privateapi - Fatal编程技术网

Iphone 如何检测&;避免在第三方库中使用私有API

Iphone 如何检测&;避免在第三方库中使用私有API,iphone,iphone-privateapi,Iphone,Iphone Privateapi,现在苹果正在运行某种静态分析来自动检查私有API的使用情况,许多人因为Three20库而被捕。我使用另一个第三方库(我自己从代码中编译),我想在提交给苹果之前自动审核它以供私人API使用,这样我就可以删除/重新编写这些部分 如果我在我的应用程序可执行文件上运行nm,我会得到一个符号列表,我会在其中看到我不使用的符号。例如,我看到_AudioServicesPlaySystemSound,如果我在XCode中搜索“AudioServicesPlaySystemSound”,我不会得到任何结果。是否

现在苹果正在运行某种静态分析来自动检查私有API的使用情况,许多人因为Three20库而被捕。我使用另一个第三方库(我自己从代码中编译),我想在提交给苹果之前自动审核它以供私人API使用,这样我就可以删除/重新编写这些部分

如果我在我的应用程序可执行文件上运行
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已经停止,没有发布。