Submitted by David Goodwin👨‍🦯 on Friday, October 11, 2019 - 18:21.

Update 29 October 2019: the macOS 10.15.1 release appears to have resolved the problem of not being able to interact with the preference windows of Catalyst apps when running VoiceOver.

In my early tests I have been able to access and configure settings in all three Catalyst apps which previously exhibited the problematic behaviour described in the post below.

It's great news that Apple appears to be making changes to the underlying app conversion process that should address some accessibility issues without developers needing to do anything.

If you encounter any further improvements to Catalyst apps after updating to macOS 10.15.1, please let us know by posting a comment below.

Original Post

In its recent “deep dive” in to Mac Catalyst, Ars Technica reported that Apple and developers they spoke with considered Catalyst apps to be “the future of Mac software”. If my early experience is anything to go by, Apple still has much to do if VoiceOver users are to be included in that future.

If you are unfamiliar with Mac Catalyst, it's new from Apple with the release of macOS Catalina and essentially enables developers to quickly and easily create Mac versions of their existing iPad apps.

According to Apple's developer website, developers need only check a box to select the Mac as a supported device when viewing their iPad project in Xcode.

By checking this box, Apple's Xcode software will do much of the ‘heavy lifting’ in regard to porting an iPad app to macOS: it will automatically create a default menu bar; add support for trackpad, mouse, and keyboard input; add support for window resizing and full-screen display; enable Mac-style scroll bars; add support for copy-and-paste and drag-and-drop; and add support for system Touch Bar controls.

Apple's vision is that by automating so much of what's required, developers can focus their time on adding desktop-specific features to their apps:

Your newly created Mac app runs natively, utilizing the same frameworks, resources, and runtime environment as apps built just for Mac. Fundamental Mac desktop and windowing features are added, and touch controls are adapted to the keyboard and mouse. Custom UI elements that you created with your code come across as-is. You can then continue to implement features in Xcode with UIKit APIs to make sure your app looks great and works seamlessly.

As both a Mac and iPad user, this is a vision that I can readily buy in to - the prospect of being able to use the same apps across both platforms is extremely appealing; as is the thought of having a much greater selection of apps available on my Mac.

Regrettably, my early experience suggests that Mac Catalyst currently does not deliver when it comes to ensuring that macOS versions of an app offer the same level of accessibility and user experience as they do on iPad.

One Important Caveat

Before I share my early experiences with some Catalyst apps, I need to stress that I am not an advanced VoiceOver user on macOS.

Although I have been using a Mac for many years, I have transitioned over time from using colour inversion alone; to using colour inversion along side screen magnification; to using VoiceOver as an occasional aid; to now relying completely on VoiceOver. It's been an incremental learning process with no professional training or support. Consequently, I have learned what I think I need to know for my own use case, and along the way have certainly skipped or missed much of VoiceOver's capabilities.

All of that to say that what follows is not the experience or opinion of an advanced VoiceOver user who knows all of VoiceOver's capabilities and features on macOS. I simply know what works for me and my use case. Accordingly, more advanced VoiceOver users may have different experiences and opinions to those below; I certainly hope that you will share them by posting replies.

My Early Experiences with Catalyst Apps

Following the release of macOS Catalina earlier this week, I have use three Catalyst apps:

Fiery Feeds (US$31.99)

lire (US$19.99)

Twitter (Free)

My intent in this post is not to discuss any app-specific issues, as I believe that focusing on accessibility failings of initial releases of apps created with a tool which is still mostly unfamiliar and unproven would be unfair on the app developers concerned. Doing so would also potentially distract from the more fundamental and pressing issue: the current implementation of Mac Catalyst does not deliver a basic level of VoiceOver support ‘out of the box’.

My early experience suggests that there are currently at least two significant issues for VoiceOver users that are likely to be common to all Catalyst apps:

How preferences windows are generated by Mac Catalyst. Keyboard navigation of Catalyst apps.

Where did the Preferences Go?

Mac applications typically let users manage app-specific settings via a preferences window. Users access this window by selecting the application menu followed by the Preferences menu item in the menu bar, or by using the Command-comma keyboard shortcut.

With Mac Catalyst, developers are told that if their iPad app has a “Settings bundle”, the system automatically provides the Catalyst version of their app with a preferences window:

When a user runs your app on their Mac device and selects the Preferences menu item, the system displays a Mac-friendly preferences window based on the options provided in your Settings bundle. You can further enhance the user experience by adding child panes and optional Mac-specific keys to your Settings bundle.

The issue I've consistently encountered with all three Catalyst apps is that although the preferences window may be “Mac-friendly”, it is definitely not VoiceOver-friendly.

My experience with all three apps is that I can use the VoiceOver modifier keys in conjunction with the left and right arrow keys to move VoiceOver focus through some of what's on the preferences window. I say “some”, as common sense and experience of the iPad apps tells me that there should be more to find, and on occasions a lucky click of the mouse pointer will find and enable me to navigate through some of what was previously missing.

