7

我还没有找到使用 iPhone 库中的私有 API 所需步骤的完整列表。

特别是,我想知道如何获取头文件,如果它们甚至是必需的,如何让它编译(当我简单地添加头文件时,它抱怨没有定义函数),以及可以使用哪些资源用于了解私有 API(例如从其他用户的经验,例如http://iphonedevwiki.net/有一些)。

我在其他地方读过人们推荐使用class-dump来获取标题。有没有替代方法?我注意到有一些iPhone 私有 SDK 的存储库,您会推荐哪些最新资源?

之前 关于私有 API 文档的大部分问题都链接到Erica Sadun 的网站,该网站似乎不再有文档(左侧的所有链接都被划掉了)。

请保存有关不使用私有 API 的评论...我知道最大的风险:

  • 应用程序将被 Apple 拒绝。
  • 应用程序将在操作系统的未来更新中中断。

我说的是合法用途,例如:

  • 私人应用程序使用(例如,用于单元测试,或四处寻找可能的结果)
4

1 回答 1

5

Objective-C 在编译后的二进制文件中有足够的信息来几乎完全重建头文件。唯一缺少的是参数名称,通常可以从类型或方法原型以及一些结构和枚举定义中近似得出。这就是为什么像 class-dump 这样的程序是获取标头的最佳方式。它们是全面的,包括每个方法,无论它是否在真实的标题中,都是最新的,不需要分发。获取标头的另一种方法是查看同一框架的公共版本,例如 WebKit 仅在 iPhone 上是私有的,并且有很好的文档记录。

如果你对 Objective-C 以外的东西感兴趣,你几乎必须用老式的方式来做,通过反汇编来猜测函数参数。一旦你得到一些符号,搜索它们,也许你会找到其他人发布的标题。otool 是一个很好的起点。

如果您包含头文件,无论是用于 Objective-C 还是 C,您还必须包含头文件为其声明方法的框架或库,就像任何其他头文件一样。大多数 Objective-C 的东西都在一个 PrivateFrameworks 文件夹中,紧挨着常规的 Frameworks 文件夹。您可以在 usr/lib 文件夹中查找库。

请注意,模拟器和设备之间存在很多差异,因此请确保从真实设备构建标头。还有一些方法您将无权作为沙盒应用程序运行。

于 2010-05-15T02:40:39.183 回答