Работа с устаревшими символами и методами при сборке для нескольких версий iOS

Я разработчик C ++, который переходит в мир iPhone, и мне бы очень хотелось получить помощь в чем-то.

Скажем, например, MPMoviePlayerController использовался для публикации MPMoviePlayerContentPreloadDidFinishNotification уведомления в iOS 3.1 и ранее.

Однако теперь это уведомление устарело.

Я хочу, чтобы мое приложение могло работать на каждом iPhone с iOS 3 и выше.

Если я разрабатываю с использованием base sdk 4.2, когда я устанавливаю свое приложение на iphone с iOS 3.2, что произойдет? Поставляется ли приложение со связанным с ним sdk (например, статической ссылкой mfc)?

Если я правильно понимаю, например, на iPhone с iOS 3.2 это уведомление все равно будет вызываться. (Если я вызываю функцию из более раннего SDK, при условии, что она не связана статически, как я просил выше).

Означает ли это, что если я сейчас пишу новое приложение, мне все равно придется позаботиться об этих устаревших уведомлениях?

Я не могу осмыслить это и был бы признателен за любое объяснение.

Спасибо


person Idan    schedule 10.12.2010    source источник


Ответы (1)


Если вы используете символ, который был включен в iOS 4.2 на устройстве под управлением версии 3.2, вы столкнетесь с ошибкой.

Способ обойти это - использовать новые символы условно в зависимости от того, доступны они во время выполнения или нет.

Eg.

if (&NewNotificationSymbol != NULL)
{
    // awesome, it's not NULL, we can use it
}
else
{
    // not so awesome, we'll use the old, deprecated one
    // but at least we won't crash
}

Тот же подход можно использовать для классов, которые являются новыми в 4.x, при запуске на 3.x:

if (NSClassFromString(@"MyAwesomeNewClass") != nil)
{
    // awesome, it's not NULL, we can use it
}
else
{
    // not so awesome, we'll use the old, deprecated one
    // but at least we won't crash
}

Как правило, вы всегда должны компилировать и связывать с последней версией iOS SDK, поставляемой с инструментами разработчика, а затем устанавливать для параметра сборки Deployment Target самую старую версию iOS, которую вы хотите поддерживать. Затем используйте эти условные выражения, чтобы использовать новые функции и изящно откатиться без сбоев, если они недоступны.

person Jasarien    schedule 10.12.2010
comment
Спасибо за ваш ответ, Ясарин, но все, что вы сказали, я уже знал, я хотел понять логику, лежащую ниже. - person Idan; 11.12.2010
comment
Если бы вы могли прочитать мой вопрос еще раз и уточнить, это было бы здорово. Спасибо! - person Idan; 11.12.2010
comment
Я не уверен, что полностью понимаю, о чем вы пытаетесь спросить. Что касается моего ответа, я думаю, он охватывает тот факт, что да, вам все еще нужно обрабатывать старые уведомления 3.x, а также новые уведомления 4.x, используя этот условный метод. - person Jasarien; 11.12.2010
comment
В качестве пояснения, системные структуры (такие как UIKit и MediaPlayer) связаны динамически, а не статически. - person Jasarien; 11.12.2010