WKContentRuleListStore.default() 在 iOS 14 时崩溃
WKContentRuleListStore.default() crash in iOS 14
我的应用使用 WKContentRuleListStore
进行内容拦截。但是,当我尝试使用 Swift 5.3/iOS 14 进行编译时,我在尝试实例化 WKContentRuleListStore.default()
.
时遇到运行时崩溃
我没有注意到 iOS 13 中的崩溃,甚至在 iOS 14 上使用 iOS 13 SDK 和 运行 进行构建时也没有注意到。
显示的错误仅在调用站点 EXC_BREAKPOINT (code=EXC_I386_BPT, subcode=0x0)
。
堆栈跟踪:
#0 0x00007fff28541233 in WTFCrashWithInfo(int, char const*, char const*, int) ()
#1 0x00007fff286c6868 in WebKit::runInitializationCode(void*) ()
#2 0x00007fff202cbf2a in std::__1::__call_once(unsigned long volatile&, void*, void (*)(void*)) ()
#3 0x00007fff286c3623 in WebKit::InitializeWebKit2() ()
#4 0x00007fff288e23ea in API::ContentRuleListStore::ContentRuleListStore(WTF::String const&, bool) ()
#5 0x00007fff288e2348 in API::ContentRuleListStore::ContentRuleListStore(bool) ()
#6 0x00007fff288e23ac in API::ContentRuleListStore::nonLegacyDefaultStore() ()
#7 0x00007fff2876013d in +[WKContentRuleListStore defaultStore] ()
#8 0x000000010c797fa9 in static WebViewRules.compile() at /MyApp/Features/WebView/WebViewRules.swift:36
很快找到了解决方案,但想为 运行 遇到相同问题的任何人记录下来。
WKContentRuleListStore.default()
必须在 主线程 上调用。看来这是 iOS 14 和相应的 SDK 中引入的新(未记录)要求。
DispatchQueue.main.async {
let store = WKContentRuleListStore.default()
// use the store...
}
我的应用使用 WKContentRuleListStore
进行内容拦截。但是,当我尝试使用 Swift 5.3/iOS 14 进行编译时,我在尝试实例化 WKContentRuleListStore.default()
.
我没有注意到 iOS 13 中的崩溃,甚至在 iOS 14 上使用 iOS 13 SDK 和 运行 进行构建时也没有注意到。
显示的错误仅在调用站点 EXC_BREAKPOINT (code=EXC_I386_BPT, subcode=0x0)
。
堆栈跟踪:
#0 0x00007fff28541233 in WTFCrashWithInfo(int, char const*, char const*, int) ()
#1 0x00007fff286c6868 in WebKit::runInitializationCode(void*) ()
#2 0x00007fff202cbf2a in std::__1::__call_once(unsigned long volatile&, void*, void (*)(void*)) ()
#3 0x00007fff286c3623 in WebKit::InitializeWebKit2() ()
#4 0x00007fff288e23ea in API::ContentRuleListStore::ContentRuleListStore(WTF::String const&, bool) ()
#5 0x00007fff288e2348 in API::ContentRuleListStore::ContentRuleListStore(bool) ()
#6 0x00007fff288e23ac in API::ContentRuleListStore::nonLegacyDefaultStore() ()
#7 0x00007fff2876013d in +[WKContentRuleListStore defaultStore] ()
#8 0x000000010c797fa9 in static WebViewRules.compile() at /MyApp/Features/WebView/WebViewRules.swift:36
很快找到了解决方案,但想为 运行 遇到相同问题的任何人记录下来。
WKContentRuleListStore.default()
必须在 主线程 上调用。看来这是 iOS 14 和相应的 SDK 中引入的新(未记录)要求。
DispatchQueue.main.async {
let store = WKContentRuleListStore.default()
// use the store...
}