Slide 1

Slide 1 text

Alcatraz the package manager for Xcode

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

how does this even

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

ZOMG ! PLUGINS!!!!11!! <3 <3

Slide 7

Slide 7 text

No content

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

Everything’s terrible Sincerely, FileMerge.app

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

aapl

Slide 12

Slide 12 text

I’ll need you to come in tommmmoroooow

Slide 13

Slide 13 text

and add these DVTPlugInCompatibility UUIDs

Slide 14

Slide 14 text

that’d be GRRREEEEEAT

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

Oh, almost forgot…

Slide 17

Slide 17 text

I’ll need you to stop filling radars

Slide 18

Slide 18 text

and crashing Xcode

Slide 19

Slide 19 text

otherwise we’ll disable plugins entirely

Slide 20

Slide 20 text

THANKS

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

internals

Slide 25

Slide 25 text

No content

Slide 26

Slide 26 text

Color scheme Templates Xcode Plugin

Slide 27

Slide 27 text

Color scheme Templates Xcode Plugin

Slide 28

Slide 28 text

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

Slide 29

Slide 29 text

@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

Slide 30

Slide 30 text

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

Slide 31

Slide 31 text

@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

Slide 32

Slide 32 text

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

Slide 33

Slide 33 text

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

Slide 34

Slide 34 text

ATZPluginInstaller.h

Slide 35

Slide 35 text

ATZTemplateInstaller.h

Slide 36

Slide 36 text

ATZColorSchemeInstaller.h

Slide 37

Slide 37 text

updates

Slide 38

Slide 38 text

git fetch git reset —hard

Slide 39

Slide 39 text

No content

Slide 40

Slide 40 text

git yolo

Slide 41

Slide 41 text

how do we update Alcatraz?

Slide 42

Slide 42 text

Alcatraz is just a plugin

Slide 43

Slide 43 text

ALCATRAZ USES ALCATRAZ TO UPDATE ALCATRAZ

Slide 44

Slide 44 text

roadmap

Slide 45

Slide 45 text

NDA

Slide 46

Slide 46 text

May 2013

Slide 47

Slide 47 text

Mar 2014

Slide 48

Slide 48 text

NDA

Slide 49

Slide 49 text

CocoaPods

Slide 50

Slide 50 text

the band

Slide 51

Slide 51 text

@kattrali KEYBOARDS KEYBOARDS

Slide 52

Slide 52 text

@jurre KEYBOARDS KEYBOARDS

Slide 53

Slide 53 text

many awesome contributors THE ORCHESTRA

Slide 54

Slide 54 text

thank you Marin Usalj @supermarin | supermar.in