混淆:(2.5)使用非公共API的应用程序将被拒绝

时间:2011-08-26 12:09:35

标签: objective-c ios itunesconnect appstore-approval

我将我的应用程序提交到App Store,并在审核后被拒绝。 Apple的理由是:


2.5:使用非公开API的应用将被拒绝

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

dateWithCalendarFormat:时区:

HOUROFDAY

minuteOfHour

secondOfMinute

setNavigationBar:

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

此外,上述API中的一个或多个可能位于应用程序附带的静态库中。如果您无权访问库的源,则可以使用“strings”或“otool”命令行工具搜索已编译的二进制文件。 “strings”工具可以输出库调用的方法列表,“otool -ov”将输出Objective-C类结构及其定义的方法。这些技术可以帮助您缩小有问题的代码所在的位置。*


但是,问题是我没有声明或定义任何名称为上述API的方法。我没有使用任何自定义库。这是一个非常简单的应用程序(刨床),我只使用:UIKit,CoreData,AVFoundation,Foundation和EventKit。

我昨天向Apple发送消息,但仍然没有答案。

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

你在上面的评论中说过你用过

 [[[datePicker date] dateWithCalendarFormat:nil timeZone:nil] hourOfDay]

现在,[datePicker date]返回NSDate,其documentation显示没有名为dateWithCalendarFormat:timezone:的公开方法,也没有hourOfDay等。

所以,你不能只使用它们。

至于setNavigationBar:navigationBar的属性UINavigationController是一个只读属性,正如文档所述。因此您无法设置它。

编译应用程序时,编译器应该发出很多关于它的警告,说没有找到选择器等等。你应该始终将这些警告视为错误,并消除它们。通过这种方式,您可以避免在提交后拒绝。