2011年09月

Objective-C以外でiPhoneアプリの開発ができる環境の比較をしてみました。

Macでの開発を前提にした比較で、個人として感じたものなので参考までに。Windowsユーザの方はあまり参考にならないかも。



Rhodes
[browsershot url="http://rhomobile.com/products/rhodes/" width="200"]
長所
・Rubyでロジックを記述できる。
・ビューはHTML+CSS+JavaScriptで記述できる。
・フレームワークがほぼRailsなので、Rails知ってる人はかなりサクサク開発していける。

短所
・環境構築が非常に面倒。
・ビルドが遅い(iOS Simulator起動するまで結構時間かかる)。
・ドキュメントが極端に少ない(英語も日本語も)。



PhoneGap
[browsershot url="http://www.phonegap.com/" width="200"]
長所
・環境構築が非常に簡単(普通のソフトインストールと変わらない)
・Xcodeのプラグインみたいな感じで開発できるのでデバッグとかし易い。
・公式ページを初めドキュメントやサンプルが豊富で参入の敷居は低い。

短所
・良くも悪くもWebViewベースのアプリしか作れない(Webアプリでいいんじゃないの?)
・できないこと(機能)が結構ある。



Titanium
[browsershot url="http://www.appcelerator.com/" width="200"]
長所
・環境構築が非常に簡単(普通のソフトインストールと変わらない)。
・JavaScriptをネイティブコードに変換するので性能に遜色が無い。
・できないことはほとんどない。大体のアプリなら作れる。
解説本が出てる。


短所
・開発にはEclipseライクなTitanium Studioを使うのだけど、これがダサい。



環境構築さえしてしまえば、その後の「Hello World」の手間はどれも同じ。

各環境によって出来ること出来ないことがあるっぽいですが、作りたいアプリに応じて環境を変えるのも効率悪いしまぁ、やらないよねという感じ。結局はTitaniumが万能で落ち着いてしまうのかなぁと思います。

TitaniumでできないものはObjective-C使ってガリガリ開発するしかないんでしょうかね。
このエントリーをはてなブックマークに追加


RubyでiOSやAndroid、ブラックベリーのアプリが開発できるというRhodes(ローズ)ですが、開発言語はRubyで、それをネイティブのObjective-Cに変換してくれるので、AppleのAppStoreにも申請することができるようです。

インストールしてiPhoneシミュレータを起動するところまでやってみました。環境は以下のとおり。

・Mac OS X 10.7.1
・Ruby 1.8.7
・Xcode 4.1
・iOS Simulator 4.3

Rhodesのインストール


RubyRubyGemsが入ってるのが前提ですが、gemからインストールが一番簡単です。


$ sudo gem install rhodes
Password:
Fetching: highline-1.6.2.gem (100%)
Fetching: extlib-0.9.15.gem (100%)
Fetching: templater-1.0.0.gem (100%)
Fetching: activesupport-2.3.14.gem (100%)
Fetching: systemu-2.2.0.gem (100%)
Fetching: macaddr-1.4.0.gem (100%)
Fetching: uuid-2.3.4.gem (100%)
Fetching: rhodes-3.1.0.gem (100%)
Building native extensions. This could take a while...
Successfully installed highline-1.6.2
Successfully installed extlib-0.9.15
Successfully installed templater-1.0.0
Successfully installed activesupport-2.3.14
Successfully installed systemu-2.2.0
Successfully installed macaddr-1.4.0
Successfully installed uuid-2.3.4
Successfully installed rhodes-3.1.0
8 gems installed
Installing ri documentation for highline-1.6.2...
Installing ri documentation for extlib-0.9.15...
Installing ri documentation for templater-1.0.0...
Installing ri documentation for activesupport-2.3.14...
Installing ri documentation for systemu-2.2.0...
Installing ri documentation for macaddr-1.4.0...
Installing ri documentation for uuid-2.3.4...
Installing ri documentation for rhodes-3.1.0...
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 extlib-0.9.15...
Installing RDoc documentation for templater-1.0.0...
Installing RDoc documentation for activesupport-2.3.14...
Installing RDoc documentation for systemu-2.2.0...
Installing RDoc documentation for macaddr-1.4.0...
Installing RDoc documentation for uuid-2.3.4...
Installing RDoc documentation for rhodes-3.1.0...
Enclosing class/module 'mDigest' for class MD5 not known
Enclosing class/module 'mDigest' for class SHA1 not known


