NodObjC

The Node.js ⇆ Objective-C bridge

  • 所有者: TooTallNate/NodObjC
  • 平台:
  • 許可證: MIT License
  • 分類:
  • 主題:
  • 喜歡:
    0
      比較:

Github星跟蹤圖

NodObjC

The Node.jsObjective-C bridge

Build Status

NodObjC exposes the Objective-C runtime to Node.js in a high-level, easy
to use fashion. It uses the BridgeSupport files to dynamically generate an
API from an Objective-C "Framework", and uses the node ffi module to dynamically interact
with the Objective-C runtime.

Essentially, NodObjC is similar in nature to the other popular Objective-C
scripting bridges:

So you can write entire Cocoa or iOS GUI applications entirely in Node.js
JavaScript! Applications are interpreted at runtime through the V8 engine,
rather than (pre)compiled to a (binary) machine exectuable. This has the advantage of being
able to tweak code without having to recompile; excellent for rapid prototyping
and development (or for those GUI applications where absolute speed is not a
requirement, i.e. most). So what are you waiting for? Get to coding!

Installation

Install using npm, of course!

$ npm install nodobjc

Or add it to the "dependencies" section of your package.json file.

Hello World

var $ = require('nodobjc')

// First you import the "Foundation" framework
$.framework('Foundation')

// Setup the recommended NSAutoreleasePool instance
var pool = $.NSAutoreleasePool('alloc')('init')

// NSStrings and JavaScript Strings are distinct objects, you must create an
// NSString from a JS String when an Objective-C class method requires one.
var string = $.NSString('stringWithUTF8String', 'Hello Objective-C World!')

// Print out the contents (toString() ends up calling [string description])
console.log(string)
//   → Prints "Hello Objective-C World!"

pool('drain')

Be sure to check out the full API docs.

Introduction

This module offers a bi-directional bridge between Node.js and the Objective-C
runtime. What does that mean exactly? Well due to the design of the Objective-C
runtime, it is possible to port the entire API to other languages. There are
quite a few bridges for Obj-C so one for node was a necessity.

So with this module, you get access to all of the Objective-C APIs, but you
invoke them through JavaScript. Obj-C has a concept of "message passing" to
invoke methods on objects. The way that you pass messages around is probably a
little bit different than the kind of JavaScript you're used to:

// In JavaScript, you invoke a function on an object like:
obj.func(arg)

Compared to:

// In NodObjC, you send a message to an object like:
obj('func', arg)

In Objective-C, the names of methods are part of the arguments that you pass
along:

[array insertObject: obj
       atIndex: 5]

The equivalent of the above message invocation in NodObjC syntax would be:

array('insertObject', obj,
      'atIndex', 5)

So the even numbered arguments are the parts of the method name that will be
invoked, and the odd numbered arguments are the Obj-C arguments themselves. In
the above example, the insertObject:atIndex: function will be invoked.

In NodObjC, not only is the Objective-C runtime exposed, but so are the
corresponding C functions that usually go along with these APIs (thanks to
BridgeSupport). So for example, we can make an NSRect by calling the
NSMakeRect() C function:

$.NSMakeRect(5, 10, 8, 30)
// -> NSRect struct

There's a plethora of other Objective-C resources and tutorials out there.

You should definitely have Apple's official Mac or iOS API
docs handy at all times.

Support / Getting Involved

If you're looking for support for developing with/for NodObjC you might want
to join the mailing list, and check out the #nodobjc channel
in the Freenode IRC server.

Additional topics of discussion can be found on the Wiki page.

主要指標

概覽
名稱與所有者TooTallNate/NodObjC
主編程語言JavaScript
編程語言Makefile (語言數: 3)
平台
許可證MIT License
所有者活动
創建於2011-07-11 05:26:09
推送於2020-08-08 20:07:00
最后一次提交2018-03-21 15:01:47
發布數20
最新版本名稱2.1.0 (發布於 2015-12-16 11:23:35)
第一版名稱v0.0.1 (發布於 )
用户参与
星數1.4k
關注者數42
派生數126
提交數845
已啟用問題?
問題數100
打開的問題數48
拉請求數14
打開的拉請求數0
關閉的拉請求數6
项目设置
已啟用Wiki?
已存檔?
是復刻?
已鎖定?
是鏡像?
是私有?