Archive for February 12, 2024

Monday, February 12, 2024

OmniFocus 4

Ainsley Bourque Olson (podcast, video):

OmniFocus 4 introduces a modernized, unified interface across Mac, iPhone, iPad, and Apple Watch. Centered around your task outline, OmniFocus 4 brings a consistent experience, optimized for each device type, to all of your Apple devices.


By default, items display assigned project, tags, due date and flag status, and selecting a row provides immediate editing access to these fields as well as the item’s note. With OmniFocus Pro, customize displayed fields on an app-wide or per-perspective basis (including re-ordering visible fields, and selecting fields to display only when editing an item).


Custom Perspectives — New flexible organization options introduce support for manually re-ordered lists and hierarchy preservation in ungrouped custom perspectives.

Back & Forward Navigation — When switching perspectives, you now have the option to go back to the perspective you came from using the new “Back” button in the toolbar. If you change your mind, you can go “Forward” again.


Widgets — Configure your Lock Screen or iPhone Standby mode with an array of OmniFocus 4 widgets. Complete items directly from updated interactive widgets on macOS Sonoma, iOS 17 and iPadOS 17. On watchOS 10, view OmniFocus widgets in the brand new Smart Stack.

It’s now a universal purchase, either from their store or the App Store. The subscription is still $10/month or $100/year. You can also still purchase perpetual licenses for $75 or $150 (Pro), and there’s a 50% discount for upgrades. This is more expensive than before if you only want a single platform but less expensive if you want both Mac and iOS/watchOS. Given that it’s historically been about 5 years between major upgrades, this definitely seems like the way to go. There’s also a Web version, which you can only get via subscription.

OmniFocus 4 has a new bundle identifier and a new SKU in the App Store. Omni lost all of their ratings and reviews, but this brings some advantages for customers. You can upgrade on your own schedule and compare the old and new versions side-by-side. They’re also sync-compatible, so you can switch back and forth between versions using your real data or continue using OmniFocus 3 on an older Mac (since version 4 requires macOS 13 or later). The two versions are easy to tell apart because version 4’s icon has a black checkmark. A downside to the new bundle identifier is that the data that doesn’t sync—view state and keyboard shortcuts—is not automatically transferred, so it takes some tweaking before you feel at home again. I also had to update my Arq configuration to make sure that OmniFocus’s files were still included in my off-site backups.


I’ve been using OmniFocus since version 1.0 when it was Mac-only. While it’s always been great, I feel the app suffered a bit in versions 2 and 3 when iOS design elements were brought back to the Mac. Version 4 is a step in the right direction, with increased data density. They’ve brought back a proper toolbar that lets me choose whether I want to see icons and/or text. The interface is more customizable, with more options to control which columns and inspector sections to show and how they should be ordered. For example, I can now put the dates at the top of the inspector and hide the title and status.

I was skeptical about the SwiftUI rewrite, because SwiftUI seems to result in Mac apps that hang or don’t feel quite right, but Omni has done a good job here. It still has great support for multiple windows, and working within a single window is also improved, as it now supports back/forward navigation. The main outline view is better than ever, with some longstanding tab navigation bugs finally fixed. There are a few glitches, which I never saw in the old version, where it temporarily shows extra empty space or section markers for tags that have nothing to show. The inspector works pretty much the same way on both macOS and iOS, and this is a rare case where neither version seems to be the worse for it. I’m not sure how much of the rest of the app uses SwiftUI, as it still seems to include a large number of nibs. The main new areas I noticed were the onboarding sequence and the sync settings, which work fine but look and feel a little different.

The only problem I encountered with the Mac version is that I temporarily lost access to my archive. The archive file is not automatically transferred to the version 4 container, and choosing it manually did not work, seemingly due to a file permissions/sandbox error. I eventually got it working by moving the file manually and, on the advice of Omni, resetting a user default so that it would let me choose the file again. Aside from that, archiving seems to work the same way as before: useful but too slow to keep my whole history in the app, and the app still locks up for a few minutes when, in January, I bulk delete all the actions for the previous year.

OmniFocus now supports bare keyboard shortcuts, which seems like it was added to work around iPadOS limitations, but it works well on the Mac, too. You can now jump directly to the field you want to edit with a single keypress. Ironically, deleting is more difficult, as you now need to press Command-Delete rather than just Delete. Omni says this is to prevent accidental deletions, but that seems unnecessary to me as many apps like Mail and Safari—and of course OmniOutliner—support bare deletion. If you make a mistake, there’s always Undo, right? (And OmniOutliner doesn’t support Command-Delete, which confuses my muscle memory.)

Part of what sets OmniFocus apart from a basic to-do list is its support for defer and due dates. This is improved in version 4, as there are now one-click buttons in the inspector to postpone by a day, week, or month, or remove the date entirely. Oddly, however, there are no keyboard shortcuts or menu commands for this. The iOS version has a Schedule submenu in its contextual menu, but this is missing in the Mac version. So I’m still relying on my AppleScripts to adjust defer dates. I assign them keyboard shortcuts using FastScripts, though similar things can also be done using the built-in Omni Automation.


Version 4 brings major improvements to the main outline. The current action now expands its view so that you can edit many fields directly, without having to open the separate modal inspector. It’s also possible to select multiple actions at once and then edit them in bulk using the inspector. Everything is more customizable. There’s now a menu at the top of the screen.

