该应用程序引用了 Payload Capacitor.Framework STATE_ERROR.VALIDATION_ERROR.50 中的非公共选择器

今天,我在尝试将我的电容器应用程序上传到 App Store 时遇到了问题。该应用程序是几天前发布的,据我了解,对于上传的任何重要内容都没有改变。我收到的错误也没有说明实际问题。

错误如下所示: enter image description here

并说:

应用程序在 Payload/App.app/Frameworks/Capacitor.Framework/Capacitor 中引用了非公共选择器:applicationNameForUserAgent、initWithFrame:configuration:、isMainFrame、setNavigationDelegate:、targetFrame 带有错误代码 STATE_ERROR.VALIDATION_ERROR.50 for id(一些 guid) .

我尝试了多种方法,例如重新生成证书和配置文件。没有任何帮助,并且此错误会阻止应用程序的发布。看起来像是 Capacitor 内部的东西,但我无法弄清楚在上次成功发布应用程序后的几天内到底发生了什么以及具体发生了什么。

有什么帮助吗?

stack overflow The app references non-public selectors in Payload Capacitor.Framework STATE_ERROR.VALIDATION_ERROR.50
原文答案
author avatar

接受的答案

在正式修复之前的潜在解决方法:

我在 Ionic build 的结果代码中搜索了 applicationNameForUserAgentisMainFrame (其他字符串不匹配任何内容)并在 isMainFrame 中找到了 WebViewDelegationHandler 的一个实例(找到第 107 行)和三个 applicationNameForUserAgent 中的 CAPBridgeViewController (第 115-120 行)(xCode 工作区中的所有搜索)。我删除了所有这些行,构建神奇地发布了。

我在 StackOverflow 上发现了 2019 年的一些线程,也归咎于(当时) cordova-web-view-plugin

我不确定删除这些代码行有多糟糕,但至少它提供了某种解决方案,如果有的话。

我在我的应用程序上进行了测试,没有发现任何缺陷。


答案:

作者头像

我不确定删除或重命名引用是否是一个安全的选择。如果它有效,对你有好处。现实情况是,这可能是苹果的问题。听起来很奇怪,但看起来确实如此。我在 Capacitor 上有同样的问题,但现在它发生在所有跨平台社区:

作者头像

这是 Apple 后端的一个错误,现在根据他们的一位工程师的说法已修复

该问题已在应用验证后端解决。请尝试重新提交。抱歉,添麻烦了。

https://developer.apple.com/forums/thread/127678?answerId=715975022#715975022

作者头像

至少在我这边 - 这似乎是 App Store Connect 本身的问题(截至 45 分钟前已解决):

https://developer.apple.com/system-status/

您能否确认这是否适用于您? @Lentyai

作者头像

我现在在 Xcode 14 中有这个。

这是 Apple 后端验证的错误。

但是,我能够毫无问题地分发。

作者头像

我在更新 xcode 和 ios 16 时遇到了同样的问题。我通过将 Targets > General 中的“Minimum Deployments”设置为可用的最低值来解决它。

我能够发出警告,但这样做也消除了它。

作者头像

我可以使用 Transporter 提交应用程序。使用 Xcode 存档和导出应用程序,并使用 Transporter 交付应用程序。

作者头像

我也收到了警告,但构建已成功上传 TF。如果没有,你可以再试一次。

作者头像

我尝试了上面的所有方法,但都没有用。请参阅 this GitHub 问题以获取有效答案。按照他所说的步骤进行操作,或者简单地将这段代码复制到您的 Podfile 中。

def find_and_replace(dir, findstr, replacestr)
  Dir[dir].each do |name|
      text = File.read(name)
      replace = text.gsub(findstr,replacestr)
      if text != replace
          puts "Fix: " + name
          File.open(name, "w") { |file| file.puts replace }
          STDOUT.flush
      end
  end
  Dir[dir + '*/'].each(&method(:find_and_replace))
end

post_install do |installer|
        find_and_replace("./node_modules/react-native/React/Base/RCTKeyCommands.m",
                                "_modifierFlags",
                                "_modifierEventFlags")
        find_and_replace("./node_modules/react-native/React/Base/RCTKeyCommands.m",
                                "_modifiedInput",
                                "_modifiedEventInput")
        find_and_replace("./node_modules/react-native/React/Base/RCTKeyCommands.m",
                                "_isKeyDown",
                                "_isKeyEventDown")
        find_and_replace("./node_modules/react-native/React/DevSupport/RCTPackagerClient.h",
                                "handleNotification",
                                "handlePackageNotification")

        find_and_replace("./node_modules/react-native/React/DevSupport/RCTPackagerConnection.mm",
                                "handleNotification",
                                "handlePackageNotification")
    end

请确保您首先找到此函数并将其替换为 post_install do |installer|

作者头像

如果您正在使用 react-native 并遇到同样的问题,请更新 xcode 和 ios 16。

我通过将 Targets > General 中的 “Minimum Deployments”设置为可用的最低值 11 来解决它。