However, the far more significant problem comes when I VO-Space on anything on the preferences window: without fail, VoiceOver focus immediately returns to the main window of the app.

If I use the Window Switcher to return to the preferences window, nothing has changed. If I had attempted to navigate to a section of the preferences window or change a setting, it will not have happened. The preferences window will still be on its initial view and with its default settings.

Routing the mouse pointer to a UI element on the preferences window returns the same result.

In the case of all three of my test Catalyst apps, the inability to configure them through their preferences window effectively makes the apps unusable.

If an RSS Reader won't allow me to add an RSS service or import an OPML file, it is effectively nothing more than wallpaper. And, at $20 or $32, it's pretty darn expensive wallpaper!

What's particularly frustrating in the cases of lire and Fiery Feeds, is that the developers of each app has longstanding and demonstrable commitments to not only making their apps accessible, but proactively seeking to enhance the experience for VoiceOver users. Now, they find themselves unable to do the same on macOS because of apparent failings with Mac Catalyst.

With three out of three Catalyst apps sharing an identical problem with their preferences windows, it doesn't seem unreasonable to expect that this behaviour will be common to any Catalyst app which has automatically generated preferences windows. Which, is likely to be the very vast majority of them. Some of these apps will be usable without needing to access or change any settings. But, if my expectation is correct, I would personally be very reluctant to buy a Catalyst app in the hope that it's usable ’out of the box’.

However, a problem accessing preferences windows may not be the only current issue of note with Catalyst apps for VoiceOver users.

Where did the Keyboard Navigation Go?

With sighted help I was able to get all three of my test Catalyst apps setup and configured as desired.

This should have left me happily enjoying apps which I know to be great on iPad (well, certainly true for lire and Fiery Feeds).

Regrettably, the user experience of all three apps when relying solely on keyboard navigation is nothing less than painful.

In all three cases, none of the keyboard shortcuts I would typically use to quickly jump between the main sections of a Mac application work. Tab, VO-j, and various VoiceOver rotor options all leave focus stubbornly where it is.

I have tried the keyboard shortcuts I use with my iPad - just in case these had been ported across - but, VoiceOver focus remains stubborn.

This is the part of the post where I most want (and probably expect) an advanced VoiceOver user to step forward and point me towards something I am missing, as having to rely on VO and the arrow keys to navigate these three apps is not a user experience I wish to revisit. Not only is it a poor user experience, but I am quite sure that there are sections of each app which are not being located when navigating by arrow key alone (something which seems to be confirmed by others in regard to the Twitter app).

As with the preferences window issue, it's extremely hard to believe that the paucity of keyboard navigation options - and their apparent unreliability - is app-specific. In my opinion, it has all the appearance of being something that will be common to all Catalyst apps.

Closing Thoughts

It's hard not to feel anything other than completely disappointed by my initial experiences with Catalyst apps.

I didn't approach them expecting there to be no ‘teething problems’, but I did expect Apple to ensure that everything generated automatically by Xcode as part of the porting process would be accessible with VoiceOver, and that Catalyst apps would be at least mostly usable with VoiceOver. This was particularly true for Mac versions of apps that I know provide a great VoiceOver experience on iPad.

Early reports indicate that VoiceOver users aren't the only ones facing problems with Catalyst apps. Bloomberg has reported on numerous teething problems, with developers saying that they've had to work harder than expected to get their iPad apps working well on the Mac:

Developers have found several problems with Apple’s tools for bringing iPad apps over to Mac computers. Some features that only make sense on iPad touchscreens, such as scrollable lists that help users select dates and times on calendars, are showing up on the Mac, where the input paradigm is still built around a keyboard and mouse or trackpad. Troughton-Smith said Mac versions of some apps can’t hide the mouse cursor while video is playing. He’s also found problems with video recording and two-finger scrolling in some cases, along with issues with using the keyboard and full-screen mode in video games. Thomson, the PCalc developer, said some older Mac computers struggle to handle Catalyst apps that use another Apple system called SceneKit for 3-D gaming and animations.

It seems that we can add poor VoiceOver support to the list of problems faced by developers and users of early Catalyst apps. It's extremely disappointing that something as fundamental as the accessibility of preferences windows and support for keyboard navigation have made it past Apple's QA testing of Mac Catalyst. We can only hope that this is corrected quickly by Apple, and that VoiceOver support will be part of the porting process when a developer checks the ‘Mac’ box in Xcode.

I look forward to hearing everybody's early thoughts and experiences of Catalyst apps. Have you found any that you would recommend? Have you found workarounds for the issues I mention above? Or, can you simply confirm my fears that Mac Catalyst still needs a lot of work in regard to VoiceOver? Add your comments below!