#ifdef #else #endif выбрать версию и функцию SDK для iOS?

Я создаю приложение для iOS 6 и 7 с темной тематикой. Я понимаю, что могу вызвать [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];, чтобы строка состояния iOS 7 соответствовала приложению с темной цветовой темой.

Проблема в том, что я собираюсь отправить свое приложение в App Store, и в настоящее время Xcode 5 не готов к этому, поэтому для выполнения этой задачи мне нужно использовать Xcode 4.6.x. Однако с Xcode 4.6 я не могу скомпилировать новый метод из iOS 7. Думаю, мне нужно сделать что-то вроде «if ios7», затем выполнить [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; и изменить положение окна приложения.

Я пытаюсь сделать это с помощью #ifdef... #else... этот код [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]; внутри viewDidLoad.

Может ли кто-нибудь помочь понять, как использовать #ifdef... с методом в некоторых функциях.

Большое спасибо!!!!


person HYC    schedule 23.08.2013    source источник
comment
Я только что ответил на это здесь: stackoverflow.com /вопросы/18404746/   -  person rmaddy    schedule 23.08.2013
comment
Я просто решаю свою проблему. Спасибо   -  person HYC    schedule 23.08.2013
comment
Мой друг, Apple не примет любую сборку, сделанную версией xcode ниже 5. Поэтому попробуйте использовать xcode 5 и более поздние версии.   -  person Abdul Yasin    schedule 19.02.2014


Ответы (2)


Хотя я не уверен на 100%, что смогу полностью ответить на этот вопрос, не нарушая NDA, я сделаю все возможное, чтобы указать вам правильное направление.

Вам нужно использовать __IPHONE_* #define в Availability.h

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_6_0
  // iOS 6+ code here
#else
  // Pre iOS 6 code here
#endif

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

Вы можете легко получить доступ к Availability.h, используя Open Quickly и введя Availability.

person Steve Wilford    schedule 23.08.2013
comment
В вашем ответе нет ничего, на что распространяется NDA. Почему ты так думаешь? Охвачены только специфичные для iOS 7 API. - person rmaddy; 23.08.2013
comment
Наверняка содержимое Availability.h, поставляемое в iOS 7 SDK, подпадает под действие соглашения о неразглашении? Независимо от этого, этот ответ можно легко адаптировать для iOS 7, даже не просматривая заголовочный файл. Я поставил +1 и проголосовал за ваш другой ответ :) - person Steve Wilford; 23.08.2013

взгляните на responsesToSelector

 [delegate respondsToSelector:@selector(myMethod:)]
person p1ckl3    schedule 23.08.2013
comment
Это не помогает. Компилятор по-прежнему будет жаловаться на строку, которая фактически вызывает метод. - person rmaddy; 23.08.2013
comment
Нет, если приемник имеет тип id или вы используете performSelector:withObject:. В любом случае, метод #if выше, вероятно, более аккуратный. - person jbg; 13.07.2014