なんかエラー出てたけど、rhodesコマンドにパスが通ってるのでとりあえず入った様子。


$ which rhodes
/usr/bin/rhodes


続いて環境変数の設定。以下のようにrhodes-setupコマンドを叩くとパス入力モードになる。今回はiPhoneアプリしか作らないので、JDK path (required)にパスを入力(というか自動入力されてたので何もせずにEnter押した)。

Androidアプリとか作る人はSDKとNDKのパスを入力する(恐らくAndroidの開発環境がインストールされてれば自動で入るような気がする)。


$ 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) ():
Android NDK path (blank to skip) ():
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: /Library/Ruby/Gems/1.8/gems/rhodes-3.1.0/rhobuild.yml


これでインストールは完了。

iPhoneアプリのテンプレを作る


準備ができたので、いよいよアプリを作ってみる。ここではmyappというアプリを試しに作ってみます。下記コマンドを打つと、Railsのように自動的に開発に必要なスケルトンを作ってくれます。


$ rhodes app myapp
Generating with app generator:
[ADDED] myapp/rhoconfig.txt
[ADDED] myapp/build.yml
[ADDED] myapp/app/application.rb
[ADDED] myapp/app/index.erb
[ADDED] myapp/app/index.bb.erb
[ADDED] myapp/app/layout.erb
[ADDED] myapp/app/loading.html
[ADDED] myapp/Rakefile
[ADDED] myapp/app/loading.png
[ADDED] myapp/app/helpers
[ADDED] myapp/icon
[ADDED] myapp/app/Settings
[ADDED] myapp/public


次にaccountというモデル名でnameindustryという属性を持つモデルを作成してみます。


$ cd myapp
$ rhodes model account name, industry

Generating with model generator:
[ADDED] app/Account/index.erb
[ADDED] app/Account/edit.erb
[ADDED] app/Account/new.erb
[ADDED] app/Account/show.erb
[ADDED] app/Account/index.bb.erb
[ADDED] app/Account/edit.bb.erb
[ADDED] app/Account/new.bb.erb
[ADDED] app/Account/show.bb.erb
[ADDED] app/Account/account_controller.rb
[ADDED] app/Account/account.rb
[ADDED] app/test/account_spec.rb


これでとりあえず動くものができたことになります。簡単すぎる。。。

ビルドする


最低限の環境が整ったので、ビルドしてみます。iPhoneアプリのビルドには以下の条件が必要です。この作業(次の2つのコマンド)は二回目からは必要ないはず。はず。

・Mac OS X 10.6以降。
・iPhone SDK導入済み(Xcode入ってればOK)。


$ rake switch_app
$rake build:iPhone:setup_xcode_project


Rhodesのソースコードがある場所(環境によって違うが、myqpp/build.ymlの「sdk:」という行に書いてある)の配下にplatform/iphone/rhorunner.xcodeprojというXcodeのプロジェクトファイルがあるのでそれを開く(私の環境だと/Library/Ruby/Gems/1.8/gems/rhodes-3.1.0/platform/iphone/rhorunner.xcodeproj)。

これは今後、Rhodesを使ってiOSアプリを作る場合、どのバージョンのシミュレータを動かすかといった設定をしておくためのものになります。ここではデフォルトのiPhone 4.3 Simulatorとしておきました。


上記手順で、設定の変更した場合は次のコマンドで再ビルドする必要があるみたい。その際rhorunner.xcodeprojを保存して閉じておくのを忘れずに。


$ rake build:iphone:restore_xcode_project



iPhoneシミュレータ起動


いよいよiPhoneシミュレータを動かしてみます。次のコマンドを実行すると、バァーっとコンパイルが走ってiPhoneシミュレータが起動します。


$ rake run:iphone









シミュレータの起動は失敗するだろうなぁ〜と思ってましたが、意外にも一発起動。

Objectiv-Cを知らなくてもRubyでiOSアプリの開発ができるのは魅力的ですね。ただ、コンパイルに時間がかかりすぎです。これだとトライアル&エラーが気軽にできない気がします。

似た開発環境としてはTitaniumがありますが、そちらはどうなんでしょ?でも俺JavaScriptできないしなぁ。これを機に覚えてみるのもいいかも。

PhoneGapもTitaniumと同じでHTML+CSS+JavaScriptで開発できるようです。なんだかここ2年くらいでiOSアプリ開発のコストが大分下がってきましたね。

