Did you get a chance to watch the WWDC 2016 Keynote or Platforms State of the Union today? Or were you lucky enough to be there in person? I wanted to bring to your attention what I believe will be one of the most impactful changes to your life as a developer, Xcode Extensions. In fact, Apple didn’t actually even mention it aloud during the keynote. You had to be closely watching the slides. Xcode Extensions appeared in the slide that Craig Federighi presented that was tag-cloud like in showing off all the new developer features available for iOS10. You can see it at minute mark 100:48. Xcode Extensions are also featured prominently on the What’s New page for Xcode 8:
Later in the day, Xcode Extensions got a solid shoutout and description during the Platforms State of the Union, which you can see at minute mark 37:38.
Third Party Extensions Have Been Hard
Overall, during the keynote, I was a little surprised by the lack of new APIs available to iOS developers that were presented during this keynote. So when this slide appeared highlighting the new features available to iOS developers, I paused the video to scour each bullet. I’ve always loved customizing my development environment, and I’ve been a Alcatraz user for years. Alcatraz is a third-party extension (or plugin) manager for Xcode plugins. You can get anything from different source code highlighting templates, to extensions that significantly change the behavior of Xcode (usually in good ways). Unfortunately, creating Xcode extensions up until now has not been supported by Apple. I had the honor of working with Derek Selander on his monster 3-part raywenderlich.com tutorial on creating your own Xcode Plugin (I tech edited the article), and it revealed just how hard it is to create an Xcode extension, up until now. It’s a huge pain in the butt, and is really hard to do. You end up decompiling assembly code, running multiple instances of Xcode, and end up guessing a lot. And then, when new versions of Xcode are released, it’s possible that your plugin won’t work and will need to be updated.
Officially Supported Xcode Extensions Will Be Awesome
Other IDEs like Android Studio or Eclipse have APIs available for easily creating plugins. I’m assuming that Xcode Extensions are going to be just that, a way for developers to easily create Xcode extensions or plugins, through a Apple-supported API. Looking at the WWDC schedule, now that it’s been declassified, session 414 on Thursday is titled “Using and Extending the Xcode Source Editor.” It’s description contains the following:
We’ll also show you how to add commands to the source editor with new Xcode Extensions that you can distribute on the Mac App Store.
During the Platforms State of the Union, the following were described as examples of Xcode extension functionality:
- Content addition and deletion
- Content transformation
- Content selection
- Pasteboard modification
- In-file navigation
I was happy to see that Xcode extensions will be supported anywhere Xcode 8 runs – on both macOS Sierra and El Capitan. And furthermore, to be able to actually SELL THEM- something which isn’t possible with today’s backwards way of reverse engineering to create your own Xcode extension, will be awesome.
I think this will have a profound effect on our lives as developers. JetBrains and Reveal will no longer need to create standalone apps to help developers. Instead, they’ll be able to provide their awesome 3rd party functionality and features right within Xcode. I can’t wait for Xcode extensions.
Remember the hacked version of Xcode called XcodeGhost that was being distributed on third party download sites? Hackers had created a malicious version of Xcode that would inject malicious code into your iOS apps. Luckily, this only ever made it onto 3rd party download sites, which you shouldn’t use anyway, but people still do use because of slow overseas download speeds. The technique used to create Xcode extensions prior to Xcode 8 enabled this type of malicious hackery of Xcode. Luckily, with changes to Xcode 8, this doesn’t look like it will be possible any longer.
Xcode is now secured by System Integrity Protection, which means only trusted libraries and extensions can interact with the IDE and your code.
I interpret this to mean that the “old” way to hacking your own plugins into Xcode will no longer work, and you’ll instead have to play within the boundaries defined for official Xcode extensions.
WWDC week is so exciting. I’ll be going through videos each day and finding exciting and new APIs, features, and SDK changes to relay to you here, right on cleanswifter.com. What are you finding most exciting?
8 thoughts on “Xcode Extensions- Your Life Will Change”
first of all, congratulations for your blog. I think it’s the best source of information related with iOS development and Unit Testing by far.
It’s a pity we still have to launch the app on the device or simulator in order to launch our unit tests. I thought this would be the year in which Apple changes this.
I can’t wait to read from your all the interesting stuff from this year’s WWDC.
Keep up the good work!
yeah, they killed all of the old plugins, and the entire Alcatraz platform, which were AWESOME already, and now we have nothing, and we will have nothing for a long time now. The new extension point only allows fiddling with the text editor… my xcode dev life has changed already… it is ruined I had so many super useful plugins installed and now I got nothing… thanks a lot apple
Awesome, thanks for the link! Keep ya head up, I bet Xcode Extensions will evolve into something better.
Awesome. Now remember to sign your extension, or else Xcode won’t load it! You write about signed libraries, but I thought that was not obvious for somebody.
Thanks for post ,
There is no information on how to add the Xcode extension to Xcode?
Currently if we have extension code , we can Only launch the extension in debug mode and attach to selected Xcode (grey colour) to use the feature . If we close the Xcode (grey colour) the extension feature is lost .
Please help if u have some info how to attach the extension feature permanently to Xcode.