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

Alcatraz internals

Alcatraz internals

Talk given on NSLondon, April 2014

Marin Usalj

April 29, 2014
Tweet

More Decks by Marin Usalj

Other Decks in Programming

Transcript

  1. Alcatraz
    the package manager for Xcode

    View Slide

  2. View Slide

  3. how does this
    even

    View Slide

  4. ~/Library/Application\ Support\
    /Developer/Shared/Xcode/Plug-ins

    View Slide

  5. ./Plug-ins
    VVDocumenter.xcplugin
    BeginningOfLine.xcplugin
    OMColorSense.xcplugin
    BBUFullIssueNavigator.xcplugin

    View Slide

  6. ZOMG !
    PLUGINS!!!!11!!
    <3 <3

    View Slide

  7. View Slide

  8. + (void)pluginDidLoad:(NSBundle *)plugin {
    !
    if ([currentApplicationName isEqual:@"Xcode"]) {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
    sharedPlugin = [[self alloc] initWithBundle:plugin];
    });
    }
    !
    }

    View Slide

  9. Everything’s terrible
    Sincerely,
    FileMerge.app

    View Slide

  10. + (void)pluginDidLoad:(NSBundle *)plugin {
    !
    if ([currentApplicationName isEqual:@"Xcode"]) {
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
    sharedPlugin = [[self alloc] initWithBundle:plugin];
    });
    }
    !
    }

    View Slide

  11. aapl

    View Slide

  12. I’ll need you to
    come in
    tommmmoroooow

    View Slide

  13. and add these
    DVTPlugInCompatibility
    UUIDs

    View Slide

  14. that’d be
    GRRREEEEEAT

    View Slide

  15. Cou … l ..dn’t
    ww we use.
    Semantic Versioning?

    View Slide

  16. Oh,
    almost forgot…

    View Slide

  17. I’ll need you to
    stop filling radars

    View Slide

  18. and
    crashing Xcode

    View Slide

  19. otherwise we’ll
    disable plugins
    entirely

    View Slide

  20. THANKS

    View Slide

  21. Xcode UUID
    5.0 640F884E-CE55-4B40-87C0-8869546CAB7A
    5.0.1 640F884E-CE55-4B40-87C0-8869546CAB7A
    5.1 A2E4D43F-41F4-4FB9-BB94-7177011C9AED
    5.1.1 A2E4D43F-41F4-4FB9-BB94-7177011C9AED

    View Slide

  22. Xcode UUID
    5.0 640F884E-CE55-4B40-87C0-8869546CAB7A
    YOUR PLUGIN
    5.1 A2E4D43F-41F4-4FB9-BB94-7177011C9AED

    View Slide

  23. Xcode UUID
    5.0 640F884E-CE55-4B40-87C0-8869546CAB7A
    YOUR PLUGIN
    5.1 A2E4D43F-41F4-4FB9-BB94-7177011C9AED
    6.0 BASDSDII-JWM3-2987-KKHH-82890MSEBUEM

    View Slide

  24. internals

    View Slide

  25. View Slide

  26. Color scheme
    Templates
    Xcode Plugin

    View Slide

  27. Color scheme
    Templates
    Xcode Plugin

    View Slide

  28. -name
    -description
    -iconName
    -remotePath
    -isInstalled
    -screenshotPath
    ATZPackage.h

    View Slide

  29. @implementation ATZColorScheme
    !
    - (ATZInstaller *)installer {
    return [ATZColorSchemeInstaller sharedInstaller];
    }
    !
    - (NSString *)type {
    return COLOR_SCHEME;
    }
    !
    - (BOOL)requiresRestart {
    return YES;
    }
    !
    - (NSString *)extension {
    return DVTCOLORSCHEME;
    }
    !
    - (NSString *)iconName {
    return COLOR_SCHEME_ICON_NAME;
    }
    !
    @end

    View Slide

  30. @implementation ATZPlugin
    @synthesize requiresRestart;
    !
    - (ATZInstaller *)installer {
    return [ATZPluginInstaller sharedInstaller];
    }
    !
    - (NSString *)type {
    return PLUGIN;
    }
    !
    - (NSString *)extension {
    return XCPLUGIN;
    }
    !
    - (NSString *)iconName {
    return PLUGIN_ICON_NAME;
    }
    !
    @end

    View Slide

  31. @implementation ATZTemplate
    !
    - (ATZInstaller *)installer {
    @throw [NSException
    exceptionWithName:@"Abstract template"
    reason:@"Please use one of ATZTemplate subclasses"
    userInfo:nil];
    }
    !
    - (NSString *)type {
    return nil;
    }
    !
    - (BOOL)requiresRestart {
    return NO;
    }
    !
    - (NSString *)extension {
    return XCTEMPLATE;
    }
    !
    - (NSString *)iconName {
    return TEMPLATE_ICON_NAME;
    }
    !
    @end

    View Slide

  32. ATZInstaller.h
    -installPackage:progress:completion:
    -updatePackage:progress:completion:
    -removePackage:progress:completion:
    !
    -isPackageInstalled:

    View Slide

  33. ATZInstaller.h
    ATZColorSchemeInstaller.h
    ATZTemplateInstaller.h
    ATZPluginInstaller.h

    View Slide

  34. ATZPluginInstaller.h

    View Slide

  35. ATZTemplateInstaller.h

    View Slide

  36. ATZColorSchemeInstaller.h

    View Slide

  37. updates

    View Slide

  38. git fetch
    git reset —hard

    View Slide

  39. View Slide

  40. git yolo

    View Slide

  41. how do we update
    Alcatraz?

    View Slide

  42. Alcatraz is just a
    plugin

    View Slide

  43. ALCATRAZ USES ALCATRAZ
    TO UPDATE ALCATRAZ

    View Slide

  44. roadmap

    View Slide

  45. NDA

    View Slide

  46. May 2013

    View Slide

  47. Mar 2014

    View Slide

  48. NDA

    View Slide

  49. CocoaPods

    View Slide

  50. the band

    View Slide

  51. @kattrali
    KEYBOARDS
    KEYBOARDS

    View Slide

  52. @jurre
    KEYBOARDS
    KEYBOARDS

    View Slide

  53. many awesome contributors
    THE ORCHESTRA

    View Slide

  54. thank you
    Marin Usalj
    @supermarin | supermar.in

    View Slide