When I use - webView: startURLSchemeTask:
, I had some crash with iOS 14(14.1, 14.2, 14.3, 14.4).
There is the code:
- (void)webView:(WKWebView *)webView startURLSchemeTask:(id<WKURLSchemeTask>)urlSchemeTask API_AVAILABLE(ios(11.0)){
/// iOS 13可能有崩溃
NSString *version = [[UIDevice currentDevice] systemVersion];
if ([version containsString:@"13."]) {
SEL sel = sel_registerName("_setLoadResourcesSerially:");
id webViewClass = NSClassFromString(@"WebView");
if ([webViewClass respondsToSelector:sel]) {
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Warc-performSelector-leaks"
[webViewClass performSelector:sel withObject:@(FALSE)];
#pragma clang diagnostic pop
}
}//fi
self.holdUrlSchemeTasks[urlSchemeTask.description] = @(TRUE);
SCNADHtmlPreloadContext *context = [[SCNADHtmlPreloadContext alloc] init];
context.requestURL = [urlSchemeTask.request.URL.absoluteString copy]; // line 50
context.request = [urlSchemeTask.request copy];
// todo with context
......
}
- (void)webView:(WKWebView *)webView stopURLSchemeTask:(id<WKURLSchemeTask>)urlSchemeTask API_AVAILABLE(ios(11.0)){
dispatch_async(dispatch_get_main_queue(), ^{
self.holdUrlSchemeTasks[urlSchemeTask.description] = @(FALSE);
});
}
There is the crash info:
#0 Thread
SIGSEGV
SEGV_ACCERR
WebCore
void ***::__visitor_table<***::Visitor<WebCore::FormData::resolveBlobReferences(WebCore::BlobRegistryImpl*)::$_8, WebCore::FormData::resolveBlobReferences(WebCore::BlobRegistryImpl*)::$_9, WebCore::FormData::resolveBlobReferences(WebCore::BlobRegistryImpl*)::$_10>, ***::Vector<char, 0ul, ***::CrashOnOverflow, 16ul, ***::FastMalloc>, WebCore::FormDataElement::EncodedFileData, WebCore::FormDataElement::EncodedBlobData>::__trampoline_func<WebCore::FormDataElement::EncodedBlobData>(***::Visitor<WebCore::FormData::resolveBlobReferences(WebCore::BlobRegistryImpl*)::$_8, WebCore::FormData::resolveBlobReferences(WebCore::BlobRegistryImpl*)::$_9, WebCore::FormData::resolveBlobReferences(WebCore::BlobRegistryImpl*)::$_10>&, ***::Variant<***::Vector<char, 0ul, ***::CrashOnOverflow, 16ul, ***::FastMalloc>, WebCore::FormDataElement::EncodedFileData, WebCore::FormDataElement::EncodedBlobData>&) + 68
WebKit::WebURLSchemeTask::nsRequest() const + 68
-[SNADURLSchemeHandler webView:startURLSchemeTask:] (SNADURLSchemeHandler.m:50)
Who knows the reason, please help me, thanks!