目次

Rhodes

since 2011-01-16

「Rubyを使って多くのスマートフォンプラットフォームのネイティブアプリケーションを開発できる」

http://rhomobile.com/

http://www.infoq.com/jp/news/2010/04/rhodes-update

モトローラソリューションズに買収された。

ruby で書く。ruby_on_rails に似た雰囲気。

マルチモーダルインタフェースのミドルウェア設計の参考になりそうなので要調査。

rhohub

Mac で rhodes-3.5

since 2013-04-07

$ rvmsudo gem install rhodes
..
Successfully installed rhodes-3.5.1.12

バグらしい:

https://groups.google.com/forum/?fromgroups=#!topic/rhomobile/gdyfRdHeK78

修正箇所は rvm 環境の場合 ~/.rvm/gems/ruby-1.9.3-p392/gems/rhodes-3.5.1.12/platform/android/build/android_tools.rb

Open /var/lib/gems/1.9.1/gems/rhodes-3.5.1.12/platform/android/build/android_tools.rb
At line 211 
And make this line to look as
FileUtils.rm_f $applog_path if !$applog_path.nil?
$ rhodes-setup
ADK と NDK の path を指定する
$ rake switch_app

名前をつけてアプリを生成:

$ rhogen app mobapp
$ cd mobapp

Android エミュレーターで実行する

$ rake run:android
$ rake uninstall:android

rake -T するとタスク一覧が出てくる。

Xcode の PCH エラー

Xcode を 4.6.2 から 4.6.3 に更新した。

rake run:iphone するとこんなエラーが出る:

error: PCH file built from a different branch ((clang-425.0.27)) than the compiler ((clang-425.0.28))

http://stackoverflow.com/questions/16027725/xcode-version-4-6-2-4h1003-compiler-error

プロジェクトを Xcode で管理していれば Clean するだけでいいらしいが。。

けっきょくエラーメッセージから PCH の場所を探して消去したら復旧した。

/private/var/folders/pf/n139yg5d44n******04s6vkh0000gn/C/com.apple.Xcode.501/SharedPrecompiledHeaders/ 

みたいな場所の中のフォルダを全部ゴミ箱へ。

Androidデバイス

rake run:android:device するときには、デバイスを「外部メモリーモード」でUSB接続して、USBデバッグを有効にする。

が、

error: device not found
- waiting for device -

とか

error: more than one device and emulator

と言われてしまう。

$ which adb
/Applications/android-sdk-macosx/platform-tools/adb
$ adb devices
* daemon not running. starting it now on port 5037 *
* daemon started successfully *
List of devices attached 
04C0********	device
emulator-5554	device

$ adb -s 04C0******** install bin/target/android/mobapp-debug.apk 
1806 KB/s (3535523 bytes in 1.911s)
	pkg: /data/local/tmp/mobapp-debug.apk
Success

http://yktmnb.b.sourceforge.jp/?p=20

これはできる。

けっきょくシリアルを指定すれば rake run:android:device できるようになった。

export ANDROID_SERIAL=04C0********
rake run:android:device

ただし * * * * 部分を含む文字列は adb devices ででてくるシリアル番号。

rake uninstall:android:device も成功した。

この環境変数は rake run:android で emulator-arm を起動するときにも影響がある。

RhoSimulator

RhoSimulator を使うと Web Inspector で動作確認できる。ADKのエミュレーターよりも起動が早い。

$ rake run:android:rhosimulator

rake run:iphone:rhosimulator もできるが違いがわからない。。

GPS

http://docs.rhomobile.com/rhodes/device-caps#geolocation

# build.yml:
capabilities:
  - gps

RhoSync/RhoConnect

$ rvmsudo gem install rhosync
$ rvmsudo gem install rhoconnect

APIサンプル

下記を git clone して試してみる。

RhoElements という有償ライセンスが必要な部分があるらしい。

下記のようにしたら実機で動いた。

index 0a7da18..460a0d2 100644
--- a/build.yml
+++ b/build.yml
@@ -51,12 +51,11 @@ bb:
   extensions: ["barcode"]
 
 android:
