おはよう長男はこのところ、Amazonプライムで無料で見られるワイルドスピードシリーズにハマって、段ボールでスポーツカーを作っています。@kjunichiです。
iOSでもやってみた
iOSではmrubyを動かせるアプリ
https://itunes.apple.com/jp/app/rubypico/id1042498865?mt=8&at=10l8JW&ct=hatenablog
があり、実用的に使えるのですが、 Androidで少しCordovaのプラグイン周りが分かってきたので、より理解を深める為に、iOSにチャレンジした。
auのiPhone7plus色変えても、本申し込みメール全然こないから、また、ジェットブラックにしといた
— kjunichi (@kjunichi) 2016年10月6日
2年待たずに機種変更が比較的安価で出来るauのサービスにiPhone6S購入時に加入しており、今回iPhone 7 Plusを予約したので、 これが届けば、iPhone 7 Plusで試せたのに残念です。iPhone 6Sで動かしました。
準備
iOSも去年から実機で動かすのに、デベロッパー登録してお金を払わなくてもよくなっている。が、デベロッパー登録自体は必要。 自分は、はるか昔に、年会費の掛からない登録をしていたハズ。
node.jsを自分はnodebrewでバージョン管理して利用している環境なので、sudoは不要。
Xcodeが入っている状態で、cordovaをインストールすれば、あとiOSで必要なパッケージはエラーメッセージで教えてくれるので、 それにしたがってnpm install -g すれば環境は出来るはず。
XcodeにiOSの署名
のように進めればできた。
mrubyの組み込み
Androidと異なり、iOSではCordovaの制約(plugin.xmlの記述方法を知らないだけ?)から、libhoge.a形式では、エミュレーターと実機に対応したバイナリを 同時に作成できなかったので、Framework形式にする必要があった。 (のちの作業で、lipoでlib.aに複数のCPUアーキテクチャを詰め込めることを知った。)
(https://cordova.apache.org/docs/ja/latest/plugin_ref/spec.html 見たら、ブラックベリーのタグを使えばよかったのかも)
Framework化は
のRakefileにmrubyのAPI「mrb_load_string」を利用可能にするため、
conf.gem :core => "mruby-compiler"
を加えて、githubから最新のmrubyを持ってきて、ビルドした。
さらに、最近のiOSの開発では、Apple純正のライブラリ以外は、<hoge.h>形式で呼ばずに"hoge.h"で呼べというようことなので、 これに従い、
<mruby.h>
などは、
"mruby.h"
と変更した。
はじめてのObjective-C
SwiftでプラグインをつくるCordovaのプラグインも見つけたりしたが、今回は、無難そうなObjective-Cで実装を始めた。
putsとgetsの実装
iOSでは
[self.commandDelegate evalJs:@"alert('Hello,world!')"];
でJavaScriptを呼ぶようで、putsはこれで楽勝。
getsの実装もAndroidの実装同様、スレッドを別に作ることで、対処できた。
成果物
0からCordovaのプロジェクト作って、mrubyのプラグインを追加して、動かすまでの動画:
まとめ
iOSもアプリの署名の箇所だけ、Xcode使うだけで、Android同様にコマンドラインで操作出来て、 なんとなく安心したw。
iOSでの作業は、Objective-Cで、どうやってグローバル変数を扱えるのか程度で、Androidのように デバッグ文も書かずに作業出来てしまった。
今後の課題
- Objective-Cのコードをswift化(Cordovaでプラグインが既に用意されており、これを使えば簡単そう)
- mruby側にOpenCVを組み込んで、Android、iOS共通な処理をどう実装できるのかやってみる。
参考資料
- http://qiita.com/koyopro/items/2432b01ebfe449272812
- http://blog.masuidrive.jp/2013/03/24/survive-mobiruby/
- http://d.hatena.ne.jp/naoya/20131205/1386237472
- iOSでJSオンリーでカメラロールの画像を扱う
- 写真を魚眼レンズ風に表示する for iOS6
- iOS6で扱える画像サイズの制約をかわせるかの実験
- YOLPの地図で最新の雨雲レーダーを重ねて表示
- forked: iPhoneで加速度センサーでポリゴンをグリグルする準備