Вопрос

Хорошо, я разрабатываю iPhone-Apps уже более года, но есть одна вещь, которая все еще действительно отстой.

Допустим, я хочу сделать свое приложение совместимым с iOS 3.0, я установил свой SDK в новейшую версию и установил свою цель развертывания на 3.0

Но что происходит, если вы случайно позвоните по функции, доступной только в ... 3.1.x или позже? Правильно, это просто рухнет.

Нет никаких предупреждений или индикаторов, сообщающих вам, что функция доступна только в последующей iOS-версии. А поскольку эмулятор не поддерживает версии <4.0, невозможно проверить, действительно ли приложение действительно работает. Вы даже не можете купить новое устройство, так как у них уже установлен новый iOS. И даже если у вас есть более старое устройство, иногда почти невозможно проверить каждую часть вашего кода.

И мне действительно нужно поддерживать более старые версии, так как я знаю, что мои клиенты (около 2/3) по -прежнему используют версии 3.x.

Нет ли какого-либо анализатора кода или что-то, что сканирует доступность всех функций, вызванных в приложении?

В одном случае приложение разбилось, потому что я позвонил

+ (id)sortDescriptorWithKey:(NSString *)key ascending:(BOOL)ascending

Какой метод удобства Alloc +

- (id)initWithKey:(NSString *)key ascending:(BOOL)ascending;

(Плюс это авторелировано), но SortDescriptorWithKey только доступен в 4.0 @_ @

Это было полезно?

Решение

Тот же вопрос здесь. Единственное, что я решил установить Base SDK проекта и цели до 3.0. Затем компилятор проверит, называете ли вы некоторые не существующие методы.

Но вопрос для сканера все еще существует, потому что вышеупомянутый метод бросает мне некоторые ошибки при использовании структуры ASI HTTP. Итак, моя процедура состоит в

  1. Измените SDK на 3.0
  2. Пройдите ошибки, которые лежат в основе моего собственного кода
  3. Измените методы, чтобы быть совместимыми 3.0
  4. установить проект Base SDK Вернуться к последнему SDK

Возможно, вам нужно установить SDK 3.0 из предыдущей версии XCode. И нет необходимости устанавливать цель Base SDK Вернуться к последней версии. Однажды я установил его на 3.0 и не получаю ошибок от ASI http.

// Изменить: Скачать ссылки для XCODE 3.2.1: Снежный барс а также Леопард

Другие советы

Попробуйте проверить, позвонив в ответ Stoselector

if([your_obj respondsToSelector:@selector(sortDescriptorWithKey:ascending:)]){
  // call sortDescriptorWithKey
}
else
{
  // call another method
}

Вы получите предупреждения при составлении, но не сбои во время выполнения.

Попробуйте использовать руководящие принципы, установленные в Руководство по фреймворме Apple/. Анкет Для функций, которые вы не можете спросить об объектах, как в ответе @Andriy.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top