Objective-Cを使わないと作れないようなアプリもあるようなので、そこは住み分けという感じになるんでしょうか。

このエントリーをはてなブックマークに追加

はてなブックマークに変わるソーシャルブックマークサービスを探してたらzootoolといういい感じのサイトを発見しました。

他のユーザをフォローできるので、はてなと違ってかなりソーシャル色の強いブックマークサービスだと思います。

特色としてはこんな感じでしょうか。

・他のユーザをフォローできる。
・UIがきれいで使っていて気分がいい。
・サムネイルでブックマークを閲覧できる。
・iPhoneやAndroidのモバイルアプリがある。
ブックマークレットが豊富。


これは実際の画面です。トップページには他のユーザのブックマークがサムネイル付きで表示されます。



これは自分のブックマーク閲覧画面。



よく使われるタグを見ると、デザイン系のタグがかなり多くてどんなユーザが多いの想像できます。



さっきも書きましたが、ソーシャル色が強いため、はてなブックマークやDeliciousのような使い方を想定してる人には、恐らく期待に添えないサービスのように思います。情報の蓄積というよりは情報の共有というイメージの方がしっくりきます。

作成者のポリシーとしても共有に重きを置いてるようです。


Zootool is about collecting, organizing and sharing your favorite images, videos, documents and links from all over the internet.


はてぶに変わるサービスを期待してたんですが、結局置き換わることはなさそうです。ですが、はてぶとは全く違った使い方ができそうなので、これはこれで使ってみる価値ありです。

このエントリーをはてなブックマークに追加


RubyやPythoライクな構文でJavaScriptのネイティブソースを錬金できるというCoffeeScriptをMacにインストールしてみました。環境はMac OS X Lion 10.7.1です。

まずはNode.jsのインストール


早速インストールしようとしたら、どうやらNode.jsのパッケージマネージャであるnpm(Node Package Manager)というやつが必要らしく、そのためにNode.jsをインストールすることに。こちらのインストールガイドを参考にしてインストールdone。


# git clone --depth 1 git://github.com/joyent/node.git
# cd node
# mkdir ~/local
# ./configure --prefix=$HOME/local/node
# make
# make install
# echo 'export PATH=$HOME/local/node/bin:$PATH' >> ~/.profile
# echo 'export NODE_PATH=$HOME/local/node:$HOME/local/node/lib/node_modules' >> ~/.profile
# source ~/.profile


npmのインストール


npmは一行で完了、のはずがエラーが出た。


# curl http://npmjs.org/install.sh | sh


出たエラー。


node(42766,0x7fff73f25960) malloc: *** error for object 0x7f8cd1015800: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
make: *** [install] Abort trap: 6
node(42769,0x7fff73f25960) malloc: *** error for object 0x7f89ed823000: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
npm-install-42655.sh: line 205: 42769 Abort trap: 6 "$node" cli.js install -gf
It failed


ここを見ると、どうやらNodeの最新バージョンは不安定だからやめたほうがいいぜという話っぽい。

これはnvm(Node Version Manager)というNode.jsのバージョンを切り分けて使えるツールをインストールすることで解決するっぽい。なんでもNode.jsは開発が活発で、常に最新バージョンが更新されるからこんなツールがあるのだとかなんとか。

というわけでnvmのインストール。こちらを参考にした。


# git clone git://github.com/creationix/nvm.git ~/.nvm
# source ~/.nvm/nvm.sh


nvmがちゃんとインストールされてるか確認。大丈夫そう。


# nvm

Node Version Manager

Usage:
nvm help Show this message
nvm install Download and install a
nvm uninstall Uninstall a version
nvm use Modify PATH to use
nvm ls List versions (installed versions are blue)
nvm ls List versions matching a given description
nvm deactivate Undo effects of NVM on current shell
nvm sync Update the local cache of available versions
nvm alias [] Show all aliases beginning with
nvm alias Set an alias named pointing to
nvm unalias Deletes the alias named
nvm copy-packages Install global NPM packages contained in to current version

Example:
nvm install v0.4.0 Install a specific version number
nvm use stable Use the stable release
nvm install latest Install the latest, possibly unstable version
nvm use 0.2 Use the latest available 0.2.x release
nvm alias default v0.4.0 Set v0.4.0 as the default


Nodeの公式ページでは0.4.12 (stable)となっていたので、それをインストールして、v0.4.12を使うようにセットして、目的のバージョンが入ってるか確認する。


