Search code examples
cmacoscocoa

Creating a windowed application in pure C on MacOS


I'm creating an application in pure C on Mac OSX. What I want is to create a window in which my app will be displayed.

Preferably I want it to be pure C solution, but if I have to use Objective-C class to initialize the window and then send a context to my C code then it will be fine.

I'm not using Xcode, only a simple text editor in with I tried to import Cocoa but it just generated a lot of errors.

How to write code in simple pure C code that will display a window in OSX?


Solution

  • You can use Objective-C runtime API example (iOS) Creating an iOS app in pure C

    Alternative the same code in obj-c :

    echo '#import <Cocoa/Cocoa.h>
    int main ()
        {
            @autoreleasepool{
                [NSApplication sharedApplication];
                [NSApp setActivationPolicy:NSApplicationActivationPolicyRegular];
                id applicationName = [[NSProcessInfo processInfo] processName];
                id window = [[NSWindow alloc] initWithContentRect:NSMakeRect(0, 0, 120, 120)
                    styleMask:NSTitledWindowMask backing:NSBackingStoreBuffered defer:NO];
                [window cascadeTopLeftFromPoint:NSMakePoint(20,20)];
                [window setTitle: applicationName];
                [window makeKeyAndOrderFront:nil];
                [NSApp activateIgnoringOtherApps:YES];
                [NSApp run];
            }
            return 0;
    }' | gcc -fobjc-arc -framework Cocoa -x objective-c -o MicroApp - ; ./MicroApp
    

    This will run Cocoa app with 1 window. Like on screenshot below

    enter image description here

    You can actually add menu using NSMenu

        id applicationMenuBar = [NSMenu new];
        id appMenuItem        = [NSMenuItem new];
        [applicationMenuBar addItem:appMenuItem];
        [NSApp setMainMenu: applicationMenuBar];