最近のトラックバック

2021年7月
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
無料ブログはココログ

« 2008年6月 | トップページ | 2008年8月 »

2008.07.18

iPhoneと単体テスト環境構築メモ

 iPhone上での開発について自分用のメモを兼ねて公開。
 Appleは規約においてiPhone Development Centerで入手したすべての情報は機密であるから公開してはならない、としているので、技術情報をポンポンWebに載せたりはできない。(参考:ここなど)
 ここに書く内容はGoogleで検索してApple以外のサイトで得られた情報と、自分のXCodeでの動作実験をまとめただけのものであることをあらかじめお断りしておきます。

 今回取り組んだのは、XCode上で単体テストをする環境整備。まだまだプラットフォーム自体知らないことがたくさんあるのでこれはぜひとも必要だ。単体テスト環境とiPhone実機では挙動が異なる点が見つかってアセるシーンも将来たぶんあるだろうけど、まずはここから。

 その大まかな手順は以下のとおり。

(1) 新規にターゲットを作成し、種類はCocoaの"Unit Test Bundle"を選択。
(2) 参照するフレームワークにSenTestingKit.frameworkを追加。パスは/Developer/Library/Frameworks以下にあるものが正しく、/Developer/SDKs/...以下にあるものではNGなので注意。(実はここで1時間以上ハマってた)
(3) 適当にテストケースを書く。テストケースを記述したクラスは(1)で作成したターゲットにのみ含まれるようにする。テストの書き方はxUnit系列と概ね一緒で、SenTestingKitでWebを検索すればサンプルはいろいろ見つかる。
(4) ターゲットの設定で、リンクカテゴリにある「実行パスの検索パス」を$(DEVELOPER_LIBRARY_DIR)/Frameworksに設定。(意味のよくわからない訳語だが、英語版のXCodeではrunpath search pathだそうである)
(5) ターゲットをビルドする。このときプラットフォームをMac OS Xにしないといけない。iPhoneのままだとi386プロセッサでは動かない云々のエラーが出る。テストはMacOS上で動くのだからこの設定は当然なのだけど、iPhoneとMacOSのそれぞれのCocoaで挙動が異なる部分がある場合は困ることになるので注意。
(6) ここまですると、コンパイルが通ると同時にテストが走るようになる。STAssertTrue(false, @"hoge")みたいな確実に失敗するテストを試しに書けば、実行されているかどうか確認できる。

 ここまでで第一段階は終わり。ビルドと同時にテストが走るのはよいのだが、それだとテストが失敗する場合にデバッグできず路頭に迷うので、次にその設定をする。これについてすごく役立ったのはここ

(7) XCodeのメニューから、プロジェクト - 新規カスタム実行ファイル を選び、/Developer/Tools/otestを選択。名前は適当につける。
(8) 引数と環境変数を次のように設定
Screem1_2
3番目の引数は(1)で作成したターゲットの名前 + ".octest"(このディレクトリ内にビルドした内容が置かれる)である。
ちなみに、2番目の引数の All のかわりに TestCaseClassName/methodName とすると特定のテストのみを実行できる。
(9) さらに、上の画面の"一般"タブで作業ディレクトリを「ビルドプロダクトディレクトリ」にする。
(10) ターゲットのGCCの設定で、GCをsupportedにする。iPhoneではGCはサポートされないが、otestはGC環境がないと動かない。(ということは、retain/releaseがちゃんとできていることを確認するテストに影響が出る。ここはぜひとも今後解決したい)

 これで、(7)で作ったものをアクティブ実行可能ファイルに選択し、XCodeの実行 - デバッグを選択するとテストケースがデバッガのもとで走るようになる。

 あとはコードをガリガリ書いてテスト-修正サイクルを回していくだけだぜ!

2008.07.15

