Cocoa sans NSRunLoop and a Bundle

So I made a little discovery in a 7 year old mailing list post yesterday, and found out how to create a fully-functional Cocoa app, without letting the default run loop take over permanently, and without embedding the executable in an application bundle. Here you go:

EDIT: OK Wordpress is being silly; obviously, put < > around the #import file :-)

EDIT 2: Also, obviously, you need MainMenu.nib to be in the same folder as your executable.

EDIT 3: If you want to go NIBless, use NSBackingStoreBuffered, not the default NSBackingStoreRetained when creating your window!

// Build like so: gcc short.m -framework Cocoa
 
#import Cocoa/Cocoa.h
 
int main(int argc, char *argv[])
{
   [[NSAutoreleasePool alloc] init];
   [NSApplication sharedApplication];
 
   [[[NSNib alloc] initWithContentsOfURL:[NSURL URLWithString:@"MainMenu.nib"]] instantiateNibWithOwner:NSApp topLevelObjects:nil];
 
   ProcessSerialNumber psn = { 0, kCurrentProcess };
   TransformProcessType(&psn, kProcessTransformToForegroundApplication);
 
   [NSApp finishLaunching];
 
   while (1)
   {
      NSEvent *event = [NSApp nextEventMatchingMask:NSAnyEventMask untilDate:[NSDate dateWithTimeIntervalSinceNow:0.001] inMode:NSDefaultRunLoopMode dequeue:YES];
      if (event) [NSApp sendEvent:event];
   }
}
Comments

0 Responses to “Cocoa sans NSRunLoop and a Bundle”


  1. No Comments

Leave a Reply