Xamarin.forms ITMS-90809:不推荐的API使用Apple将停止接受使用UIWebView API的应用提交

Xamarin.forms ITMS-90809:不推荐的API使用Apple将停止接受使用UIWebView API的应用提交,xamarin.forms,webview,app-store,Xamarin.forms,Webview,App Store,我看到了一些标题相同的其他问题,但我的问题不同 昨天,我将我的应用程序上传到TestFlight,过了一会儿,苹果向我发送了以下警告: ITMS-90809:不推荐的API使用-苹果将停止接受使用UIWebView API的应用提交。有关更多信息,请参阅。 我正在使用WebView在我的应用程序中显示HTML数据。此外,我还使用了WebView播放音频和视频。那么,这是在提交审查时拒绝我的应用程序的警告,还是我应该用其他API更改这些功能 在AppStore提供的这篇文章中,我讲述了如何使用WK

我看到了一些标题相同的其他问题,但我的问题不同

昨天,我将我的应用程序上传到TestFlight,过了一会儿,苹果向我发送了以下警告:

ITMS-90809:不推荐的API使用-苹果将停止接受使用UIWebView API的应用提交。有关更多信息,请参阅。

我正在使用
WebView
在我的应用程序中显示HTML数据。此外,我还使用了
WebView
播放音频和视频。那么,这是在提交审查时拒绝我的应用程序的警告,还是我应该用其他API更改这些功能

在AppStore提供的这篇文章中,我讲述了如何使用
WKWebView
而不是
UIWebView
,我尝试了这一点,但在XAML上找不到这样的属性。我是否需要安装任何软件包才能获得该功能?另外,通过使用
WKWebView
,是否可以在应用程序中播放音频、视频和显示HTML数据

更新1

使用自定义渲染器时获取
System.ArumentNullException
。我错过什么了吗

更新2:渲染器代码 PCL

public class MyWebView : WebView
{
    public static readonly BindableProperty UrlProperty = BindableProperty.Create(
        propertyName: "Url",
        returnType: typeof(string),
        declaringType: typeof(MyWebView),
        defaultValue: default(string));

    public string Url
    {
        get { return (string)GetValue(UrlProperty); }
        set { SetValue(UrlProperty, value); }
    }
}
<StackLayout>
    <local:MyWebView Url="https://www.microsoft.com" VerticalOptions="FillAndExpand"/>
</StackLayout>
iOS上此类的自定义呈现程序:

[assembly: ExportRenderer(typeof(MyWebView), typeof(MyWebViewRenderer))]
namespace WKWebViewDemo.iOS
{
    public class MyWebViewRenderer : ViewRenderer<MyWebView, WKWebView>
    {
        WKWebView _wkWebView;
        protected override void OnElementChanged(ElementChangedEventArgs<MyWebView> e)
        {
            base.OnElementChanged(e);

            if (Control == null)
            {
                var config = new WKWebViewConfiguration();
                _wkWebView = new WKWebView(Frame, config);
                SetNativeControl(_wkWebView);
            }
            if (e.NewElement != null)
            {
                Control.LoadRequest(new NSUrlRequest(new NSUrl(Element.Url)));
            }
        }
    }
}
[程序集:ExportRenderer(typeof(MyWebView)、typeof(MyWebViewRenderer))]
命名空间WKWebViewDemo.iOS
{
公共类MyWebViewRenderer:ViewRenderer
{
WKWebView WKWebView;
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
if(Control==null)
{
var config=新的WKWebViewConfiguration();
_wkWebView=新的wkWebView(框架,配置);
SetNativeControl(_wkWebView);
}
if(例如NewElement!=null)
{
LoadRequest(新的NSUrlRequest(新的NSUrl(Element.Url));
}
}
}
}
XAML

public class MyWebView : WebView
{
    public static readonly BindableProperty UrlProperty = BindableProperty.Create(
        propertyName: "Url",
        returnType: typeof(string),
        declaringType: typeof(MyWebView),
        defaultValue: default(string));

    public string Url
    {
        get { return (string)GetValue(UrlProperty); }
        set { SetValue(UrlProperty, value); }
    }
}
<StackLayout>
    <local:MyWebView Url="https://www.microsoft.com" VerticalOptions="FillAndExpand"/>
</StackLayout>

更新

此问题已解决,可在以下答案中找到解决方案

这是Xamarin的一个开放bug

到目前为止,我在线程上没有看到任何解决方法或其他内容,但您可以等待Xamarin.Forms的下一版本对其进行修复


更新:看到一个可能有效的解决方法检查此项

是否有效?理想情况下,这应该是可行的,继续并运行它。另外,如果您有最新的XF,我想您已经准备好了
WKWebViewRenderer
。我不确定Though我会用这个做试飞并给你更新,谢谢。我用屏幕截图编辑了这个问题,你能看一下吗?你确定第二个if条件中的控件永远不会为空吗?我创建了一个新项目并在那里添加了你的代码,它在我这边起作用。你的项目中还有其他代码吗?@JackHua MSFT没有添加其他代码,你能分享一个示例吗?你可以检查示例,让我知道它是否适合你。@JackHua MSFT我测试了你的示例代码,它工作得很好。我在我的项目中使用了完全相同的代码,但显示了异常。我使用的是XF版本:4.3.0.778476-pre1,是否还有其他原因导致此异常?我在4.3.0.778476-pre1下测试了我的示例,它也可以工作。如果你能和我分享你的项目,我可以帮你查一下。