Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Speaker Deck
PRO
Sign in
Sign up for free
Alcatraz internals
Marin Usalj
April 29, 2014
Programming
2
210
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
370
Launch Arguments - the mysteries
supermarin
1
83
Swift for CLI tools
supermarin
15
24k
CocoaPods intro
supermarin
2
150
Private pods - best practices
supermarin
1
79
CLI apps. For fun and profit
supermarin
4
15k
ObjectiveSugar & ObjectiveRecord
supermarin
5
430
Alcatraz - Xcode package manager
supermarin
3
240
BubbleWrap
supermarin
3
290
Other Decks in Programming
See All in Programming
Securing Kafka Connect Pipelines with Client-Side Field Level Cryptography @ Kafka Summit London 2022
hpgrahsl
0
310
Update from the Elixir team - 2022
whatyouhide
0
150
近況PHP / PHP in now a days
uzulla
4
1.7k
職場にPythonistaを増やす方法
soogie
0
300
書籍『良いコード/悪いコードで学ぶ設計入門』でエンジニアリングの当たり前を変える
minodriven
3
1.1k
TechFeed Conference 2022 - Kotlin Experimental
jmatsu
0
700
Angular's new Standalone Components: How Will They Affect My Architecture? @iJS London 2022
manfredsteyer
PRO
0
390
Where and how to run UI tests (Droidcon London, 2021)
nonews
0
210
Enterprise Angular: Frontend Moduliths with Nx and Standalone Components @jax2022
manfredsteyer
PRO
0
290
You CANt teach an old dog new tricks
michaelbukachi
0
110
2022 FrontEnd Training
mixi_engineers
1
280
Learning DDD輪読会#4 / Learning DDD Book Club #4
suzushin54
1
130
Featured
See All Featured
Designing on Purpose - Digital PM Summit 2013
jponch
106
5.6k
Principles of Awesome APIs and How to Build Them.
keavy
113
15k
The Invisible Customer
myddelton
110
11k
How to train your dragon (web standard)
notwaldorf
57
3.8k
Why You Should Never Use an ORM
jnunemaker
PRO
47
5.5k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
103
16k
Automating Front-end Workflow
addyosmani
1351
200k
How New CSS Is Changing Everything About Graphic Design on the Web
jensimmons
212
11k
Keith and Marios Guide to Fast Websites
keithpitt
404
21k
Building Your Own Lightsaber
phodgson
94
4.6k
10 Git Anti Patterns You Should be Aware of
lemiorhan
638
52k
Side Projects
sachag
449
37k
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