About this Blog

This Blog has English posts and Japanese posts. About Mac, iOS, Objective-C, and so on.

2013年3月24日日曜日

mruby on Objective-C -アプリに組み込む-

mrubyを使ったアプリをsubmitしたので、メモをちまちまと放出。
実機でしか動きませんのであしからず。ツッコミ大歓迎。

環境

  • Mac OS X 10.6.8 Snow Leopard
  • Xcode4.2
  • ARC不使用
  • iPad2
  • iOS6.1
  • mruby (2013/02/17にソース取得)


方針

armv7向けにコンパイルしたmrubyの静的ライブラリを作り、それを直接Xcodeプロジェクトにコピーして使う。


build_config.rbを編集

mruby-master/build_config.rbのクロスコンパイル部分を以下のように編集します。
# Define cross build settings
 MRuby::CrossBuild.new('32bit') do |conf|
   isysroot = "/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/usr/include"
   conf.cc.command = "clang"
   conf.cc.flags << "-arch armv7"
   conf.cc.include_paths << isysroot
   conf.cc.include_paths << "#{root}/include"
 end


mrbconf.hを編集

mruby-master/include/mrbconf.hを編集します。
#define DISABLE_STDIO    /* use of stdio */
#define ENABLE_DEBUG     /* hooks for debugger */
STDIOを無効にします。
有効のままでも動きましたが、putsを使ったら落ちました。
DEBUGを有効にします。
これは、スクリプトの実行を中断するのに使っています。


make

コマンドライン上でmruby-masterに移動し、makeします。
途中でRakeが落ちますが、
mruby-master/build/32bit/lib/libmruby.a
が生成されているのでOKとします。(そのうちrake勉強せな)


プロジェクトを新規作成、必要ファイルをコピー

Xcodeで新しいプロジェクト(project_name)を作成し、mrubyのファイルをFinder上でコピーします。
mruby-master/include/をフォルダごとコピーして、そこにlibmruby.aを追加する感じです。
includeのままだと分かりにくいので、mrubyにリネームしました。
project_name/
|--project_name.xcodeproj
|--project_name/
   |--mruby/ 
   |  |--mrbconf.h
   |  |--mruby.h
   |  |--libmruby.a
   |  |--mruby/
   |     |--array.h
   |     |--class.h
   |         .
   |         .
   |     |--value.h
   |     |--variable.h
   |--viewController.h
   |--viewController.m
   |   .
   |   .   
Finder上でコピーしたあと、Xcode上の左ペインにドラッグ・アンド・ドロップして、プロジェクトに追加します。


パスの設定

Build SettingsのHeader Search PathLibrary Search Path
"$(SRCROOT)/project_name/mruby"
を追加します。
Recursiveはなしで。


以上で、iOSアプリでmrubyを使う準備は完了です。

0 件のコメント:

コメントを投稿