5分でmrubyをswiftから呼ぶ方法
まずはmrubyをios用にビルドします。 こちら を参考にbuild_config.rbを編集します。
build_config.rb
MRuby::CrossBuild.new('ios_sim') do |conf| toolchain :clang SDK_PATH_SIM = "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator9.3.sdk" ARCH_SIM = "-arch x86_64" conf.cc.flags << "#{ARCH_SIM} -mios-simulator-version-min=9.0" conf.cc.include_paths << "#{SDK_PATH_SIM}/usr/include" conf.linker.flags << "#{ARCH_SIM}" conf.linker.library_paths << "#{SDK_PATH_SIM}/usr/lib" conf.bins = [] conf.gem :core => "mruby-print" conf.gem :core => "mruby-math" conf.gem :core => "mruby-enum-ext" end
これをbuild_config.rbの最後に追加してrakeします。
次にxcodeでFile → New して"Single View Application"を作ります。
Build Setteings → Search PathsのHeader Search Paths とLibrary Search Pathsに mrubyのincludeフォルダとbuild/ios_sim/libのフォルダをセットします。
Build Phases → Link Binary With Librariesに追加で(+ボタン)libmruby.aを追加します。
mrubyのC関数をswiftから呼べるようにするためにbridging-headerを作ります。
File → Newから.h ファイルを選んで"ProjectName-Bridging-Header.h"
という名前(ProjectNameはそれぞれのプロジェクト名が入ります)で作りましょう。
このヘッダーファイルをbridgeとして使うための設定をしなければなりません。
Build Settings → Swift Compiler -Code Generation の中のObjective-C Bridging Headerにこのファイルのパスを
入れましょう。おそらく"ProjectName/ProjectName-Bridging-Header.h"となります。
いよいよmrubyを呼び出すswiftコードを書きます。
ViewController.swift
override func viewDidLoad() { super.viewDidLoad() let rubycode = "puts 'mruby Hello, world!!'"; var mrb:UnsafeMutablePointer= nil mrb = mrb_open() mrb_load_string(mrb, rubycode) }
ViewController.swiftのviewDidLoadをこのように書いてみましょう。
Run すればシミュレーターが起動してoutputに"mruby Hello, world!!"が出力されるはずです。