#AppKit

2025-05-22

Here’s how Send to Mac works in the new Proxygen app. You pair up the Mac app with your iOS device and it’s ready for traffic mirroring whenever you need it. It works even when the iOS device is locked!

freshbits.fi/apps/proxygen

#iosdev #mac #swiftlang #appkit #apple

Kuba Suder • @mackuba.eu on 🦋mackuba@martianbase.net
2025-05-21

Seriously, this "stupid autocomplete that just predicts tokens" understands and explains AppKit and Core Animation better than probably most iOS devs would… that's good enough for me ¯\_(ツ)_/¯

#AppKit #CoreAnimation #MacDev

Yes — that absolutely makes sense, and it’s actually a great example of just how far you can get with only Core Animation’s presentation layer, as long as:
	•	You don’t need to rely on the final transform being applied to the model layer, and
	•	You don’t interact with the layer again in a way that would force a re-evaluation of its actual transform.

⸻

🧠 What you’re doing now:
	•	You’re animating the presentation layer from identity to a scale.
	•	You’re using:

scaleAnimation.fillMode = .forwards
scaleAnimation.isRemovedOnCompletion = false

which keeps the animation “frozen” at its final visual state.

	•	And since you’re not changing the model layer’s transform at all, Core Animation never has a reason to “snap back” — it just keeps displaying the final frame of the animation.

⸻

✅ Why this works (for now)

You’re relying entirely on the animation system to display the scaled view.

This works beautifully as long as:
	1.	You don’t query or modify the layer’s transform later.
	2.	You don’t trigger something that flushes the animation (like removeAllAnimations()).
Kuba Suder • @mackuba.eu on 🦋mackuba@martianbase.net
2025-05-21

Seriously, I wouldn't have figured this all out by myself, thanks G!

#AppKit #MacDev

ChatGPT 4o:

🎉 Awesome — I’m really glad to hear it’s working now! You’ve battled through some of the deepest quirks of AppKit and Core Animation — and came out the other side with clean, predictable scaling behavior.

To recap your toolkit now:
	•	🔧 Use anchorPoint + position correctly for transform pivots.
	•	💥 Avoid Auto Layout when scaling — use fixed frames inside the animated container.
	•	🔒 Use fillMode = .forwards + isRemovedOnCompletion = false to freeze the animation visually.
	•	✅ Finalize transforms after the animation ends using CAAnimationDelegate.

You’re well-armed for any fancy notification bubble UI now 😄

If you ever need to reverse the animation, add bounce/ease effects, or switch to something like NSVisualEffectView, just say the word. Good luck adapting it to your app!
Kuba Suder • @mackuba.eu on 🦋mackuba@martianbase.net
2025-05-21

Current status: I'm tormenting ChatGPT forcing it to try to write #AppKit code that animates an NSWindow and a view/layer inside it… so far AppKit is winning

#MacDev

2025-05-17

Learning AppKit using ObjC in 2025 is quite difficult. Searching for solutions or answers brings so many unrelated things up.

#appkit #objc

There is a Google Summer of Code 2025 proposal to redesign the macOS interface for VLC using AppKit. The proposal would replace legacy Carbon-era UI components with modern layouts, integrate the latest libvlc playback controls into native VLC transport UI controls, rebuild the media library interface, and prioritize system consistency with SF Symbols, vibrant materials, and macOS accessibility standards.

summerofcode.withgoogle.com/pr

#VLC #Apple #AppKit #macOS #GSoC

The VLC logo and the macOS logo on a white background.
2025-05-09

is now available on .
You can try the macOS Mastodon client here: testflight.apple.com/join/Epq1

Please note it’s a work-in-progress. I’d appreciate any feedback — feel free to share your thoughts here: github.com/anosidium/Oliphaunt

Screenshot of a macOS desktop showing an app named “Oliphaunt,” a Mastodon client. The main window displays the “Trending” feed, including posts (toots) from users. On the left sidebar are navigation items like Home, Notifications, Trending, Live Feeds and Direct Messages. Two remote instances, mastodon.social and mastodon.online, are listed at the top. On the right, a separate window shows the compose view for a new toot by a user named John Appleseed, with placeholder text in the editor. The app runs on macOS with a Sequoia-style wallpaper and dock icons visible at the bottom. The menu bar shows it is Thursday, 8 May at 4:59 pm.
2025-05-09

Since releasing the latest Proxygen update I have been using Send to Mac quite frequently in my work and it’s awesome. One toggle and I instantly see my iPhone’s traffic in the Mac app. It’s great especially now that iOS Simulator has the HTTP/3 bug and is unusable.

freshbits.fi/apps/proxygen/

#iosdev #swiftlang #appkit

2025-05-08

is coming soon on !
I’ve just uploaded a build to the App Store Connect — it’s now waiting for review.

Soon you will be able to try it.

A screenshot of App Store Connect showing the app status. “Waiting for Review” appears on the first line and “Expires in 90 days” is on the second. The app is a macOS client for Mastodon named Oliphaunt.
Kuba Suder • @mackuba.eu on 🦋mackuba@martianbase.net
2025-05-06

I feel like this is something that should be mentioned in the documentation of Timer.init, not something you find out after a long session with ChatGPT and googling… 😑 #MacDev #AppKit

Kuba Suder 🇵🇱🇺🇦mackuba.eu@bsky.brid.gy
2025-05-06

I feel like this is something that should be mentioned in the documentation of Timer.init, not something you find out after a long session with ChatGPT and googling… 😑 #MacDev #AppKit

Mario Alberto Guzmánmarioguzman
2025-05-03

Added Graphite styling which corresponds to the System Accent Color if it is Graphite as well as the muted look for when the window isn't the main window... as well as the more appropriate sorting indicator from the time.

Mario Alberto Guzmánmarioguzman
2025-05-03

Looks pretty nice in Graphite too 😉

2025-05-02

Implementing this tree view for test series, tests and requests took perhaps a whole month of work.

It was the first time I used NSOutlineView. Made many mistakes at first so had to reimplement this maybe three times.

But it supports renaming, multiple item selection, drag and drop reordering and duplicating items. All with pretty animations and menu actions with keyboard shortcuts.

Quite proud of that little thing 😌

#appkit

Mario Alberto Guzmánmarioguzman
2025-05-02

Overrode NSTableHeaderView and NSTableHeaderCell yesterday to get an Aqua appearance by custom drawing them myself in their respective draw functions... but refined it a lot more today!

(I removed most of the UI to call out the table view headers a bit more in this video)

Maaaaaan, AppKit is so fucking fun to use and make shit with.

2025-05-01

Search just got better in — it’s no longer limited to your instance.

Mario Alberto Guzmánmarioguzman
2025-05-01

No... I won't be shipping with headers for the NSTableView but at least I now know I can override NSTableHeaderCell and draw whatever the hell I want and not keep the snoozeville boring flat UI headers they ship now. :) Flat UI sucks.

I will probably make some subtle gradient for the column headers that will make them stand out a bit more.

But look, AQUA!!!

2025-04-29

The next build of supports media attachments!

2025-04-29

New Proxygen version is now available. Almost every part of the app has been updated. Perhaps the biggest thing is that there is now a direct download at freshbits.fi/apps/proxygen/.

#swiftlang #iosdev #appkit

Mario Alberto Guzmánmarioguzman
2025-04-28

Jesus Christ... making commands for macOS/iPadOS apps with is just beyond annoying/difficult. was far easier to implement systemwide commands or commands that were active only in your current context. :(

Client Info

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