Flutter: How to fix ITMS-90809: Deprecated API Usage - Apple 将停止接受使用 UIWebView API 的应用程序提交

Posted

技术标签:

【中文标题】Flutter: How to fix ITMS-90809: Deprecated API Usage - Apple 将停止接受使用 UIWebView API 的应用程序提交【英文标题】:Flutter: How to fix ITMS-90809: Deprecated API Usage - Apple will stop accepting submissions of apps that use UIWebView APIs 【发布时间】:2020-01-02 04:31:27 【问题描述】:

在提交我的最新版本时,苹果突然回了一条消息,说有问题,具体是:

ITMS-90809:已弃用的 API 使用 - Apple 将停止接受使用 UIWebView API 的应用提交。请参阅https://developer.apple.com/documentation/uikit/uiwebview 了解更多信息。

由于我没有使用 webview 插件,我不知道在哪里使用 UIWebView API。有关如何解决此问题的任何建议?

最新的稳定版 Flutter 版本 1.7.8+hotfix.4 以及包含以下软件包时会出现此错误:

http: ^0.12.0
shared_preferences: ^0.4.3
intl: any
permission_handler: ^2.1.2
contacts_service: ^0.2.8
image: ^2.0.5
cached_network_image: ^1.0.0
url_launcher: ^5.0.1
path_provider: ^0.5.0+1
after_layout: ^1.0.7
connectivity: ^0.4.3+1
device_info: ^0.4.0+2
firebase_auth: ^0.11.1+7
firebase_messaging: ^5.1.2
firebase_analytics: ^5.0.0
notification_permissions: ^0.4.0

所有软件包都已更新到最新版本。

flutter doctor 的输出为:

[✓] Flutter (Channel stable, v1.7.8+hotfix.4, on Mac OS X 10.14.6 18G87, locale en-US)
    • Flutter version 1.7.8+hotfix.4 at /Users/per/flutter
    • Framework revision 20e59316b8 (6 weeks ago), 2019-07-18 20:04:33 -0700
    • Engine revision fee001c93f
    • Dart version 2.4.0

[✓] android toolchain - develop for Android devices (Android SDK version 28.0.3)
    • Android SDK at /Users/per/Library/Android/sdk
    • Android NDK location not configured (optional; useful for native profiling support)
    • Platform android-28, build-tools 28.0.3
    • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1136-b06)
    • All Android licenses accepted.

[✓] Xcode - develop for ios and macOS (Xcode 10.3)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 10.3, Build version 10G8
    • CocoaPods version 1.7.4

[✓] iOS tools - develop for iOS devices
    • ios-deploy 1.9.4

[✓] Android Studio (version 3.2)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin version 31.3.1
    • Dart plugin version 181.5656
    • Java version OpenJDK Runtime Environment (build 1.8.0_152-release-1136-b06)

[✓] VS Code (version 1.31.1)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 2.25.1

[✓] Connected device (1 available)
    • Nexus 6P • 5VT7N15C31001152 • android-arm64 • Android 8.1.0 (API 27)

• No issues found!

【问题讨论】:

您可以在 github flutter issues 中检查是否存在未解决的问题。如果没有,请在那里打开一个问题。 Flutter 仓库中正在跟踪该问题。看起来它可能是firebase包。 github.com/flutter/flutter/issues/39470 我也收到了 【参考方案1】:

我认为它是从 firebase_auth 插件中使用的。 尝试将其更新到最新版本,然后记住运行 pod update

【讨论】:

我倾向于同意这一点,因为它是唯一一个包含 UIWebView 引用的数据包。我现在已经更新到最新版本的 firebase_auth 并且找不到任何对 UIWebView 的引用。 Flutter 团队似乎意识到了这一点。 github.com/firebase/firebase-ios-sdk/pull/3723 在更新到 firebase_auth 0.14.0+5 并更新 pod 后,对 UIWebView 的引用似乎消失了。希望这意味着提交不会再顺利。【参考方案2】:

我的 Cordova 应用程序有这个问题,并通过更新依赖项来修复它。

您是否有机会使用依赖项或其他依赖项正在使用依赖项“cordova-plugin-inappbrowser”。

如果是这样,这应该在 3.1.0 中修复。请参阅发行说明https://github.com/apache/cordova-plugin-inappbrowser/blob/master/RELEASENOTES.md 公关修复它https://github.com/apache/cordova-plugin-inappbrowser/pull/271

