现在已经公开了App Store提交内容正在测试是否使用私有API,我需要问一个问题...什么是私有API,以便我可以避免使用它们?
现在已经公开了App Store提交内容正在测试是否使用私有API,我需要问一个问题...什么是私有API,以便我可以避免使用它们?
私有API是指未记录在SDK文档中的API。例如,一个框架类可能声明一个不打算供外部开发人员使用的方法。私有API的行为不能保证。甚至不能确定该方法是否存在于平台未来的更新中。它的声明可能不在公开分发的SDK头文件中。如果你遵循SDK文档中公开定义的内容,就不会有问题。
如果没有特意查找,你很难意外地使用私有API。它们在SDK文档中没有记录,并且不会出现在XCode的代码自动补全建议中。
最近这成为新闻的原因是一些应用程序所使用的框架创建者使用了私有API,因此当包含该框架的开发人员更新他们的应用时,它们被拒绝了(即使那些开发人员没有使用私有API,但他们添加到应用程序中的框架却使用了私有API)。
这大概是唯一可能意外使用私有API的方式。
UIWindow* window = [UIApplication sharedApplication].keyWindow]
return !![window performSelector:@selector(firstResponder)];
我的应用因为使用了私有API而被苹果拒绝了。这是代码:
Class UIKeyboardImpl = NSClassFromString(@"UIKeyboardImpl");
id activeInstance = [UIKeyboardImpl performSelector:@selector(activeInstance)];
[activeInstance performSelector:@selector(dismissKeyboard)];
通常是由于它们在SDK头文件中缺失。苹果的惯例之一是在ObjC方法名前加下划线。
被所谓的“使用私有API”拒绝并不困难。尝试将以下内容用作Core Data属性,它将被拒绝:
这展示了机器人如何扫描API。