Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Escape From Alcatraz: The Brave New World of Xcode Extensions - Pragma Conference Verona, October 2016

Escape From Alcatraz: The Brave New World of Xcode Extensions - Pragma Conference Verona, October 2016

Video:
https://www.youtube.com/watch?v=0oizSiHeaGk

My talk/rant about Xcode Extensions, updated and given at #pragma Conference in Verona, Italy, October 2016.

Sample code: https://github.com/designatednerd/Xcode8ExtensionExample

Abstract:
Every iOS developer wants to tweak Xcode to get it to do exactly what they want it to do. For the last couple of years, a whole ecosystem of plugins grew around a package manager called Alcatraz. But In Xcode 8, Apple dropped the hammer on the undocumented plugin architecture. In its place, they've introduced Xcode Extensions: An official, documented way to start to make Xcode do what you want. Ellen will discuss the history and future of what can be done with these extensions, and walk through an example of creating one.

Ellen Shapiro
PRO

October 14, 2016
Tweet

More Decks by Ellen Shapiro

Other Decks in Technology

Transcript

  1. ESCAPE FROM ALCATRAZ
    THE BRAVE NEW WORLD OF XCODE EXTENSIONS
    BY ELLEN SHAPIRO
    #PRAGMA CONF | VERONA, ITALIA | OCTOBER 2016
    DESIGNATEDNERD.COM | SPOTHERO.COM | JUSTHUM.COM | @DESIGNATEDNERD

    View Slide

  2. XCODE IS MY FRENEMY

    View Slide

  3. View Slide

  4. View Slide

  5. View Slide

  6. View Slide

  7. View Slide

  8. View Slide

  9. View Slide

  10. View Slide

  11. View Slide

  12. XCODE AUTO-BASHER

    View Slide

  13. XCODE GHOST !

    View Slide

  14. View Slide

  15. View Slide

  16. View Slide

  17. EXTENSIONS!

    View Slide

  18. EXTENSION GOOD NEWS

    View Slide

  19. OFFICIALLY SUPPORTED

    View Slide

  20. View Slide

  21. DOCUMENTED API

    View Slide

  22. View Slide

  23. View Slide

  24. View Slide

  25. MAKING AN EXTENSION

    View Slide

  26. 1. MAKE A HOST MAC APP

    View Slide

  27. 2. ADD AN EXTENSION

    View Slide

  28. View Slide

  29. View Slide

  30. View Slide

  31. XCSourceEditorExtension

    View Slide

  32. XCSourceEditorCommand

    View Slide

  33. 3. PREPARE FOR LAUNCH

    View Slide

  34. sudo /usr/libexec/xpccachectl
    THEN TURN IT OFF AND ON AGAIN
    (ONLY ON 10.11 EL CAPITAN, NOT NEEDED ON 10.12 SIERRA)

    View Slide

  35. View Slide

  36. View Slide

  37. View Slide

  38. TEMPTING THE DEMO GODS
    https://github.com/designatednerd/Xcode8ExtensionExample

    View Slide

  39. DISTRIBUTION: LIKE ANY OTHER MAC APP

    View Slide

  40. EXTENSION LIMITATIONS
    (ON A SCALE OF ! TO ")

    View Slide

  41. !: EXTENSIONS ARE
    SANDBOXED AND CODE-SIGNED

    View Slide

  42. !: NO DEFAULT KEY BINDINGS
    (USERS HAVE TO SET THEM UP INDIVIDUALLY)

    View Slide

  43. ☹: MUST BE INVOKED BY THE USER

    View Slide

  44. !: NO USER INTERFACE

    View Slide

  45. !: NO ACCESS
    TO FILE OR PROJECT STRUCTURE

    View Slide

  46. !: CAN'T EMIT WARNINGS

    View Slide

  47. DUMB THINGS I DID
    WHICH YOU SHOULD NOT DO

    View Slide

  48. FORGOT TO UNINSTALL
    OLD PLUGIN TOOLS

    View Slide

  49. View Slide

  50. View Slide

  51. View Slide

  52. FORGOT TO
    ENABLE CODE SIGNING

    View Slide

  53. LAUNCHED THE
    WRONG VERSION
    OF XCODE

    View Slide

  54. View Slide

  55. View Slide

  56. View Slide

  57. YOU CAN
    AVOID THIS ENTIRELY

    View Slide

  58. View Slide

  59. View Slide

  60. View Slide

  61. View Slide

  62. View Slide

  63. View Slide

  64. View Slide

  65. MINI
    DEMO

    View Slide

  66. OBLIGATORY SUMMARY SLIDE!
    ▸ Alcatraz is dead in Xcode 8. RIP.
    ▸ Xcode extensions are officially supported, and that's good.
    ▸ Xcode extensions must have a host macOS app, but that app doesn't
    actually have to do anything.
    ▸ Xcode extensions are pretty limited. File radars.

    View Slide

  67. CODE!
    https://github.com/designatednerd/
    Xcode8ExtensionExampl

    View Slide

  68. VIDEOS!
    ▸ WWDC 2016 Session 414: Using and extending the Xcode Source
    Editor: https://developer.apple.com/videos/play/wwdc2016/414/
    ▸ Daniel Jalkut at try! Swift NYC: https://realm.io/news/jalkut-
    extending-xcode-8/
    ▸ Sam Davies for RayWenderlich.com [paid]: https://
    videos.raywenderlich.com/screencasts/ios-10-creating-an-xcode-8-
    extension

    View Slide

  69. QUICK OVERVIEWS FOR PEOPLE WHO PREFER TO READ!
    ▸ http://www.russbishop.net/xcode-extensions
    ▸ https://littlebitesofcocoa.com/239-creating-an-xcode-source-
    editor-extension
    ▸ http://allblue.me/xcode/2016/06/28/Build-your-own-Xcode-8-
    source-editor-extension/

    View Slide

  70. LINKS!
    ▸ Roundup of extensions as of mid-August 2016: https://
    theswiftdev.com/2016/08/17/xcode-8-extensions/
    ▸ MMWormhole: https://github.com/mutualmobile/MMWormhole

    View Slide

  71. ! SLIGHTLY TERRIFYING LINKS! !
    ▸ Xcode Ghost details: https://en.wikipedia.org/wiki/XcodeGhost
    ▸ Strawhorse leaked document: https://theintercept.com/document/
    2015/03/10/strawhorse-attacking-macos-ios-software-
    development-kit
    ▸ Strawhorse Context: https://theintercept.com/2015/03/10/ispy-
    cia-campaign-steal-apples-secrets/

    View Slide

  72. RADARS TO DUPE!
    If you'd like any of this functionality, please dupe these radars:
    ▸ Allow callbacks anytime a file with a given extension is edited:
    http://www.openradar.me/26823522
    ▸ No Default key bindings: http://www.openradar.me/28170032
    ▸ Can't emit warnings: http://www.openradar.me/28170362

    View Slide