#AppKit

Darryl Poguedpogue
2026-02-08

It is kinda wild that Apple's Objective-C NSPasteboard API is a wrapper over a (private) CFPasteboard API, and there's an awkward Carbon-era C Pasteboard API in ApplicationServices that's also a wrapper over the same (private) CFPasteboard API, but that CFPasteboard API itself is not publicly exposed.

It exists, and it works, but it's not in any of the headers so you can't really use it.

Amy Worrallamyworrall
2026-02-07

Just had to rewrite a bunch of the placement logic for Octavo, my PDF imposition/printing Mac app. It was a bit of a rabbit hole, there were a bunch of bugs and bad assumptions interacting together, and as soon as I wanted to place a page slot rotated 90 degrees, they all came to the surface.

Fixed and unit tested now.

As a reminder, the TestFlight beta is open: octavo.pro

Screenshot of Octavo. The current page is marked Secret Poster, and appears rotated 90 degrees in the preview editor.
2026-02-07

Added better keyboard navigation support to my Runestone fork. Now you can tab focus to an uneditable text view and move in it using arrow keys, page up/down and move to top/bottom.

#appkit #macdev

Mario Guzmánmarioguzman
2026-02-06

@huwr Yeah, the toolbar behavior for SwiftUI still needs a lot of work given all the ways one can embed windows.

This is why still reigns supreme on the Mac. :)

Mario Guzmánmarioguzman
2026-02-06

Did I create a whole-ass layout in SwiftUI that looks like a real, native Mac email app to be the hero image for my Macintosh Guidelines (Mario's Mac HIG) webpage?

Yes, yes I did...

(and don't forget to read my all new HIG topic on Sidebars!)


marioaguzman.github.io/design/

Amy Worrallamyworrall
2026-02-05

Working on some more liquid glass in Octavo.

Mario Guzmánmarioguzman
2026-02-03

Every time I used a stock-NSTableView, changing the “Sidebar icon size” setting in System Settings would make the text labels in said TableView larger but not the actual row view.

Well, I think I've just figured it out with one setting and one protocol conformance method...

Although some documentation somewhere I read said that only Source Lists (Sidebars) should adapt to this behavior... Seems kinda useful tbh.

troztroz
2026-02-03

I came across a strange macOS Tahoe bug when working on an AppKit app with a table. I managed to find a workaround, but since I was unable to find any solutions online, I thought I would post my discoveries in case they could help others.

The issue is that the content rows scroll into the header unless the table stretches to the bottom of the content view.

Full write-up here but one workaround is to add space at the top of the table as well: troz.net/post/2026/appkit-tabl

Table view showing content rows scrolled into header
Mario Guzmánmarioguzman
2026-02-02

This new Sidebar Guidelines page joins Layout Guidelines and Toolbar Guidelines. marioaguzman.github.io/design/

Mario Guzmánmarioguzman
2026-02-02

I made a new page for my “Mario's macOS HIG” series! In this episode, we go over Sidebars on macOS. Check it out and let me know what you think!

(Note: It is much shorter than my other HIG pages.)

marioaguzman.github.io/design/

Amy Worrallamyworrall
2026-02-02

And one more for tonight: Octavo's Imposition Settings getting a Mac look-and-feel makeover. It's not perfect yet, but it's already looking more Mac-like than before!

two views of some controls (toggle buttons, radio buttons, checkboxes, labels etc) for changing settings in my app Octavo. The one on the right is the new design, and the controls have better spacing and labels on the left.
Amy Worrallamyworrall
2026-02-02

What do you folks think of this liquid glass sidebar? I was going to avoid liquid glassing my sidebar since it's not full height etc, but it seems to work here better than in apps where it is!

Amy Worrallamyworrall
2026-02-01

Another before/after of making some of Octavo’s UI more Mac-like. I’m using (a rather heavily modified version of) CocoaCompose by @pasi and it's already looking a lot better than before!

Now to move on to the more complicated panes.

2026-02-01

Anyone ever had an issue in #AppKit where constraining the centerYAnchor equal to another constraint + a constant is *subtracting* the constant rather than adding it?

I am in an NSView with a non-flipped geometry. This is really baffling me. A positive constant should move the view upward, and a negative should move it downward. I'm getting the opposite behaviour.

/cc @pasi @marioguzman

Mario Guzmánmarioguzman
2026-02-01

Have y’all tried this fancy thing called ?

You can totally override the way things draw in say like NSTableView by overriding NSTableHeaderCell/override func drawInterior(withFrame cellFrame: NSRect, in controlView: NSView). I made mine a bit darker because for some reason, Apple decided everything should be white, white, white.

I have a much more powerful table by using NSTableView over SwiftUI's `Table` in my SwiftUI app. :) ;)

Before/After

Amy Worrallamyworrall
2026-01-30

Sweating the details on this paywall button. Getting concentricity on MacOS was surprisingly difficult. Now to figure out hover state and pressed state — which you don't get for free and also seem difficult!

(Pricing is a placeholder, not totally decided yet, fwiw.)

An orange button in the top corner of a MacOS window, saying “Unlock Octavo for $24.99”
Mario Guzmánmarioguzman
2026-01-29

Well, I guess I can't really escape if I wanted to in my re-write on macOS.

The table is NSTableView, the bottom is NSTextView, both contained by NSSplitViewController. The rest is SwiftUI though...

The problem is that their respective Table, Text, and VSplitView in SwiftUI just are so bare-minimum implementations.

For example, VSplitView does not persist between view changes or app restarts where to position the splitter. It's annoying. NSSplitViewController can persist it.

troztroz
2026-01-27

It's back to school time here in Australia, so I want to remind people that I offer an educational discount on my books: macOS Apps Step by Step: troz.net/books/macos_apps_step and Escape from Tutorial Hell: troz.net/books/escape

Email me at books@troz.net telling me what & where you study/teach and I'll send you a discount link for both.

If you're in the education sector, please boost this post.

macOS Apps Step by Step book coverEscape from Tutorial Hell book cover
Mario Guzmánmarioguzman
2026-01-24

Anyway, been using NSTableView for my version of since it is far more customizable and powerful than `Table`.

2026-01-22

More recently I have been working on my second macOS app, . A Mastodon client for the federated social network built on the ActivityPub protocol. Developing it taught me a great deal about persistence, concurrency, networking, design patterns plus more. I am keen to return to HacKit to apply this knowledge, improve the app further and work on an iOS port.

You can download HacKit here: apps.apple.com/app/id1549557075

Client Info

Server: https://mastodon.social
Version: 2025.07
Repository: https://github.com/cyevgeniy/lmst