Ответ 1
У меня была аналогичная проблема: TARGET_OS_IPHONE
не задается при создании статической библиотеки. Моим решением было добавить "-DTARGET_OS_IPHONE
" в раздел "Other C Flags
" целевых вариантов сборки.
Почему этот код не работает при компиляции пакета ApplicationTests unit test?
#if TARGET_OS_IPHONE
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#else
#import <Cocoa/Cocoa.h>
#endif
Одна из моих зависимостей имеет эту проверку и компилируется в моих основных пакетах приложений, но она пытается загрузить <Cocoa/Cocoa.h>
при компиляции пакета ApplicationTests. Вероятно, это просто отсутствие понимания XCode, но я нервничаю, когда мои тестовые пакеты не строятся. Любые предложения?
У меня была аналогичная проблема: TARGET_OS_IPHONE
не задается при создании статической библиотеки. Моим решением было добавить "-DTARGET_OS_IPHONE
" в раздел "Other C Flags
" целевых вариантов сборки.
Вам нужно добавить
#import "TargetConditionals.h"
источник: http://opensource.apple.com/source/CarbonHeaders/CarbonHeaders-18.1/TargetConditionals.h
Самое простое решение - переместить оператор #import <Foundation/Foundation.h>
, если условие #if
и заменить Cocoa на AppKit следующим образом:
#import <Foundation/Foundation.h>
#if TARGET_OS_IPHONE
#import <UIKit/UIKit.h>
#else
#import <AppKit/AppKit.h>
#endif
Заголовок заголовка Foundation импортирует заголовок NSObjCRuntime, который, в свою очередь, импортирует заголовок TargetConditionals.
Он не налагает штраф за производительность, хотя это может повредить время компиляции. Тем не менее, это не проблема для Objective C. Однако это может действительно повредить при работе с классами С++.