回答:
プロジェクト構造について理解する必要がある3つの重要な項目があると思います。ターゲット、プロジェクト、ワークスペースです。ターゲットは、製品/バイナリ(つまり、アプリケーションまたはライブラリ)の構築方法を詳細に指定します。これらには、コンパイラやリンカーのフラグなどのビルド設定が含まれ、実際に製品に属するファイル(ソースコードとリソース)を定義します。ビルド/実行するときは、常に1つの特定のターゲットを選択します。
コードとリソースを共有するターゲットがいくつかある可能性があります。これらの異なるターゲットは、アプリのわずかに異なるバージョン(iPad / iPhone、異なるブランディングなど)またはアプリと同じソースファイルにアクセスする必要があるテストケースである可能性があります。これらの関連するターゲットはすべて、プロジェクトにグループ化できます。プロジェクトにはすべてのターゲットからのファイルが含まれていますが、各ターゲットは関連するファイルの独自のサブセットを選択します。ビルド設定についても同じことが言えます。プロジェクト全体でデフォルトのプロジェクト全体の設定を定義できますが、ターゲットの1つに異なる設定が必要な場合は、いつでもそこでオーバーライドできます。
オーバーライドしない限り、すべてのターゲットが継承する共有プロジェクト設定
具体的なターゲット設定:PSE iPhoneはプロジェクトのBase SDK
設定を上書きします
Xcodeでは、常にプロジェクト(またはワークスペースではなくターゲット)を開き、それに含まれるすべてのターゲットをビルド/実行できますが、プロジェクトをビルドする方法/定義はないため、すべてのプロジェクトには少なくとも1つのターゲットが必要です。ファイルと設定の単なるコレクションではありません。
実行するプロジェクトのターゲットの1つを選択します
多くの場合、プロジェクトで十分です。ソースからビルドする依存関係がある場合、それをサブプロジェクトとして埋め込むことができます。サブプロジェクトは、個別に、またはスーパープロジェクト内で開くことができます。
demoLibはサブプロジェクトです
サブプロジェクトのターゲットの1つをスーパープロジェクトの依存関係に追加すると、変更されていない限り、サブプロジェクトは自動的にビルドされます。ここでの利点は、プロジェクトと依存関係の両方のファイルを同じXcodeウィンドウで編集できることと、ビルド/実行するときに、プロジェクトとそのサブプロジェクトのターゲットから選択できることです。
ただし、ライブラリ(サブプロジェクト)が他のさまざまなプロジェクト(または正確にはそのターゲット)で使用されている場合は、同じ階層レベルに配置するのが理にかなっています。それがワークスペースの目的です。ワークスペースはプロジェクトを含み、管理します。ワークスペースに直接含まれるすべてのプロジェクト(つまり、サブプロジェクトではない)は同じレベルにあり、それらのターゲットは相互に依存できます(プロジェクトのターゲットはサブプロジェクトのターゲットに依存できますが、その逆はできません)。
ワークスペースの構造
この例では、両方のアプリ(AnotherApplication / ProjectStructureExample)がdemoLibを参照できますプロジェクトのターゲットを。これは、demoLibプロジェクトを他の両方のプロジェクトにサブプロジェクトとして含めることによっても可能です(これは参照のみであるため、複製は不要です)。相互依存関係が多数ある場合は、ワークスペースの方が理にかなっています。ワークスペースを開くと、ビルド/実行時にすべてのプロジェクトのターゲットから選択できます。
プロジェクトファイルを個別に開くことはできますが、ワークスペースファイルを開かないとXcodeが依存関係を解決できないため、ターゲットがビルドされない可能性があります。ワークスペースは、サブプロジェクトと同じ利点を提供します。依存関係が変更されると、Xcodeはそれを再構築して最新であることを確認します(いくつかの問題がありましたが、確実に機能しないようです)。
一言で言えばあなたの質問:
1)プロジェクトには、ファイル(コード/リソース)、設定、およびそれらのファイルと設定から製品を構築するターゲットが含まれます。ワークスペースには、相互に参照できるプロジェクトが含まれています。
2)どちらもプロジェクト全体の構成を担当しますが、レベルは異なります。
3)ほとんどの場合、プロジェクトで十分だと思います。特別な理由がない限り、ワークスペースは使用しないでください。さらに、後でいつでもプロジェクトをワークスペースに埋め込むことができます。
4)それが上記のテキストの目的です…
3)には1つの注意点があります。CocoaPodsは、サードパーティのライブラリを自動的に処理し、ワークスペースを使用します。したがって、CocoaPods
(多くの人が使用しているように)使用するときも、それらを使用する必要があります。
ワークスペースはプロジェクトのコレクションです。プロジェクト間に相関関係がある場合は、プロジェクトを整理すると便利です(例:プロジェクトAには、プロジェクトBとしてプロジェクト自体として提供されるライブラリが含まれています。ワークスペースをビルドすると、プロジェクトBがコンパイルされ、プロジェクトAでリンクされます)。
一般的なCocoaPodsではワークスペースを使用するのが一般的です。ポッドをインストールすると、ポッドはプロジェクトとポッドライブラリを保持するワークスペース内に配置されます。
簡単に
CocoaPodsを使用してiOSプロジェクトを開発したとき、.xcworkspace
ファイルがあります.xcworkspace
。CocoaPodsに関連するファイルでプロジェクトを開く必要があります。
しかし、ときにShow Package Contents
持つ.xcworkspace
ファイル、あなたは見つけるでしょうcontents.xcworkspacedata
、ファイルを。
<?xml version="1.0" encoding="UTF-8"?>
<Workspace
version = "1.0">
<FileRef
location = "group:BluetoothColorLamp24G.xcodeproj">
</FileRef>
<FileRef
location = "group:Pods/Pods.xcodeproj">
</FileRef>
</Workspace>
この行に注意してください:
location = "group:BluetoothColorLamp24G.xcodeproj"
.xcworkspace
ファイルが持つ参照持つ.xcodeproj
ファイルを。
開発環境:
macOS 10.14
Xcode 10.1
それらの2つの違いは何ですか?
ワークスペースはプロジェクトのセットです
彼らは何の責任がありますか?
プロジェクトはソースコードを担当します。ワークスペースはプロジェクト間の依存関係を担当します
チーム/単独でアプリを開発する場合、どちらを使用すればよいですか?
どちらを選択するかは、プロジェクトのタイプによって異なります。たとえば、プロジェクトがCocoaPods依存関係マネージャーに依存している場合、ワークスペースが作成されます。
これらの2つのファイルに関して他に知っておくべきことはありますか?
ワークスペースのライバルはcross-project references
【概要】