iphone - Apple 怎么知道你在使用私有(private) API?

我向 Apple 提交了一个没有任何源代码的二进制文件。

除了手动检查源代码之外,Apple 如何知道您使用了什么以及您调用了哪些 API?

最佳答案

我知道有 3 种方法。这些只是一些猜测,因为我不在 Apple 审核团队工作。

1。 otool -L

这将列出该应用已链接到的所有库。显然你不应该使用的东西,比如 IOKit 和 WebKit 可以被它检测到。

2。 nm -u

这将列出所有链接的符号。这可以检测到

  • 未记录的 C 函数,例如 _UIImageWithName;
  • UIProgressHUD 等 Objective-C 类
  • UITouch._phase 等 Ivar(这可能是导致 rejection of Three20-based apps 过去几个月的原因。)

3。列出 Objective-C 选择器,或 strings

Objective-C 选择器存储在二进制文件的一个特殊区域中,因此 Apple 可以从那里提取内容,并检查您是否使用了一些未记录的 Objective-C 方法,例如 -[UIDevice setOrientation :].

由于选择器独立于您发送消息的类,即使您的自定义类定义了与 UIDevice 无关的 -setOrientation:,也有可能被拒绝。


您可以使用 Erica Sadun's APIKit检测由于私有(private) API(错误警报)导致的潜在拒绝。


(如果您真的真的很想解决这些检查,您可以使用运行时功能,例如

  • dlopen,dlsym
  • objc_getClass、sel_registerName、objc_msgSend
  • -valueForKey:; object_getInstanceVariable、object_getIvar 等

获取那些私有(private)库、类、方法和 ivars。 )

https://stackoverflow.com/questions/2842357/

相关文章:

ios - 使用自动布局在 UICollectionView 中指定单元格的一维

ios - 从文档目录中删除指定文件

ios - Objective-C/Cocoa 中 Java 的 Thread.sleep() 等价

objective-c - 最佳实践 - 您自己的项目/应用程序的 NSError 域和代码

ios - 我如何通过 Foundation 获取星期几?

iphone - Objective C中变量位置的声明/定义?

c++ - 从 C++ 成员函数调用 Objective-C 方法?

objective-c - 何时使用 -retainCount?

iphone - 使用 Core Data 实现枚举的最佳方法

ios - Xcode MyProjectName-Bridging-Header.h 不存在