Fold Current Level-1 Heading in Emacs Org-Mode Outlines

There’s no standard shortcut to fold the current subtree of an org-mode outline. When I work in org-mode outlines, I usually am 3 or more levels deep into a so-called “subtree” and want to get back to the root item, fold it to hide the details, then drill down into another item. I use that when I am working on an app and want to have a look at a planned milestone nested deep down at a different point in the outline.

Continue reading …

Combine E-Book for Free

There is a free ebook out there that teaches you the basics of Combine, Apple’s reactive framework introduced at WWDC 2019. It is pretty long already, given the time author Joseph Heck (@heckj) had to learn about Combine and then write about it. From what I saw, I think it’s a good introduction to reactive programming in general.

Seriously, you should read it: https://heckj.github.io/swiftui-notes/

And the book’s source is available, too! https://github.com/heckj/swiftui-notes

From the repository’s name, swiftui-notes, and this description:

A collection of notes, project pieces, playgrounds and ideas on learning and using SwiftUI and Combine.

… I can only assume it gets expanded even more over time to include both SwiftUI and Combine!

Check it out and share it; Joe Heck deserves some internet love for his efforts.

Post Overview Updated

I don’t know what’s going on this week, but I have written a lot for the blog. I also carved out an hour and a half today to update the structured overview of articles on this website. I always wanted to make it a good entry point but didn’t update it during the transition to another blog platform, then back again, and now it’s 2 years later already. Phew!

Slides for the “More Money, More Control” Webinar on Selling Outside the Mac App Store

Today I noticed that I never followed up on my FastSpring webinar of 2017 called “Beyond the Mac App Store -
A Practical Guide to Go From Code to Cash”
with the slides! Sorry, folks! I’ll also upload the checklist we served attendees. You can find the slides on slideshare.net, because I have an account there and don’t know what else to do with PDFs:
https://www.slideshare.net/DivineDominion/beyond-the-mac-app-store-a-practical-guide-to-go-from-code-to-cash

Continue reading …

TableFlip Mac App Store Experiment Stats: Sources

Here’s some more background info for indie devs. To follow up the release of TableFlip on the Mac App Store and me noticing that yes, people buy the app without any marketing, I wanted to share sales origin stats today: according to the available data collected by the App Store, 100% of purchases were made after a search inside the Mac App Store so far.

Continue reading …

WordCounter for macOS Version 1.5.0 Released

I updated my app the WordCounter for Mac to v1.5.0 today. This update includes a couple of modernizations behind the scenes, but most importantly fixes problems that were related to the app being a Dock-less menu bar app. You couldn’t manage any of its windows well. Now you can, because when any additional window is shown, a Dock icon is added on the fly.

Continue reading …

How Do You Activate Sparkle’s XPC Services?

The Sparkle XPC fork is even better than I would’ve imagined! As I mentioned in the previous post about Sparkle’s XPC branch, you can switch to the new framework version and the new types without having to change much else. The new API is very similar to the old one. If you switch to the work-in-progress ui-separation-and-xpc branch, then you can continue to use CocoaPods or Carthage if all you want is the new API.

Continue reading …

How to Migrate to the New Sparkle Updater XPC Branch

This is the first post in a series: The standard solution to provide app updates outside the Mac App Store is to use the amazing Sparkle framework. The releases of Sparkle don’t support sandboxed applications well, though, so the core maintainer Kornel Lesiński (@kornelski) is working on a more secure fork of Sparkle next to the existing one. He’s maintaining the regular Sparkle, and the fork. The fork features various XPC services to deal with Gatekeeper security configurations and Sandbox entitlements in a proper way. (I have to phrase it in such a vague way because I have no clue about the details, yet. Explanations are very welcome in the comments!)

Continue reading …

Use Shared NSUserDefaults for XPC and Interface Builder Nibs

The default Interface Builder approach of using a “Shared User Defaults Controller” object breaks down if your app preferences are not stored in the standard place. Both my apps The Archive and the Word Counter for Mac are comprised of multiple executable applications. For The Archive, it’s the main app and the Quick Entry popup window. They share some settings, like which theme and font size is used. To share these settings, I rely on NSUserDefault (or just UserDefaults in Swift now). I cannot use the UserDefaults.standard, though, because that is tied to the currently running app’s bundle ID. In the case of the main app, it’s the ID of the main app; but for the Quick Entry helper – or any helper app –, it’s the helper’s bundle ID. This way, the defaults dictionaries are not shared.

Continue reading …

Imposing Bans and App Store Sanctions

Brent Simmons wrote about imposing sanctions by making apps unavailable in certain countries (in his case: Saudi Arabia) in November 2018. I never thought about the mere possibility of doing so. It’s an intriguing thought: even when politics don’t result in whatever you want, you can always be picky about who you do custom with. It’s a power we have, a power every producer and craftsperson has. Turn down a business for moral reasons.

Continue reading …

From bash to zsh on macOS

Teaser image

In anticipation of macOS 10.15 Catalina, I have changed my shell from bash to zsh. macOS 10.15 will use zsh as the new default, and I was pretty sure that things will break immediately unless I prepare – so I did prepare, and I found the transition very simple. My old bash prompt didn’t work out of the box, so getting a decent prompt with some color and git repository information, I managed to set up sindresorhus/pure to offer asynchronous (!) info like the pwd’s git metadata.

Continue reading …

Browser-Like Navigation in The Archive

This weekend, I released an update to the note-taking app I’m working on for a while called The Archive. This update is pretty big for people not getting updates from the opt-in “Cutting Edge” update channel, because all of a sudden the app allows you to navigate back in time. The navigation stack (what you’d call browser history available from the navigation buttons in your browser) behaves like this:

Continue reading …