Скажите Xcode игнорировать заголовок для некоторых целей? - PullRequest
1 голос
/ 03 января 2011

У меня есть проект Xcode с целью Mac и целью iOS. Проект содержит класс IPhoneOnlyClass, который используется только в цели iOS. Я снял флажок IPhoneOnlyClass.m из цели Mac, поэтому он не компилирует этот файл.

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

#import <GameKit/GameKit.h>

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

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

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

Ответы [ 3 ]

3 голосов
/ 03 января 2011

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

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

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

0 голосов
/ 03 января 2011

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

Frameworks / Linked Frameworks, Add -> Existing Frameworks

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

0 голосов
/ 03 января 2011

Я не думаю, что #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)

...