Xcode プロジェクトと Xcode ワークスペースの違い 質問する

Xcode プロジェクトと Xcode ワークスペースの違い 質問する

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

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

  1. 両者の違いは何でしょうか?
  2. 彼らは何に対して責任があるのでしょうか?
  3. チームまたは単独でアプリを開発する場合、どちらを使用すればよいでしょうか?
  4. これら 2 つのファイルに関して他に注意すべき点はありますか?

ベストアンサー1

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

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

すべてのターゲットが上書きしない限り継承する共有プロジェクト設定

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

具体的なターゲット設定: PSE iPhoneはプロジェクトのBase SDK設定を上書きします

具体的なターゲット設定: PSE iPhoneはプロジェクトのBase SDK設定を上書きします

Xcode では、常にプロジェクト (またはワークスペース、ターゲットではありません) を開き、そこに含まれるすべてのターゲットをビルド/実行できますが、プロジェクトをビルドする方法や定義はないため、すべてのプロジェクトには、単なるファイルと設定のコレクション以上のものになるために少なくとも 1 つのターゲットが必要です。

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

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

多くの場合、プロジェクトだけで十分です。ソースからビルドした依存関係がある場合は、それをサブプロジェクトとして埋め込むことができます。サブプロジェクトは、個別に開くことも、スーパープロジェクト内で開くこともできます。

demoLibはサブプロジェクトです

demoLibはサブプロジェクトです

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

サブプロジェクトからのターゲットの実行

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

ワークスペースの構造

ワークスペースの構造

この例では、両方のアプリ ( AnotherApplication / ProjectStructureExample ) がdemoLibプロジェクトのターゲットを参照できます。これは、他の両方のプロジェクトにdemoLibプロジェクトをサブプロジェクトとして含めることによっても可能です(これは参照のみなので、重複は不要です)。ただし、相互依存関係が多数ある場合は、ワークスペースの方が適しています。ワークスペースを開くと、ビルド/実行時にすべてのプロジェクトのターゲットから選択できます。

ワークスペースからターゲットを実行する

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

質問を簡単にまとめると

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

2) どちらもプロジェクト全体の構造化を担当しますが、そのレベルは異なります。

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

4) 上記のテキストはそのためにあると思います…

3 については 1 つコメントがあります:ココアポッドは、サードパーティのライブラリを自動的に処理しますが、ワークスペースを使用します。そのため、 を使用する場合は、ワークスペースも使用する必要がありますCocoaPods(多くの人が使用しています)。

おすすめ記事