Thursday, October 3, 2024

Finder Sync Extensions Removed From System Settings in Sequoia

ZigZag (also):

Even though Finder Sync extensions are embedded and distributed in their containing applications (like containing application FileUtils embeds its extension FileUtilsSync), the actual hosting application for those extensions is Finder. They modify Finder’s appearance and behavior, adding menu items and icon badges. Hence, fundamental things related to these extensions, like registering with OS, start and termination, as well as enabling and disabling them, aren’t controlled by the containing application, but by Finder and macOS instead. Registration with OS is done by Launch Services. It usually happens at the time the containing application is launched for the first time (after passing TCC quarantine check). Starting and termination of Finder Sync extension is also controlled by Finder/macOS and there may even be more processes of the same extension running, depending on how many Finder windows and file selectors (open/save panels) are open. The containing application can surely try to start and terminate its embedded extension, but the documentation clearly discourages that, since it can collide with how Finder controls them.

Finally, there’s enabling and disabling Finder Sync extensions. Even though an extension can be installed and registered, per user request it can be disabled (thus, completely ignored) and enabled. Containing application can do this programmatically, by tasking pluginkit command line tool to list, enable and disable (any, not just Finder Sync) extension, or using private NSExtension class found in FoundationKit framework. End users traditionally performed this task in System Settings application (System Preferences on macOS 12 Monterey and earlier). Well… Until macOS 15 Sequoia! In the latest incarnation of macOS, there isn’t any graphical UI way to manage Finder Sync extensions!

[…]

Revealing “Extensions” settings in System Settings on Ventura shows the same subsections like in System Preferences on Monterey, with one, for this story very important, change… “Finder Extensions” subsection is missing! The only place to find Finder Sync extensions settings is “Added Extensions” subsection. Early versions of Ventura even had “Finder Extensions” subsection, dedicated to Finder Sync extensions, but it was buggy and unreliable.

[…]

And then macOS 15 Sequoia came some 17 days ago. In its third reincarnation, System Settings application experienced third rearranging and shifting. “Extensions” settings are now under “General” section, “Logging Items & Extensions” subsection. […] Yes, you see it right, there is no “Added Extensions” section!

Managing extensions using the pluginkit command-line tool is not very friendly (and can’t be invoked by a sandboxed app), so Dragan Milić has written a free app called FinderSyncer that puts a nice user interface on top.

It’s not entirely clear what Apple is doing here, but the impression I get is that these days Apple is focusing on the File Provider Extension architecture that’s used for cloud syncing. It’s a shame because this does not allow all the same functionality as Finder Sync Extensions:

I believe many other developers understood it the same as me, especially considering the fact that Finder Sync extensions provide a way to add custom menu items to Finder’s contextual menu. I think most developers saw it as a sort of continuation of old CMPlugin API from MacOS (yes, the capital ‘M’) 8/9 days, which was available until Mac OS 10.6 Snow Leopard. It’s seen as a way to extend Finder’s capabilities, by executing custom operations (not limited to “synchronize the contents of a local folder with a remote data source”) on files selected in Finder.

I think I know about 50 - 60 applications embedding Finder Sync extensions at the moment, and only a dozen of them actually “synchronize the contents of a local folder with a remote data source”, mostly coming from huge and well known cloud providers (Dropbox, Google, Microsoft…). All others, mostly coming from independent Mac developers, offer some custom operations of files selected in Finder, nothing related to any sort of syncing. I believe MR_Noodle’s case is the similar one, “outside of its recommended use case”. Taking the above into consideration, I think it’d be a huge mistake for Apple to discontinue and deprecate Finder Sync extensions without providing functionally equivalent replacement. That would break a lot of third party Mac software and render those applications completely useless.

Previously:

8 Comments RSS · Twitter · Mastodon


FinderSyncer is only for apple silicon Mac :(


Sigh. Another thing to keep track of. Just like Windows, where there are lots of different places you have to look to see which apps/processes are started up, and not all of them have UI.

I'm a bit confused, though—FileUtils only displays UI in Finder when the app itself is launched. Is Finder supposed to be taking care of that?


@simon, it is supposed to work on Intel too. My apologies, I’ve made a stupid omission in the build script. Please redownload and confirm it now works on Intel as well.

@Sebby, Finder shows contextual menu items (and Finder Sync extension dedicated toolbar item menu items) provided to it by the extension. But the operations invoked by those menu items are executed by the containing application (that's my design choice, I can explain why I opted for it, if necessary). Hence, there's no point of showing menu items if the application is not running. Therefore, from the extension code I simply don't supply any menu items to Finder if the containing application isn't running. I can't remove Finder toolbar item dedicated to my extension, it's shown all the time while the extension is enabled, but in case the application isn't running, the toolbar item shows just one disabled menu item, saying "FileUtils is not running".

@Michael, you can achieve all things (and much more) pluginkit does more elegantly using private NSExtension class. It works from sandboxed applications as well, but you can't distribute in the Mac App Store (MAS) for obvious reasons. I use it in GitFinder and non-MAS version of FileUtils on application launch to make sure the embedded extension is registered.


@Michael, and yeah, FinderSyncer uses NSExtension too, it's not a wrapper around pluginkit.
(please, enable comment editing ;-))


@Dragan Got it, thanks for the explanation!


@Dragan. Thank you! now works also on Intel Mac. There I can find docs about the private NSExtension class?


@simone, there isn't any docs about the private class, Apple don't document those. It's in the Foundation framework, so you can either class-dump or disassemble the framework using Hopper or some other disassembler and look into the symbolic names for the NSExtension class.


This will be fixed in macOS 15.2. The latest developer beta build (24C5073e) brings additional subsection in System Settings "Extensions" section, titled "File Providers". It apparently combines both Finder Sync and File Provider extensions.

Leave a Comment