私有 API 到底是啥,如果使用了一个 iOS 应用程序,为啥 Apple 会拒绝它?

Posted

技术标签:

【中文标题】私有 API 到底是啥,如果使用了一个 iOS 应用程序,为啥 Apple 会拒绝它?【英文标题】:What exactly is a Private API, and why will Apple reject an iOS App if one is used?私有 API 到底是什么,如果使用了一个 iOS 应用程序,为什么 Apple 会拒绝它? 【发布时间】:2013-07-08 22:48:08 【问题描述】:

我已经阅读了几篇关于此的文章,我只是想看看我是否理解正确:

如果您使用私有 API,Apple 将拒绝您的应用...

    “私有 API”和“非私有 API”之间的主要区别是什么?

    “非私有”API 是否只是 Apple 提供和验证的 API?

    API 不只是与框架交互的一种方式,框架只是一组封装的类/头文件,人们可以将它们用于琐碎的目的吗?

    这是否意味着我不能在我的应用程序中重用任何人的代码(Apple 的除外)?

    如果这是真的,那么每当程序员制作他或她自己的自定义类和方法时,他在技术上不就是为了他的特定目的而设计一个迷你框架吗?那么这不是说他在使用自己的私有 API 吗?

    将别人的类/方法与我的类/方法一起使用会有什么区别,他们怎么能分辨出区别,为什么这会是个问题?

我对此的理解听起来很荒谬,并且不相信我正确理解了“私有 API”的含义。我确实读过它是为了防止 API 中可能导致您的应用程序功能失调的任何更改。这是否意味着 API 在运行时(而不是编译时)是链接的,并且可以在您不知情的情况下自动更新? (看,我最初认为 API/框架在你编译时是一成不变的,也许这就是我错的地方)

有人可以帮帮我吗?我真的对这个政策感到困惑。谢谢!

【问题讨论】:

根据定义,您自己的课程和您自己的应用程序中的其他内容是您自己的,并且是私有的。它们是指私有 api,因为使用 ios 提供的功能仅供内部使用。例如作为一个被破解的例子,您可以使用 SystemClock api,它在后台使用私有 HardwareClock API。您的应用程序使用 SystemClock 就可以了。但是绕过它并直接进入 HardwareClock 将使您的应用程序启动。 Apple 的私有 API 规则是关于不使用私有 Apple API。 Apple 已经记录了他们的许多 API,但有些没有记录。这些未记录的 API 是 Apple 指南所引用的私有 API。 Apple and private APIs 的可能重复项 简单地说:私有API!=第三方API 我明白了,谢谢!我想我读了太多信息错误的文章,很困惑哈哈 【参考方案1】:

问。 “私有 API”和“非私有 API”之间的主要区别是什么?

私有是一种未公开定义的(没有太多)

问。 “非私有”API 是否只是 Apple 提供和验证的 API?

私有和公共 API 均由 Apple“提供”,但仅提供公共 API 供您使用。 私有 API 仅供 Apple 使用

问。 API 不只是与框架交互的一种方式,框架只是一组封装的类/头文件,人们可以将它们用于琐碎的目的吗?

是的

问。 这是否意味着我不能在我的应用中重用任何人的代码(Apple 的除外)?

没有

问。 如果这是真的,那么每当程序员制作他或她自己的自定义类和方法时,他在技术上不就是为了他的特定目的而设计一个迷你框架吗?那么这不是说他在使用自己的私有 API 吗?

否(框架与应用不同)

问。 在使用别人的类/方法和我的类/方法之间会有什么区别,他们怎么能分辨出区别,为什么这会是个问题?

通常不会

您需要明白的是,在提及私有 API 时,您应该只考虑 Apple 提供的私有 API。 来自第 3 方的其他 API 是不同的(Apple 不在乎,只要第 3 方代码不使用 Apple 私有 API)。

【讨论】:

我明白了。我觉得我读过很多关于私有 API 的误导性信息,而且很难理解,因为有些人说这是一回事,有些人说这是另一回事。而且我认为 Apple 关于私有 API 的信息是它们是“未记录的 API”,它并不能准确解释“未记录”的含义。感谢您清理它! @Wain 你能举个例子说明什么是私有 api 或者是什么样子的吗? @SamBudda,让我们使用 UIDevice uniqueIdentifier,它曾经是公开的,但现在是私有的。您曾经能够使用它来识别您的应用程序正在运行的设备,但尝试识别用户是可滥用的,所以现在它是私有的,并且有许多用于不同目的的更具体的替代方案。因此,私有 API 并不“看起来”特别像任何东西。 有没有办法找出苹果的私有api?我的意思是,如果它是私有的,那么这意味着它没有文档(在苹果文档中不公开),那么如何找到私有 api?跟踪错误?黑客? @SamBudda,你为什么要找到他们? class-dump 是你的朋友。

以上是关于私有 API 到底是啥,如果使用了一个 iOS 应用程序,为啥 Apple 会拒绝它?的主要内容,如果未能解决你的问题,请参考以下文章

全面认识openstack,它到底是啥?包含啥

iOS 中不使用私有 API 的例外情况?

如何使用私有 API 阻止 iOS 应用程序中的来电?

iOS-私有API与runtime

使用 mern.io 脚手架工具 - .need 方法到底是啥?

请问Serializable序列化的作用,到底是啥?