1. ホーム
  2. xcode

[解決済み] XcodeプロジェクトとXcodeワークスペースの比較 - 違い

2022-03-21 04:35:17

質問

のエコシステム全体がどのように機能しているかを理解しようとしています。 iOS が動作します。
今までは、私の質問のほとんどに答えが見つかりましたが(信じてください、たくさんの質問がありました)、この質問については、まだ明確な答えがないようです。

XcodeProjectとXcodeWorkspaceのファイルの違いは何ですか?

  1. この2つの違いは何ですか?
  2. 彼らは何を担当しているのですか?
  3. チームまたは単独でアプリを開発する場合、どの人と一緒に仕事をすればいいのでしょうか?
  4. この2つのファイルについて、他に注意すべきことはありますか?

解決方法は?

プロジェクトの構成について、理解すべき重要な項目は3つあると思います。 目標 , プロジェクト および ワークスペース . ターゲット は、製品/バイナリ(アプリケーションやライブラリなど)のビルド方法を詳細に指定します。コンパイラやリンカのフラグなどのビルド設定も含まれ、どのファイル(ソースコードやリソース)が実際に製品に含まれるかを定義します。ビルド/実行時には、常に特定のターゲットを1つ選択します。

コードとリソースを共有するいくつかのターゲットがある可能性があります。これらの異なるターゲットは、アプリのわずかに異なるバージョン(iPad/iPhone、異なるブランド、...)や、当然アプリと同じソースファイルにアクセスする必要があるテストケースになることがあります。これらの関連するターゲットは、すべて プロジェクト . プロジェクトはすべてのターゲットのファイルを含みますが、各ターゲットは関連するファイルのサブセットを独自に選択します。ビルドの設定も同じです。プロジェクトでプロジェクト全体のデフォルト設定を定義することができますが、ターゲットの1つが異なる設定を必要とする場合、いつでもそこでオーバーライドすることができます。

すべてのターゲットが継承する、オーバーライドしない限りは共有されるプロジェクト設定

具体的なターゲット設定。 PSE iPhone は、プロジェクトの Base SDK 設定

Xcodeでは、常にプロジェクト(またはワークスペース、ただしターゲットではない)を開き、それが含むすべてのターゲットをビルド/実行することができますが、プロジェクトをビルドする方法/定義はありません。

実行するプロジェクトのターゲットを1つ選択する

多くの場合、プロジェクトがあれば十分です。もし、ソースからビルドするような依存関係があるのであれば、それを サブプロジェクト . サブプロジェクトは、個別に開くことも、スーパープロジェクトの中で開くこともできます。

デモリブ はサブプロジェクト

サブプロジェクトのターゲットの一つをスーパープロジェクトの依存関係に追加すると、サブプロジェクトが変更されていない限り、自動的にビルドされます。ここでの利点は、同じXcodeウィンドウでプロジェクトと依存関係の両方のファイルを編集でき、ビルド/実行時に、プロジェクトとそのサブプロジェクトのターゲットから選択できることです。

しかし、あなたのライブラリ(サブプロジェクト)が他の様々なプロジェクト(正確にはそのターゲット)によって使用されている場合、同じ階層レベルに置くことは理にかなっています。 ワークスペース はそのためのものです。ワークスペースはプロジェクトを含み、管理し、それが直接含むすべてのプロジェクト(つまり、そのサブプロジェクトではない)は同じレベルにあり、それらのターゲットは互いに依存することができます(プロジェクトのターゲットはサブプロジェクトのターゲットに依存できますが、その逆はありません)。

ワークスペースの構造

この例では、両方のアプリ( AnotherApplication / ProjectStructureExample を参照することができます。 デモリブ プロジェクトのターゲットです。また、これは demoLib プロジェクトはサブプロジェクトとして他の両方のプロジェクトに含まれていますが(これは参照だけなので重複する必要はありません)、相互依存関係がたくさんある場合は、ワークスペースがより理にかなっています。ワークスペースを開いておけば、ビルド/実行時にすべてのプロジェクトのターゲットから選択することができます。

プロジェクトファイルを個別に開くことはできますが、ワークスペースファイルを開かないとXcodeが依存関係を解決できないため、ターゲットがビルドされない可能性があります。ワークスペースは、サブプロジェクトと同じような利点を与えてくれます。依存関係が変更されると、Xcodeはそれを再構築して最新であることを確認します(ただし、これにはいくつかの問題があり、確実に機能するとは思えません)。

ご質問を簡単にまとめると :

1) プロジェクトには、ファイル (コード/リソース)、設定、およびそれらのファイルや設定から製品を構築するターゲットが含まれています。ワークスペースには、相互に参照できるプロジェクトが含まれます。

2) どちらもプロジェクト全体を構造化する役割を担っていますが、そのレベルは異なっています。

3) ほとんどの場合、プロジェクトで十分だと思います。特別な理由がない限り、ワークスペースは使わないでください。それに、プロジェクトは後からいつでもワークスペースに埋め込むことができます。

4) 上の文章はそのためのものだと思うのですが・・・。

3)の発言は1つです。 CocoaPods サードパーティライブラリを自動で処理するWorkSpaceは、ワークスペースを使用します。従って CocoaPods (多くの人がそうしています)。