遵循指南后,Xamarin iOS 应用程序被 UIWebView 拒绝

Che*_*2IT 6 c# uiwebview xamarin.ios xamarin xamarin.forms

我们有一个新的应用程序正在尝试提交到应用程序商店(使用 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 -拒绝-itms-90809

我们有:

  1. 将 Xamarin Forms 升级到 4.6 或更高版本 - 4.6.0.706
  2. 确保 Xamarin.iOS 13.10.0.17 或更高版本 - 13.16.0.13
  3. 删除对 UIWebView 的引用(首先没有)
  4. 确保 IOS 构建设置为“仅链接框架 SDK”(已经是)
  5. 添加了必需的 mtouch 参数:“--optimize=experimental-xforms-product-type”
  6. 更新了所有构建配置(发布/iphone、发布/模拟器、调试/iphone、调试/模拟器)

我还删除了我的包、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
Run Code Online (Sandbox Code Playgroud)

Looks to me like HockeyApp may be one of my culprits. I've already updated the package, but I do know HockeyApp's been migrated to AppCenter, so perhaps this code is no longer maintained. Also see a reference SQLite, which is one set of packages I can't get updated without breaking other parts of my app.

EDIT #3

We've removed HockeyApp but still have the two reference warnings. I've removed SQLIte PCL and re-added it to the most recent version but still see the reference to the storage.ide file, which I think is just a local database file I can ignore. It looks like all that's left is Xamarin.Forms references, but all of this should be dealt with via my mtouch arguments:

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

Can't figure out what I'm missing...

Che*_*2IT 3

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

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

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

附带说明...我的开发环境仍然显示 Xamarin.Forms 中的引用...您只需注意,如果您按照原始文章设置了正确的 MTOUCH 参数,则可以忽略它们。

这是我的 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```
Run Code Online (Sandbox Code Playgroud)