含义 - 使用非公共 API 的应用程序将被拒绝

Posted

技术标签:

【中文标题】含义 - 使用非公共 API 的应用程序将被拒绝【英文标题】:meaning of - Apps that use non-public APIs will be rejected 【发布时间】:2015-01-04 12:27:21 【问题描述】:

我们的应用因使用非公共 API 而被 iTunes 拒绝

我们发现您的应用使用了一个或多个非公共 API,这不符合 App Store 审核指南。不允许使用非公共 API,因为如果这些 API 发生变化,可能会导致用户体验不佳。

我们在您的应用中发现了以下非公开 API: .......

如果您在源代码中定义了与上述 API 同名的方法,我们建议您更改方法名称,以便它们不再与 Apple 的私有 API 冲突,以避免您的应用程序在以后的提交中被标记。

拒绝是什么意思?

是否意味着:有一些苹果接口“SomeAppleInterface”

// SomeAppleInterface.m
@implementation SomeAppleInterface

- (void)SomePrivateAPI // this api doesn't exists in SomeAppleInterface.h file

// ... some code

在我的代码中,我调用了苹果类的私有 api:

- (void)MyCodeMethod 

    SomeAppleInterface x;
    [x SomePrivateAPI];

是这个错误的意思吗?如果是,我怎么能调用这个私有方法,它在 h 文件中没有提到? 请帮我理解

【问题讨论】:

***.com/questions/27730752/…附上的完整错误信息我不是在问如何解决这个问题,我想了解这个错误的含义 所以,我认为 Hot Licks 的建议是正确的,你回过头来说“这个拒绝通知毫无意义,因为这些肯定不是私有的 Apple API;请澄清”。很明显,很多(如果不是全部的话)根本就没有尝试调用私有 API(也不是巧合地使用了重复的方法签名)。 谢谢Rob,我会做的,你能帮我理解一下非公开api的问题吗? 【参考方案1】:

您要求澄清a rejection,这很可能只是Apple 的错误。这个列表看起来像一堆误报。他们只是说你似乎在调用一堆他们认为是私有 API 一部分的方法。

在这个问题中,您提供了一个稻草人,向我们展示了一个无法编译的私有方法的调用。您似乎在问“我怎么会不小心调用了 Apple 私有 API?”

问题是,不小心调用私有 API 真的很难。您可以创建一个类别 @interface 来公开私有 API。还有其他方法,但这根本不是您可以意外做到的。您必须有意识地采取措施调用私有 API。

所以问题变成了如何从 Apple 获得误报。您可能根本没有使用 Apple 的私有 API,但碰巧在您自己的类中有具有相同签名的方法。这可能会导致误报,只需更改方法的名称即可解决。

但在这种情况下,我认为发生了一些完全不同的事情,我认为在您收到 Apple 的回复之前,不值得尝试追踪它。在你收到他们的回复之前,把所有的事情都搞得一团糟是没有意义的。

【讨论】:

“但碰巧在你自己的类中有具有相同签名的方法”,这是否意味着如果我使用私有方法(仅在 m 文件中)和苹果 API 的模拟名称,我也可能会得到错误正面报道?还是只有公共 API(在 h 文件上)? 这当然不是您在 .h 文件的接口中包含什么的问题(因为他们无权访问它)。它可能正在查看您的代码调用的方法的签名。

以上是关于含义 - 使用非公共 API 的应用程序将被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用非公共 API 的情况下禁用 UITextView 上的共享并被苹果拒绝?

当我提交带有犰狳的 iOS 应用程序时,BLAS 符号被拒绝为私有(ITMS-90338:非公共 API 使用)

如何在 iOS 中使用文件 xib 自定义键盘

ios 应用商店拒绝 - 您的应用使用“prefs:root=”非公共 URL 方案

该应用程序使用 Facebook SDK 引用非公共选择器 [关闭]

无法使用 Facebook SDK 3.0 上传 iOS 应用程序,因为引用了非公共选择器