更新:尚未修复。请参阅有关 cordova-ios 的问题:https://github.com/apache/cordova-ios/issues/661 请注意:没有截止日期,我已经联系了一位 Apple 开发人员,他一直在发推文说要迁移到 WKWebView,看看他是否可以提供更多信息,如果我得到回复,我会更新。

更新:Cordova-ios 5.1.0 似乎解决了这个问题。见https://github.com/apache/cordova-ios/pull/715

【讨论】:

嗯,即使我从 Cordova 应用程序中删除了所有插件,我也会收到相同的电子邮件。 是的,我可以确认我仍然在收到它们。所以它在科尔多瓦也一定是别的东西。 Ionic webview 也有这个问题:github.com/ionic-team/cordova-plugin-ionic-webview/issues/428 感谢您的信息。我没有使用 Cordova,所以这不是原因,但 firebase 包似乎是造成这种情况的原因。 @Klaasvaak 你有没有从 Apple 开发者那里听到任何消息? @matthewpavkov 我们能够发布警告【参考方案3】:

由于这已成为 Google 上此拒绝消息的“goto answer”,我将添加一个 React Native 修复。

在 React Native 上,考虑到您是一名优秀的开发人员并且没有在自己的代码中使用 UIWebView,请使用以下命令找出您的哪些依赖项仍然使用 UIWebView:

grep -r UIWebView node_modules/*

还有更多信息here。

【讨论】:

我可以为 pubspec.yaml 中的包运行类似的命令吗? @flutter grep -r UIWebView ios/Pods/ 我有这个响应....grep -r UIWebView ios/Pods/ 二进制文件 ios/Pods//TwitterKit/iOS/TwitterKit.framework/TwitterKit 匹配 ios/Pods//TwitterKit/iOS/ TwitterKit.framework/Headers/TWTRTweet.h:* 适合在UIWebViewWKWebView 中加载或传递给 Safari:如何修复 @DanieleAngelini:看起来像文件中的注释。你可以忽略 好的,但是当我在苹果商店上传时收到警告...... ITMS-90809:不推荐使用的 API - Apple 将停止接受使用 UIWebView API 的应用程序的提交,有办法解决吗?看来我需要强制使用 safari...【参考方案4】:

在我的情况下,问题是我在调试中使用的 Flutter 的 Facebook 插件版本

我必须从以下位置更改版本:

flutter_facebook_login: ^2.0.1

到:

flutter_facebook_login: ^3.0.0

还必须从以下位置更改 pod 文件:

pod 'FBSDKCoreKit', '~> 4.39.1'
pod 'FBSDKLoginKit', '~> 4.39.1'

到:

pod 'FBSDKCoreKit', '~> 5.5'
pod 'FBSDKLoginKit', '~> 5.5'

然后这个函数的调用出现了另一个问题

fbLogin.logInWithReadPermissions(['email']);

刚刚替换为

fbLogin.logIn(['email']);

然后重建所有内容,然后再次上传。

【讨论】:

【参考方案5】:

尽管我没有在我的应用程序中使用 firebase_auth,但我还是在 FirebaseAuth 的 Xcode 搜索中找到了对 UIWEBVIEW 的引用。 Pods 似乎默认包含这个。所以这对我有用:

    在 Xcode 中打开项目 打开 Pods 文件夹,你可能会看到很多子文件夹(包) 右键单击 FirebaseAuth 文件夹并选择删除 然后选择“删除引用”而不是“移至废纸篓” 构建项目 UIWEBVIEW 引用应该消失了

【讨论】:

"Remove References" not "Move to Trash" 的区别?你能解释一下吗 对不起,我不知道有什么区别。删除文件夹时出现错误,但删除引用后一切正常。 "Remove References" 将从 Xcode 中删除文件夹的引用,但该文件夹仍将存在于磁盘上。该文件夹可以再次添加到 Xcode 中。 “移动到垃圾箱”将从 Xcode 中删除文件夹的引用,并从磁盘中删除文件。 Xcode中无法再次添加该文件夹。

以上是关于Flutter: How to fix ITMS-90809: Deprecated API Usage - Apple 将停止接受使用 UIWebView API 的应用程序提交的主要内容,如果未能解决你的问题,请参考以下文章

How to Fix Slow Code in Ruby

How to fix ERR_SSL_VERSION_INTERFERENCE on Chrome?

How to Fix “Failed to play test tone” error on Windows 7, 8 and 10

How to fix Error: listen EADDRINUSE while using nodejs

How to fix updating ubuntu apt-get problem

How to Fix GNOME License Not Accepted Issue on CentOS 7