I also really like the new handling of perspectives. Previously there was a home screen showing all the perspectives, which worked well enough but required lots of swiping back and forth. Now, you can show a toolbar of perspectives at the bottom of the screen. This makes it easy to switch back and forth with a single tap, and you can also see at a glance how many actions are unfiled or flagged. The perspectives bar is fully customizable and scrollable. There’s also a button to show the full list of perspectives, and it includes a Quick Open search field for jumping to a particular project or tag. Overall, it feels a lot more like the Mac version, where I can quickly get to where I want without having to navigate up and down the hierarchy. You can also see projects and tags in the sidebar, and the focus (hoist) feature has been brought to iOS.

I have mixed feelings about the new way of creating actions. Previously, there were separate buttons for creating a new action in the inbox or in the current view. Now, there’s a single, multipurpose + button that provides a lot of functionality in a small amount of screen space. Single tapping creates a new action in the current list. Double-tapping creates one in the inbox. You can also drag the button to create a new action at a specific location within the outline. This is all very clever, but it makes the common case for me less efficient. I nearly always want to create a new action at the bottom of my inbox, and this now requires a double-tap rather than a single tap. I’ve gotten used to the new button location but not to the tapping, perhaps because double-tap doesn’t work in the quick entry view. In other words, if I’m adding a sequence of actions at once, I have to start with a double-tap and then single-tap for each additional action. I wish I could just always use a single-tap regardless of the current context.

As with the Mac version, deferring actions is also more work on iOS than I’d like. The new buttons in the inspector are an improvement, but OmniFocus doesn’t take full advantage of the contextual menu. You have to dig into a submenu, and even then you can only defer an action that already has a defer date, and you can only defer by one day. There should be a bunch of customizable options here, and I should be able to quickly defer until tomorrow by swiping to the left. Instead, the left-swipe options are to select the action (which makes sense) and to delete it (which is much easier to do by accident than on macOS—why was that concern not applied here?).

It’s great having more features in common between iOS and macOS, and I guess this is possible because of SwiftUI. Surprisingly, given SwiftUI’s relative maturity on iOS, the rewrite seems to have created more glitches in the iPhone version than on the Mac. I encountered a variety of problems with the keyboard not popping up, the + button disappearing, and counts in the perspective bar being out-of-date. Scrolling feels a lot slower than before, probably because of all the customization options. Many times, creation an action or switching to a perspective (even one with only a few actions) would freeze the app, though I haven’t seen this in a while so it may have been fixed in one of the maintenance updates. There was also a really jittery animation when creating a new action, which was finally fixed in version 4.0.5.

Lastly, there are more options for widgets now. I now have my lock screen set to show the Flagged perspective. This works well with the Always-On Display so that I’m always aware of the top two things I need to do, and it also works as a quick launcher into the app without having to swipe to unlock the phone.

Apple Watch

The watchOS app has been completely redone. Instead of being a view into a very limited portion of the iPhone app, it’s now a fully independent peer with access to all of your perspectives. This makes it much more useful. For example, I can now go grocery shopping and check items off on my watch without having to repeatedly pull my phone out of my pocket and unlock it. The screen doesn’t show many actions at once, but I have them arranged into tags so they appear in the right order, so I don’t need to do much scrolling. When not running errands, I leave the app showing the Flagged perspective, so I can quickly see what I need to do right away.

You can now create new actions by tapping an omnipresent button rather than having to long-press. (Single-tapping the button always creates the new action in the inbox, i.e. inconsistent with the iPhone app, but better.) You can Complete, Drop, Unflag, and Delete actions; there is no way to Defer them or to edit the text.

Not only does the watch app store all your data now, but it also independently syncs with the cloud. (Fortunately, you don’t have to enter your login credentials into the watch—it seems to get them from the iPhone app.) The initial sync to the watch was quite slow, kind of like how the iPhone app was on the much slower hardware back in the day. Subsequent syncs are sometimes quick but sometimes take a long time or never complete, and the app is unusably slow while this is in progress. In a suite of apps that generally works very smoothly, this is the lone area that’s really frustrating. I do prefer the new watch app, overall, because it has so much more functionality, but I just can’t count on the syncing working automatically, and so I have to consciously manage it.

Ideally, the watch app would just run in the background and stay in sync automatically—like the iPhone app does. This rarely seems to happen, even with Sync Push enabled. I use a complication that shows the number of Flagged actions, and the count is usually wrong. Still, the complication is important for quickly launching the app in order to view a perspective and, more importantly, to give it a chance to sync. The more frequently it syncs, the more likely it is for a sync to succeed. If I let the watch get too far behind, even if I’m on Wi-Fi and leave the app open, syncing will often fail. Sometimes it shows a “network connection was lost” or “SSL error has occurred” error, but other times the log is uneventful. At this point, if I leave the house it will have almost no chance of catching up using my phone’s cellular connection, and if I let it get too far behind it will prevent all my other devices from baselining and slow their syncing down, too.

When it is caught up, sometimes it will stay in sync while I’m out, and sometimes it won’t, so I have to be careful about not checking off some actions on my watch and others on my phone because that can result in both devices having an incorrect view for a while. On the plus side, I’ve found that the watch seems to be able to sync using captive Wi-Fi in stores and restaurants, even if I haven’t gotten my phone out to click through and join the network. Omni’s support seems to think my syncing problems are a recurrence of a bug they saw before. I’m optimistic in that if it’s not due to watchOS they can probably fix it.

Overall, I’m quite happy with OmniFocus 4. I think of it as a model for how to build a multi-platform app, and it seems to be a success story for SwiftUI. The data model remains rock solid, while the interface has been expanded and largely harmonized across platforms, without any of them feeling shortchanged. Apple could learn a lot from Omni’s approach.


Update (2024-02-14): See also: Justin Pot.