如何以编程方式区分iOS中的Public vs Undocumented / Private API?

时间:2014-04-25 16:19:09

标签: ios objective-c

他们是否可以安全地确定您访问的类/方法是否在运行时不受限制?

这些类有哪些属性可以检查并安全地避免使用它们?

E.g。 UINavigationTransitionView或UITransitionView是可访问但未记录的,因此我假设您不允许使用它们。

3 个答案:

答案 0 :(得分:2)

嗯,顾名思义,公共Apple文档或SDK头文件中未记录的任何方法或类都被视为私有API,不应用于AppStore提交。

请注意,有时您可能会发现自己正在访问私有类的公共方法。这通常是可以接受的,但这取决于您的使用。

在某些情况下,Apple已经开放了API并追溯公开,这意味着您可以使用当前SDK的方法,也可以安全地在以前版本的iOS上调用它。这方面的示例包括NSArray' firstObjectNSData的base64 API。

答案 1 :(得分:1)

无法在运行时以编程方式检查。为了了解您是否正在访问私有API,您需要知道应用程序是使用哪个SDK构建的,然后您需要检查每个函数或方法调用来自那个SDK。由于iPhone通常没有安装SDK,因此无法在运行时进行检查。

答案 2 :(得分:0)

如果您使用以下结构:

Class transitionViewClass = NSClassFromString("UITransitionView");

然后在运行时无法确定它的访问级别(公共或私有)。

使用直接访问类/方法更好:

Class transitionViewClass = [UITransitionView class];

在这种情况下,Xcode使用的编译器将显示此类未声明的警告/错误:

  

语义问题:使用未声明的标识符' UITransitionView'