Skip to content

Fix SwiftUI accessibility, structure, and Swift 6 readiness - #2

Open
umzcio wants to merge 8 commits into
masterfrom
bug/swiftui-pro-fixes
Open

Fix SwiftUI accessibility, structure, and Swift 6 readiness#2
umzcio wants to merge 8 commits into
masterfrom
bug/swiftui-pro-fixes

Conversation

@umzcio

@umzcio umzcio commented Jul 23, 2026

Copy link
Copy Markdown
Owner

Summary

  • improve VoiceOver semantics, Reduce Motion behavior, and adaptive Help presentation
  • decompose ContentView into focused SwiftUI components
  • migrate the app and tests to Swift 6 complete concurrency checking while retaining macOS 13 support

Testing

  • clean Debug build with xcodebuild
  • full macOS test suite: 45 tests passed

umzcio and others added 8 commits July 22, 2026 18:48
The macos-14 image is deprecated and its Xcode tops out at Swift 5
("SWIFT_VERSION '6.0' is unsupported"), so this branch's strict Swift 6
migration could never build there. macos-26 ships Xcode 27, which covers
SWIFT_DEFAULT_ACTOR_ISOLATION (Swift 6.2+) and still builds the Swift 5
code on master.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
deinit hardening: replace MainActor.assumeIsolated in all nine deinits with
direct nonisolated teardown. assumeIsolated traps if the last reference is
released off the main thread (realistic via escaping async closures); the
operations themselves (Timer.invalidate, removeObserver, DispatchSource
cancel, NSEvent.removeMonitor) are nonisolated APIs, and deinit has exclusive
access to stored properties. Timers and the escape-monitor token gain
nonisolated(unsafe) — all live access stays on the main actor; the annotation
exists solely for deinit. SourceEditorView's deinit inlines the nonisolated
subset of teardown() (delegate is weak, nil-outs pointless in deinit);
dismantleNSView still runs the full teardown on the main actor.

Comment restoration: the ContentView decomposition dropped several
regression-guard comments while keeping the code they explain. Restored:
.id(document.id) stale-outline rationale (NormalContentView), scroll-Y
snapshot + Plan 003 per-document diagram-tick keying (MarkdownTextView),
Reduce Motion grouped fade (WelcomeView), drop recursion/cap/toast rationale
(DropHandler), minimap wiring + contentVersion proxy rationale
(SourceEditorWithMinimap), split-pane header doc (SplitPaneHeader).

Build clean, 45/45 tests pass, launch smoke-tested.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant