546 Stimmen

Xcode-Projekt vs. Xcode-Workspace - Unterschiede

Ich versuche zu verstehen, wie das gesamte Ökosystem von iOS funktioniert.
Bis jetzt konnte ich für die meisten meiner Fragen eine Antwort finden (und glaub mir, es gab viele), aber für diese gibt es bisher keine klare Antwort.

Was ist der Unterschied zwischen XcodeProject- und XcodeWorkspace-Dateien?

  1. Was ist der Unterschied zwischen den beiden?
  2. Wofür sind sie verantwortlich?
  3. Mit welchem sollte ich arbeiten, wenn ich meine Apps im Team/alleine entwickle?
  4. Gibt es noch etwas, worüber ich bezüglich dieser beiden Dateien Bescheid wissen sollte?

763voto

hagi Punkte 11473

Ich denke, es gibt drei Schlüsselelemente, die Sie bezüglich der Projektstruktur verstehen müssen: Ziele, Projekte und Arbeitsbereiche. Ziele bestimmen im Detail, wie ein Produkt/binär (z. B. eine Anwendung oder Bibliothek) erstellt wird. Sie enthalten Build-Einstellungen wie Compiler- und Linker-Flags und definieren, welche Dateien (Quellcode und Ressourcen) tatsächlich zu einem Produkt gehören. Wenn Sie bauen/ausführen, wählen Sie immer ein bestimmtes Ziel aus.

Es ist wahrscheinlich, dass Sie einige Ziele haben, die Code und Ressourcen teilen. Diese verschiedenen Ziele können leicht unterschiedliche Versionen einer App sein (iPad/iPhone, verschiedene Marken,…) oder Testfälle, die natürlicherweise auf dieselben Quelldateien wie die App zugreifen müssen. All diese zusammenhängenden Ziele können in einem Projekt gruppiert werden. Während das Projekt die Dateien aller seiner Ziele enthält, wählt jedes Ziel seinen eigenen Satz relevanter Dateien aus. Gleiches gilt für Build-Einstellungen: Sie können Standard-Projekteinstellungen im Projekt festlegen, aber wenn eines Ihrer Ziele unterschiedliche Einstellungen benötigt, können Sie diese dort immer überschreiben:

Geteilte Projekteinstellungen, die alle Ziele erben, es sei denn, sie überschreiben sie

Geteilte Projekteinstellungen, die alle Ziele erben, es sei denn, sie überschreiben sie

Konkrete Ziel-Einstellungen: PSE iPhone überschreibt die Base SDK-Einstellung des Projekts

Konkrete Ziel-Einstellungen: PSE iPhone überschreibt die Base SDK-Einstellung des Projekts

In Xcode öffnen Sie immer Projekte (oder Arbeitsbereiche, aber keine Ziele) und alle enthaltenen Ziele können gebaut/ausgeführt werden, aber es gibt keine Möglichkeit/Definition zum Bauen eines Projekts, daher benötigt jedes Projekt mindestens ein Ziel, um mehr als nur eine Sammlung von Dateien und Einstellungen zu sein.

Wählen Sie eines der Ziele des Projekts aus, um es auszuführen

Wählen Sie eines der Ziele des Projekts aus, um es auszuführen

In vielen Fällen sind Projekte alles, was Sie brauchen. Wenn Sie eine Abhängigkeit haben, die Sie aus dem Quellcode erstellen, können Sie sie als Unterprojekt einbetten. Unterprojekte können separat oder innerhalb ihres übergeordneten Projekts geöffnet werden.

demoLib ist ein Unterprojekt

demoLib ist ein Unterprojekt

Wenn Sie eines der Ziele des Unterprojekts zu den Abhängigkeiten des übergeordneten Projekts hinzufügen, wird das Unterprojekt automatisch gebaut, es sei denn, es wurde nicht geändert. Der Vorteil hierbei ist, dass Sie Dateien sowohl aus Ihrem Projekt als auch aus Ihren Abhängigkeiten im selben Xcode-Fenster bearbeiten können und beim Bauen/Ausführen aus den Zielen des Projekts und seiner Unterprojekte wählen können:

Ausführen von Zielen aus einem Unterprojekt

Wenn Ihre Bibliothek (das Unterprojekt) jedoch von einer Vielzahl anderer Projekte (oder deren Ziele, um genau zu sein) verwendet wird, macht es Sinn, sie auf der gleichen Hierarchieebene zu platzieren - dafür sind Arbeitsbereiche da. Arbeitsbereiche enthalten und verwalten Projekte, und alle direkt enthaltenen Projekte (also nicht ihre Unterprojekte) befinden sich auf der gleichen Ebene und ihre Ziele können voneinander abhängen (Ziele von Projekten können Ziele von Unterprojekten abhängen, aber nicht umgekehrt).

Arbeitsbereichsstruktur

Arbeitsbereichsstruktur

In diesem Beispiel können beide Apps (AnotherApplication / ProjectStructureExample) auf die Ziele des Projekts demoLib verweisen. Dies wäre auch möglich, indem Sie das Projekt demoLib in beiden anderen Projekten als Unterprojekt einschließen (was nur eine Referenz ist, also keine Duplizierung notwendig), aber wenn Sie viele Kreuzabhängigkeiten haben, sind Arbeitsbereiche sinnvoller. Wenn Sie einen Arbeitsbereich öffnen, können Sie aus allen Zielen der Projekte wählen, wenn Sie bauen/ausführen.

Ausführen von Zielen aus einem Arbeitsbereich

Sie können Ihre Projektdateien immer noch separat öffnen, aber es ist wahrscheinlich, dass deren Ziele nicht gebaut werden, weil Xcode die Abhängigkeiten nicht auflösen kann, es sei denn, Sie öffnen die Arbeitsbereichsdatei. Arbeitsbereiche bieten Ihnen denselben Vorteil wie Unterprojekte: Sobald sich eine Abhängigkeit ändert, wird Xcode sie neu erstellen, um sicherzustellen, dass sie auf dem neuesten Stand ist (obwohl ich damit einige Probleme hatte, es scheint nicht zuverlässig zu funktionieren).

Ihre Fragen in Kürze:

1) Projekte enthalten Dateien (Code/Ressourcen), Einstellungen und Ziele, die Produkte aus diesen Dateien und Einstellungen erstellen. Arbeitsbereiche enthalten Projekte, die sich gegenseitig referenzieren können.

2) Beide sind dafür verantwortlich, Ihr Gesamtprojekt zu strukturieren, aber auf verschiedenen Ebenen.

3) Ich denke, Projekte sind in den meisten Fällen ausreichend. Verwenden Sie Arbeitsbereiche nicht, es sei denn, es gibt einen spezifischen Grund. Außerdem können Sie Ihr Projekt später immer in einem Arbeitsbereich einbetten.

4) Ich denke, dafür ist der obige Text gedacht…

Es gibt eine Anmerkung zu 3): CocoaPods, das automatisch Drittanbieter-Bibliotheken für Sie behandelt, verwendet Arbeitsbereiche. Daher müssen Sie sie auch verwenden, wenn Sie CocoaPods verwenden (was viele Leute tun).

121voto

andreamazz Punkte 4226

Ein Workspace ist eine Sammlung von Projekten. Es ist nützlich, Ihre Projekte zu organisieren, wenn es eine Korrelation zwischen ihnen gibt (z.B.: Projekt A enthält eine Bibliothek, die als eigenes Projekt B bereitgestellt wird. Wenn Sie den Workspace erstellen, wird Projekt B in Projekt A kompiliert und verknüpft).
Es ist üblich, in dem beliebten CocoaPods einen Workspace zu verwenden. Wenn Sie Ihre Pods installieren, werden sie in einem Workspace platziert, der Ihr Projekt und die Pod-Bibliotheken enthält.

40voto

onmyway133 Punkte 42296

Kurz gesagt

  • Xcode 3 führte das Unterprojekt ein, was eine Eltern-Kind-Beziehung ist, was bedeutet, dass das Elternteil auf das Kindziel verweisen kann, aber nicht umgekehrt
  • Xcode 4 führte den Arbeitsbereich ein, was eine Geschwisterbeziehung ist, was bedeutet, dass jedes Projekt auf Projekte im selben Arbeitsbereich verweisen kann

21voto

yoAlex5 Punkte 20661

Xcode Arbeitsbereich vs. Projekt

  1. Was ist der Unterschied zwischen den beiden?

Arbeitsbereich ist eine Gruppe von Projekten

  1. Wofür sind sie verantwortlich?

Arbeitsbereich ist für die Abhängigkeiten zwischen den Projekten verantwortlich. Projekt ist für den Quellcode verantwortlich.

  1. Mit welchem von ihnen sollte ich arbeiten, wenn ich meine Apps im Team/alleine entwickle?

Ihre Wahl sollte von der Art Ihres Projekts abhängen. Beispielsweise erstellt ein Projekt, das auf dem CocoaPods-Abhängigkeitsmanager basiert, einen Arbeitsbereich.

  1. Gibt es noch etwas, worüber ich in Bezug auf diese beiden Dateien Bescheid wissen sollte?

Projektübergreifende Verweise[Mehr dazu]

[Xcode-Komponenten]

6voto

ifeegoo Punkte 6658

Wenn ich CocoaPods benutzt habe, um iOS-Projekte zu entwickeln, gibt es eine .xcworkspace-Datei, die du mit der .xcworkspace-Datei öffnen musst, die mit CocoaPods in Verbindung steht.

Dateivorschau

Aber wenn du den Befehl Paketinhalt anzeigen mit der .xcworkspace-Datei ausführst, wirst du die Datei contents.xcworkspacedata finden.

Paketinhalt

Achte auf diese Zeile:

location = "group:BluetoothColorLamp24G.xcodeproj"

Die .xcworkspace-Datei hat eine Verknüpfung mit der .xcodeproj-Datei.

Entwicklungsumgebung:

macOS 10.14
Xcode 10.1

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X