Home

技術日記
iPhoneアプリ『QQ81』作りましたEdit

2012/08/29追記 現在公開されているバイナリが起動後すぐに落ちてしまうようです。開発環境では実機動作しているんですが…。原因はよくわかりませんが、ひとまず動作していた一つ前のバージョン相当に戻したバージョンを公開申請に出しました。おそらくそちらが公開されれば動作するようになると思います。動作しないバージョンをダウンロードした方、申し訳ありませんでした。


iPhoneアプリ『QQ81』作りました。暗算アクションパズルです。

画面下の5×5のパネル部分にランダムに数字が現れてくるので、それをかけ算(九九)が成立する順番にタップして消していきます。

素早く連続して消したり、同じ数字同士のかけ算で消したり、パネル上のすべての数字を消すとボーナス。

かけ算が間違っていると数字が増殖し、パネルのすべてが数字で埋まるとゲームオーバーです。

本当はちょっと前に公開したんですが、iOS4で動かないとかいろいろバグがあったのがようやく直った(というか、直した版がようやくAppStoreに載った)のでここでも紹介します。

ちなみに無料アプリです。一応広告も貼ってあるけれども、起動時にしか表示しないトップページにしか貼ってないんで、おそらくタップされることはほぼないでしょう。

で、このゲームはMonoTouchで初めてちゃんと作ったアプリだったんですが、やっぱりMonoTouchというかC#はいいねー。Objective-Cでも書けなくはないけど、主に可読性的な面でフラストレーションがたまる。

その点、C#だとほぼ考えたとおりにコーディングできるんで、非常に書きやすい。オブジェクトの生存管理もふつうにガベージコレクション任せに出来るし。

ただ、基本的なロジック部分はいいんだけど、iOSの機能を使おうとすると、ほぼC#環境に直訳されただけの、Cocoaフレームワークやその他iOS用ライブラリ群を呼び出すことになる。

だから、「MonoTouchがあればObjective-Cなんてわからなくても、iPhoneアプリがすいすい書けるぜ!」なんてことにはならない。iOS用ライブラリの使い方を調べようと思ったら、Objective-Cで書かれたサンプルとか読めないと困るし。

それでもまあ俺的には、.hファイルと.mファイルを行き来しなくても良くなったり、

[sourcecode language="objc"] MyViewController *contrller = [[MyViewController alloc] initWithNibName: @"MyViewController" bundle: nil]; [self presentModalViewController: controller animated: YES]; [controller release]; [/sourcecode]

みたいなコードを、

[sourcecode languag="csharp"] var controller = new MyViewController(); PresentModalViewController(controller, true); [/sourcecode]

なんて感じに書けるだけでもだいぶ心に平穏が訪れる。ただ、

[sourcecode language="objc"] [UIView beginAnimations: nil context: nil]; [UIView setAnimationDuration: 0.2f]; [UIView commitAnimations]; [/sourcecode]

みたいなほぼAPI呼び出しだけやるようなコードだと、MonoTouchにしたところで、

[sourcecode language="csharp"] UIView.BeginAnimations(null, null); UIView.SetAnimationDuration(0.2f); UIView.CommitAnimations(); [/sourcecode]

になるだけなんで、あんまりC#って感じもしなくなってくる。

特にiOSではまだまだ現役で古いC API(非Objective-C API)とかが残っているし、そういうのもべた移植なんで、その辺使うとだいぶ「なんだかなー」という気分になれる。

ちなみに、非標準開発環境であるMonoTouchだからこそはまった、というようなことは今回はほとんどなかった。

MonoTouchで開発中にググって見つかる関連情報はかなり少ない(特に日本語は)んだけど、互換開発環境としては結構出来がいいのか、あんまり変なはまり方はしないし、Objective-CとC#(MonoTouch)の読み替えが出来れば、Objective-C向けに書かれた情報で解決することがほとんど。

iOSの機能もほとんどもれなく移植されているし、一応自前で移植されていないAPIなんかをC#から呼び出す方法も用意されている。ただ、その辺の情報はググって草の根情報を見つけるよりも、xarmin(MonoTouchの開発元ね)のドキュメントを読み込んだ方が最終的にはわかりやすいかも。

そういえば、MonoTouchの開発環境であるMonoDevelopのMac版には、日本語入力が出来ないというかなりアレな欠陥がある。

ソースコード中に日本語を入力したければ、他のエディタとかで入力した日本語テキストをコピペしたり、そのファイルだけ別エディタで開いて編集したりする必要がある。

まあゲームプログラムなんてあんまり日本語を使うことはないし、それほど関係ないかなーと思っていたんだけど、MonoDevelopからcommitするときのコミットログでも日本語が書けないのが、さりげなく面倒くさかった。

ちなみにこの欠陥はGUIツールキット周りの不具合で、だいぶ前から直っていないようなんで、今後もすぐに直ることはなさそうだ。

Objective-C用に用意されたサードパーティライブラリをC#で使う方法とか、他の環境向けのC#用ライブラリをMonoTouchで使う方法とかは、結構はまりやすそうな話題なんだけど、今回はほとんどその辺をやることがなかったんで、今後の課題かな。

というわけで、iOS用アプリ開発環境としてのMonoTouchはかなり気に入ったんで、今後のますますの発展をお祈りしたいところなんだけど、ググって見つかる日本語情報の少なさ=今後ますますご発展する可能性の少なさ、という気がするんで、少しでもMonoTouchが流行ってくれることを祈っていろいろ書いてみた。

できればMono自体がもっと流行って、サーバーサイドアプリとかもMonoで書ける世の中が来るといいんだけどな-(今でも一応書けるけど、それで商売する勇気がある人は少ないよね? MS純正環境じゃなくて、mod_monoとかのほうね)。

Published At2012-08-24 18:42Updated At2012-08-24 18:42