Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Alcatraz internals
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Marin Usalj
April 29, 2014
Programming
360
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Alcatraz internals
Talk given on NSLondon, April 2014
Marin Usalj
April 29, 2014
More Decks by Marin Usalj
See All by Marin Usalj
Code signing on iOS/OSX
supermarin
2
500
Launch Arguments - the mysteries
supermarin
1
260
Swift for CLI tools
supermarin
16
25k
CocoaPods intro
supermarin
2
260
Private pods - best practices
supermarin
1
200
CLI apps. For fun and profit
supermarin
4
16k
ObjectiveSugar & ObjectiveRecord
supermarin
5
590
Alcatraz - Xcode package manager
supermarin
3
360
BubbleWrap
supermarin
3
360
Other Decks in Programming
See All in Programming
まずはプロンプトガイドを読もう、話はそれからだ
kiakiraki
1
170
不幸な GC
chencmd
0
340
S3 を使うアプリケーションをローカル完結で動かすことに全力を注いでみた / Running S3 Apps Offline
contour_gara
0
560
How I Won Prize Money at a Hackathon Using Codex and Symphony Alpha
yasei_no_otoko
0
120
Android CLI
fornewid
0
230
わからない話を追いかけたら、プログラミング言語を作る側にいた
ydah
3
530
自動化したのに回らない テスト運用の壁―AI時代の品質責任と生産性
mfunaki
0
360
FastAPI の並行処理モデルを完全に理解する
hoto17296
5
1.6k
ここ半年くらいでAIに作らせたR用ツール
eitsupi
0
400
SlackアプリとLambdaの 連携を構築した話
pawn_4_s
1
130
メールのエイリアス機能を履き違えない
isshinfunada
0
250
Webエンジニアなのにブラウザの仕組みがわからないので、Pythonで自作してみた
tatsuki12
4
880
Featured
See All Featured
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
490
svc-hook: hooking system calls on ARM64 by binary rewriting
retrage
2
510
WENDY [Excerpt]
tessaabrams
11
39k
Fashionably flexible responsive web design (full day workshop)
malarkey
408
67k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
230
23k
Designing for Performance
lara
611
70k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
480
Ethics towards AI in product and experience design
skipperchong
2
350
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
410
How to train your dragon (web standard)
notwaldorf
97
6.8k
Testing 201, or: Great Expectations
jmmastey
46
8.2k
Transcript
Alcatraz the package manager for Xcode
None
how does this even
~/Library/Application\ Support\ /Developer/Shared/Xcode/Plug-ins
./Plug-ins VVDocumenter.xcplugin BeginningOfLine.xcplugin OMColorSense.xcplugin BBUFullIssueNavigator.xcplugin
ZOMG ! PLUGINS!!!!11!! <3 <3
None
+ (void)pluginDidLoad:(NSBundle *)plugin { ! if ([currentApplicationName isEqual:@"Xcode"]) { static
dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ sharedPlugin = [[self alloc] initWithBundle:plugin]; }); } ! }
Everything’s terrible Sincerely, FileMerge.app
+ (void)pluginDidLoad:(NSBundle *)plugin { ! if ([currentApplicationName isEqual:@"Xcode"]) { static
dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ sharedPlugin = [[self alloc] initWithBundle:plugin]; }); } ! }
aapl
I’ll need you to come in tommmmoroooow
and add these DVTPlugInCompatibility UUIDs
that’d be GRRREEEEEAT
Cou … l ..dn’t ww we use. Semantic Versioning?
Oh, almost forgot…
I’ll need you to stop filling radars
and crashing Xcode
otherwise we’ll disable plugins entirely
THANKS
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
Xcode UUID 5.0 640F884E-CE55-4B40-87C0-8869546CAB7A YOUR PLUGIN 5.1 A2E4D43F-41F4-4FB9-BB94-7177011C9AED
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
internals
None
Color scheme Templates Xcode Plugin
Color scheme Templates Xcode Plugin
-name -description -iconName -remotePath -isInstalled -screenshotPath ATZPackage.h
@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
@implementation ATZPlugin @synthesize requiresRestart; ! - (ATZInstaller *)installer { return
[ATZPluginInstaller sharedInstaller]; } ! - (NSString *)type { return PLUGIN; } ! - (NSString *)extension { return XCPLUGIN; } ! - (NSString *)iconName { return PLUGIN_ICON_NAME; } ! @end
@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
ATZInstaller.h -installPackage:progress:completion: -updatePackage:progress:completion: -removePackage:progress:completion: ! -isPackageInstalled:
ATZInstaller.h ATZColorSchemeInstaller.h ATZTemplateInstaller.h ATZPluginInstaller.h
ATZPluginInstaller.h
ATZTemplateInstaller.h
ATZColorSchemeInstaller.h
updates
git fetch git reset —hard
None
git yolo
how do we update Alcatraz?
Alcatraz is just a plugin
ALCATRAZ USES ALCATRAZ TO UPDATE ALCATRAZ
roadmap
NDA
May 2013
Mar 2014
NDA
CocoaPods
the band
@kattrali KEYBOARDS KEYBOARDS
@jurre KEYBOARDS KEYBOARDS
many awesome contributors THE ORCHESTRA
thank you Marin Usalj @supermarin | supermar.in