2009-11-20 96 views
6

既然公众知道App Store提交的内容正在使用私有API进行测试,那么我需要提出这个问题......究竟是一个私有API,以便我可以避免它们?苹果和私有API

回答

14

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

+0

好的很酷。感谢所有的快速反应! – RyJ 2009-11-20 22:54:42

+0

因此,不是在私有API中调用方法,而是创建自己的方法来做同样的事情,这有什么不同?我是否正确地说过,这不是调用某些API方法的问题,而是你试图做一些他们不希望你做的事情? – 2011-08-06 08:22:01

+0

@Nick不一定。对于获得Apple许可的应用程序,您应该拥有以下两项内容:1.只做自己没有限制的事情,不管方法如何。 2.通过有效的机制来完成。一般情况下可以做些事情,但是你不能直接调用私有API来完成它们。该仪式是一个私人API可能在未来的版本中改变,并打破你的应用程序,而编写一个公共API的自定义方法不应该与iOS升级。 – 2011-08-06 10:29:05

1

通常由于缺少SDK头文件。苹果的惯例之一是用下划线引导ObjC方法名称。

5

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

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

这就是您可能偶然使用私有API的唯一方法。

+0

哪个框架是? – 2012-01-09 19:07:51

+1

这是在three20框架,但这个问题已经弥补了很长时间。这个答案已经两年多了。 – mmc 2012-01-09 22:43:48

0

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

  • colorIndex
  • 发生
  • ID

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

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的东西,你的应用程序仍然可以被拒绝。一个例子可能是的UIImagePickerController(见here)。这有点令人费解。

1

在您提交您的应用程序之前使用的一个很棒的工具是App Scanner。它会扫描你的.app文件的私有API的使用,并告诉您什么方法签名匹配起来,这些方法是什么类

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

+0

看起来像这个网站要么关闭。任何人都知道任何其他执行类似功能的应用程序? – rvijay007 2013-04-15 23:13:58

1

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

Class UIKeyboardImpl = NSClassFromString(@"UIKeyboardImpl"); 

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

    [activeInstance performSelector:@selector(dismissKeyboard)];