上传 Xamarin 应用程序时无法解决 UIWebView 警告的弃用
Unable to Resolve Deprecation of UIWebView warning while uploading Xamarin application
我已关注博客 https://devblogs.microsoft.com/xamarin/uiwebview-deprecation-xamarin-forms/ 以删除项目中的 UIWebView 依赖项。
根据文档
1)xamarin.forms版本为4.6
2)xamarin.ios版本为13.20
3)我在 mtouch 参数中添加了命令,linker 是 link All
我在上传构建以测试飞行时仍然收到警告
然后我关注了这个文档https://docs.microsoft.com/en-us/xamarin/ios/release-notes/13/13.16#help-with-uiwebview-deprecation,我们可以在其中找出 UIWebView 是否仍在我们的 application.I 中使用,我在构建输出中得到以下结果。
MTOUCH : warning MT1502: One or more reference(s) to type 'UIKit.UIWebView' already exists inside 'Xamarin.Forms.Platform.iOS, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null' before linking
我不确定为什么 Xamarin.Forms.Platform.iOS 中有参考,因为 xamarin 包已根据博客更新到 4.6。
任何人都可以帮我摆脱这个警告吗?
请关注这个link
只需转到您的 iOS 项目,打开项目属性并在
'additional mtouch arguments field: --optimize=experimental-xforms-product-type' 在你的
使用 WKWebView 而不是 UIWebView。 UIWebView 已被弃用,从 2020 年 4 月起,App Store 将不再接受使用 UIWebView 的新应用。
using System.IO;
using CustomRenderer;
using CustomRenderer.iOS;
using Foundation;
using UIKit;
using WebKit;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;
[assembly: ExportRenderer(typeof(CustomWebView), typeof(WebViewRender_iOS))]
namespace CustomRenderer.iOS
{
public class WebViewRender_iOS : WkWebViewRenderer
{
WKUserContentController userController;
protected override void OnElementChanged(VisualElementChangedEventArgs e)
{
base.OnElementChanged(e);
if (e.OldElement != null)
{
userController.RemoveAllUserScripts();
userController.RemoveScriptMessageHandler("invokeAction");
CustomWebView hybridWebView = e.OldElement as CustomWebView;
hybridWebView.Cleanup();
}
if (e.NewElement != null)
{
CustomWebView hybridWebView = e.NewElement as CustomWebView;
LoadRequest(new NSUrlRequest(new NSUrl(hybridWebView._WebURI)));
}
}
}
}
要使弃用警告消失,需要进行一些不同的更改。
- iOS 构建部分中用于上传到商店(Release|iPhone、App Store|iPhone 等)的构建配置需要以下额外的 mtouch 参数
--optimize=experimental-xforms-product-type
- 应用程序需要使用 Xamarin.Forms 版本 >= 4.5 或 >= 4.6 如果使用 Material Visual
- 它还需要使用 Xamarin.iOS 13.10.0.17 或更高版本,Visual Studio 包含在 Mac 8.4.1 和 Visual Studio 16.4.3 中。
- 删除代码库中对
UIWebView
的所有引用
更多信息包含在 docs 中,如果这不能解决问题,应用程序可能正在使用 third-party 库,其中引用了需要更新的 UIWebView
到没有它的版本或完全从应用程序中删除。
谢谢大家的建议。以下是对我有用的。
按照中提到的 3 个步骤进行操作
https://devblogs.microsoft.com/xamarin/uiwebview-deprecation-xamarin-forms/
运行 grep -r UIWebview .
在存储库级别。它将显示 .sln 和第三方包中的引用列表
删除或更新第三方库。忽略 bin 和 obj 文件夹
对我来说,我不得不
1.Remove 弃用 scanbot.xamarin.ios SDK 并添加 scanbot.xamarin pkg
2.Remove 曲棍球应用程序 SDK,因为它已被弃用并且没有任何更新
3.Remove googleanalytics SDK,因为它没有在项目中使用
我已关注博客 https://devblogs.microsoft.com/xamarin/uiwebview-deprecation-xamarin-forms/ 以删除项目中的 UIWebView 依赖项。
根据文档
1)xamarin.forms版本为4.6 2)xamarin.ios版本为13.20 3)我在 mtouch 参数中添加了命令,linker 是 link All
我在上传构建以测试飞行时仍然收到警告
然后我关注了这个文档https://docs.microsoft.com/en-us/xamarin/ios/release-notes/13/13.16#help-with-uiwebview-deprecation,我们可以在其中找出 UIWebView 是否仍在我们的 application.I 中使用,我在构建输出中得到以下结果。
MTOUCH : warning MT1502: One or more reference(s) to type 'UIKit.UIWebView' already exists inside 'Xamarin.Forms.Platform.iOS, Version=2.0.0.0, Culture=neutral, PublicKeyToken=null' before linking
我不确定为什么 Xamarin.Forms.Platform.iOS 中有参考,因为 xamarin 包已根据博客更新到 4.6。
任何人都可以帮我摆脱这个警告吗?
请关注这个link
只需转到您的 iOS 项目,打开项目属性并在 'additional mtouch arguments field: --optimize=experimental-xforms-product-type' 在你的
使用 WKWebView 而不是 UIWebView。 UIWebView 已被弃用,从 2020 年 4 月起,App Store 将不再接受使用 UIWebView 的新应用。
using System.IO;
using CustomRenderer;
using CustomRenderer.iOS;
using Foundation;
using UIKit;
using WebKit;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;
[assembly: ExportRenderer(typeof(CustomWebView), typeof(WebViewRender_iOS))]
namespace CustomRenderer.iOS
{
public class WebViewRender_iOS : WkWebViewRenderer
{
WKUserContentController userController;
protected override void OnElementChanged(VisualElementChangedEventArgs e)
{
base.OnElementChanged(e);
if (e.OldElement != null)
{
userController.RemoveAllUserScripts();
userController.RemoveScriptMessageHandler("invokeAction");
CustomWebView hybridWebView = e.OldElement as CustomWebView;
hybridWebView.Cleanup();
}
if (e.NewElement != null)
{
CustomWebView hybridWebView = e.NewElement as CustomWebView;
LoadRequest(new NSUrlRequest(new NSUrl(hybridWebView._WebURI)));
}
}
}
}
要使弃用警告消失,需要进行一些不同的更改。
- iOS 构建部分中用于上传到商店(Release|iPhone、App Store|iPhone 等)的构建配置需要以下额外的 mtouch 参数
--optimize=experimental-xforms-product-type
- 应用程序需要使用 Xamarin.Forms 版本 >= 4.5 或 >= 4.6 如果使用 Material Visual
- 它还需要使用 Xamarin.iOS 13.10.0.17 或更高版本,Visual Studio 包含在 Mac 8.4.1 和 Visual Studio 16.4.3 中。
- 删除代码库中对
UIWebView
的所有引用
更多信息包含在 docs 中,如果这不能解决问题,应用程序可能正在使用 third-party 库,其中引用了需要更新的 UIWebView
到没有它的版本或完全从应用程序中删除。
谢谢大家的建议。以下是对我有用的。
按照中提到的 3 个步骤进行操作 https://devblogs.microsoft.com/xamarin/uiwebview-deprecation-xamarin-forms/
运行
grep -r UIWebview .
在存储库级别。它将显示 .sln 和第三方包中的引用列表删除或更新第三方库。忽略 bin 和 obj 文件夹
对我来说,我不得不
1.Remove 弃用 scanbot.xamarin.ios SDK 并添加 scanbot.xamarin pkg
2.Remove 曲棍球应用程序 SDK,因为它已被弃用并且没有任何更新
3.Remove googleanalytics SDK,因为它没有在项目中使用