# nvm install v0.4.12
# nvm use v0.4.12
# node --version
v0.4.12


CoffeScriptのインストール


Node.jsとnpmが入ったのでようやく本題のCoffeeScript。ターミナルから一行で一発。


# npm install -g coffee-script
# coffee -v
CoffeeScript version 1.1.2


なんとかCoffeeScript導入成功。遊んでみるのは次回ということで。

このエントリーをはてなブックマークに追加


結論を先に書くとXcode3をXcode4にバージョンアップしたら解決しました。

Mac(Lion 10.7.1)の環境で、gemを使ってdata-mapper入れようとしたらエラー出てハマりました。一応解決したので解決策を残しておきます。

インストールしようとして出たのが以下のエラーです。なんかヘッダファイルがないとかなんとか言ってる。調べてみたところ、Xcodeが古いとこの現象がでるら・し・い。


$ sudo gem install data_mapperr dm-sqlite-adapter
Password:
Building native extensions. This could take a while...
ERROR: Error installing datamapper:
ERROR: Failed to build gem native extension.

/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby extconf.rb
mkmf.rb can't find header files for ruby at /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/ruby.h


Gem files will remain installed in /Library/Ruby/Gems/1.8/gems/json-1.4.6 for inspection.
Results logged to /Library/Ruby/Gems/1.8/gems/json-1.4.6/ext/json/ext/generator/gem_make.out

Building native extensions. This could take a while...
ERROR: Error installing dm-sqlite-adapter:
ERROR: Failed to build gem native extension.

/System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/bin/ruby extconf.rb
mkmf.rb can't find header files for ruby at /System/Library/Frameworks/Ruby.framework/Versions/1.8/usr/lib/ruby/ruby.h


Gem files will remain installed in /Library/Ruby/Gems/1.8/gems/do_sqlite3-0.10.6 for inspection.
Results logged to /Library/Ruby/Gems/1.8/gems/do_sqlite3-0.10.6/ext/do_sqlite3/gem_make.out


実際、自分の環境ではXcode3だったので、Xcode4にアップグレードしてみたところ、成功↓


$ sudo gem install data_mapper
Password:
Building native extensions. This could take a while...
Fetching: dm-serializer-1.1.0.gem (100%)
Fetching: dm-timestamps-1.1.0.gem (100%)
Fetching: dm-validations-1.1.0.gem (100%)
Fetching: stringex-1.2.2.gem (100%)
Fetching: uuidtools-2.1.2.gem (100%)
Fetching: dm-types-1.1.0.gem (100%)
Fetching: data_mapper-1.1.0.gem (100%)
Successfully installed json-1.4.6
Successfully installed dm-serializer-1.1.0
Successfully installed dm-timestamps-1.1.0
Successfully installed dm-validations-1.1.0
Successfully installed stringex-1.2.2
Successfully installed uuidtools-2.1.2
Successfully installed dm-types-1.1.0
Successfully installed data_mapper-1.1.0
8 gems installed
Installing ri documentation for json-1.4.6...
Installing ri documentation for dm-serializer-1.1.0...
Installing ri documentation for dm-timestamps-1.1.0...
Installing ri documentation for dm-validations-1.1.0...
Installing ri documentation for stringex-1.2.2...
Installing ri documentation for uuidtools-2.1.2...
Installing ri documentation for dm-types-1.1.0...
Installing ri documentation for data_mapper-1.1.0...
Installing RDoc documentation for json-1.4.6...
Installing RDoc documentation for dm-serializer-1.1.0...
Installing RDoc documentation for dm-timestamps-1.1.0...
Installing RDoc documentation for dm-validations-1.1.0...
Installing RDoc documentation for stringex-1.2.2...
Installing RDoc documentation for uuidtools-2.1.2...
Installing RDoc documentation for dm-types-1.1.0...
Installing RDoc documentation for data_mapper-1.1.0...


てゆーか、これってもしかしたらdata-mapperが失敗したというよりは、gem使う処理は全部失敗してたのかも。今となってはわかりませんが。

もし同じようなエラーがでてる人は、Xcodeを最新版にしてみるといいかもですよ。

あと、ちょっと前にSnowLeopardからLionにアップグレードしたのも微妙に絡んでるような気がします。

解決してよかったー!

このエントリーをはてなブックマークに追加

↑このページのトップヘ