iPhone SDK2.0 на устройствах под управлением iPhone OS 3.0

Простите за длинный пост....

Я пытаюсь понять, является ли поведение моего приложения "нормальным". У меня есть приложение, разработанное для версии 2.0 sdk (т.е. чтобы убедиться, что максимальное количество устройств может запускать его, поскольку я не использую никаких «специальных» функций 3.0, я склонен думать, что наименьший знаменатель должен быть лучшим выбором).

Итак, в Xcode (последняя версия xcode) я удостоверяюсь, что все настроено на API 2.0, включая ссылки на фреймворк. Я собираю, и все отлично работает на устройстве 2.1 (оборудование - iPhone 1 поколения). Теперь я тестирую его на устройстве со старым оборудованием (iPod touch), но с последней версией программного обеспечения 3.0.

Вещь работает нормально, но в некоторых местах я наблюдаю другое поведение, например: 1) анимация панели инструментов не работает 2) вращение ведет себя по-другому (поворот устройства вправо показывает мой экран в зеркальном отображении .. :-) что "круто", но не желаемый

Теперь я уверен, что могу «взломать» и исправить эти проблемы, но что-то просто не имеет для меня смысла, и обычно я знаю, что не понимаю чего-то в полной мере,

ВОПРОС: разве любое устройство, на котором работает что-то, что было скомпилировано с версией 2.0, не должно вести себя точно так же, независимо от его текущей версии программного обеспечения / версии оборудования? Разве это не проблема обратной совместимости? Я ожидал, что устройство 3.0 с программным обеспечением 2.0 будет испытывать тот же поток, что и устройство 2.0 с программным обеспечением 2.0. Что мне не хватает? а где непонимание с моей стороны?

спасибо, -tzurs


person Tzur    schedule 30.06.2009    source источник
comment
Кстати. Если кто-то может прокомментировать, какие версии фреймворка они добавляют в мою ситуацию, я был бы благодарен. (то есть добавляете ли вы фреймворки с какого пути, 3.0 или 2.0) Я бы предположил 2.0, но я больше ничего не знаю ..   -  person Tzur    schedule 01.07.2009
comment
Вы всегда должны добавлять из базы, с которой пытаетесь скомпилировать. Самый простой способ - взять текущую структуру, щелкнуть правой кнопкой мыши и отобразить ее в поисковике, а затем перетащить другие, которые вы хотите использовать.   -  person Kendall Helmstetter Gelner    schedule 01.07.2009


Ответы (3)


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

Также возможно, что вы полагаетесь на ошибки, существующие в версии 2.0, и если вы сделаете что-то «правильным» способом, у вас не будет проблем с версии 2.0 до 3.0.

В частности, вокруг вращения, если вы используете shouldAutoRotate ... в качестве триггера, чтобы что-то сделать, обратите внимание на использование уведомлений о вращении.

person Kendall Helmstetter Gelner    schedule 30.06.2009
comment
Спасибо за ответ, на ваш вопрос, я не использую никаких известных ошибок или чего-либо нестандартного, мой код вращения на самом деле очень прост и отлично работает на обоих аппаратных средствах, кроме того факта, что на устройстве 3.0 вращение вправо показывает весь вид перевернутым. анимация, которую я использую в tabbarcontroller, также очень проста, но не работает в версии 3.0. в любом случае, все это не главное, что я ищу, это то, почему вообще должна быть разница !! Я думал, что 3.0 будет использовать точный код как 2.0. - person Tzur; 01.07.2009
comment
Описанные ниже рамки со временем существенно изменились. Я слышал от людей из Apple, что некоторые фреймворки будут немного корректировать поведение, если они увидят, что приложение скомпилировано для более ранней версии кода, но невозможно сделать огромную перезапись фреймворков и сделать их на 100% функционально эквивалентными для старых приложений. Вот и вся причина, по которой у Apple есть бета-версии, так что вы можете адаптироваться к вещам, которые больше не работают так же. - person Kendall Helmstetter Gelner; 01.07.2009
comment
У меня создалось впечатление, что они просто хранят версию соответствующих библиотек на новом устройстве. или что-то вроде того. Я никогда не беспокоился о том, как они это делают ... Я предположил, что это обещание ОС, что она каким-то образом запускает тот же самый код. моя плохая я думаю. - person Tzur; 01.07.2009

