8

既然公众知道 App Store 提交的内容正在测试是否使用私有 API,我需要问一个问题......私有 API 到底是什么,以便我可以避免它们?

4

7 回答 7

18

私有 API 是 SDK 中未记录的 API。例如,一个框架类可能声明了一个不打算由外部开发人员使用的方法。不保证私有 API 的行为。您甚至无法确定该方法是否会在平台的未来更新中出现。它的声明可能在公开分发的 SDK 头文件中不可用。如果您坚持 SDK 文档中公开定义的内容,您会没事的。

于 2009-11-20T22:27:46.203 回答
6

您会发现很难偶然使用私有 API。它们没有记录在 SDK 文档中,也没有出现在 XCode 的代码完成建议中。

这最近成为新闻的原因是几个应用程序使用的框架的创建者使用了私有 API,所以当包含他的框架的开发人员更新他们的应用程序时,他们被拒绝了(即使那些开发人员没有使用私有 API,他们添加到应用程序中的框架)。

这是您可能意外使用私有 API 的唯一方法。

于 2009-11-20T22:34:05.617 回答
3

不仅仅是私有 API 会导致您的应用程序被拒绝。使用公共 API 的未记录成员可能会导致您的应用程序被拒绝。例如,three20 库(自修复以来)访问了一个类别中的 _phase 和 UITouch 的其他成员。

他们还可以通过 performSelector 检测对私有成员的调用,因为以下也标记了拒绝:

UIWindow* window = [UIApplication sharedApplication].keyWindow]
return !![window performSelector:@selector(firstResponder)];

更令人不安的是,如果您让您的应用程序在 3.1 和 3.0 下运行,并且在 3.0 运行时您不使用任何 3.1 的东西,您的应用程序仍然会被拒绝。一个例子可能是cameraOverlayViewof UIImagePickerController(见这里)。这有点令人费解。

于 2009-12-05T15:54:59.587 回答
1

通常是因为它们没有出现在 SDK 标头中。苹果的约定之一是使用下划线引导 ObjC 方法名称。

于 2009-11-20T22:28:58.687 回答
1

在提交应用程序之前使用的一个很棒的工具是 App Scanner。它会扫描您的 .app 文件以了解私有 API 的使用情况,并向您显示匹配的方法签名以及这些方法所在的类。

链接 --> http://www.chimpstudios.com/appscanner/

于 2010-10-10T18:09:50.943 回答
1

由于使用私有 API,我的应用程序被苹果拒绝。这是代码,

    Class UIKeyboardImpl = NSClassFromString(@"UIKeyboardImpl");

    id activeInstance = [UIKeyboardImpl performSelector:@selector(activeInstance)];

    [activeInstance performSelector:@selector(dismissKeyboard)];
于 2012-07-13T03:17:22.500 回答
0

被所谓的“使用私有API”拒绝并不难。尝试使用以下作为核心数据属性,它会被拒绝:

  • 颜色索引
  • 发生
  • ID

它显示了机器人如何扫描 API。

于 2009-11-21T02:59:16.937 回答