Hi Quinn,
Thank you for the detailed analysis — especially the breakdown of the crashing thread and explanation about the Swift concurrency actor expectation. That was extremely helpful.
I tested your suggestion:
CTFontManagerRegisterFontURLs(cfArray, scope, true) { @Sendable _, _ in true }
Result
This does prevent the crash.
The system “Install Fonts” sheet appears, and tapping Install no longer triggers a trap.
Remaining Issue
Although the crash is fixed, the fonts still do not install system-wide when using the .persistent scope with fonts delivered via Apple-Hosted Background Assets. After tapping Install, nothing appears under:
Settings → General → Fonts → My Fonts
So the concurrency crash is resolved, but the underlying issue remains:
.process registration works
.persistent registration does not install fonts
No errors are returned by CTFontManagerRegisterFontURLs
Next Steps
As you suggested, I am happy to have FB21109320 repurposed to track the missing concurrency annotation on CTFontManagerRegisterFontURLs, since adding @Sendable does avoid the trap.
Thanks again for the help — much appreciated.
Question: Is .persistent font registration intended to work with fonts delivered through Apple-Hosted Background Assets?
Historically, Apple supported this workflow using On-Demand Resources (per WWDC 2019 “Font Management and Text Scaling”).
However, ODR is deprecated and Apple-Hosted Background Assets are the modern replacement (per WWDC 2025 “Discover Apple-Hosted Background Assets”).
So my question is whether:
.persistent font installation should work via AHBAs today, and there may be a bug preventing installation,
or
.persistent installation is currently not supported for asset-pack-hosted fonts, and apps must instead ship those fonts in the app bundle until a future update adds support.
Having clarity on this expected behaviour will help a lot.
Thanks again for your guidance — it’s been extremely helpful.
Topic:
App & System Services
SubTopic:
Processes & Concurrency
Tags: