【问题标题】:Non-public selectors in App?应用程序中的非公共选择器?
【发布时间】:2014-12-16 02:12:45
【问题描述】:

我正在尝试通过 iTunes Connect 提交应用程序。 Xcode 抛出以下错误:

iTunes Store 操作失败。 该应用在 Payload/Inflation Calculator.app/Inflation Calculator: allocBatch:withEntity:count:,allowWithEntity:, fastIndexForKnownKey:, indexForKey: 中引用了非公共选择器

我不知道我会使用什么“non-public selectors”,因为我的代码非常贴近这本书。有人有什么想法吗?

视图控制器的代码(仅在我的应用程序中使用 .swift): https://gist.github.com/Calda/aefc2f19bae5f3cf2e54

编辑:作为将来的参考,我向 iTunes Connect 支持部门确认这是 iTunes Connect 的问题,而不是我的项目的问题。对于遇到同样问题的任何人,我最好的建议是稍后再试。

【问题讨论】:

  • 这意味着您在项目中使用私有 API。它也可以是第三方库。搜索有问题的方法调用并找到替代解决方案。
  • 这些方法都没有出现在我的代码中,并且我没有使用第三方库。我不知道这个问题可能来自哪里。
  • 您应该联系 Apple。我已经看到其他在 stackoverflow 上问过这个问题的开发人员发生了这种情况。他们联系了苹果,然后苹果给了他们理由。这里唯一需要注意的是:你应该仔细检查你没有使用任何私有 API。
  • 您要提交哪个版本的iOS?你用的是什么版本的xcode

标签: ios xcode swift app-store-connect


【解决方案1】:

我遇到了同样的问题。我无法提交我的一些应用程序,因为使用了非公共选择器。我也尝试使用 Application Loader,但仍然出现相同的错误消息

为了解决这个问题,我安装了 Xcode 6.0.1 - 它仍然可以在这里下载: https://developer.apple.com/downloads/index.action

在安装之前,我将旧 Xcode 移到了垃圾箱。

我现在可以提交任何应用。

【讨论】:

  • 我们什么时候跳xcode 7?我们什么时候结束xcode 6?我一定是远远落后了,没有听到苹果发布了xcode 7xcode 8的消息。
  • 另外,最好转到xcode 6.1 而不是旧版本?
  • XCode 6.1 的问题。 Apple 在 iOS 8/XCode 6 上继续打破一切,因此如果某些应用程序将 XCode 6.1 与 iOS 8 之前的部署目标一起使用,则会被错误地拒绝。
【解决方案2】:

我通过以下方式解决了这个问题:

编辑:我认为不需要第一步

1) 清理构建文件夹(按住 Alt,点击 Product -> Clean)

2) 删除派生数据(组织者 -> 项目 -> 选择您的项目 -> 删除派生数据

【讨论】:

  • 组织者 -> 项目 -> 选择您的项目 -> 为我显示删除存档而不是删除派生数据!我正在使用 Xcode 9
【解决方案3】:

iOS 7 和 iOS 8 之间的 API 有所不同。 我通过切换到部署目标“8.0”验证了我的应用程序 - 使用 XCode 6.1 构建。 这可能不是你们所有人的解决方案,但你可以尝试一下。

可能发生在我身上,因为我最近开始使用 UIAlertController -> 似乎是 iOS-8 功能。在 iOS 7 上,这将是 UIAlertView。因此,如果您使用一些漂亮的新功能,它们可能在以前的 iOS 版本中不可用 - 因此是非公共 API。

【讨论】:

  • 我没有使用 UIAlertController。但是,我的部署目标是 4.3。我想和它一起去:(
  • 嗨,Karim,UIAlertController 只是我的例子。也许您在其他地方使用了另一个新的 API(至少比 4.3 更新 - 您真的必须支持 iOS 4 吗?)。也许 Apple 对 XCode 6.1 有另一个问题 - 通过上述更改,我能够保留 XCode 6.1 并提交我的应用程序。
  • 就我而言,同一个项目,所有源代码都相同,可以使用 XCode 6.0.1 提交,但不能使用 XCode 6.1
  • 赞成,因为我认为 UIAlertController 可能是为我做的。需要明确的是,这仍然是一个错误:我使用 UIAlertController,但将其包装在用户是否运行 iOS 8 的条件中。据我了解,这正是您应该在何时执行的操作远离已弃用的 API。故事的寓意:忽略弃用警告?!谢谢苹果,你现在充满了胜利......
  • 如果您需要支持 iOS 8 之前的旧版本,此解决方案无效。回到 Xcode 6.0.1 解决问题
【解决方案4】:

对于同一个应用程序,我今天在 XCode 6.1 上遇到了这个错误。 我在 2/3 天前使用 XCode 6.0.1 提交了相同的应用程序(小变化),没有任何错误! 刚刚更新了 XCode 6.1 并陷入了这个错误。

我切换回 XCode 6.0.1,提交没有任何问题。没有非公共 API 使用错误。我只需下载dmg 文件并将xcode.app 重命名为XCode_6.0.1。所以它与 XCode 6.1 共存。

【讨论】:

    【解决方案5】:

    我删除了 xcode 项目的所有派生数据 /Users/{user_home_folder}/Library/Developer/Xcode/DerivedData 并且应用提交没有任何问题

    【讨论】:

      【解决方案6】:

      我遇到了与 Apple 类似的问题。我昨天提交了同一个应用程序(v 1.0.1),然后拒绝了它,然后今天再次提交了一个代码差异。今天的投稿因为上述原因被拒绝了。

      通过更改我的应用程序的版本号(例如 1.0.1 -> 1.0.2),我能够使用所有内容的最新版本来解决这个问题。认为这很有效,因为我之前有一个提交在队列中等待我拒绝的旧版本,YMMV。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-01
        • 2014-03-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多