【问题标题】:confused about: (2.5) Apps that use non-public APIs will be rejected困惑:(2.5)使用非公共API的应用程序将被拒绝
【发布时间】:2011-11-04 11:43:46
【问题描述】:

我将我的应用提交到应用商店,但在审核后被拒绝。 苹果的原因是:


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

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

dateWithCalendarFormat:timeZone:

hourOfDay

一分钟

secondOfMinute

设置导航栏:

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

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


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

我昨天给苹果发了信息,但还是没有回复。

有什么想法吗?

【问题讨论】:

  • 快速 grep 您的源代码以获取其中之一的实例(例如 secondOfMinute)。他们出现在任何地方吗?
  • 如果您没有调用任何使用私有 API 的 Apple 代码,并且您联系了他们,请等待回复。
  • 方法 dateWithCalendarFormat:timeZone:, hourOfDay, minuteOfHour 和 secondOfMinute 我在我的代码中只使用了一次: int hour = [[[datePicker date] dateWithCalendarFormat:nil timeZone:nil] hourOfDay]; int min = [[[datePicker date] dateWithCalendarFormat:nil timeZone:nil] minuteOfHour]; int sec = [[[datePicker date] dateWithCalendarFormat:nil timeZone:nil] secondOfMinute];其中 datePicker 是来自 UIDatePicker 类的对象:@property (nonatomic, retain) IBOutlet UIDatePicker *datePicker;在 setNavigationBar 方法中也是如此。我没有声明或定义这些方法。

标签: objective-c ios app-store-connect appstore-approval


【解决方案1】:

你在上面的cmets中说你用过

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

现在,[datePicker date] 返回一个NSDate,其documentation 表明没有名为dateWithCalendarFormat:timezone:hourOfDay 等的公共方法。

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

对于setNavigationBar:UINavigationController 的属性navigationBar 是只读属性,如文档所述。因此你不能设置它。

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

【讨论】:

  • 是的,是的,我在几分钟前就看到了,我改变了它。但是 setNavigationBar 方法呢???
  • dateWithCalendarFormat:timezone: 不再推荐......但是 setNavigationBar 有什么问题: UINavigationBar *bar = [[UINavigationBar alloc] init]; bar.barStyle=UIBarStyleBlackOpaque; [opla setNavigationBar:bar]; [opla.navigationBar setTintColor:self.navigationController.navigationBar.tintColor]; [opla.navigationBar setBarStyle:self.navigationController.navigationBar.barStyle];
  • 哦,不,我刚刚看到 navigationBar 设置为只读我很糟糕,谢谢您的帮助
  • 让我再说一遍:构建日志中应该有大量警告。你真的应该仔细看看它们。快乐的黑客攻击!
  • 是的,这是必要的。例如,如果您认为自己在半年后阅读那部分代码,那么该警告并不愚蠢。确定以后看代码的时候,一眼就能看出方法中的变量是指局部变量还是实例变量?如果您想长期维护代码,删除所有警告是一个很小的代价。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-17
  • 2017-11-25
  • 1970-01-01
  • 2017-01-24
  • 1970-01-01
  • 2017-01-26
  • 2011-09-01
相关资源
最近更新 更多