2011-01-02 4 views
1

У меня есть проект Xcode с целью mac и целью iOS. Проект содержит класс IPhoneOnlyClass, который используется только в iOS-цели. Я отключил IPhoneOnlyClass.m от цели mac, поэтому он не компилирует этот файл.Сообщите Xcode игнорировать заголовок для некоторых целей?

Теперь IphoneOnlyClass.h содержит строку

#import <GameKit/GameKit.h> 

Когда я компиляции для целевой макинтош, Xcode дает мне ошибку:

ошибка: GameKit/GameKit.h: Нет такого файла или каталога

Я мог обойти это с помощью #ifdef, но есть ли лучший способ? Я бы предпочел, чтобы Xcode игнорировал заголовок вообще при компиляции цели mac.

ответ

2

Вы не должны импортировать заголовки заголовков только для iPhone в своих исходных файлах, специфичных для Mac или в нескольких платформах.

Если это неизбежно, вам нужно будет использовать макрос препроцессора, такой как TARGET_OS_MAC или TARGET_OS_IPHONE, чтобы определить, когда импортировать заголовки для ваших iPhone-только классов.

Кроме того, убедитесь, что вы случайно не добавили какие-либо классы только для iPhone на фазу сборки источников компиляции вашего целевого объекта Mac.

+0

Файл .m не в компиляцию источников строить фазы. Как сообщить Xcode, чтобы не смотреть на заголовок? Я случайно проверил файл .m для включения в предыдущую сборку, а затем отключил его. Может ли это вызвать проблему? Другие заголовки, соответствующие файлам .m, которые я никогда не помещал в цель, не имеют такой же проблемы. –

+0

Проблема заключалась в том, что один из моих других файлов .m импортировал его, и я не заметил. –

0

Не думаю, что #ifdef - это плохое решение. Если вы посмотрите на файлы заголовков UIKit вы увидите Apple, использовать много "#if", такие как:

#if __IPHONE_4_0 <= __IPHONE_OS_VERSION_MAX_ALLOWED 

И

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

(Последняя строка была скопирована с NSObjCRuntime.h)

-1

вам нужно добавить фреймворк в свой проект Xcode.

Frameworks/Linked Frameworks, Add -> Existing Frameworks

для получения более подробной информации, только Google add framework to xcode

Смежные вопросы