Follow-up with what we've learned since the original post.
Updated scope
16 customer reports so far, all on iOS 27.0. Devices are mostly iPhone 18 Pro and 18 Pro Max, plus one iPhone 17. We also reproduce it on an iPhone Air in our office.
Five customers say it started right after they moved to a new iPhone. Two of them say they never saw it on their previous phone (an iPhone 14 Pro and an iPhone 15 Pro). It also happens with free fonts, so it isn't tied to purchases.
We cannot reproduce it on an iPhone 14 Pro, either on iOS 27.0 or on iOS 27.2 beta (24B5084k). We rebooted the 14 Pro twice with the font active, once with English as the primary language and once with Korean, and the font stayed both times.
Registration call, to fill in the gap in my first post: CTFontManagerRegisterFontURLs with kCTFontManagerScopePersistent, on font file URLs inside On-Demand Resources asset packs. The app has the com.apple.developer.user-fonts entitlement with app-usage and system-installation.
Two more details
After the reboot, our app still shows the fonts as installed, but the system no longer has them. Settings, Kakao Talk and other apps don't see them, and relaunching our app doesn't bring them back. The only way back is to reactivate the font in our app.
On our iPhone Air, reactivating shows the first-time font installation consent prompt again. It looks as if the system forgot our app as a font provider, not just the individual fonts. That's hard to explain with an On-Demand Resources purge, which shouldn't reset the provider consent.
What we think is happening
We compared fontservicesd across the iOS 26.6.2, 27.0 and 27.2 beta restore images. At launch, it checks every known font provider by looking up its bundle identifier with LSApplicationRecord (allowPlaceholder:NO, no error handling). If that lookup returns nil, it logs stray provider "%@" detected, unregisters that provider's fonts, deletes the copies under UserFonts, and forgets the provider.
This matches all three symptoms: fonts gone from Settings and other apps, our app still thinks they're active, and the consent prompt comes back. The code is the same in 26.6.2, 27.0 and 27.2 beta, so our guess is that the LaunchServices lookup fails early in boot on newer devices. That would explain why we only see it on current hardware. We haven't been able to confirm this from device logs, because the message bodies are redacted as <private> and there's no Apple-signed logging profile for FontServices or LaunchServices.
Questions
Can you confirm whether the stray provider check in fontservicesd can remove a provider that's still installed, if LaunchServices isn't ready or returns an error at that moment?
If so, is there anything a font provider app can do to avoid it? Right now our only option is to detect the missing fonts when the user opens our app and ask them to reactivate, which means going through the consent prompt again after every reboot.
Is there a logging profile, or another way, to see the unredacted FontServices and LaunchServices messages on a customer device? That would let us send you a log from an affected device showing the exact path.
Since the check is unchanged in 27.2 beta, we expect this to continue after 27.2 ships. Happy to provide more if it helps.
Thanks.
Topic:
App & System Services
SubTopic:
General
Tags: