Xamarin iOS 应用在遵循指南后被 UIWebView 拒绝

Xamarin iOS app being rejected for UIWebView after following guide

我们有一个新应用正尝试提交到应用商店(使用 TestFlight 进行预发布 beta 测试),但由于引用 UIWebView 而收到无效二进制消息:

TMS-90809: Deprecated API Usage - New apps that use UIWebView are no longer accepted. Instead, use WKWebView for improved security and reliability.

我们在此处遵循了 Xamarin 提供的指南:https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/webview?tabs=macos#uiwebview-deprecation-and-app-store-rejection-itms-90809

我们有:

  1. 已将 Xamarin Forms 升级到 4.6 或更高版本 - 4.6.0.706
  2. 确保 Xamarin.iOS 13.10.0.17 或更高版本 - 13.16.0.13
  3. 删除对 UIWebView 的引用(none 首先)
  4. 确保 IOS 构建设置为 "Link Framework SDKs Only"(已经是)
  5. 添加了所需的 mtouch 参数:“--optimize=experimental-xforms-product-type”
  6. 更新了所有构建配置(release/iphone、release/simulator、debug/iphone、debug/simulator)

我还删除了我的包、bin 和对象文件夹以确保我获得完整构建,但在上传时继续收到此响应。

编辑:我将警告标志添加到我的 MTOUCH 以查看它的使用位置,现在我确实看到了警告,所以它就在那里……某处。

已添加警告代码: --warn-on-type-ref=UIKit.UIWebView

生成警告:

我怎样才能找到正在使用 UIWebView 的包而不是随意更新它们并希望这样做(没有其他意外后果)?

编辑#2: 我按照下面的建议进行了 GREP 搜索 - 这是我的结果

grep -r 'UIWebView' .
Binary file ./.vs/NorthernLights/xs/sqlite3/storage.ide matches
./iOS/NorthernLights.iOS.csproj:    <MtouchExtraArgs>--optimize=experimental-xforms-product-type --warn-on-type-ref=UIKit.UIWebView</MtouchExtraArgs>
Binary file ./packages/Xamarin.Forms.4.6.0.726/buildTransitive/XCODE10/Xamarin.Forms.Platform.iOS.dll matches
Binary file ./packages/Xamarin.Forms.4.6.0.726/buildTransitive/XCODE11/Xamarin.Forms.Platform.iOS.dll matches
Binary file ./packages/Xamarin.Forms.4.6.0.726/build/XCODE10/Xamarin.Forms.Platform.iOS.dll matches
Binary file ./packages/Xamarin.Forms.4.6.0.726/build/XCODE11/Xamarin.Forms.Platform.iOS.dll matches
Binary file ./packages/HockeySDK.Xamarin.5.2.0/lib/Xamarin.iOS10/HockeySDK.iOSBindings.dll matches

在我看来,HockeyApp 可能是我的罪魁祸首之一。我已经更新了包,但我知道 HockeyApp 已经迁移到 AppCenter,所以可能不再维护此代码。另请参阅参考 SQLite,这是一组我无法在不破坏应用程序其他部分的情况下更新的包。

编辑#3

我们已经删除了 HockeyApp,但仍然有两个参考警告。我删除了 SQLIte PCL 并将其重新添加到最新版本,但仍然看到对 storage.ide 文件的引用,我 认为 只是一个我可以忽略的本地数据库文件。看起来剩下的就是 Xamarin.Forms 个引用,但是所有这些都应该通过我的 mtouch 参数来处理:

<MtouchExtraArgs>--optimize=experimental-xforms-product-type --warn-on-type-ref=UIKit.UIWebView</MtouchExtraArg

无法弄清楚我错过了什么...

好吧,我想出了我自己的例子。 grep 工具很棒,一旦我知道要寻找什么和忽略什么:

  1. 删除所有 bin/obj 文件夹以减少混乱。
  2. 打开终端,导航到项目文件夹,然后运行grep -r UIWebView .
  3. 查看结果并查找引用它的第 3 方 NuGet 包。

由于 MTOUCH 规则,我可以安全地忽略 Xamarin.Forms 引用,虽然我不知道 SQLLite 引用是什么,但这不是问题所在。就我而言,唯一重要的是 HockeyApp,它是我们使用的崩溃记录工具,但已被弃用并被 Microsoft AppCenter 取代。该代码似乎没有得到维护(不足为奇),并且其中仍然包含该引用。一旦我们删除了 HockeyApp 和相关代码,我们就能够在没有问题/警告的情况下提交。

附带说明...我的开发环境仍然显示 Xamarin.Forms 中的引用...您只需要知道,如果您根据原创文章。

这是我的 grep 结果,唯一重要的是 HockeyApp 参考。

Binary file ./.vs/NorthernLights/xs/sqlite3/storage.ide matches
./iOS/NorthernLights.iOS.csproj:    <MtouchExtraArgs>--optimize=experimental-xforms-product-type --warn-on-type-ref=UIKit.UIWebView</MtouchExtraArgs>
Binary file ./packages/Xamarin.Forms.4.6.0.726/buildTransitive/XCODE10/Xamarin.Forms.Platform.iOS.dll matches
Binary file ./packages/Xamarin.Forms.4.6.0.726/buildTransitive/XCODE11/Xamarin.Forms.Platform.iOS.dll matches
Binary file ./packages/Xamarin.Forms.4.6.0.726/build/XCODE10/Xamarin.Forms.Platform.iOS.dll matches
Binary file ./packages/Xamarin.Forms.4.6.0.726/build/XCODE11/Xamarin.Forms.Platform.iOS.dll matches
Binary file ./packages/HockeySDK.Xamarin.5.2.0/lib/Xamarin.iOS10/HockeySDK.iOSBindings.dll matches```