Ich denke, es gibt drei Schlüsselelemente, die Sie in Bezug auf die Projektstruktur verstehen müssen: Ziele , Projekte und Arbeitsbereiche . Ziele geben detailliert an, wie ein Produkt / eine Binärdatei (dh 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. Beim Erstellen / Ausführen wählen Sie immer ein bestimmtes Ziel aus.
Es ist wahrscheinlich, dass Sie einige Ziele haben, die Code und Ressourcen gemeinsam nutzen. Diese unterschiedlichen Ziele können leicht unterschiedliche Versionen einer App (iPad / iPhone, unterschiedliche Brandings usw.) oder Testfälle sein, die natürlich auf dieselben Quelldateien wie die App zugreifen müssen. Alle diese verwandten Ziele können in einem Projekt gruppiert werden . Während das Projekt die Dateien aller seiner Ziele enthält, wählt jedes Ziel seine eigene Teilmenge der relevanten Dateien aus. Gleiches gilt für Build-Einstellungen: Sie können projektweite Standardeinstellungen im Projekt definieren. Wenn jedoch eines Ihrer Ziele andere Einstellungen benötigt, können Sie diese dort jederzeit überschreiben:
Freigegebene Projekteinstellungen, die alle Ziele erben, sofern sie diese nicht überschreiben
Konkrete Zielsystemeinstellungen: PSE iPhone überschreibt die Base SDK
Projekteinstellung
In Xcode öffnen Sie immer Projekte (oder Arbeitsbereiche, aber keine Ziele), und alle darin enthaltenen Ziele können erstellt / ausgeführt werden, es gibt jedoch keine Möglichkeit / Definition zum Erstellen eines Projekts, sodass jedes Projekt mindestens ein Ziel benötigt mehr als nur eine Sammlung von Dateien und Einstellungen sein.
Wählen Sie eines der auszuführenden Projektziele aus
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 Teilprojekt einbetten . Teilprojekte können separat oder innerhalb ihres Superprojekts geöffnet werden.
demoLib ist ein Teilprojekt
Wenn Sie eines der Ziele des Unterprojekts zu den Abhängigkeiten des Superprojekts hinzufügen, wird das Unterprojekt automatisch erstellt, sofern es nicht unverändert geblieben ist. Der Vorteil hierbei ist, dass Sie Dateien sowohl aus Ihrem Projekt als auch aus Ihren Abhängigkeiten im selben Xcode-Fenster bearbeiten und beim Erstellen / Ausführen aus den Zielen des Projekts und seiner Teilprojekte auswählen können:
Wenn Ihre Bibliothek (das Teilprojekt) jedoch von einer Vielzahl anderer Projekte (oder deren Ziele, um genau zu sein) verwendet wird, ist es sinnvoll, sie auf dieselbe Hierarchieebene zu setzen - dafür sind Arbeitsbereiche gedacht . Arbeitsbereiche enthalten und verwalten Projekte, und alle direkt darin enthaltenen Projekte (dh nicht ihre Teilprojekte) befinden sich auf derselben Ebene, und ihre Ziele können voneinander abhängen (Projektziele können von den Zielen der Teilprojekte abhängen, aber nicht umgekehrt).
Arbeitsbereichsstruktur
In diesem Beispiel können beide Apps ( AnotherApplication / ProjectStructureExample ) auf die Ziele des demoLib- Projekts verweisen . Dies wäre auch möglich, indem das demoLib- Projekt in beide anderen Projekte als Teilprojekt aufgenommen wird (dies ist nur eine Referenz, daher ist keine Duplizierung erforderlich). Wenn Sie jedoch viele Abhängigkeiten haben, sind Arbeitsbereiche sinnvoller. Wenn Sie einen Arbeitsbereich öffnen, können Sie beim Erstellen / Ausführen aus allen Projektzielen auswählen.
Sie können Ihre Projektdateien weiterhin separat öffnen, aber es ist wahrscheinlich, dass ihre Ziele nicht erstellt werden, da Xcode die Abhängigkeiten nur auflösen kann, wenn Sie die Arbeitsbereichsdatei öffnen. Arbeitsbereiche bieten den gleichen Vorteil wie Teilprojekte: Sobald sich eine Abhängigkeit ändert, erstellt Xcode sie neu, um sicherzustellen, dass sie auf dem neuesten Stand ist (obwohl ich einige Probleme damit hatte, scheint sie nicht zuverlässig zu funktionieren).
Ihre Fragen auf den Punkt gebracht :
1) Projekte enthalten Dateien (Code / Ressourcen), Einstellungen und Ziele, die Produkte aus diesen Dateien und Einstellungen erstellen. Arbeitsbereiche enthalten Projekte, die aufeinander verweisen können.
2) Beide sind für die Strukturierung Ihres Gesamtprojekts verantwortlich, jedoch auf verschiedenen Ebenen.
3) Ich denke, Projekte sind in den meisten Fällen ausreichend. Verwenden Sie keine Arbeitsbereiche, es sei denn, es gibt einen bestimmten Grund. Außerdem können Sie Ihr Projekt später jederzeit in einen Arbeitsbereich einbetten.
4) Ich denke, dafür ist der obige Text gedacht ...
Es gibt eine Bemerkung zu 3): CocoaPods , die automatisch Bibliotheken von Drittanbietern für Sie verwalten, verwenden Arbeitsbereiche. Daher müssen Sie sie auch verwenden, wenn Sie sie verwenden CocoaPods
(was viele Leute tun).