TARGET_OS_IPHONE и ApplicationTests - PullRequest
       3

TARGET_OS_IPHONE и ApplicationTests

20 голосов
/ 18 сентября 2010

Почему этот код не работает при компиляции пакета модульного теста ApplicationTests?

#if TARGET_OS_IPHONE
   #import <Foundation/Foundation.h>
   #import <UIKit/UIKit.h>
#else
   #import <Cocoa/Cocoa.h>
#endif

Одна из моих зависимостей имеет эту проверку и прекрасно компилируется в моих основных пакетах приложений, но пытается загрузить1004 * при компиляции моего пакета ApplicationTests.Вероятно, это просто мое непонимание Xcode, но я нервничаю, когда мои тестовые пакеты не собираются.Есть предложения?

Ответы [ 4 ]

30 голосов
/ 22 июня 2012

Вам нужно добавить

#import "TargetConditionals.h" 

источник: https://opensource.apple.com/source/CarbonHeaders/CarbonHeaders-8A428/TargetConditionals.h.auto.html

14 голосов
/ 29 октября 2015

Самое простое решение - переместить оператор #import <Foundation/Foundation.h>, если условие #if, и заменить Какао на AppKit следующим образом:

#import <Foundation/Foundation.h>
#if TARGET_OS_IPHONE
   #import <UIKit/UIKit.h>
#else
   #import <AppKit/AppKit.h>
#endif

Заголовок базового зонда импортирует заголовок NSObjCRuntime, который, в свою очередь, импортируетзаголовок TargetConditionals.

13 голосов
/ 20 сентября 2010

У меня была похожая проблема: TARGET_OS_IPHONE не определяется при сборке статической библиотеки. Мое решение состояло в том, чтобы добавить «-DTARGET_OS_IPHONE» в раздел «Other C Flags» параметров целевой сборки.

0 голосов
/ 21 ноября 2013

Это не влечет за собой снижения производительности, хотя это может повредить время компиляции. Тем не менее, это не проблема для Objective C. Однако это может повредить при работе с классами C ++.

...