-  extensions: ["barcode", "rainbow", "nfc", "digest", "digest-md5", "digest-sha1", "pdf-writer", "thread", "digest-sha2", "openssl.so", "openssl", "ezcrypto", "rawsensors", "audiocapture"]
+  extensions: ["rainbow", "digest", "digest-md5", "digest-sha1", "pdf-writer", "thread", "digest-sha2", "openssl.so", "openssl", "ezcrypto"]
   capabilities:
   - network_state
   - sdcard
   - calendar
-  mapping: yes
   version: 2.1
 
 wp:

実機で確認したところ Navigation Bar はデバイスを再起動してアプリを再実行すると消えているので、こういう情報はストレージに書かれるのではなさそう。

spec

http://docs.rhomobile.com/rhodes/generator の Adding Test Framework に書いてある。

SpecRunner コントローラーへのリンクを自分で作る。

http://rubyspec.org

Mac で rhodes-3.1.0

since 2011-08-27

新しいバージョンが出ているので再チャレンジしてみた:

$ sudo gem install rhodes
Password:
Fetching: rhodes-3.1.0.gem ( 58%)
$ rhodes-setup
We will ask you a few questions below about your dev environment.

JDK path (required) (/Library/Java/Home): 
Android SDK path (blank to skip) (/Applications/android-sdk-mac_x86): 
Android NDK path (blank to skip) (/Applications/android-ndk-r6): 
Windows Mobile 6 SDK CabWiz (blank to skip) (): 
BlackBerry JDE 4.6 (blank to skip) (): 
BlackBerry JDE 4.6 MDS (blank to skip) (): 
BlackBerry JDE 4.2 (blank to skip) (): 
BlackBerry JDE 4.2 MDS (blank to skip) (): 

If you want to build with other BlackBerry SDK versions edit: /Users/nishimotz/.rvm/gems/ruby-1.9.2-p290/gems/rhodes-3.1.0/rhobuild.yml
$ rhogen app myspace2
$ cd myspace2
$ rake switch_app
$ rake run:iphone

build.yml:

android:
  version: 2.3.3

rhoAndroid233 という名前の AVD が必要。

$ rake run:android

Mac で rhodes-3.0.2

since 2011-07-25

http://docs.rhomobile.com/rhodes/install

下記、うまくいっているかどうかわからないがやってみる。

rvm で ruby 1.9 + rails 3.0 が動いている環境。

下記、sudo ではなく rvmsudo にすべき。。

$ sudo gem install rhodes
Password:
Fetching: highline-1.6.2.gem (100%)
Fetching: diff-lcs-1.1.2.gem (100%)
Fetching: extlib-0.9.15.gem (100%)
Fetching: templater-1.0.0.gem (100%)
Fetching: macaddr-1.0.0.gem (100%)
Fetching: uuid-2.3.2.gem (100%)
Fetching: rhodes-3.0.2.gem (100%)
Building native extensions.  This could take a while...
Successfully installed highline-1.6.2
Successfully installed diff-lcs-1.1.2
Successfully installed extlib-0.9.15
Successfully installed templater-1.0.0
Successfully installed macaddr-1.0.0
Successfully installed uuid-2.3.2
Successfully installed rhodes-3.0.2
7 gems installed
Installing ri documentation for highline-1.6.2...
Installing ri documentation for diff-lcs-1.1.2...
unable to convert "\xA9" from ASCII-8BIT to UTF-8 for lib/diff/lcs/ldiff.rb, skipping
Installing ri documentation for extlib-0.9.15...
Installing ri documentation for templater-1.0.0...
Installing ri documentation for macaddr-1.0.0...
Installing ri documentation for uuid-2.3.2...
Installing ri documentation for rhodes-3.0.2...
unable to convert "\xA9" from ASCII-8BIT to UTF-8 for lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/README, skipping
Enclosing class/module 'mDigest' for class MD5 not known
Enclosing class/module 'mDigest' for class SHA1 not known
Installing RDoc documentation for highline-1.6.2...
Installing RDoc documentation for diff-lcs-1.1.2...
unable to convert "\xA9" from ASCII-8BIT to UTF-8 for lib/diff/lcs/ldiff.rb, skipping
Installing RDoc documentation for extlib-0.9.15...
Installing RDoc documentation for templater-1.0.0...
Installing RDoc documentation for macaddr-1.0.0...
Installing RDoc documentation for uuid-2.3.2...
Installing RDoc documentation for rhodes-3.0.2...
unable to convert "\xA9" from ASCII-8BIT to UTF-8 for lib/extensions/barcode/ext/barcode/platform/iphone/ZBarSDK/README, skipping
Enclosing class/module 'mDigest' for class MD5 not known
Enclosing class/module 'mDigest' for class SHA1 not known
$ rhodes-setup
We will ask you a few questions below about your dev environment.

