0.3.0
Breaking changes
NSViewController transition state is removed
The NSViewController (TransitionState) category is gone with no replacement:
transitionStateTrackingEnabled, isBeingPresented and isBeingDismissed. These are
category methods, so a binary built against 0.2.x does not fail to link — it raises
doesNotRecognizeSelector: the first time one is called. Source referencing them fails to
compile.
Both probes were permanently wedged. An appearance AppKit starts and then abandons set the
BeingPresented flag, and only -viewDidAppear cleared it, so every real dismiss afterwards
answered NO; separately, window.orderOut(nil), minimising and restoring each reported a
dismiss and a present for a controller that went nowhere. That was the module's entire public
contract. The two other flags the README advertised —
isMovingToParentViewController / isMovingFromParentViewController — were never implemented.
Migration. If you need real transition phases, use View Controller Transitioning
(NSViewControllerTransitionCoordinator and friends). If you only wanted to tell a temporary
disappearance from a permanent one, test self.view.window == nil or
self.parentViewController == nil directly — more reliable than what this module inferred.
NSOutlineViewDiffableDataSource: the top-level snapshot now follows the section snapshots
No signature changed, but three behaviours did. The top-level snapshot's item list for a section
is now always equal to that section snapshot's visibleItems, matching
UICollectionViewDiffableDataSource. snapshot() therefore returns items, not just section
identifiers, so the ordinary "take the snapshot, edit it, apply it" idiom works — it previously
did nothing or threw.
- Applying a freshly built top-level snapshot that lists sections but no items now empties
those sections, as it does in UIKit. It used to leave their contents alone. A snapshot
obtained fromsnapshot()carries its items, so round-tripping is unaffected. applySnapshot:toSection:appends a section that is not yet in the top-level snapshot
instead of asserting.- On a sectioned data source with no
sectionHeaderViewProvider, section rows are rendered by
a built-in default header and are group rows. Previously the section identifier was passed to
yourcellProvider, which Objective-C callers may have relied on to draw section rows.
Fixes
- A user expanding a row by hand was not recorded in the section snapshot unless a lazy-loading
handler was installed, so the next apply collapsed it again. - Mixing top-level and per-section applies could show duplicated or misplaced rows once a section
contained nested items: view updates were dispatched by flat top-level index, which does not
match the rowsNSOutlineViewdraws. They are now computed from the visible items. - Root-level items could not be reordered in sectionless mode.
applySnapshotUsingReloadData:ignored items on a sectioned data source.- The post-animation repair in sectionless mode was a no-op.
- A sectioned data source with no
sectionHeaderViewProvidertrapped in the Swift layer. - The Swift reordering handlers reported only the first item of a multi-item drag.
Warning
AppKitPlus is in testing. No API or ABI stability is promised.
Any release may remove classes, change type layouts, or change protocol requirements, with no
deprecation period. Pin an exact version and read these notes before upgrading.
Installation
.package(url: "https://github.com/AppKitSupportProgram/AppKitPlus-Release", from: "0.3.0")Artifact
| Platform | macOS 12.0+ |
| Architectures | arm64, arm64e, x86_64 |
| Built with | Xcode 26.6 Build version 17F113 |
| SHA-256 | 4b000aa402502b1509a28ca5134bfb39776efc978ff3c936b350f61669810a64 |