MobileMe + SubversionでXCodeプロジェクトのバックアップとリビジョン管理
iPhone開発者ならほとんどがアドレス帳同期などのために使っているだろうmobileme。せっかくiDiskという10GBのストレージがついてくるのだから利用しない手はない。まずは"システム環境設定" - "MobileMe" - "iDisk"タブからiDiskSyncを開始する。
次にターミナルから
mkdir -p /Volumes/iDisk/Repository/ProjectName svnadmin create /Volumes/iDisk/Repository/ProjectName --fs-type fsfs mkdir -p tmp/{trunk,branches,tags} svn import tmp/ file:///Volumes/iDisk/Repository/ProjectName -m "Initial import"
を実行する。iDiskSyncを使わずに/Volumes/[MobileMeユーザー名]以下にリポジトリを作ってしまうとimport時に排他的ロックが取得できないエラーで失敗してしまうので注意。
ここまできたら次にXCodeを立ちあげ、"XCode" - "環境設定"のSCMでリポジトリを追加してSCMシステムはSubversionを、URLは先ほどインポートした"file:///Volumes/iDisk/Repository/ProjectName"を入力すると認証完了。
次は"SCM" - "リポジトリ"からtrunkを選択した状態で"読み込む"を押しプロジェクトフォルダを読みこませる。もしbuildフォルダがデフォルトのままプロジェクトフォルダ下にある場合は先にそれを削除しておく。
これでtrunkを先ほど読みこませた場所とは違う場所にチェックアウトし、プロジェクトの "情報" - "一般"タブ でビルドプロダクトの保存位置をプロジェクトフォルダ外に置き、SCMリポジトリを設定すれば全ての設定は完了だ。
もしここでコミット時にエラーが出るようであれば、まずはXCodeから読み込ませたプロジェクトにビルドが残ってなかったか、あるいは以前に~/.subversion/configをいじって妙な設定にしていなかったかを確認すればいい。
iDiskとTimeMachineと二種のバックアップになり安心して作業ができるようになった。
UITableViewを作る
TableはiPhoneらしいリストを作れるため重宝するが、サンプルの数やメソッドの数を見るとくじけたくなる位複雑だ。
テーブルに慣れるため、最低限のテーブルを作る方法をまとめた。
まずUITableViewを生成する際、styleはUITableViewStylePlainとでもおいておく。表示される前にdelegateとdatasourceオブジェクトを指定する。
単に羅列表示する事だけが目的のテーブルが作りたい場合、実はdelegateは何も実装しなくていい。UITableViewDelegate Protocolのリファレンスを見るとわかるが、描画のためや選択時のふるまいに関わるメソッドなのでほとんどがオプショナルなメソッドである。
datasourceには二つだけ実装しなければならないメソッドがある。
一つは-tableView:numerOfRowsInSection:で、セクション毎のセルの数を返す。セクション分けが無い場合も0番目のセクションがある扱いとなる。
次が-tableView:cellForRowAtIndexPath:で指定された場所のセルを返す。
たいていは-tableView:cellForRowAtIndexPath:内でUITableViewCellを生成するが、UITableViewはメモリ消費を抑えるためにセルにはidを振り、セルをすぐにはallocせず、必要なセルのidでdequeueReusableCellWithIdentifier:に問いあわせて再利用可能なセルがあればそれを使うようにする。羅列表示だけならばここでセルのselectionStyleをUITableViewCellSelectionStyleNoneにしておくとタッチされても選択された状態にならないので楽である。
iPhoneSimulatorのみや実機のみでコンパイルする
iPhoneSimulatorだけや、実機だけで実行するコードを書く
#import <TargetConditionals.h> #if TARGET_OS_IPHONE 実機のみ *ではない* #endif #if TARGET_IPHONE_SIMULATOR シミュレーターのみ #endif #if !TARGET_IPHONE_SIMULATOR 実機のみ #endif
iPhoneSimulatorもiPhoneOSのうちらしい。
TwentyFiveを少し宣伝
自分も多少関わったiPhoneアプリが結構前に公開された。ちょっと手空きの時に英語の感覚を鍛えるためにどうぞ。
http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewSoftware?id=297326138 (iTunesリンク)
http://twentyfivegame.com/ja/
このTwentyFiveというゲーム、実験的にいろんな展開をしていてWeb上でもプレイ可能。ランキングがなんだかすごい状態なので自信のある方は上位を目指してほしい。
iPhoneのDistributionビルド
まだガイドに載っていない、やりがちだがわかりづらい落とし穴。
通常AdHocでテストしてからAppStoreへアップロードするが、その際ほとんどの部分が同じだからといってAdHoc用のものをコピーしてビルド構成を作ってはいけない。
ガイドに載っている通りにしてもCodeSign failedではじかれてしまう。
原因はAdhoc用ビルドの際に作るplistファイルのget-task-allow。ビルド構成の設定がよくわからないのならばこれをtrueにしてやるといい。
識別子
iPhone,iPod touch の識別子をiTunesで表示すると末尾が切れる事がある。識別子表示をした状態でコピーをすると40桁全てコピーできる。