JDK path (required) (/Library/Java/Home): 
Android SDK path (blank to skip) (): /Applications/android-sdk-mac_x86
Android NDK path (blank to skip) (): /Applications/android-ndk-r6
Windows Mobile 6 SDK CabWiz (blank to skip) (): 
BlackBerry JDE 4.6 (blank to skip) (): 
BlackBerry JDE 4.6 MDS (blank to skip) (): 
BlackBerry JDE 4.2 (blank to skip) (): 
BlackBerry JDE 4.2 MDS (blank to skip) (): 

If you want to build with other BlackBerry SDK versions edit: /Users/nishimotz/.rvm/gems/ruby-1.9.2-p290/gems/rhodes-3.0.2/rhobuild.yml
$ pwd
/Users/nishimotz/work/rhodes
$ rhodes app myspace
Generating with app generator:
     [ADDED]  myspace/rhoconfig.txt
     [ADDED]  myspace/build.yml
     [ADDED]  myspace/app/application.rb
     [ADDED]  myspace/app/index.erb
     [ADDED]  myspace/app/index.bb.erb
     [ADDED]  myspace/app/layout.erb
     [ADDED]  myspace/app/loading.html
     [ADDED]  myspace/Rakefile
     [ADDED]  myspace/app/loading.png
     [ADDED]  myspace/app/helpers
     [ADDED]  myspace/icon
     [ADDED]  myspace/app/Settings
     [ADDED]  myspace/public

下記に書いてあるとおりに

http://docs.rhomobile.com/rhodes/generator

モデルの生成

$ rhodes model account name,industry

テストフレームワークの生成

$ rhodes spec

次の画面で気づいたが ruby 1.8.7 を使えと。。

http://docs.rhomobile.com/rhodes/build

まあこのままやってみよう。

iOS SDK

$ rake switch_app

$ rake build:iphone:setup_xcode_project

なんと Xcode Project ファイルがこんなところに。。

/Users/nishimotz/.rvm/gems/ruby-1.9.2-p290/gems/rhodes-3.0.2/platform/iphone

これを Xcode 3.2 で開いて「ビルドと実行」した。いきなり iPad のシミュレーター画面だが、動いた。何をするアプリなのかわかってないが。。

Xcode を使わないで下記でも可能。

$ rake run:iphone

Android SDK

Android は。。。

rake aborted!
Can't detect NDK toolchain path (corrupted NDK installation?)

https://groups.google.com/forum/#!topic/rhomobile/H2JiBSqfc1U/discussion

http://osdir.com/ml/rhomobile/2011-07/msg00337.html

http://osdir.com/ml/rhomobile/2011-07/msg00357.html

Current Rhodes 3.0.2 gem supports r5b NDK. ということで、頑張ってみたが ndk-r6 では動かないようだ。

https://www.pivotaltracker.com/projects/45686?story_id=15725849

ndk-r5b を入手したいのだがわからない。。

rhodes gem を git リポジトリの最新版にしてみろという話。。

と思ったら、下記から r5c が手に入った。。

http://androidapplications2011.blogspot.com/2011/07/download-android-ndk.html

NDK の path を変えて、下記も再実行:

$ rhodes-setup

myspace ディレクトリにて:

$ rake run:android

一生懸命コンパイルを始めた。。

しばらくして emulator のウィンドウが開いた。

その後もコンソールで何やら続いている。。

どうやら Android 3.1 のエミュレーターがものすごくゆっくり動いているらしい。。

いったん止める。

build.yml に下記を追加:

android:
  version: 2.1

もう一度 rake run:android したら今度は小さな画面のエミュレータが出た。