Mac: Put game loop below NSApplicationMain in call hierarchy

stable-5.1
Martin Plicht 2010-02-24 12:48:16 +01:00
parent d9fa2eb60e
commit 956de7aef5
3 changed files with 754 additions and 83 deletions

View File

@ -9,12 +9,12 @@
@interface SDLMain: NSObject
{
NSString* clonkDirectory;
NSMutableArray* gatheredArguments;
NSString* clonkDirectory;
NSString* addonSupplied;
BOOL doNotLaunch;
BOOL hasFinished;
BOOL terminateRequested;
BOOL gameLoopFinished;
}
- (NSString*) clonkDirectory;
- (BOOL) argsLookLikeItShouldBeInstallation:(char**)argv argc:(int)argc;

View File

@ -7,16 +7,24 @@
/* The main class of the application, the appl¤ication's delegate */
@implementation SDLMain
- (id) init {
- (id) init
{
if (self = [super init]) {
// first argument is path to executable (for authenticity)
gatheredArguments = [NSMutableArray arrayWithCapacity:10];
gatheredArguments = [[NSMutableArray arrayWithCapacity:10] retain];
[gatheredArguments addObject:[[NSBundle mainBundle] executablePath]];
}
return self;
}
- (void) release {
- (void)awakeFromNib
{
[[NSAppleEventManager sharedAppleEventManager] setEventHandler:self
andSelector:@selector(getUrl:withReplyEvent:)
forEventClass:kInternetEventClass andEventID:kAEGetURL];
}
- (void) release
{
if (terminateRequested)
[NSApp replyToApplicationShouldTerminate:YES];
[super release];
@ -28,17 +36,18 @@
NSArray* clonkFileNameExtensions = [NSArray arrayWithObjects:@"c4d", @"c4s", @"c4f", @"c4g", @"c4s", nil];
if ([clonkFileNameExtensions containsObject:pathExtension])
{
// later decide whether to install or run
addonSupplied = filename;
if (hasFinished) {
// if application is already running install immediately
[self installAddOn];
return YES;
}
// still add to gatheredArguments
// return YES;
}
{
// later decide whether to install or run
addonSupplied = filename;
if (YES)
{
// if application is already running install immediately
[self installAddOn];
return YES;
}
// still add to gatheredArguments
// return YES;
}
// Key/Update files or simply arguments: Just pass to engine, will install
[gatheredArguments addObject:filename];
@ -52,6 +61,30 @@
[gatheredArguments addObject:url];
}
- (void)gameLoop
{
[[NSFileManager defaultManager] changeCurrentDirectoryPath:[self clonkDirectory]];
[NSApp activateIgnoringOtherApps:YES];
/*if ([self argsLookLikeItShouldBeInstallation:argv argc:argc]) {
if ([self installAddOn])
return 0;
}*/
// Hand off to Clonk code
char** newArgv;
int newArgc;
[self makeFakeArgs:&newArgv argc:&newArgc];
int status = SDL_main(newArgc, newArgv);
for (int i = newArgc-1; i >= 0; i--)
{
free (newArgv[i]);
}
free(newArgv);
}
/* Called when the internal event loop has just started running */
- (void) applicationDidFinishLaunching: (NSNotification *) note
{
@ -59,12 +92,19 @@
for (NSString* key in args) {
[gatheredArguments addObject:[NSString stringWithFormat:@"/%@:%@", key, [args valueForKey:key]]];
}*/
hasFinished = YES;
[self gameLoop];
gameLoopFinished = YES;
[NSApp terminate:self];
}
- (NSApplicationTerminateReply) applicationShouldTerminate:(NSApplication*)application {
[self terminate:application];
return NSTerminateCancel; // cancels logoff but it's the only way that does not interrupt the lifecycle of the application
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication*)application
{
if (!gameLoopFinished)
{
[self terminate:application];
return NSTerminateCancel; // cancels logoff but it's the only way that does not interrupt the lifecycle of the application
}
return NSTerminateNow;
}
- (void)terminate:(NSApplication*)sender
@ -75,12 +115,9 @@
SDL_PushEvent(&event);
}
- (BOOL)hasFinished {
return hasFinished;
}
// arguments that should be converted to a c char* array and then passed on to SDL_main
- (NSMutableArray*)gatheredArguments {
- (NSMutableArray*)gatheredArguments
{
return gatheredArguments;
}
@ -94,8 +131,9 @@
}
// Look for -psn argument which generally is a clue that the application should open a file (double-clicking, calling /usr/bin/open and such)
- (BOOL) argsLookLikeItShouldBeInstallation:(char**)argv argc:(int)argc {
// not having this check leads to deletion of Clonk foler -.-
- (BOOL) argsLookLikeItShouldBeInstallation:(char**)argv argc:(int)argc
{
// not having this check leads to deletion of Clonk folder -.-
if (!addonSupplied)
return NO;
for (int i = 0; i < argc; i++) {
@ -106,7 +144,8 @@
}
// Copies the add-on to the clonk directory
- (BOOL) installAddOn {
- (BOOL) installAddOn
{
if (!addonSupplied)
return NO;
@ -141,11 +180,13 @@
}
// convert gatheredArguments to c array
- (void)makeFakeArgs:(char***)argv argc:(int*)argc {
- (void)makeFakeArgs:(char***)argv argc:(int*)argc
{
int argCount = [gatheredArguments count];
char** args = (char**)malloc(sizeof(char*) * argCount);
for (int i = 0; i < argCount; i++) {
args[i] = strdup([[gatheredArguments objectAtIndex:i] cStringUsingEncoding:NSASCIIStringEncoding]);
for (int i = 0; i < argCount; i++)
{
args[i] = strdup([[gatheredArguments objectAtIndex:i] cStringUsingEncoding:NSUTF8StringEncoding]);
}
*argv = args;
*argc = argCount;
@ -158,56 +199,7 @@
#endif
/* Main entry point to executable - should *not* be SDL_main! */
int main (int argc, char **argv)
int main (int argc, const char **argv)
{
// Catches whatever would be leaked otherwise.
// Gets rid of warnings from hax0red SDL framework.
[[NSAutoreleasePool alloc] init];
SDLMain* sdlMain = [[SDLMain alloc] init];
[[NSFileManager defaultManager] changeCurrentDirectoryPath:[sdlMain clonkDirectory]];
// Set up application & delegate.
[NSApplication sharedApplication];
[NSApp setDelegate:sdlMain];
[[NSAppleEventManager sharedAppleEventManager] setEventHandler:sdlMain
andSelector:@selector(getUrl:withReplyEvent:) forEventClass:kInternetEventClass andEventID:kAEGetURL];
[NSBundle loadNibNamed:@"SDLMain" owner:NSApp];
[NSApp finishLaunching];
[NSApp activateIgnoringOtherApps:YES];
// Now there's openFile calls and all that waiting for us in the event queue.
// Fetch events until applicationHasFinishedLaunching was called.
while (![sdlMain hasFinished]) {
NSEvent *event = [NSApp nextEventMatchingMask:NSAnyEventMask
untilDate:nil
inMode:NSDefaultRunLoopMode
dequeue:YES ];
if ( event == nil ) {
break;
}
[NSApp sendEvent:event];
}
if ([sdlMain argsLookLikeItShouldBeInstallation:argv argc:argc]) {
if ([sdlMain installAddOn])
return 0;
}
// Hand off to Clonk code
char** newArgv;
int newArgc;
[sdlMain makeFakeArgs:&newArgv argc:&newArgc];
int status = SDL_main(newArgc, newArgv);
// I don't think this is even necessary since the OS will just wipe it all out when the process ends
for (int i = newArgc-1; i >= 0; i--) {
free (newArgv[i]);
}
free(newArgv);
[sdlMain release];
return status;
return NSApplicationMain(argc, argv);
}

679
xcode/SDLMain.xib 100644
View File

@ -0,0 +1,679 @@
<?xml version="1.0" encoding="UTF-8"?>
<archive type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="7.10">
<data>
<int key="IBDocument.SystemTarget">1060</int>
<string key="IBDocument.SystemVersion">10C540</string>
<string key="IBDocument.InterfaceBuilderVersion">740</string>
<string key="IBDocument.AppKitVersion">1038.25</string>
<string key="IBDocument.HIToolboxVersion">458.00</string>
<object class="NSMutableDictionary" key="IBDocument.PluginVersions">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin</string>
<string key="NS.object.0">740</string>
</object>
<object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
<bool key="EncodedWithXMLCoder">YES</bool>
<integer value="57"/>
</object>
<object class="NSArray" key="IBDocument.PluginDependencies">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
</object>
<object class="NSMutableDictionary" key="IBDocument.Metadata">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSArray" key="dict.sortedKeys" id="0">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
</object>
<object class="NSMutableArray" key="IBDocument.RootObjects" id="119274832">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSCustomObject" id="818653880">
<object class="NSMutableString" key="NSClassName">
<characters key="NS.bytes">NSApplication</characters>
</object>
</object>
<object class="NSCustomObject" id="22732454">
<string key="NSClassName">FirstResponder</string>
</object>
<object class="NSCustomObject" id="1044128150">
<string key="NSClassName">NSApplication</string>
</object>
<object class="NSMenu" id="413282662">
<string key="NSTitle">SDLMain</string>
<object class="NSMutableArray" key="NSMenuItems">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMenuItem" id="166399698">
<reference key="NSMenu" ref="413282662"/>
<string key="NSTitle">Clonk</string>
<string key="NSKeyEquiv"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<object class="NSCustomResource" key="NSOnImage" id="236001633">
<string key="NSClassName">NSImage</string>
<string key="NSResourceName">NSMenuCheckmark</string>
</object>
<object class="NSCustomResource" key="NSMixedImage" id="855621955">
<string key="NSClassName">NSImage</string>
<string key="NSResourceName">NSMenuMixedState</string>
</object>
<string key="NSAction">submenuAction:</string>
<object class="NSMenu" key="NSSubmenu" id="671325961">
<string key="NSTitle">Clonk</string>
<object class="NSMutableArray" key="NSMenuItems">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMenuItem" id="905940774">
<reference key="NSMenu" ref="671325961"/>
<string key="NSTitle">Hide Clonk</string>
<string key="NSKeyEquiv">h</string>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="236001633"/>
<reference key="NSMixedImage" ref="855621955"/>
</object>
<object class="NSMenuItem" id="430749323">
<reference key="NSMenu" ref="671325961"/>
<string key="NSTitle">Hide Others</string>
<string key="NSKeyEquiv"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="236001633"/>
<reference key="NSMixedImage" ref="855621955"/>
</object>
<object class="NSMenuItem" id="45658860">
<reference key="NSMenu" ref="671325961"/>
<string key="NSTitle">Show All</string>
<string key="NSKeyEquiv"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="236001633"/>
<reference key="NSMixedImage" ref="855621955"/>
</object>
<object class="NSMenuItem" id="1010818828">
<reference key="NSMenu" ref="671325961"/>
<bool key="NSIsDisabled">YES</bool>
<bool key="NSIsSeparator">YES</bool>
<string key="NSTitle"/>
<string key="NSKeyEquiv"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="236001633"/>
<reference key="NSMixedImage" ref="855621955"/>
</object>
<object class="NSMenuItem" id="942357333">
<reference key="NSMenu" ref="671325961"/>
<string key="NSTitle">Quit Clonk</string>
<string key="NSKeyEquiv">q</string>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="236001633"/>
<reference key="NSMixedImage" ref="855621955"/>
</object>
</object>
<string key="NSName">_NSAppleMenu</string>
</object>
</object>
<object class="NSMenuItem" id="143812656">
<reference key="NSMenu" ref="413282662"/>
<string key="NSTitle">Window</string>
<string key="NSKeyEquiv"/>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="236001633"/>
<reference key="NSMixedImage" ref="855621955"/>
<string key="NSAction">submenuAction:</string>
<object class="NSMenu" key="NSSubmenu" id="594976293">
<object class="NSMutableString" key="NSTitle">
<characters key="NS.bytes">Window</characters>
</object>
<object class="NSMutableArray" key="NSMenuItems">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSMenuItem" id="687345396">
<reference key="NSMenu" ref="594976293"/>
<string key="NSTitle">Minimize</string>
<string key="NSKeyEquiv">m</string>
<int key="NSKeyEquivModMask">1048576</int>
<int key="NSMnemonicLoc">2147483647</int>
<reference key="NSOnImage" ref="236001633"/>
<reference key="NSMixedImage" ref="855621955"/>
</object>
</object>
<string key="NSName">_NSWindowsMenu</string>
</object>
</object>
</object>
<string key="NSName">_NSMainMenu</string>
</object>
<object class="NSCustomObject" id="3445348">
<string key="NSClassName">NSFontManager</string>
</object>
<object class="NSCustomObject" id="436992030">
<string key="NSClassName">SDLMain</string>
</object>
</object>
<object class="IBObjectContainer" key="IBDocument.Objects">
<object class="NSMutableArray" key="connectionRecords">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">hideOtherApplications:</string>
<reference key="source" ref="818653880"/>
<reference key="destination" ref="430749323"/>
</object>
<int key="connectionID">146</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">hide:</string>
<reference key="source" ref="818653880"/>
<reference key="destination" ref="905940774"/>
</object>
<int key="connectionID">152</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">unhideAllApplications:</string>
<reference key="source" ref="818653880"/>
<reference key="destination" ref="45658860"/>
</object>
<int key="connectionID">153</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">performMiniaturize:</string>
<reference key="source" ref="22732454"/>
<reference key="destination" ref="687345396"/>
</object>
<int key="connectionID">328</int>
</object>
<object class="IBConnectionRecord">
<object class="IBOutletConnection" key="connection">
<string key="label">delegate</string>
<reference key="source" ref="1044128150"/>
<reference key="destination" ref="436992030"/>
</object>
<int key="connectionID">338</int>
</object>
<object class="IBConnectionRecord">
<object class="IBActionConnection" key="connection">
<string key="label">terminate:</string>
<reference key="source" ref="1044128150"/>
<reference key="destination" ref="942357333"/>
</object>
<int key="connectionID">339</int>
</object>
</object>
<object class="IBMutableOrderedSet" key="objectRecords">
<object class="NSArray" key="orderedObjects">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBObjectRecord">
<int key="objectID">0</int>
<reference key="object" ref="0"/>
<reference key="children" ref="119274832"/>
<nil key="parent"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">-2</int>
<reference key="object" ref="818653880"/>
<reference key="parent" ref="0"/>
<string key="objectName">File's Owner</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">-1</int>
<reference key="object" ref="22732454"/>
<reference key="parent" ref="0"/>
<string key="objectName">First Responder</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">29</int>
<reference key="object" ref="413282662"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="166399698"/>
<reference ref="143812656"/>
</object>
<reference key="parent" ref="0"/>
<string key="objectName">MainMenu</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">56</int>
<reference key="object" ref="166399698"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="671325961"/>
</object>
<reference key="parent" ref="413282662"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">57</int>
<reference key="object" ref="671325961"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="905940774"/>
<reference ref="942357333"/>
<reference ref="430749323"/>
<reference ref="1010818828"/>
<reference ref="45658860"/>
</object>
<reference key="parent" ref="166399698"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">134</int>
<reference key="object" ref="905940774"/>
<reference key="parent" ref="671325961"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">136</int>
<reference key="object" ref="942357333"/>
<reference key="parent" ref="671325961"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">145</int>
<reference key="object" ref="430749323"/>
<reference key="parent" ref="671325961"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">149</int>
<reference key="object" ref="1010818828"/>
<reference key="parent" ref="671325961"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">150</int>
<reference key="object" ref="45658860"/>
<reference key="parent" ref="671325961"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">284</int>
<reference key="object" ref="143812656"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="594976293"/>
</object>
<reference key="parent" ref="413282662"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">285</int>
<reference key="object" ref="594976293"/>
<object class="NSMutableArray" key="children">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference ref="687345396"/>
</object>
<reference key="parent" ref="143812656"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">283</int>
<reference key="object" ref="687345396"/>
<reference key="parent" ref="594976293"/>
</object>
<object class="IBObjectRecord">
<int key="objectID">253</int>
<reference key="object" ref="3445348"/>
<reference key="parent" ref="0"/>
<string key="objectName">Font Manager</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">331</int>
<reference key="object" ref="436992030"/>
<reference key="parent" ref="0"/>
<string key="objectName">SDLMain</string>
</object>
<object class="IBObjectRecord">
<int key="objectID">-3</int>
<reference key="object" ref="1044128150"/>
<reference key="parent" ref="0"/>
<string key="objectName">Application</string>
</object>
</object>
</object>
<object class="NSMutableDictionary" key="flattenedProperties">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="NSArray" key="dict.sortedKeys">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>134.IBPluginDependency</string>
<string>134.ImportedFromIB2</string>
<string>136.IBPluginDependency</string>
<string>136.ImportedFromIB2</string>
<string>145.IBPluginDependency</string>
<string>145.ImportedFromIB2</string>
<string>149.IBPluginDependency</string>
<string>149.ImportedFromIB2</string>
<string>150.IBPluginDependency</string>
<string>150.ImportedFromIB2</string>
<string>253.ImportedFromIB2</string>
<string>283.IBPluginDependency</string>
<string>283.ImportedFromIB2</string>
<string>284.IBPluginDependency</string>
<string>284.ImportedFromIB2</string>
<string>285.IBEditorWindowLastContentRect</string>
<string>285.IBPluginDependency</string>
<string>285.ImportedFromIB2</string>
<string>29.IBEditorWindowLastContentRect</string>
<string>29.IBPluginDependency</string>
<string>29.ImportedFromIB2</string>
<string>331.ImportedFromIB2</string>
<string>56.IBPluginDependency</string>
<string>56.ImportedFromIB2</string>
<string>57.IBEditorWindowLastContentRect</string>
<string>57.IBPluginDependency</string>
<string>57.ImportedFromIB2</string>
</object>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<boolean value="YES"/>
<boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<boolean value="YES"/>
<string>{{124, 952}, {140, 23}}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<boolean value="YES"/>
<string>{{52, 975}, {155, 20}}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<boolean value="YES"/>
<boolean value="YES"/>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<boolean value="YES"/>
<string>{{64, 882}, {185, 93}}</string>
<string>com.apple.InterfaceBuilder.CocoaPlugin</string>
<boolean value="YES"/>
</object>
</object>
<object class="NSMutableDictionary" key="unlocalizedProperties">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference key="dict.sortedKeys" ref="0"/>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
</object>
<nil key="activeLocalization"/>
<object class="NSMutableDictionary" key="localizations">
<bool key="EncodedWithXMLCoder">YES</bool>
<reference key="dict.sortedKeys" ref="0"/>
<object class="NSMutableArray" key="dict.values">
<bool key="EncodedWithXMLCoder">YES</bool>
</object>
</object>
<nil key="sourceID"/>
<int key="maxID">339</int>
</object>
<object class="IBClassDescriber" key="IBDocument.Classes">
<object class="NSMutableArray" key="referencedPartialClassDescriptions">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBPartialClassDescription">
<string key="className">FirstResponder</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBUserSource</string>
<string key="minorKey"/>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">SDLMain</string>
<string key="superclassName">NSObject</string>
<object class="NSMutableDictionary" key="actions">
<string key="NS.key.0">terminate:</string>
<string key="NS.object.0">NSApplication</string>
</object>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBProjectSource</string>
<string key="minorKey">SDLMain.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">SDLMain</string>
<string key="superclassName">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBUserSource</string>
<string key="minorKey"/>
</object>
</object>
</object>
<object class="NSMutableArray" key="referencedPartialClassDescriptionsV3.2+">
<bool key="EncodedWithXMLCoder">YES</bool>
<object class="IBPartialClassDescription">
<string key="className">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">AddressBook.framework/Headers/ABActions.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">Foundation.framework/Headers/NSArchiver.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">Foundation.framework/Headers/NSClassDescription.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">Foundation.framework/Headers/NSConnection.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">Foundation.framework/Headers/NSError.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">Foundation.framework/Headers/NSFileManager.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">Foundation.framework/Headers/NSKeyValueCoding.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">Foundation.framework/Headers/NSKeyValueObserving.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">Foundation.framework/Headers/NSKeyedArchiver.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">Foundation.framework/Headers/NSMetadata.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">Foundation.framework/Headers/NSNetServices.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">Foundation.framework/Headers/NSObject.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">Foundation.framework/Headers/NSObjectScripting.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">Foundation.framework/Headers/NSPort.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">Foundation.framework/Headers/NSPortCoder.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">Foundation.framework/Headers/NSRunLoop.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">Foundation.framework/Headers/NSScriptClassDescription.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">Foundation.framework/Headers/NSScriptKeyValueCoding.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">Foundation.framework/Headers/NSScriptObjectSpecifiers.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">Foundation.framework/Headers/NSScriptWhoseTests.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">Foundation.framework/Headers/NSSpellServer.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">Foundation.framework/Headers/NSStream.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">Foundation.framework/Headers/NSThread.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">Foundation.framework/Headers/NSURL.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">Foundation.framework/Headers/NSURLConnection.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">Foundation.framework/Headers/NSURLDownload.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">Foundation.framework/Headers/NSXMLParser.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">PrintCore.framework/Headers/PDEPluginInterface.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">QuartzCore.framework/Headers/CAAnimation.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">QuartzCore.framework/Headers/CALayer.h</string>
</object>
</object>
<object class="IBPartialClassDescription">
<string key="className">NSObject</string>
<object class="IBClassDescriptionSource" key="sourceIdentifier">
<string key="majorKey">IBFrameworkSource</string>
<string key="minorKey">QuartzCore.framework/Headers/CIImageProvider.h</string>
</object>
</object>
</object>
</object>
<int key="IBDocument.localizationMode">0</int>
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencies">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
<integer value="1060" key="NS.object.0"/>
</object>
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.macosx</string>
<integer value="1050" key="NS.object.0"/>
</object>
<object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
<string key="NS.key.0">com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3</string>
<integer value="3000" key="NS.object.0"/>
</object>
<bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
<string key="IBDocument.LastKnownRelativeProjectPath">Clonk.xcodeproj</string>
<int key="IBDocument.defaultPropertyAccessControl">3</int>
</data>
</archive>