blog.tmp.tokyo

No Promises Await at Journey's End

iPhone で Ruby がコーディング & 実行できるアプリを作る!(6)

前回の記事,

tomohiko37-i.hatenablog.jp

で問題解決の糸口が見えてきたので早速試してみたのですが,いろいろやっぱり問題があります。

このサイトで言ってることは

まずはおさらい。

github.com

このサイトで言われていた「プリコンパイルしておいてから使えよ」ということは何か調べてみたところ,

(1) Ruby のコードを書く

厳密には mruby のコードなんですが,

puts "Hello, world"

こんな感じで書いたコードを sample.rb として保存しておきます。

(2) mrbc コマンドでコンパイルする

そしてこれがミソ。コマンドラインから mrbc コマンドで Ruby のコードをコンパイルします。

$> mrbc sample.rb

こうすると sample.mrb というファイルが出来上がります。これ何かと言うと,

5249 5445 3030 3033 872d 0000 0066 4d41
545a 3030 3030 4952 4550 0000 0048 3030
3030 0000 0040 0001 0004 0000 0000 0004
0080 0006 0100 003d 0080 00a0 0000 004a
0000 0001 0000 0c48 656c 6c6f 2c20 776f
726c 6400 0000 0100 0470 7574 7300 454e
4400 0000 0008 

こんな感じの中身です。どーやらこれは中間コードが生成されるようですね。

(3) Objective-C などから実行する

そしてこの sample.mrb を C/Objective-C から実行します。

つまり

はい。要するに上の (1) 〜 (3) の流れだと (2) の mrbcコンパイルを事前にやっておかなくてはならないのですね。iPhone アプリ側に mrbc などは取り込んでいないのでアプリ上から mrbc やそれに相当することをやるのは現時点では無理です。詰みました。

別の手段

いろいろ調べていたら,当初やっていた mruby のビルドだと途中でエラーになるのですが,実際はライブラリの libmruby.a が生成されてから落ちているので,これ使っちゃえ,という記事を見つけました。試しにやってみたのですが,結局は同じところで落ちますので問題の解決にはならず。

もう少し mrubyObjective-C 内から動かすには研究が必要そうです。まだまだ続きます。