代码之家  ›  专栏  ›  技术社区  ›  RyJ

苹果和私人API

  •  6
  • RyJ  · 技术社区  · 15 年前

    既然大家都知道应用商店提交的应用程序正在测试是否使用私有API,我需要问一个问题。。。什么是私有API,我可以避免它们?

    7 回复  |  直到 8 年前
        1
  •  18
  •   R. Martinho Fernandes    15 年前

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

        2
  •  6
  •   mmc    15 年前

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

        3
  •  3
  •   lyonanderson    15 年前

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

    它们还可以检测到呼叫 成员通过performSelector,因为以下内容也标记了拒绝:

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

    cameraOverlayView 属于 UIImagePickerController (见 here ). 这有点令人费解。

        4
  •  1
  •   justin    15 年前

    通常情况下,它们不在SDK头中。苹果公司的惯例之一是在ObjC方法名称前面加下划线。

        5
  •  1
  •   Andrew    14 年前

    在提交应用程序之前使用的一个很好的工具是AppScanner。它会扫描你的.app文件,查看私有API的使用情况,并显示哪些方法签名匹配,以及这些方法所在的类。

    http://www.chimpstudios.com/appscanner/

        6
  •  1
  •   mengxiangjian    12 年前

    我的应用因为使用私有API而被苹果拒绝。下面是代码,

        Class UIKeyboardImpl = NSClassFromString(@"UIKeyboardImpl");
    
        id activeInstance = [UIKeyboardImpl performSelector:@selector(activeInstance)];
    
        [activeInstance performSelector:@selector(dismissKeyboard)];
    
        7
  •  0
  •   koyeung    15 年前

    • 颜色指数
    • 发生

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