Как при желании использовать функции iPhone OS 3.0 в приложении, совместимом с 2.0?

Я хотел бы использовать некоторые функции iPhone OS 3.0 в моем приложении 2.0, когда оно работает на устройстве 3.0. Я не хочу идти 3.0 полностью, потому что есть клиенты, которые еще не хотят обновлять.

Я немного поэкспериментировал со слабым связыванием MapKit.framework (-weak_framework MapKit). Я нашел это довольно громоздким, так как мне пришлось обмануть компилятор / компоновщик, чтобы использовать 2.0 SDK со всем кодом, кроме того, который использует MapKit.

Кто-нибудь еще опыт с этим? Что вы делаете, чтобы сделать его компиляцией / ссылкой. Кто-нибудь уже представил приложение в Apple, которое содержит слабые ссылки на платформы других версий ОС?

5 ответов

Решение

У Apple есть пример того, как это сделать, в частности, создание 2.x-совместимого приложения, которое использует MFMailComposeViewController....

http://developer.apple.com/iphone/library/samplecode/MailComposer/index.html

Ответ включает компиляцию с SDK 3.0, установку цели развертывания 2.x, гарантирование того, что платформы 3.0 помечены как "слабые" ссылки, и затем правильную работу, чтобы ваш код работал, если вы находитесь на устройстве, где новых рамок нет.

Вы всегда можете ссылаться на каркасы, которые не являются частью текущего SDK, используя функцию dlopen. Конечно, это не рекомендуется для платформ, которые не являются общедоступными (в данном случае не рекомендуется == запрещено в магазине приложений). Однако, поскольку новые платформы в неизданных версиях ОС становятся общедоступными, это вариант. Просто проверьте номер вашей версии и откройте доступные фреймворки. Полезно для отдельных функций, не так много, если вы интенсивно используете новые вещи.

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

Отличное руководство по слабым ссылкам (как библиотекам, так и фреймворкам) здесь:

http://developer.apple.com/mac/library/documentation/MacOSX/Conceptual/BPFrameworks/Concepts/WeakLinking.html

Хотя это немного устарело... с последним X-кодом процесс для слабого связывания всей инфраструктуры на самом деле проще:

  1. Щелкните правой кнопкой мыши цель и выберите Получить информацию
  2. Перейти на вкладку "Общие"
  3. В разделе связанных библиотек внизу измените Тип с обязательного на слабый для всех библиотек, для которых вы хотите использовать слабое соединение.
  4. прибыль

Я не думаю, что ты можешь. 3.0 и 2.x используют совершенно разные SDK и связываются с совершенно другим набором файлов и библиотек. Я не уверен, но я не думаю, что вы можете ссылаться на 3.0 SDK и при этом быть 2.X совместимым.

(пожалуйста, добавьте комментарий, если я ошибаюсь).

Другие вопросы по тегам