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
Marin Usalj
April 29, 2014
Programming
2
280
Alcatraz internals
Talk given on NSLondon, April 2014
Marin Usalj
April 29, 2014
Tweet
Share
More Decks by Marin Usalj
See All by Marin Usalj
Code signing on iOS/OSX
supermarin
2
460
Launch Arguments - the mysteries
supermarin
1
210
Swift for CLI tools
supermarin
16
25k
CocoaPods intro
supermarin
2
230
Private pods - best practices
supermarin
1
170
CLI apps. For fun and profit
supermarin
4
16k
ObjectiveSugar & ObjectiveRecord
supermarin
5
550
Alcatraz - Xcode package manager
supermarin
3
310
BubbleWrap
supermarin
3
320
Other Decks in Programming
See All in Programming
Swift Updates - Learn Languages 2025
koher
2
480
Compose Multiplatform × AI で作る、次世代アプリ開発支援ツールの設計と実装
thagikura
0
160
請來的 AI Agent 同事們在寫程式時,怎麼用 pytest 去除各種幻想與盲點
keitheis
0
120
奥深くて厄介な「改行」と仲良くなる20分
oguemon
1
540
複雑なドメインに挑む.pdf
yukisakai1225
5
1.2k
ぬるぬる動かせ! Riveでアニメーション実装🐾
kno3a87
1
220
AIでLINEスタンプを作ってみた
eycjur
1
230
私の後悔をAWS DMSで解決した話
hiramax
4
210
How Android Uses Data Structures Behind The Scenes
l2hyunwoo
0
460
個人軟體時代
ethanhuang13
0
320
実用的なGOCACHEPROG実装をするために / golang.tokyo #40
mazrean
1
280
AIを活用し、今後に備えるための技術知識 / Basic Knowledge to Utilize AI
kishida
22
5.8k
Featured
See All Featured
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
18
1.1k
Why You Should Never Use an ORM
jnunemaker
PRO
59
9.5k
Unsuck your backbone
ammeep
671
58k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
580
For a Future-Friendly Web
brad_frost
180
9.9k
The Straight Up "How To Draw Better" Workshop
denniskardys
236
140k
GraphQLの誤解/rethinking-graphql
sonatard
72
11k
A Tale of Four Properties
chriscoyier
160
23k
A Modern Web Designer's Workflow
chriscoyier
696
190k
Art, The Web, and Tiny UX
lynnandtonic
303
21k
Designing for humans not robots
tammielis
253
25k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
113
20k
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