我的应用因为使用了非公开API被拒绝了。

5
以下是苹果反馈的内容:

您的应用程序使用或引用了以下非公共 API:

  • init:

在 App Store 上不允许使用非公共 API,因为这可能会导致用户体验不佳,如果这些 API 发生更改。

我最困惑的是 "init:",我的意思是,"init:" 有什么问题吗?我们不能使用 "init:" 吗?此外,当我们使用非公共 API 时,在 Xcode 中是否有任何警告?如何找到这些非公共 API?


1
我会向苹果提出申诉,或者再试一次。似乎在发布iOS 10时有很多关于非公共API的问题。 - Paulw11
1个回答

3

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

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

那将永远是一个错误的名称,正确的名称应该是:

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

(或者 initWithTitle: 或者 initWithSomeOtherThingButSomething:)

所以我首先会搜索 init:, 这应该很容易修复。如果您实际上没有任何带有这个名称的方法,则这可能是苹果工具中的一个错误,您需要与苹果讨论。


1
我同意。我认为冒号是一个提示。我曾经遇到过这样的问题,我不小心实现了一个私有方法;由于全局命名空间的原因,这很容易发生错误。但无论如何,都不应该有任何名为init:的方法。你可以调用没有参数的init,或者带有参数的initWithThing:,但不能使用init: - matt
我在整个项目中搜索“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的情况下解决这个问题?只需更改名称即可吗?
- 无夜之星辰
3
升级AFNetworking。那听起来像是一个古老版本(可能是1.0之前的版本?)。定期更新供应商库非常重要。 - Rob Napier
1
是的,你说得对。这是一个非常老的项目,使用了一些非常老的SDK,而且没有CocoaPods。我的意思是,如果我想升级AFNetworking,没有CocoaPods就不那么容易了,而且在这个项目中还有很多基于旧版本AFNetworking的方法。你有更好的解决方案吗? - 无夜之星辰
你可以尝试重命名并查看结果,或者与苹果公司联系。在“苹果公司会接受什么”这个普遍情况下是没有答案的。 - Rob Napier
好的,我明白你说的了,非常感谢你真诚的回答。 - 无夜之星辰

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接