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

Posted

技术标签:

【中文标题】iOS 中不使用私有 API 的例外情况?【英文标题】:Exceptions to no private API usage in iOS? 【发布时间】:2011-03-20 23:32:23 【问题描述】:

我的公司正在寻求开发一个需要使用私有 API 才能运行的 ios 应用程序 - 事实上,使用此类 API 是该程序的全部基础(出于商业原因,我故意不透露细节)。

我的问题是,如果我们解释这种情况,Apple 是否有可能允许我们的应用例外,即使在使用这些私有 API 时也能获得批准?我相信我们有非常正当的理由为我们正在寻找的功能请求例外,所以我想要一些对私有 API 规则进行的任何例外的示例以及详细信息,以便我们可以有更好的对 Apple 的期望。谢谢。

【问题讨论】:

您确定除了使用私有 API 之外没有其他方法可以实现您的目标吗?您可以尝试在这里询问,看看是否有您没有考虑过的替代方案。 我知道的唯一明确的例外是谷歌。其他人被允许暂时溜过,但后来在他们为每个人开放了一个新的 API 后被拒绝了(如果你问苹果并给他们一个很好的理由,这可能会发生在你想要的 API 上)。 【参考方案1】:

老实说:不。如果你想把它放到应用商店,不。

您可能想知道我是如何如此确定地知道这一点的:我曾与携带 iPhone 的运营商合作过,并且我曾与与 Apple 有合作关系的大型公司合作过(即,您实际上可以与 Apple 相当资深的人交谈)。如果 Apple 不允许运营商使用私有 API,他们也不会让你这样做。一种“合法”的私有 API 使用可能是将最近的通话信息放入运营商提供的帐户应用程序中。可能非常有用,对吧?并且运营商已经有了这些信息,所以没问题吗?不,这是个大问题。苹果就是不允许。您必须从其他地方(即通过运营商自己的数据库)获取它。

没有例外,目前应用在提交后立即得到静态分析。如果您调用私有 API,您的应用程序几乎肯定会立即被静态分析器自动拒绝。它甚至不会经过人工审核。

如果您希望在应用商店中分发,那么现在确实没有例外,因为代码是静态分析的。

换一种说法:如果 Apple 为您的应用设置了一个例外,他们将不得不为 每个 应用设置一个例外。然后你的独特卖点就不再那么独特了。

对不起,我不能给你一个更积极的答案,但我是根据经验说话的!

【讨论】:

有一些人可以得到异常,但是很难。也就是说,您也可以尝试使用 NSInvocation 和 nsstrings 来欺骗静态分析器。 如果您能在静态分析中获得例外情况,我会感到很惊讶,而且我曾为一些我们遇到例外情况的大公司开发应用程序(对于内容规则),尽管这当然是可能的。这是您自己的经验吗? 是的,这是我自己的经验,但我不想详细说明【参考方案2】:

完全有可能,但极不可能。他们为 UIGetScreenImage() 做了一个例外;但那是因为有非常多的开发人员为此提交了雷达。

我建议您提交高质量的雷达以进行增强,并解释您想要什么以及为什么。也可以考虑使用 DTS 来确定是否有替代方法,或者他们是否能够获得授权。

【讨论】:

即使UIGetScreenImage() 在引入了复制其大部分(但不是全部)功能的公共 API 后再次变为私有。提交增强请求,让其他人提交这些请求的副本,并希望在即将发布的版本中获得最佳效果是最好的方法。 Apple 很少对此类规则做出例外规定,即便如此,它也往往只针对谷歌等特定公司。 UIGetScreenImage 确实再次私有化,一旦主函数被引入公共 API。具有大量有用信息和有关意图的信息的增强请求是前进的方向。这带来了另一个好处,即使他们允许您在此版本中出现异常,如果下一个版本被拒绝,请不要感到惊讶。

以上是关于iOS 中不使用私有 API 的例外情况?的主要内容,如果未能解决你的问题,请参考以下文章

Ruby 私有实例变量,有例外

如何让 Web API 统一回传格式以及例外处理

例外:未配置访问 - API 更新后使用 Google Apps 脚本的 BigQuery

AWS API Gateway 自定义授权方给予例外

事件源 API:例外:300000 毫秒内没有活动。重新连接

Windows 7 移动宽带 API - 崩溃无一例外