macOS 14+ compatibility + Japanese IME input fix#44
Merged
Conversation
Lower the deployment target from macOS 26 to macOS 14 — the real floor, set by SwiftData (@model) in DumpStore, not by any Tahoe feature. Every Tahoe-only surface is optional and degrades gracefully below 26: - Apple Intelligence (FoundationModels) is weak-linked and #available-gated; Settings shows "Requires macOS 26" rather than a dead control. - Liquid Glass falls back to a vibrancy surface (already gated). - apple.intelligence / wand.and.sparkles are macOS 15+ SF Symbols that would render as a missing-glyph box on 14 (the compiler can't catch symbol strings). A new Image(systemName:fallback:) helper probes the running OS and substitutes an always-available glyph (sparkles / wand.and.stars). Verified against the SF Symbols availability DB and a clean build at minos 14.0 with all 40 tests passing.
Japanese/Chinese/Korean input composes as marked text before it commits. textDidChange fires on every keystroke while composing, and it was reformatting the text storage (normalizeBodyRuns) and opening the @-mention menu over that provisional text — stripping the IME's marked-text styling, letting the menu steal the Return that confirms a candidate, and serializing text the user could still cancel. Guard the heavy path (normalize, mention scan, serialize, lint) on tv.hasMarkedText() and defer chip deletion to the input system while composing; the settled text is handled by the commit's final textDidChange.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Lowers the minimum macOS version from 26 (Tahoe) to 14 (Sonoma) and fixes Japanese/CJK text input in the canvas editor. No behavior change on Tahoe.
macOS 14+ compatibility
Tahoe-only APIs were already gated; the audit confirmed there are zero unguarded ones (proven by a clean compile at the lowered target). The real floor is SwiftData
@Model(board persistence), which requires macOS 14 — not any Tahoe feature..macOS(.v26)→.macOS(.v14);MIN_SYSTEM_VERSION26.0→14.0(Info.plistLSMinimumSystemVersion).#available(macOS 26)-gated; Settings shows "Requires macOS 26" instead of a dead control. Liquid Glass keeps its vibrancy fallback.apple.intelligenceandwand.and.sparklesare macOS 15+, so they'd render as missing-glyph boxes on 14. AddedImage(systemName:fallback:)(probes the running OS viaNSImage(systemSymbolName:)) → falls back tosparkles/wand.and.stars(both macOS 10.15). Verified every symbol string in the app against the on-device SF Symbols availability DB; only these two were above the floor.Japanese IME input fix
Japanese/Chinese/Korean input composes as marked text before committing.
textDidChangefires on every composing keystroke and was:normalizeBodyRuns) over the provisional run — stripping the IME's marked-text styling,@-mention menu on half-composed text — letting it steal the Return that confirms a candidate,Fix: guard the heavy path on
tv.hasMarkedText()and defer chip deletion to the input system while composing. Settled text is handled by the commit's finaltextDidChange.Verification
minos 14.0; all 40 tests pass.Info.plistreportsLSMinimumSystemVersion 14.0.こんにちは!日本語入力テスト — Japanese IME works 🎉round-tripped intact.Not verified: on-device launch on real macOS 14/15 hardware, and keyboard IME composition typed by hand (can't drive the input method from CI). Both warrant a manual smoke test before release.