2012-04-27 7 views
5

Ich bin ein wenig neugierig für iOS-Apps Entwicklung mit Xcode, obwohl wir ausdrücklich Zustand:Wie kommt es, dass Xcode nicht automatisch mit QuartzCore verknüpft, wenn das Projekt es verwendet?

#import <QuartzCore/QuartzCore.h> 

in unserer ViewController.h, wenn das Projekt verknüpft ist, die QuartzCore ist Bibliothek nicht automatisch verbunden. Warum das?

+0

+1 für Ihre Frage ... ich zu gleiches Problem auch nach Quartz Rahmen hinzufügen. Musste diese Syntax googlen ** # Import ** für lange. Würde es lieben, wenn Autocomplete-Funktion dafür da war. –

Antwort

11

Da das Importieren eines Headers in keiner Weise mit dem Verknüpfen mit einer Bibliothek verbunden ist.

Sie müssen QuartzCore Framework zu den Listenbibliotheken hinzufügen, mit denen Ihr Ziel verknüpft ist.

enter image description here

Warum Xcode tun das nicht automatisch?

Nun, die Header, die Sie importieren, sind tatsächlich Teil dieses Frameworks. Daher müsste Xcode alle Frameworks durchsuchen, ihre Header überprüfen und möglicherweise die verbundenen Bibliotheken automatisch verknüpfen. Dies ist sicherlich für Betriebssystem-bezogene Frameworks möglich, aber für benutzerdefinierte Frameworks nahezu unmöglich, solange Xcode seinen Standort nicht kennt. Manchmal tun Apps eigentlich nicht gegen eine Bibliothek verknüpfen wollen, nur weil sie verwenden z.B. eine Enumeration, die in einer Kopfzeile definiert ist.

2

Xcode fügt nicht automatisch andere Bibliotheken als die Basis 3 hinzu. Es braucht nicht viel, um nur zu verknüpfen. Vielleicht wird eine zukünftige Version erkennen, aber im Moment musst du zu Build-Phasen gehen und sie verlinken.

+1

ja, ist gegeben Xcode so automatisiert auch die automatische Vervollständigung alles, was Sie in Ihrem Projekt haben, nicht verknüpfen, selbst wenn es offensichtlich ist, dass Sie es brauchen, etwas seltsam ist ... aber vielleicht kann es nicht versehentlich zu viel verbindet, wenn wir zusätzliche haben ' # import 'dass wir eigentlich nicht benutzt haben –

+0

Offensichtlich ist relativ. Manche Leute mögen Quarz hassen oder nicht benutzen wollen (kleine Gruppe, ich weiß), aber das automatische Verknüpfen mit solch einem großen und grafikintensiven Framework ist vielleicht nicht das, was alle wollen, besonders wenn CG Quartz entschädigt. – CodaFi

2

Der Punkt ist, dass Xcode keine Möglichkeit hat zu wissen, dass Ihr Projekt eine Verbindung mit Quartz Core Framework herstellen sollte.

#import <QuartzCore/QuartzCore.h> ist nicht genug zu sagen, dass Sie Quartz Core Framework benötigen. Sie können Ihre eigene Bibliothek schreiben, die eine Header-Datei namens enthalten QuartzCore.h und setzt es unter einen Ordner mit dem Namen QuartzCore. Wenn es in Ihrem Suchpfad für Include-Dateien ist, ist es in Ordnung, es zu verwenden, es sei denn, Sie fügen auch das offizielle Quartz Core Framework in Ihr Projekt ein (was zu Konflikten führt).

Es gibt andere Beispiele. Wenn Sie einen Namespace in Visual Studio für ein .NET-Projekt importieren, fügt es keine Assembly automatisch zu "Referenz" Ihres Projekts hinzu. Das liegt daran, dass Sie eine Assembly eines Drittanbieters als Referenz hinzufügen können, die denselben Namespace hat. Sie können auch eine andere Version der offiziellen .NET Framework-Assembly hinzufügen.

+0

Tatsächlich liefern Sie diese OS-bezogenen Importe mit Größer/Kleiner als Zeichen, um sie als Nicht-Benutzer-Header zu identifizieren (die einfach mit Anführungszeichen markiert sind). – Till

+0

Im Allgemeinen haben Sie Recht.Es ist jedoch weiterhin möglich, einen zusätzlichen Include-Pfad an den Compiler zu übergeben, damit er bei der Verwendung von <> form nach Benutzerheadern sucht. Siehe http://stackoverflow.com/questions/1044360/import-usingangle-brackets-and-quote-marks. – Hailei

Verwandte Themen