разве любое устройство, на котором работает что-то, что было скомпилировано с версией 2.0, не должно вести себя точно так же, независимо от его текущей версии программного обеспечения / версии оборудования? Разве это не проблема обратной совместимости?

Немного иронично, но в мире Microsoft это имело бы смысл. Однако мир Apple традиционно не придает большого значения обратной совместимости. Особенно, когда речь идет о поведении из-за ошибок в предыдущем выпуске или из-за использования вещей способами, для которых они изначально не предназначались.

person Eric Petroelje    schedule 30.06.2009
comment
Хм. Итак, вы говорите, что 3.0 не запускает точный код, когда его просят запустить функцию API 2.0? Это было бы на удивление неслыханным делом за те 20 лет, что я кодирую ... :-), но если вы это скажете, вы поймете, о чем говорите. Теперь я озадачен тем, что можно сделать для поддержки моего приложения в будущих версиях. следует ли мне смотреть в примечания к выпуску, скажем, 3.0, в которых говорится, что его реализация 2.0 нарушает совместимость с исходной версией 2.0? Возможно, вам известен такой документ? - person Tzur; 01.07.2009
comment
Почему это удивительно? Я кодил дольше вас, и так было всегда. Когда я делаю системный вызов в UNIX, вызываю ли я код 1970 года? Или я называю версию, которая, возможно, полностью изменилась внутри. Зачем еще вам были бы API, если бы код под ним не изменился? У вас есть API, чтобы он мог, когда выходят новые версии библиотеки, вы проводите тестирование совместимости, чтобы убедиться, что сделанные вами предположения по-прежнему верны. - person Kendall Helmstetter Gelner; 01.07.2009
comment
это хороший момент, возможно, я не правильно объяснил. если я вызываю метод api 1970 года, который складывает два числа и возвращает результат, я хочу продолжать вызывать его и возвращать тот же результат, даже когда я компилирую библиотеку, скомпилированную на прошлой неделе, и утверждает, что она поддерживает api 70-х годов ( старые добрые времена). Вся суть обратной совместимости заключается в том, что разработчикам и программным компаниям не нужно проверять с помощью бета-версий, что их код, фантастически написанный и работавший годами, теперь несовместим. новая ОС несовместима, не программное обеспечение .. - person Tzur; 01.07.2009
comment
Я бы даже пошел дальше, предположим, что я купил приложение для своего iPhone, когда он был 2.0, теперь я обновился (он сказал, что обратная компиляция), теперь приложение, которое я установил, больше не работает?! @! Мне нужно поговорить с компанией, у которой я купил его, и заставить их скомпилировать его для новой ОС? Для меня это не имеет смысла. мои 2 цента. - person Tzur; 01.07.2009
comment
Да, легко воспользоваться вызовом метода, который просто складывает два числа и всегда возвращает один и тот же результат. Но когда вы берете API, который взаимодействует со многими другими элементами системы, это невозможно - вам нужно будет иметь полную копию всей ОС для каждой ревизии навсегда, и, кроме того, гарантировать, что несколько запущенных версий в то же время с разными приложениями (скажем, ваше приложение и Почта, которая иногда работает в фоновом режиме) не будут мешать друг другу. - person Kendall Helmstetter Gelner; 01.07.2009
comment
Вы абсолютно правы. Я действительно не пытаюсь быть циничным, прежде чем вы, ребята, ответили, я был уверен, что просто делаю что-то не так. Теперь я понимаю, что просто ожидал чего-то другого от термина «обратно совместимый». Это просто не так. Теперь я понимаю, что мне нужно выяснить особенности того, что я делаю неправильно, что работает для 2.0 и нарушает работу для 3.0, выполняя тот же код. Хм. Я думаю. Я буду размышлять над этим. - person Tzur; 01.07.2009

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

person JoePasq    schedule 11.03.2010