Skip to content

0.3.0

Choose a tag to compare

@Mx-Iris Mx-Iris released this 05 Sep 08:02
· 9 commits to main since this release

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.

  1. 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 from snapshot() carries its items, so round-tripping is unaffected.
  2. applySnapshot:toSection: appends a section that is not yet in the top-level snapshot
    instead of asserting.
  3. 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
    your cellProvider, 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 rows NSOutlineView draws. 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 sectionHeaderViewProvider trapped 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