One of the things that Apple released on WWDC was the official support for Xcode plugins. Although in a very limited way, is really nice to see Apple opening Xcode with an official framework.
I wrote a small extension that has a couple of commands to modify or remove the top comment of the file. You can check XcodeTopComment on GitHub. I can't wait for the App Store to be open for Xcode extensions!
Is also another example of inter-process communication, a topic that I've been interested lately (check the SPM or xi-editor posts). I even tweeted how I didn't understand how a plain
NSMutableArray could transmit the information from the extension process to Xcode.
Does anyone know how they detect those changes? lldb says is a simple nsmutablearray (no proxy or similar), and being out of process… 🤔— Alejandro Martinez (@alexito4) 23 de junio de 2016
As usual Javi was there to give me the right answer.
@alexito4 the code that runs your extension observes changes in the dictionary and then can communicate back to Xcode via XPC.— JaviSoto.swift (@Javi) 23 de junio de 2016
Of course, how dumb I am! I didn't even thought on
XcodeKit! I'm always expecting black magic, but turns out that you still need boilerplate for this to happen.
The main idea is that
XcodeKit, running your extension, is the one that gives you the
NSMutableArray with some KVO hooks included. When it detects changes on the array it creates a proper XPC event to send back to Xcode. Is not magic, but really awesome 😀
Anyway, check out XcodeTopComment and you know where to find me if you have some feedback 😜