What's Changed
Refinements from a peer code review of 6.0.0 (review by Codex, fixes by Claude).
- Reverted the
@MainActorisolation introduced in 6.0.0. It broke consumers callingblast()from background threads or nonisolated synchronous code. Shared state is now protected by an internal lock instead, restoring the pre-6.0 call-from-anywhere contract while remaining safe under Swift 6 strict concurrency (verified with a strict-concurrency client on a background queue). - Already-registered fonts are now reported as loaded. Re-blasting a bundle (or blasting a font registered earlier in the process) previously treated CoreText's already-registered error as a failure and reported nothing; those fonts' PostScript names are now still returned, and
loadedFontsis explicitly de-duplicated. - Hidden files are skipped during scanning, so AppleDouble
._*sidecar files no longer produce noisy registration failures. - Documented that registered fonts are file-backed: don't move or delete a font file while it's registered.
- Expanded the test suite: out-of-bundle directories (verifying
.process-scope registration works outside the app bundle on iOS), uppercase extensions, paths with spaces, invalid font files, and already-registered reporting. CI now runs the tests on an iOS Simulator in addition to macOS. - Fixed invalid
FontBlaster.blast(bundle:)placeholder calls in the README examples.
Full Changelog: 6.0.0...6.0.1