Xcode 4 のユニバーサルプロジェクト構成を考える

August 29, 2011

Xcode 3 から Xcode 4 になってウィザードから生成されるプロジェクトの構成も変わっている。
iPhone, iPadで共通化するユニバーサルで、ユニットテストありにした Windows Base プロジェクトを生成すると下記のようになる。
f:id:tilfin:20110830002120p:image:left
ファイルシステム上は、プロジェクト名のフォルダにxcodeprojectフォルダさらに同名のプロジェクトフォルダとTestsがサフックスに付いたテストフォルダが並ぶ。
プロジェクトフォルダにはiPhone, iPadが並ぶ。

WindowExample
- WindowExample.xcodeproj
- WindowExample
- iPhone
- iPad
- WindowExampleTests

Xcode 3 のようにClasses, Resourcesがない。自分も経験的に、XIBファイルと対になるViewControllerクラスは並んでいた方が扱いやすい。テンプレートでクラスを追加したときに同時に生成されるのでまとまっていた方が良いだろう。
ユニーバサルであればビューのベース部分やそもそも共通クラスがある(Common)。さらにイメージファイルもグループ化すると良いだろう(Images)。ほかにもユーティリティ群などが並ぶだろう(Utilities)。
ファイルシステム上もiPhone, iPad, Common, Images, Utilitiesはフォルダにする。クラス数が多ければ各グループ内もさらにグループ化した方がいいだろう。

f:id:tilfin:20110830002121p:image:left
ただこれらのグループは、画面数の増加などアプリの修正・機能追加に伴って柔軟に変えられる方が良いと考える。よって、ファイルシステム上はフラットに管理することにする。

WindowExample
- WindowExample.xcodeproj
- WindowExample
- iPhone
- iPad
- Common
- Utilities
- Images
- WindowExampleTests

Xcode は Visual Studio, Eclipse のようにプロジェクトのファイル構成がファイルシステムと同一ではない。Java をやってきた人には気持ち悪いかもしれない。パッケージや名前空間という概念は Objective-C にはない。グループはあくまでも人間から見た管理のしやすさだ。
Xcode はファイル追加後にファイルシステム上の移動をするのが非常に面倒である。このため、ファイルの上の場所は追加するときに確定させた方が良い。ただグループもフラットだと管理上破綻するだろう。これが前述のような構成にした理由だ。

まとめると、

となる。

iOS Xcode

tilfin freelance software engineer