The code editor Chime just released extension support in their 2.0 release if you are on macOS 13. They have a lot of good details on how the implemented the feature on their blog. https://www.chimehq.com/blog/extensionkit-intro
For example extensions on macOS, go to system preferences and search for extensions. They're listed by affording context (e.g., Finder, Photos Editing). Mine include pdf conversion, cropping photos, etc. You can create your own via Automator.
The docs imply that before Ventura (13.0), developers had to create a property list to declare NSExtension, but now you can do it in Swift. However, the TextTransformer sample has the usual melange of metadata, and there's no deployment information in the API documentation.
Ideally, a simple swift script would be sufficient :)
Apple has offered App Extensions for several years, in both UI-serving and non-UI contexts. App extensions are secondary services, bundled within apps, to provide some service. These extensions are invoked in their own process space, typically in the containing application's sandbox.
Examples include:
- The contents of the action/share menu in apps, which for example lets you share photos onto social media
- Audio Units
- Photo plugins
- Password manager autofill
- Content blockers
- Custom keyboards
- Filesystem providers to have a cloud storage show up in the Files app
- Finder synchronization for cloud-synchronized services like OneDrive
- All app integrations to extend Siri
ExtensionKit (and the underlying ExtensionFoundation) lets a host application define its own extension points, which other applications can provide. I do not believe you can define n-to-m extensions with this interface however; I can create a language server for an iOS text editor and put it in an app, but I can't do that once and support _every_ text editor.
Christ
This misses opportunities to reach developers-- and the tech is actually really compelling. I'm experimenting with it in the BoldContacts app, which conceptually extends the Contacts app to give disabled people ways to contact their families and caregivers.
Apple's documentation group needs a new leader ASAP who can emphasize documentation usability in concert with real-world developers. Apple wants its platform to continue being successful, and this goal can be helped by a documentation team that creates examples, questions-and-answers, and tutorials.
Apple’s API documentation is nearly useless because it usually doesn’t give me any info that I can’t already infer from my IDE (which of course is XCode, sigh).
I usually don’t need a list of classes and methods, I need to know how the pieces fit together to do something useful.
They say a picture is worth a thousand words. Well, an example is worth a thousand method signatures.
If you ask questions on the developer.apple.com forums, Apple engineers often answer them directly. At least that has been my experience.
Is this because programming that targets poorly documented APIs is taught at select universities, and Apple wishes for these new grads to have an upper hand?
CoreFoo is going to be a low level library for dealing with Foo. FooKit is going to be a high level way to create gui apps that deal with Foo. Likely FooKit uses CoreFoo under the hood.
This framework is cross-platform, so it would offer such a plugin architecture on both macOS and iOS.
There's no hints that Apple would offer this kind of integration within their own apps however.
If not, what IPC is this using behind the hood ?
I don't know if it's because they actually hate developers, or they're just bad developers themselves.
---
More on topic, this is an interesting approach to a tricky problem that exploits one of Swift's strengths (a stable ABI) and Apple's tight integration across the system (standardized app installation/structure/store/etc). You expose some functions as an extension/plugin API and other apps can just call them. Neat! IPC kind of sucks!
What could use some more discussion is how if you have two apps running and calling eachother (or being called from eachother), how does that affect the threading model? Are calls scheduled to happen later on the main UI thread, or are they actually coming from a separate process and you need to worry about synchronization if that call affects any kind of state?
External developers have complained for years. [1]
[1]: https://www.caseyliss.com/2020/11/10/on-apples-pisspoor-docu...
I'm sorry to disappoint, but ExtensionKit/Foundation do not make use of any Swift features in the way you describe. It's all just IPC (via XPC), so much of it is useable from ObjC, or even C!
Also, this does not provide a direct app-to-app communication channel. The extensions themselves must be separate executables and run within their own sandbox. I think the extension could communication with its containing app, but the system is not set up to do that. All your scheduling questions are really around how XPC works. The view itself is basically an image within your hosting app, so communication is entirely async to the other process.
This fact has been reported multiple times before[1][2][3], and it's frustrating that a company that claims having over 1000 engineers, and touts its $6B campus at every opportunity in every one of its keynotes has, evidently, not enough resources for proper documentation.
[1]https://news.ycombinator.com/item?id=33411242 [2]https://news.ycombinator.com/item?id=33410300 [3]https://news.ycombinator.com/item?id=33410329
Those two things are completely orthogonal tho... an API/tool/service can even be used to build billion dollar businesses and not have proper documentation...
That seems like a really good reason not to post it again as a toplevel comment.
https://hn.algolia.com/?dateRange=all&page=0&prefix=true&que...
Also is it really COM like? it doesn't look like it
EDIT: