Ich entwickle eine iPhone App in Xcode 4.6.2, die nur ein Ziel hat, und ich habe bemerkt, dass einige wichtige Dateien nicht zu meinem Ziel gehören. Keine meiner benutzerdefinierten Header-Dateien sind Teil der Zielmitgliedschaft, noch ist meine Info.plist, mein Präfix-Header oder das Produkt "MyApp.app."
So wie ich Ziele verstehe, müssen diese Dateien sicherlich Mitglieder des Ziels sein.
Meine Frage ist: Warum sind diese Dateien nicht Mitglieder meines Ziels?
Nach der Suche auf SO haben ähnliche Fragen einige Einblicke geliefert, aber keine vollständige Antwort auf diese Frage. Die Einsicht, die ich gesammelt habe, ist:
Header-Dateien sind keine Mitglieder Ihres Ziels, da sie in der Build-Phase "Copy Headers" verlinkt werden.
Info.plist und Prefix.pch sind keine Mitglieder des Ziels, da Info.plist in der Buildphase "Bundle-Ressourcen kopieren" verknüpft wird und Info.plist einen Schlüssel / Wert-Eintrag enthält, der auf den Präfix-Header zeigt (Prefix.pch)
Headerdateien sind das, worauf andere Quelldateien verweisen, damit sie wissen, was die Schnittstelle für eine Klasse ist. Sie werden nicht als Teil der Binärdatei selbst benötigt, daher müssen sie nicht im Endprodukt enthalten sein.
Info.plist
ist ein Sonderfall, da es das Anwendungsbündel selbst definiert und daher separat verarbeitet wird.
Im Allgemeinen möchten Sie, dass Dateien Mitglieder Ihres Ziels sind, wenn sie:
.m
) Dateien oder Bibliotheken) oder Sie benötigen keine Dateien als Mitglieder Ihres Ziels, wenn sie nur als Teil des Build-Prozesses verwendet werden und nicht zur Laufzeit benötigt werden. Dies ist normalerweise jede Art von Headerdatei, einschließlich vorkompilierter Header ( .pch
).
Header müssen nur für ein Framework-Ziel kopiert werden, und nur, weil sie Teil der Framework-Version sind (sie ermöglichen Benutzern, zu wissen, wie das Framework verwendet wird). Apps benötigen keine Header, da sie als eigenständige Entitäten kompiliert werden. Die Header (und die PCH-Datei) werden während der Kompilierung verwendet, sind aber zur Laufzeit nicht erforderlich.
Die info.plist wird anders behandelt. Es kann normalerweise nicht einfach kopiert werden, da es im Projekt normalerweise nicht "Info.plist" heißt. Es ist auch zwingend erforderlich, dass die Datei in der App existiert, so dass Xcode Ihnen nicht die Möglichkeit bietet, sie nicht einzubeziehen.