2012-04-27 4 views
3

Почему __IPHONE_OS_VERSION_MIN_REQUIRED возвращает базовый SDK вместо цели развертывания?__IPHONE_OS_VERSION_MIN_REQUIRED не возвращает цель развертывания?

Я хочу использовать класс, который может работать только на iOS 4.3 и выше, но по-прежнему поддерживает 4.0 и выше. Для этого я утверждаю, что если попытаюсь использовать этот класс на устройствах с версией iOS ниже 4.3. Чтобы избежать утверждения, я избегаю кода внутри кода, проверяя наличие методов 4.3. Цель установки в настоящее время установлена ​​в 4.0.

Однако, поскольку утверждения будут выполняться только при запуске приложения на старом устройстве, я также хочу добавить предупреждение, если цель развертывания меньше 4.3. Я пытаюсь использовать __IPHONE_OS_VERSION_MIN_REQUIRED. Однако это как-то продолжает возвращать 50000 (базовый SDK) вместо чего-то ниже 43000, и я не могу понять, почему.

Код:

NSLog(@"Deployment target: %i", __IPHONE_OS_VERSION_MIN_REQUIRED); // Returns 50000 instead of 40000. 
#if __IPHONE_OS_VERSION_MIN_REQUIRED < 43000 
// Never gets here 
NSLog(@"%@", @"WARNING! NWMethodWrapper does not work on iOS versions below 4.3. If you insist on supporting older iOS versions, make sure you do not call NWMethodWrapper methods unless dlsym(RTLD_DEFAULT,\"imp_implementationWithBlock\") evaluates to true."); 
#endif 
NSAssert(dlsym(RTLD_DEFAULT,"imp_implementationWithBlock"), @"NWMethodWrapper uses methods that are only available from iOS 4.3 and later."); // Asserts, as appropriate (running on iOS 4.2.1). 

Edit: Моя цель развертывания уже установлена ​​на 4.0, поэтому я прошу этот вопрос.

ответ

3

Вы должны быть уверены, что класс, который ведет себя подобным образом, фактически является частью рассматриваемого проекта, а не частью другого проекта, к которому осуществляется доступ через рабочее пространство. Этот проект может быть настроен на собственные цели развертывания, которые не должны быть такими же, как тот, который вы ожидаете в основном проекте.

В моем случае цель развертывания для класса была установлена ​​в 5.0 (в отличие от моего основного проекта, который был установлен в 4.0), что означает, что __IPHONE_OS_VERSION_MIN_REQUIRED работает должным образом.

+0

Большое вам спасибо! Мы должны установить Development Target для проекта, который включает файл, который мне нужен! : D – VietHung

3

Если вы не указали __IPHONE_OS_VERSION_MIN_REQUIRED самостоятельно, то __IPHONE_OS_VERSION_MIN_REQUIRED в конечном итоге установлен компилятором (через макрос в «AvailabilityInternal.h»), чтобы соответствовать тому, что у вас установлена ​​минимальная версия для iphone OS, поэтому вам нужно убедиться ваша цель развертывания установлена ​​на что-то раньше, чем iOS 5.0.

+0

Цель развертывания установлена ​​в iOS4.0 в «Настройке сборки» проекта. Вот почему это так странно. Отредактировал мой вопрос, чтобы это понять. – SpacyRicochet

+1

Что произойдет, если вы определите '__IPHONE_OS_VERSION_MIN_REQUIRED'' '40000' самостоятельно? –

+0

Ах, понял. Доступ к классу осуществляется через другой проект в рабочей области, в котором установлен неверный целевой набор развертывания. Спасибо, в любом случае! – SpacyRicochet

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