【问题标题】:My app had been refused because of non-public APIs我的应用因非公共 API 而被拒绝
【发布时间】:2017-01-26 15:13:33
【问题描述】:

有什么苹果反馈: 您的应用使用或引用了以下非公共 API:

  • init:

App Store 不允许使用非公共 API,因为如果这些 API 发生变化,可能会导致糟糕的用户体验。

最让我困惑的是“init:”,我的意思是,“init:”有什么问题?我们不能使用“init:”?而且,当我们使用非公共API时,是否有任何变暖? Xcode?如何找到这些非公共 API?

【问题讨论】:

  • 我会求助于 Apple,或者再试一次。随着 iOS 10 的发布,非公共 API 似乎出现了很多问题。

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


【解决方案1】:

您真的不应该使用名称为init: 的任何东西。那将是一个带有一个参数的init 方法,但没有解释该参数是什么。例如:

- (instancetype) init:(NSString *)string;

那总是一个不正确的名字。正确的名称是:

- (instancetype) initWithName:(NSString *)string;

(或initWithTitle:initWithSomeOtherThingButSomething:

所以我会先搜索init:,这应该很容易解决。如果您实际上没有任何具有该名称的方法,那么这可能是 Apple 工具中的错误,您需要与 Apple 讨论。

【讨论】:

  • 我同意。我认为结肠是一个赠品。我遇到了意外实现私有方法的问题;由于全局命名空间,很容易出错。但无论如何都不应该有任何方法叫做init:。您可以不带参数调用init,也可以不带参数调用initWithThing:,但不带参数init:
  • 我在整个项目中搜索“init:”然后显示两个结果: - id writer = [[_SBJsonWriterClass alloc]init:[[NSArray alloc] initWithObjects:@"Basic functions", @"Advanced functions", @"Accessory positioning", @"", nil]]; - id parser = [[_SBJSONParserClass alloc] init:[[NSArray alloc] initWithObjects:@"Basic functions", @"Advanced functions", @"Accessory positioning", @"", nil]]; 它们都在 AFNetworking 的 AFJSONUtilities.m 文件中。我怎样才能在不删除的情况下解决这个问题AFNetworking?只需更改名称?
  • 升级 AFNetworking。这听起来像是一个古老的版本(可能是 1.0 之前的版本?)。定期更新供应商库非常重要。
  • 是的,你是对的。这是一个很老的项目,有一些很老的sdks,更何况,没有cocoapod。我的意思是,如果我要升级AFNetworking,没有cocoapod不是那么容易,更何况,还有很多基于老版本AFNetworking的方法在这项目。你有更好的解决方案吗?
  • 您可以尝试重命名,看看会发生什么,或者与 Apple 交谈。在一般情况下,“Apple 会接受什么”没有答案。
猜你喜欢
  • 2017-01-24
  • 2011-09-01
  • 1970-01-01
  • 2017-01-17
  • 1970-01-01
  • 2019-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多