これは?
タイトルの通りです。
xcworkspace = 複数のxcodeprojを取りまとめられるもの
と自分は考えていたのですが、 xcodeproj自身がxcodeprojを持つことも実はできるし、いまいち違いがわからなくなってきたので備忘録として。
Target
XcodeのProjectには少なくともひとつ Target がありますね。
Targetとは、ビルドの結果得られる生成物のことで、iOS, watchOS, OSXなどがあります。
そして、どのTargetも build settings
があり、ビルドするときは必ずいずれかのTargetを選択する必要があります。
Project (.xcodeproj)
iOSやwatchOSなど複数Targetsをグループ化するのが Project です。
Targetのベースとなる設定はProjectの build settings
で行い、Target固有の設定はそれぞれのTarget内の build settings
でやる感じです。
XcodeはProjectを開き、Targetをビルドする、ということですね。
Subproject
Projectの中に他のProjectを Subproject として組み込むことができます。
Subprojectはそれ単体で開くことも、親プロジェクト内で開くこともできます。
親ProjectをビルドすればSubprojectもビルドが走ります(ビルドキャッシュ機構が動作するので、次に差分が生じるまでリビルドも生じません)。
同じXcodeのウィンドウからどちらのProjectも編集でき、Targetも選択可能です。
Workspace (.xcworkspace)
複数のProjectを同じレベルで束ねることができるのが Workspace です。
PackegeMangerにCocoapodsを使用している場合はよく見ると思います。
xcodeproj vs xcworkspace
以上のことから、使い分けとしては以下のようになります。
- 1つのメインプロジェクトがあり、そこからの参照しかない場合は Subproject として組み込む
- 複数のプロジェクトからの依存がある場合、 Workspace として束ねる
参考
https://developer.apple.com/jp/documentation/ToolsLanguages/Conceptual/Xcode_Overview/CreatingApps/WorkingwithTargets.html
https://stackoverflow.com/questions/21631313/xcode-project-vs-xcode-workspace-differences