RubyからCocoaを使ったり、Objective-CからRubyを使ったり
公開日:
:
RubyCocoa
RubyからCocoaのクラスを使う方法
Leopardに標準で搭載されたのでいろいろ便利になったようだ。
たとえば以下のスクリプトで辞書アプリケーションを呼び出すことができる。
require 'osx/cocoa'
p = OSX::NSPasteboard.generalPasteboard
p.declareTypes_owner([OSX::NSStringPboardType],self)
p.setString_forType("単語",OSX::NSStringPboardType)
OSX::NSPerformService("Look Up in Dictionary", p)
Objective-CからRubyの処理を呼び出す方法
Cocoaで何らかのBundleを書く際には、Info.plistの NSPrincipalClass にクラス名を指定しておくと、そのクラスの +load() メソッドが呼ばれてプラグインが組み込まれるようです。
@implementation RCLoader
+ (void)load {
static bool installed = 0;
if (! installed) {
if (! RBBundleInit("load_ruby.rb", [self class], self)) {
installed = true;
}
}
}
そんで、RubyCocoaの初期化の中で、必要な.rbを読み込んでおく、と。
def load_ruby_programs(bundle, logger)
path = bundle.resourcePath.fileSystemRepresentation
rbfiles = Dir.entries(path).select {|x| /\.rb\z/ =~ x}
rbfiles -= [ File.basename(__FILE__) ]
rbfiles.each do |path|
require( File.basename(path) )
end
end
OSX.init_for_bundle do |bundle, param, logger|
load_ruby_programs(bundle, logger)
end
関連記事
- PREV
- GROUP BYの実験
- NEXT
- 今後勉強すべきこと