今更ですがTitaniumでアプリを作ってみようかと思います。今までたくさん買ったObjective-CやXcodeの本たちンゴ・・・。

Titanium Studioというのでゴリゴリ書いていくのが普通かと思いますが、自分の場合は、エディタはEmacsがいい!Coffeeで書きたい!保存したら自動でビルドして!と思ったので色々調べると先人様達のお知恵がたくさんありました。特に自動でビルドしてくれる方法はありがたいです。

今回は、その自動でビルドしてくれるRubyのコードが、どうも自分の環境でうまく動かなかった。そして解決したので、同じ境遇の方でこの記事にたどり着いた方のお役に立てるよう、メモを残しておきます。

まずはこちらをご覧ください。

自分がたどりついたのはこちらの記事でした。
http://a-h.parfe.jp/einfach/archives/2011/0106224213.html
ミソとしては、コマンドラインでbuild.rbというのを実行して、http://127.0.0.1:9090/runにアクセスすれば、iPhoneシュミレーターが起動する。というところです。そのbuild.rbはGitHubに公開されてまして、それを実行してみた結果、自分は下記のようなエラーになりました。

$ ruby build.rb
[2013-02-20 11:16:46] INFO  WEBrick 1.3.1
[2013-02-20 11:16:46] INFO  ruby 1.9.3 (2012-04-20) [x86_64-darwin12.2.0]
starting server at localhost:9090
[2013-02-20 11:16:46] INFO  WEBrick::HTTPServer#start: pid=55265 port=9090
localhost - - [20/Feb/2013:11:16:58 JST] "GET /run HTTP/1.1" 200 2
- -> /run
build.rb:25:in `exec': No such file or directory - /Library/Application Support/Titanium/mobilesdk/osx/1.5.1/iphone/builder.py (Errno::ENOENT)
    from build.rb:25:in `block (2 levels) in <main>'
    from build.rb:24:in `fork'
    from build.rb:24:in `block in <main>'
    from /Users/cotapon/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/webrick/httpservlet/prochandler.rb:26:in `call'
    from /Users/cotapon/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/webrick/httpservlet/prochandler.rb:26:in `do_GET'
    from /Users/cotapon/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/webrick/httpservlet/abstract.rb:106:in `service'
    from /Users/cotapon/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/webrick/httpserver.rb:138:in `service'
    from /Users/cotapon/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/webrick/httpserver.rb:94:in `run'
    from /Users/cotapon/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/webrick/server.rb:191:in `block in start_thread'
[2013-02-20 11:16:58] ERROR `/favicon.ico' not found.
localhost - - [20/Feb/2013:11:16:58 JST] "GET /favicon.ico HTTP/1.1" 404 281
- -> /favicon.ico

エラー文を見てみると、書いてあるパスのディレクトリがないので、builder.pyが実行できないよ。ってことでした。自分の場合は、mobilesdkが3.0.0.GAっていうバージョンだったので、ここを書き換えればOK、、、じゃなかったんですよね!そしてよくよく考えると、「exec “ti build -p iphone”」これでビルドしていましたので、build.rbの1行をちょこっとForkしました。

build.rb
1
2
3
4
5
6
7
8
9
# 元build.rb、ここの部分を
last_pid = fork do
      exec "/Library/Application Support/Titanium/mobilesdk/osx/1.5.1/iphone/builder.py", "run", Dir.pwd
end
 
# 下記に変更
last_pid = fork do
      exec "ti build -p iphone"
end

Forkさせていただいたものですが、GitHubのURLです。
https://gist.github.com/cotapon/4993026

これで無事にhttp://127.0.0.1:9090/runにアクセスすると、ビルドされました。あとは、Emacsで保存した時に自動で実行するelispを設定すれば完了!

参考にさせて頂きましたサイト
TitaniumのコードをGUIなしでエディタからすばやくbuildする on Ruby
http://a-h.parfe.jp/einfach/archives/2011/0106224213.html
Titanium のコードを保存したら自動リロードしてくれる elisp
http://d.hatena.ne.jp/kenkitii/20110221/p1