主夫生活

 実は妻が妊娠しております。
 まだ初期の段階で、子供の体長は1.4cmだそうで。いったいこの先どんな体験が待ち構えているやら。

 最近つわりがひどいので、料理・掃除・洗濯はほぼすべて僕がやっているのだが、通常の仕事に加えてこれをこなすのはなかなか大変だ。さらには、妻の仕事(某有名小学校の教員です)まで手伝わされる始末で、作文の代筆をさせられたよ! そろそろ学期末だし通知表づくりも始まるんだろうな...

 タイミングよくというか、iPhone向けの作業が同時に始まったので、最近のパターンは昼間はオフィスでWindows使って通常の仕事、夕方まだ明るいうちに帰宅して買い物と晩飯づくり、その後Macを立ち上げてiPhoneがらみの作業、となってます。iPhoneに本当に集中できるのは妻が寝たあとの時間だけなので、あまり長くない。
 こうやって複数のことを同時に進めるのは、集中力が分散して本来あまり良くないんだが今回ばかりは仕方ないかなあ。二正面作戦は、日数をかけたわりに気がつくとあまり成果が上がっていない、となりがちなので。

 ところで、iPhoneはたいへん面白い。ときには.NETやJavaでは考えられないような泥臭い作業も必要で、不便であることは間違いないんだが、それを「かわいい」と思ってしまう不思議な魅力がある。昔C++でガリガリ書いていた頃の記憶が呼び覚まされるぜ。
 これでとうとう俺もマカーの仲間入りか...

2008.07.08

TX, iPhoneなど

 まず「はっちゅう君TX」についてコメント。
 今日になって公式にアナウンスが出たみたいだけども、いったん終了になること自体は実はけっこう前から決まっていたことでした。製品としてつづいていくには、こちらで作っているクライアント側のソフトの機能はもちろんのこと、サーバ側で提供している機能、開発のコストなどもろもろの問題をすべてクリアし、ユーザ・クリック証券・僕がそれぞれ満足できるものにしていかないといけないのでね。

 僕としては後日の再開を目指していて、それに向けた具体的な追加/改良機能プランもあるけれども、Tacticoプロジェクト全体としては他にも複数の案件が並走してるし、大前提としてクリック証券と前向きな合意に至れなければ再開はできないので、実際今後どうなるかは不透明です。

 でもまあ今まで使ってた人からすると連載マンガの打ち切りのように見えるので、その点は大変申し訳ないと思います。


 一方、最近はiPhone版Tacticoの開発が本格化しつつあります。といってもPCとiPhoneでは環境が全く違うので、移植といっても単純なソースコードの書き換えだけでは終わらない点が多くあり、悩みどころ。まだiPhoneに関することは知らないことが山ほどあるのでひとつひとつ実験して解決していくのが新鮮で、非常に楽しい。これまでのキャリアでも屈指のワクワク感がある。
 このレベルのワクワク感は、僕の経験ではi386、Scheme、Javaくらいしかなかった。たぶんもっと仕事が進んでいくと、容易に解決できない問題や不可解な挙動に悩まされることも出てくるのは確実なのでワクワクなんて言っていられないと思うけれども...
 いまのところ、PC上のアプリと決定的に異なる点は、

* 画面が小さいことを考慮しないといけない。でもフルカラーは出るし、1ピクセルの大きさはPCと大差ない。
* ネット接続が不安定であることを前提にしないといけない。地下鉄の中で使うかもしれないので。
* 一瞬で状態を保存してアプリ終了することができないといけない。iPhoneなので、常に電話がかかってくる割り込みが発生しうる。
* マウスもキーボードもない。タッチできるのみ。

 の4つ。
 iPhoneがどれくらいの存在感を持つデバイスになるかは分からないけれども、少なくとも携帯端末のアプリ"開発環境"としては革命的だ。

 あと相場はかなり危機的だね。そろそろ、去年の8月に匹敵する(もしかするとそれ以上の)パニックが来そうな気がしてならない。
 本当にいま恐ろしい(しかもいつか起きるのは確実)のは原油バブルの崩壊だ。これが来たらオイルマネーの萎縮 -> いくつかの金融機関破綻 -> 世界恐慌 というのはありそうなシナリオだ。

 うかつなタイミングでプットを売ると即死しかねない環境だよ...

« 2008年6月 | トップページ | 2008年8月 »