> node.js, Objective-C > Node.js + ObjC = NodObjC.

Node.js + ObjC = NodObjC.

node.js를 이용해서 재미있는 프로젝트가 무엇이 있는지를 찾던 중에 발견한 것입니다. 간단히 설명되어 있는 것은 objective-c와 node.js의 다리(bridge)라고 하는 군요.

몇가지 링크와 간단한 예제를 통해 맛을 보도록 하겠습니다.
프로젝트 홈페이지 – https://github.com/TooTallNate/NodObjC
간단한 윈도우를 띄운 예제 (이 예제를 조금 변경해서 실행해 보겠습니다.) – https://gist.github.com/1204212

위의 프로젝트 홈페이지를 통해 프로젝트를 다운 받습니다.
다운 받은 후에 예제의 자바스크립트 파일을 만듭니다. 그리고 node 커맨드로 실행만 하면 맥 윈도우를 만들 수 있습니다.

위의 예에서 보시는 것 처럼 창 타이틀에 제 블로그 주소와 Welcome이 보입니다.
그럼 위 윈도우를 실행하는 소스 코드를 보겠습니다.


var $ = require('[NodObjc의 폴더 위치]')

$.import('Cocoa')

var pool = $.NSAutoreleasePool('alloc')('init')
  , app  = $.NSApplication('sharedApplication')

app('setActivationPolicy', $.NSApplicationActivationPolicyRegular)

var menuBar = $.NSMenu('alloc')('init')('autorelease')
  , appMenuItem = $.NSMenuItem('alloc')('init')('autorelease')

menuBar('addItem', appMenuItem)
app('setMainMenu', menuBar)

var appMenu = $.NSMenu('alloc')('init')('autorelease')
  , appName = $._('Jongryong.wordpress.com. Welcome...')
  , quitTitle = $._('Quit ')('stringByAppendingString', appName)
  , quitMenuItem = $.NSMenuItem('alloc')('initWithTitle', quitTitle
                                        ,'action', 'terminate:'
                                        ,'keyEquivalent', $._('q'))('autorelease')
appMenu('addItem', quitMenuItem)
appMenuItem('setSubmenu', appMenu)

var styleMask = $.NSTitledWindowMask
              | $.NSResizableWindowMask
              | $.NSClosableWindowMask
var window = $.NSWindow('alloc')('initWithContentRect', $.NSMakeRect(0,0,200,200)
                                ,'styleMask', styleMask
                                ,'backing', $.NSBackingStoreBuffered
                                ,'defer', false)('autorelease')
window('cascadeTopLeftFromPoint', $.NSMakePoint(20,20))
window('setTitle', appName)
window('makeKeyAndOrderFront', window)

// set up the app delegate
var AppDelegate = $.NSObject.extend('AppDelegate')
AppDelegate.addMethod('applicationDidFinishLaunching:', 'v@:@', function (self, _cmd, notif) {
  console.log('got applicationDidFinishLauching')
  console.log(notif)
})
AppDelegate.register()

var delegate = AppDelegate('alloc')('init')
app('setDelegate', delegate)

app('activateIgnoringOtherApps', true)
app('run')

위 소스코드를 자세히 소개하지는 않겠습니다. 사실, 저도 잘 모릅니다. ^^;
아무튼 역시나 node.js를 이용한 다양한 시도중에 하나네요. 이런 클라이언트 기반 코드와 node의 통신 환경을 이용하면 간단한 맥용 클라이언트용 툴을 쉽게 만들 수도 있을 것 같습니다.
물론, 아직은 기본적인 것만 지원하는 것으로 보입니다.

  1. 댓글이 없습니다.
  1. No trackbacks yet.

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중

%d 블로거가 이것을 좋아합니다: