2009-08-14 2 views
2

В настоящее время у меня есть приложение в App Store, которое было построено с версией 2.2.1, то есть где базовый SDK и цель развертывания были установлены в 2.2.1. Это приложение работает нормально. С тех пор я обновил мою версию XCode до 3.1.3, и я работаю над обновлением для своего приложения с базовым SDK, установленным в 3.0, и Target Deployment Target, установленным в 2.2.1. Это отлично работает на моем тестовом устройстве iPhone, на котором установлена ​​ОС 3.0. Проблема в том, что у меня нет устройства для тестирования на 2.2.1, поэтому я использую Simulator, и некоторые элементы пользовательского интерфейса не отображаются (в основном изображения) с моей текущей сборкой. Странная часть заключается в том, что, когда я тестирую старую версию своего приложения, которая уже находится в App Store с текущей версией XCode на симуляторе, я получаю ту же самую проблему с исчезновением пользовательского интерфейса. Как может одна и та же сборка иметь разные результаты? Что-то изменилось в XCode? Что тут происходит?Пребывание в обратном направлении совместимо с iPhone OS 2.2.1

Спасибо!

+0

Я начинаю думать, что это может быть какая-то ошибка на стороне Apple. Когда я беру код, который использовался для создания сборки, которую я отправил в Apple (которая была построена на версии 2.2.1), и запускать на ней мое устройство 3.0, оно не работает (я получаю ошибки пользовательского интерфейса). Но тот же сборник, который я загрузил из App Store, отлично работает. Что-то здесь не так ... –

ответ

2

Некоторые методы были устаревшими в изменении 2.2.1-> 3.0, включая несколько методов пользовательского интерфейса (UITableViewCell's initWithStyle: приходит на ум довольно легко). Я бы проверял, чтобы все ваши вызовы на объекты UI были совместимы с 3.0, особенно в областях, которые создают или отображают ваши исчезающие объекты.

+0

Да, я использую устаревшие методы и свойства, такие как свойство «образ» UITableViewCell, и это те элементы, которые не отображаются. Но каков обходной путь? Новые методы и свойства поддерживаются только в ОС 3.0. Любой, почему устаревшие методы не будут работать в более старой версии ОС и все еще работают на более новой? –

+0

Есть несколько вещей, которые вы можете попробовать. Сначала измените базовый SDK на 2.2.1. Устаревший метод в 3.0 должен по-прежнему работать, если программа создается для более старой ОС. Если это не сработает, вы можете начать экспериментировать с '# ifdef' в ваших исходных файлах, чтобы запустить соответствующий код для каждой ОС; символ препроцессора '__IPHONE_3_0' определяется в системах с 3.0 + и не находится ни на что <= 2.2.1. – Tim

+0

Базовый SDK в старой версии уже был установлен в 2.2.1, и это версия, которая не работает. Я дважды проверил, что симулятор работает на 2.2.1.Построение, которое я использую, является тем, которое я пометил в Subversion и отправил в Apple, поэтому проблем не должно быть. –

3

2.2.1 приложение, не работающее на iPhone Simulator: Проверьте аппаратную версию симулятора из меню «Оборудование»> «Версия», когда приложение запущено. Хотя это не совсем та же проблема, есть проблемы, связанные с автоматическим выбором правильной версии Simulator. See question#388298 и a related article (see Open Questions). Если он не установлен в 2.2.1, единственным вариантом может быть его установка вручную и запуск приложения без отладчика.

Вспомогательная совместимость в обратном направлении вообще: Here приятно писать об этом. Вы должны проверить версии на runtime, а не на компилировать время, потому что последний не учитывает обратный совместимый код из двоичного кода. Кроме того, не забудьте указать слабую ссылку любых 3.0 только фреймворков, таких как MapKit и GameKit. The article above показывает, как это сделать.

Примечание: вы можете проверить устаревшее имущество с помощью respondsToSelector:. Это немного громоздким, но получать и устанавливать свойство является только синтаксисом, так:

cell.image; 
cell.image = anImage; 
// corresponds to 
if ([cell respondsToSelector:@selector(image)]) { 
    [cell image]; 
    [cell setImage:anImage]; 
} 

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

+0

Спасибо за ссылки, но у меня все еще такая же проблема. Когда я запустил старую версию приложения, я подтвердил, что в Simulator запущена версия 2.2.1, и значки до сих пор не отображаются. Я не использую ни один из 3,0-библиотек (просто Foundation, UIKit, CoreGraphics и sqlite). Я не удивлюсь, если версия 3.0 не работает, но я не могу понять, почему тот же код, что и в App Store, больше не работает на 2.2.1. –

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

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