2009-12-01 2 views
13

Есть ли способ, который я могу условно скомпилировать в своем приложении, основываясь на том, строю ли я для симулятора или устройства? (Мое приложение подключается к внешнему серверу: если я запущен на устройстве, я хочу подключиться к localhost, если я запущен на устройстве, я хочу перейти на свой производственный сервер.)Обнаруживать в проекте iPhone Xcode, создаю ли я для симулятора или устройства?

I ' m ищет некоторую переменную #ifdef, которую я могу обнаружить, или даже что-то во время выполнения ... не имеет значения.

Спасибо.

ответ

18
#if !(TARGET_IPHONE_SIMULATOR) 

или, в качестве альтернативы,

#if (TARGET_OS_IPHONE) 

сообщит вам, если вы работаете на устройстве. Для того, чтобы работать, вы должны

#include "TargetConditionals.h"

файл, который вы можете найти here.

+0

... Спасибо, что, кажется, работает. Любой способ узнать, что еще определено в «TargetConditionals.h»? Я не могу найти файл в любом месте ... –

+2

Исправление ... ваш второй пример (TARGET_OS_IPHONE) всегда преуспевает, если, конечно, вы занимаетесь разработкой iPhone. Ваш первый пример TARGET_IPHONE_SIMULATOR - это то, что я ищу, и это удастся, только если вы работаете на симуляторе (по сравнению с устройством). –

+0

Отредактировано ссылкой на файл. – luvieere

1

Я создал макрос, в котором вы можете указать, какие действия вы хотите выполнять в круглых скобках, и эти действия будут выполняться только в том случае, если имитируется устройство.

#define SIM(x) if ([[[UIDevice currentDevice].model lowercaseString] rangeOfString:@"simulator"].location != NSNotFound){x;} 

Это используется так:

SIM(NSLog(@"This will only be logged if the device is simulated")); 

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

  • Нет связанных вопросов^_^