Xcode: Was ist ein Ziel und ein Schema im Klartext?

Antworten:

309

Ich habe auch in Arbeitsbereich und Projekt hinzugefügt!

  • Arbeitsbereich - Enthält ein oder mehrere Projekte . Diese Projekte beziehen sich normalerweise aufeinander
  • Projekt - Enthält Code und Ressourcen usw. (Sie werden daran gewöhnt sein!)
  • Ziel - Jedes Projekt hat ein oder mehrere Ziele.
    • Jedes Ziel definiert eine Liste der Build-Einstellungen für dieses Projekt
    • Jedes Ziel definiert auch eine Liste von Klassen, Ressourcen, benutzerdefinierten Skripten usw., die beim Erstellen einbezogen / verwendet werden sollen.
    • Ziele werden normalerweise für verschiedene Verteilungen desselben Projekts verwendet.
      • Zum Beispiel hat mein Projekt zwei Ziele, einen "normalen" Build und einen "Office" -Build, der zusätzliche Testfunktionen bietet und möglicherweise mehrere Hintergrundmusik-Tracks und eine Schaltfläche zum Ändern des Tracks enthält (wie derzeit).
      • Sie sind es gewohnt, Ihrem Standardziel beim Hinzufügen Klassen und Ressourcen hinzuzufügen.
      • Sie können auswählen, welche Klassen / Ressourcen zu welchem ​​Ziel hinzugefügt werden.
        • In meinem Beispiel habe ich eine "DebugHandler" -Klasse, die meinem Office-Build hinzugefügt wird
      • Wenn Sie Tests hinzufügen, wird auch ein neues Ziel hinzugefügt.
  • Schema - Ein Schema definiert, was passiert, wenn Sie auf "Erstellen", "Testen", "Profil" usw. klicken.
    • Normalerweise hat jedes Ziel mindestens ein Schema
    • Sie können Schemata für Ihre Ziele automatisch erstellen, indem Sie zu Schema> Schemata verwalten gehen und auf "Schemata jetzt automatisch erstellen" klicken.
James Webster
quelle
Versuchen wir mal, ob ich es richtig verstanden habe ... Ich programmiere eine App und mache zwei Ziele. Eine, die ich in den App Store hochladen werde und eine, in der ich bereits die nächste Version derselben App entwickle. Und in Schemata mache ich zum Beispiel ein Schema in beiden auszuführenden Zielen und ein Schema zum Debuggen? Aber warum brauche ich dafür andere Schemata? Ich habe den Vorteil von BJ Homer nicht verstanden.
MichiZH
FWIW, ich verwende keine unterschiedlichen Schemata für Release und Debug, es sei denn, ich füge zusätzliche Debug-Funktionen hinzu, wie ich sie in meiner Antwort beschreibe.
James Webster
2
Hervorragende Erklärung, Bruder! ! !
Sagar Kalathil
6
Was meinst du damit, dass dein Bürogebäude unten einen Musikknopf hat? Verfügt Ihre eigentliche App über zusätzlichen Code, der nur im Office-Build aktiviert ist, oder wird die Musik auf Ihrem Mac ausgeführt? Entschuldigung, ich bin verwirrt
3366784
Diese Art definiert, welche Dinge jedes Konzept ausmachen, aber nicht den Zweck jedes Elements. Für mich war es das, wonach das OP gefragt hat.
O'Rooney
66

Ein Ziel ist ein Endprodukt, das durch Ausführen von "build" in Xcode erstellt wurde. Dies kann eine App, ein Framework, eine statische Bibliothek oder ein Unit-Test-Bundle sein. Was auch immer es ist, es entspricht im Allgemeinen einem einzelnen Element im Ordner "Gebaute Produkte".

Ein Schema stellt eine Sammlung von Zielen dar, mit denen Sie zusammenarbeiten. Es definiert, welche Ziele verwendet werden, wenn Sie verschiedene Aktionen in Xcode auswählen (Ausführen, Testen, Profil usw.). Oft haben Sie nur ein Schema, das das Hauptziel der App für die Aktionen Ausführen, Archivieren und Profil verwendet, und a Einheitentestziel für die Testaktion. Wenn Sie zwei verwandte Apps erstellt haben, haben Sie möglicherweise zwei Schemata, die dasselbe Unit-Test-Bundle, aber unterschiedliche App-Ziele verwenden.

Der Hauptvorteil von Schemata (eingeführt in Xcode 4) besteht darin, dass Sie zwischen dem Ausführen Ihrer App und Ihren Komponententests wechseln können, ohne das ausgewählte Ziel umschalten zu müssen.

BJ Homer
quelle
61

Ich bin eine visuelle Person, daher werde ich zur Erläuterung des Konzepts ein Diagramm verwenden.

Wenn Sie mehrere Ziele haben , können diese eins zu eins mit den Aktionen "Ausführen", "Testen" und "Profil" von Xcode abgeglichen werden. Dieses Konzept definiert ein Schema

Geben Sie hier die Bildbeschreibung ein

Ein Ziel ist eine Version Ihres Projekts , dh Ziele unterscheiden sich geringfügig in Klassen und Ressourcen, die während der Erstellungszeit verwendet werden sollen. Ein Projekt kann mehrere Zeiteinstellungen für separate Verteilungsanforderungen haben.

Abhinav Singh
quelle
7
Dieses Diagramm scheint falsch. Ein Schema sollte an ein bestimmtes Ziel gebunden sein. Ich sehe nicht, wo Sie innerhalb eines Schemas mehrere Ziele haben können.
Boon
6
@Boon Nein, sorglosChoosy ist richtig. Klicken Sie im Schema-Editor links auf das Element 'Build'. Klicken Sie im rechten Bereich auf '+' und Sie können diesem Schema weitere Ziele hinzufügen. Kreuzen Sie die gewünschten Kästchen an. Die ausführbaren Dateien dieser Ziele sind dann in den anderen Aktionen (Ausführen, Profil usw.) in der Dropdown-Liste der ausführbaren Dateien verfügbar.
Occulus
Dies ist gut, aber es fehlt der Build-Konfigurationsteil von Schemata. Ich stelle mir das Schema als eine Sammlung vor, wie Aktionen (Ausführen, Testen, Profil) mit einer Kombination von Zielen und Build-Konfigurationen (Debug, Release, QA, Prod usw.) übereinstimmen.
Steve Moser
3

Workspace( .xcworkspace) - ist ein Container mit mehreren projects. Es wurde als nächster Schritt von cross-project references[About] erstellt.

  • Workspaceenthält alles schemesvon enthaltenprojects
  • Workspacebehandelt alle implicit dependencies[About]

Beobachtungen:

  • Es ist sicher, mit verschiedenen Projekten innerhalb desselben zu arbeiten workspaceund nicht zu fangenCouldn't load Project.xcodeproj because it is already opened from another project or workspace
  • Cocoapods[Über] Arbeiten mitworkspacewo erstellt PodsProjekt

Project( .xcodeproj) - Es ist ein Container für targetsund scheme. Es definiert Codedateien, Ressourcen ...

Target- PBXNativeTargetAbschnitt. Definiert einen bestimmten Satz von Build-Einstellungen, die Folgendes generieren:

  • Application target
  • Library and framework targets
  • Test
  • Aggregate[Über] . ZB wird es verwendet, um einUniversal frameworkoderzu erstellenUmbrella framework

Scheme- eine Project'sKonfiguration für Aktionen in Xcode: Ausführen , Testen , Profilieren , Analysieren und Archivieren . Schemakann geteilt werden, was Ihnen in CI hilft, Carthage... und gefunden:

<project_path>/<project_name>.xcodeproj/xcshareddata/xcschemes

Dependency- Targetskann haben dependencies. Abhängigkeit ist ein Quelllink gegen. Diese Abhängigkeiten können statisch oder dynamisch verknüpft werden. [Info] Es gibt zwei Arten von ihnen:

  • Explicit Dependency[Info] - Quellcode der Abhängigkeit, die sich im selben Projekt oder im verschachtelten Projekt befindet
  • Implicit Dependency[Info] - Quellcode / geschlossener Code der Abhängigkeit, die sich in dem Projekt befindet, das Teil desselben Arbeitsbereichs ist.

[Wortschatz]

yoAlex5
quelle