2011-01-02 4 views
1

Ich habe ein Xcode-Projekt mit einem Mac-Ziel und einem iOS-Ziel. Das Projekt enthält eine Klasse IPhoneOnlyClass, die nur im iOS-Ziel verwendet wird. Ich habe IPhoneOnlyClass.m vom Mac-Ziel deaktiviert, damit es diese Datei nicht kompiliert.Sagen Xcode, eine Überschrift für einige Ziele zu ignorieren?

Jetzt IphoneOnlyClass.h die Zeile enthält

#import <GameKit/GameKit.h> 

Als ich für den Mac Ziel bin kompilieren, Xcode gibt mir eine Fehlermeldung:

Fehler: GameKit/GameKit.h: Keine solche Datei oder ein Verzeichnis

Ich könnte das mit einem #ifdef umgehen, aber gibt es einen besseren Weg? Ich würde lieber Xcode sagen, den Header insgesamt zu ignorieren, wenn das Mac-Ziel kompiliert wird.

Antwort

2

Sie sollten die reinen iPhone-Klassenheader nicht zuerst in Ihre Mac-spezifischen oder Multi-Plattform-Quelldateien importieren.

Wenn dies unvermeidbar ist, müssen Sie ein Präprozessormakro wie TARGET_OS_MAC im Gegensatz zu TARGET_OS_IPHONE verwenden, um zu bestimmen, wann die Header für Ihre Nur-iPhone-Klassen importiert werden sollen.

Stellen Sie außerdem sicher, dass Sie der Compile Sources-Erstellungsphase Ihres Mac-Ziels nicht versehentlich nur iPhone-Klassen hinzugefügt haben.

+0

Die .m-Datei nicht in der Kompilierung Quellen Phase bauen ist. Wie kann ich Xcode mitteilen, dass er nicht auf die Kopfzeile schauen soll? Ich habe versehentlich die .m-Datei überprüft, um sie in einen früheren Build einzubeziehen, und habe sie dann deaktiviert. Könnte das das Problem verursachen? Andere Header, die .m-Dateien entsprechen, die ich nie in das Ziel eingegeben habe, haben nicht das gleiche Problem. –

+0

Das Problem war, dass eine meiner anderen .m-Dateien es importierte, und ich hatte es nicht bemerkt. –

0

Ich glaube nicht, dass #ifdef schlechte Lösung ist. Wenn Sie bei UIKit Header-Dateien sehen sehen Sie Apple eine Menge "#if" verwenden wie:

#if __IPHONE_4_0 <= __IPHONE_OS_VERSION_MAX_ALLOWED 

Und

#if TARGET_OS_MAC && !(TARGET_OS_EMBEDDED || TARGET_OS_IPHONE) 

(letzte Zeile wurde von NSObjCRuntime.h kopiert)

-1

müssen Sie das Framework zu Ihrem Xcode-Projekt hinzufügen.

Frameworks/Linked Frameworks, Add -> Existing Frameworks

für detaillierte Informationen, nur google add framework to xcode

Verwandte Themen