Thanks for being a part of WWDC25!

How did we do? We’d love to know your thoughts on this year’s conference. Take the survey here

App crashed when click the selected content on HTML with custom font-family

Crash Stack:

thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BREAKPOINT (code=1, subcode=0x19ba3bb04) frame #0: 0x000000019ba3bb04 CoreFoundation`forwarding.cold.2 + 92

frame #1: 0x000000019b8ab718 CoreFoundation`forwarding + 1288

frame #2: 0x000000019b8ab150 CoreFoundation`_CF_forwarding_prep_0 + 96

frame #3: 0x000000019df230b0 CoreText`TCFRef<CTRun*>::Retain(void const*) + 40

frame #4: 0x000000019e052050 CoreText`CreateFontWithFontURL(__CFURL const*, __CFString const*, __CFString const*) + 476

frame #5: 0x000000019e052874 CoreText`TCGFontCache::CopyFont(__CFURL const*, __CFString const*, __CFString const*) + 144

frame #6: 0x000000019df27dcc CoreText`TBaseFont::CopyNativeFont() const + 232

frame #7: 0x000000019df8ee64 CoreText`TBaseFont::GetInitializedGraphicsFont() const + 152

frame #8: 0x000000019df26d70 CoreText`TBaseFont::CopyVariationAxes() const + 296

frame #9: 0x000000019df2d148 CoreText`TDescriptor::InitBaseFont(unsigned long, double) + 768

frame #10: 0x000000019df21358 CoreText`TDescriptor::CreateMatchingDescriptor(__CFSet const*, double, unsigned long) const + 604

frame #11: 0x000000019df251f8 CoreText`CTFontCreateWithFontDescriptor + 68

frame #12: 0x00000001bff8dfb8 WebCore`WebCore::createCTFont(__CFDictionary const*, float, unsigned int, __CFString const*, __CFString const*) + 124

frame #13: 0x00000001bff8e8bc WebCore`WebCore::FontPlatformData::fromIPCData(float, WebCore::FontOrientation&&, WebCore::FontWidthVariant&&, WebCore::TextRenderingMode&&, bool, bool, std::__1::variant<WebCore::FontPlatformSerializedData, WebCore::FontPlatformSerializedCreationData>&&) + 228

frame #14: 0x00000001c128eef4 WebKit`IPC::ArgumentCoder<WebCore::Font, void>::decode(IPC::Decoder&) + 1352

frame #15: 0x00000001c1333ca4 WebKit`std::__1::optional<WTF::HashMap<WTF::String, WebCore::AttributedString::AttributeValue, WTF::DefaultHash<WTF::String>, WTF::HashTraits<WTF::String>, WTF::HashTraits<WebCore::AttributedString::AttributeValue>, WTF::HashTableTraits>> IPC::ArgumentCoder<WTF::HashMap<WTF::String, WebCore::AttributedString::AttributeValue, WTF::DefaultHash<WTF::String>, WTF::HashTraits<WTF::String>, WTF::HashTraits<WebCore::AttributedString::AttributeValue>, WTF::HashTableTraits>, void>::decode<IPC::Decoder>(IPC::Decoder&) + 480

frame #16: 0x00000001c1333a5c WebKit`std::__1::optional<WTF::HashMap<WTF::String, WebCore::AttributedString::AttributeValue, WTF::DefaultHash<WTF::String>, WTF::HashTraits<WTF::String>, WTF::HashTraits<WebCore::AttributedString::AttributeValue>, WTF::HashTableTraits>> IPC::Decoder::decode<WTF::HashMap<WTF::String, WebCore::AttributedString::AttributeValue, WTF::DefaultHash<WTF::String>, WTF::HashTraits<WTF::String>, WTF::HashTraits<WebCore::AttributedString::AttributeValue>, WTF::HashTableTraits>>() + 28

frame #17: 0x00000001c1333804 WebKit`std::__1::optional<std::__1::pair<WebCore::AttributedString::Range, WTF::HashMap<WTF::String, WebCore::AttributedString::AttributeValue, WTF::DefaultHash<WTF::String>, WTF::HashTraits<WTF::String>, WTF::HashTraits<WebCore::AttributedString::AttributeValue>, WTF::HashTableTraits>>> IPC::Decoder::decode<std::__1::pair<WebCore::AttributedString::Range, WTF::HashMap<WTF::String, WebCore::AttributedString::AttributeValue, WTF::DefaultHash<WTF::String>, WTF::HashTraits<WTF::String>, WTF::HashTraits<WebCore::AttributedString::AttributeValue>, WTF::HashTableTraits>>>() + 156

frame #18: 0x00000001c121f368 WebKit`IPC::ArgumentCoder<WebCore::AttributedString, void>::decode(IPC::Decoder&) + 172

