FileProvider: How to do IPC with a FileProviderExtension

I am attempting to communicate with a FileProviderExtension (NSFileProviderReplicatedExtension) using XPC.

I want to allow the controlling application to manage how the extension communicates with the remote service - e.g. tell the extension to sign in (and provide credentials to do so), sign out, etc.

I have implemented the NSFileProviderServicing protocol in the extension and provided an NSFileProviderServiceSource (following the FruitBasket sample code).

However, I can't see how to get a general connection to the service from the controlling application. The only method I can find is FileManager().fileProviderServicesForItem(at url: URL), which requires a URL for an item managed by the extension. Given the controlling application wants to perform actions like sign in, there is no item in scope and thus no URL.

I tried using NSFileProviderManager.documentStorageURL, but this is not available on macos.

Any idea how to get the connection without a file URL? Or how to get a general purpose URL that will suffice? Or is there another IPC mechanism I should use?

Replies

I just found NSFileProviderItemIdentifier.rootContainer, which seems to work. I don't know if there are any issues with that.

  • Yes, it is a reasonable strategy to expose services on the root item, and connect to them from your host app by asking for the services on the root URL.

    You should programmatically retrieve the root URL for the domain you are interested in calling services upon, by calling -[NSFileProviderManager getUserVisibleURLForItemIdentifier:completionHandler:].

Add a Comment