Могу ли я использовать символы iPhone 3.0 при сборке для 2.2.1? - PullRequest
2 голосов
/ 25 июня 2009

Я некоторое время работаю над приложением для iPhone и все еще хочу поддерживать 2.2.1

Одной из функций является то, что пользователь может запустить приложение по электронной почте, щелкнув ссылку. В мире 2.2.1 я достиг этого, реализовав приложение: handleOpenURL: message.

В iPhone 3.0 они изменили ситуацию, добавив приложение: didFinishLaunchingWithOptions: метод (который великолепен и имеет гораздо больше смысла, чем старый). В этом методе вы используете ключ UIApplicationLaunchOptionsURLKey, чтобы узнать, что это был за URL.

Проблема в том, что если я использую этот ключ, мое приложение не будет встроено в 2.2.1, так как оно было представлено в 3.0. Какой самый элегантный способ обойти это и по-прежнему поддерживать 2.2.1? Я думал об использовании фактического значения для перечисления UIApplicationLaunchOptionsURLKey, но я подумал, что это ужасно. Кто-нибудь сталкивался с этим и подумал о лучшем пути?

Ответы [ 6 ]

1 голос
/ 27 июня 2009

Используйте 3.0 SDK, но установите «Цель развертывания iPhone OS» на 2.2.1 или более раннюю.

В ОС 3.0 ваше приложение: didFinishLaunchingWithOptions: будет вызвано, а если вы работаете в OS 2.2.1, будет вызван один из старых методов.

Если вы не пытаетесь использовать какие-либо другие функции 3.0, я не думаю, что вам нужно делать что-то еще, но вы также можете посмотреть мой другой ответ о от Apple MailComposer образец.

1 голос
/ 25 июня 2009

Самый простой способ - определить код 3.0 и код 2.2.1, чтобы вы могли выполнять условную компиляцию. Примечание. Это означает, что у вас будет один двоичный файл для 3.0 и другой для другого.

так

#ifdef IPHONE_OS_3.0

/* DO 3.0 stuff */

#endif

#ifdef IPHONE_OS_2.2.1

/*DO 2.2.1 stuff */
#endif

В ответ на ваш комментарий вам потребуется отдельный #ifdef #endif для каждого блока кода, если код будет другим, в противном случае, если он отличается только для 3.0, вы должны сделать что-то вроде

#ifdef IPHONE_OS_3.0

/* DO 3.0 STUFF */

#else
/* DO STUFF FOR OTHER THAN 3.0 */
#endif

Вы должны выяснить, каковы реальные определения (я только что их придумал))

Надеюсь, это поможет

0 голосов
/ 29 июня 2009

Так что же делать, если вы хотите иметь один двоичный файл, который поддерживает несколько версий ОС? Я особенно застрял на том, как условно загрузить необходимые библиотеки для 3.0.

0 голосов
/ 25 июня 2009

Чтобы иметь одно приложение, которое работает на обеих версиях ОС, вы должны собрать его с использованием 2.2.1 SDK. А поскольку этот SDK не имеет представления о символе UIApplicationLaunchOptionsURLKey, у вас нет другого выбора, кроме как определить его в своем коде, если вы узнаете его значение, когда ваше приложение работает в OS 3.0.

С другой стороны, принятие OS 3.0 очень сильно (уже больше 75%, согласно одной из цифр, которую я видел), поэтому создание только OS 3.0 вашего приложения также является решением для рассмотрения.

0 голосов
/ 25 июня 2009
#ifdef __IPHONE_3_0
// iPhone 3.0 specific stuff
#else
// iPhone 2.2 (or below) specific stuff
#endif
0 голосов
/ 25 июня 2009

Существует вопрос о возможностях 3.0 в iPhone 2.0 с ОС . Но вы хотите знать (во время выполнения), есть ли символ в UIKit или где-либо еще. Боюсь, там пока нет ответа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...