frame #19: 0x00000001c121f124 WebKit`std::__1::optional<WebCore::AttributedString> IPC::Decoder::decode<WebCore::AttributedString>() + 28

frame #20: 0x00000001c12594ec WebKit`IPC::ArgumentCoder<WebCore::DictionaryPopupInfo, void>::decode(IPC::Decoder&) + 76

frame #21: 0x00000001c12d0660 WebKit`std::__1::optional<WebCore::DictionaryPopupInfo> IPC::Decoder::decode<WebCore::DictionaryPopupInfo>() + 28

frame #22: 0x00000001c12ceef0 WebKit`IPC::ArgumentCoder<WebKit::WebHitTestResultData, void>::decode(IPC::Decoder&) + 1292

frame #23: 0x00000001c1338950 WebKit`std::__1::optional<WebKit::WebHitTestResultData> IPC::Decoder::decode<WebKit::WebHitTestResultData>() + 28

frame #24: 0x00000001c1ec7edc WebKit`WebKit::WebPageProxy::didReceiveMessage(IPC::Connection&, IPC::Decoder&) + 31392

frame #25: 0x00000001c1fb8f28 WebKit`IPC::MessageReceiverMap::dispatchMessage(IPC::Connection&, IPC::Decoder&) + 272

frame #26: 0x00000001c19ab2c0 WebKit`WebKit::WebProcessProxy::didReceiveMessage(IPC::Connection&, IPC::Decoder&) + 44

frame #27: 0x00000001c1fb3254 WebKit`IPC::Connection::dispatchMessage(WTF::UniqueRef<IPC::Decoder>) + 252

frame #28: 0x00000001c1fb3768 WebKit`IPC::Connection::dispatchIncomingMessages() + 576

frame #29: 0x00000001b9ab90c4 JavaScriptCore`WTF::RunLoop::performWork() + 204

frame #30: 0x00000001b9ab9fec JavaScriptCore`WTF::RunLoop::performWork(void*) + 36

frame #31: 0x000000019b8cc8a4 CoreFoundation`CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE0_PERFORM_FUNCTION + 28

frame #32: 0x000000019b8cc838 CoreFoundation`__CFRunLoopDoSource0 + 176

frame #33: 0x000000019b8cc59c CoreFoundation`__CFRunLoopDoSources0 + 244

frame #34: 0x000000019b8cb138 CoreFoundation`__CFRunLoopRun + 840

frame #35: 0x000000019b8ca734 CoreFoundation`CFRunLoopRunSpecific + 588

frame #36: 0x00000001a6e39530 HIToolbox`RunCurrentEventLoopInMode + 292

frame #37: 0x00000001a6e3f348 HIToolbox`ReceiveNextEventCommon + 676

frame #38: 0x00000001a6e3f508 HIToolbox`_BlockUntilNextEventMatchingListInModeWithFilter + 76

frame #39: 0x000000019f442848 AppKit`_DPSNextEvent + 660

frame #40: 0x000000019fda8c24 AppKit`-[NSApplication(NSEventRouting) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] + 688

frame #41: 0x000000019f435874 AppKit`-[NSApplication run] + 480

frame #42: 0x000000019f40c068 AppKit`NSApplicationMain + 888

frame #43: 0x00000001ca56a70c SwiftUI`merged generic specialization <SwiftUI.TestingAppDelegate> of function signature specialization <Arg[0] = Existential To Protocol Constrained Generic> of SwiftUI.runApp(__C.NSResponder & __C.NSApplicationDelegate) -> Swift.Never + 160

frame #44: 0x00000001ca9e09a0 SwiftUI`SwiftUI.runApp<τ_0_0 where τ_0_0: SwiftUI.App>(τ_0_0) -> Swift.Never + 140

frame #45: 0x00000001cad5ce68 SwiftUI`static SwiftUI.App.main() -> () + 224

frame #46: 0x0000000105943104 MyApp Dev.debug.dylib`static MyMacApp.$main() at <compiler-generated>:0

  • frame #47: 0x0000000105943c9c MyApp Dev.debug.dylib`main at MyMacApp.swift:24:8

frame #48: 0x000000019b464274 dyld`start + 2840

Context:

We’re using a WKWebView in our app, and the HTML content includes a custom font-family. No additional fonts are injected into the WKWebView from the native side.

When selecting content within the HTML and interacting with the selected text—such as clicking on it—the app crashes.

However, on the same MacBook, the app may crash intermittently even without any code changes. In my case, the crash used to occur, but after recovering the custom font-family it no longer happens. And the other colleagues has never had this crash. We have the same MacOS & App version and the same testing methods were used.

App crashed when click the selected content on HTML with custom font-family
 
 
Q