Как я должен приблизиться к созданию Универсального приложения для iOS, которое будет включать iOS 4 функции, даже при том, что iPad еще не выполняет iOS 4?

Я хотел бы, создают игру и для iPhone и для iPad. По сути, имело бы смысл запускать этот проект с нуля как универсальное приложение. Однако iPhone и iPad в настоящее время выполняют две различных версии iOS, так как iOS 4 еще не доступен для iPad. Существует две iOS 4 функции (GameCenter и iAd), что я хотел бы поддерживать в своей игре.

  1. В этом случае действительно ли это - плохая идея создать этот проект как универсальное приложение?
  2. В противном случае, каковы некоторые мысли, которые я должен учесть, поскольку я создаю универсальное приложение, которое поддерживает две различных версии iOS?
  3. Действительно ли несколько безопасно держать пари на Apple, выпускающей iOS 4 для iPad в падении, как размышлял?
  4. Если так, есть ли так или иначе, я могу начать создавать их iOS 4 функции (GameCenter и iAd) в мою версию iPad моей игры?

Большое спасибо заранее для всей Вашей мудрости!

Править: Я понимаю, что эта проблема включает риски управления. Я знаю о рисках, но я больше интересуюсь любыми техническими конструктивными соображениями, связанными с созданием универсального приложения, когда iOS фрагментируется среди различных устройств на iOS.

11
задан BeachRunnerFred 23 July 2010 в 17:07
поделиться

4 ответа

Если вы собираетесь создать универсальное приложение, просто запомните следующие два фрагмента исходного кода:

  • Использование классов, только если они доступны на текущем устройстве

    Рассмотрим этот фрагмент кода:

     UILocalNotification * n = [[UILocalNotification alloc] инициализация];
    

    При создании универсального приложения этот код приведет к ошибке времени выполнения на любом устройстве с версией iOS, которое не знает о классе UILocalNotification.

    Вы по-прежнему можете поддерживать UILocalNotification в своем коде, сохраняя при этом обратную совместимость, используя следующий фрагмент кода:

     Class notificationClass = NSClassFromString (@ "UILocalNotification");
    if (notificationClass) {
    UILocalNotification * n = [[выделение класса уведомления] инициализация];
    }
    

    Этот метод позволяет использовать классы, которые недоступны в определенных версиях ОС, на устройствах, которые поддерживают эти классы.

  • Использование методов, только если они доступны на текущем устройстве

    Предположим, вы хотите сделать следующее:

      [[Совместное приложение UIApplication] scheduleLocalNotification: n];
    

    Используйте следующий фрагмент кода для условного вызова метода, если он доступен на текущем устройстве:

     if ([UIApplication instanceRespondToSelector: @selector (scheduleLocalNotification :)]) {
     [[UIApplication sharedApplication] scheduleLocalNotification: n];
    }
    

Эти два метода, вероятно, единственное, что вам нужно знать для создания универсального приложения. Условно выполните свой код в зависимости от возможностей устройства, и все будет в порядке.

Тем не менее, вы все равно должны учитывать, что iPad, вероятно, будет использовать другой пользовательский интерфейс, чем ваш аналог на iPhone. И, к сожалению, вы не сможете протестировать пользовательский интерфейс iPad с функциями iOS 4, пока они не станут доступны на iPad. Но это не должно быть большой проблемой: если вы используете [[UIDevice currentDevice] userInterfaceIdiom] , чтобы проверить, работаете ли вы на iPad, вы можете предотвратить выполнение универсальным приложением кода, имеющего интерфейса для iPad пока нет. После того, как Apple выпустит iOS 4 для iPad, вы можете реализовать пользовательский интерфейс, удалить эту проверку и выпустить обновление в магазин.

16
ответ дан 3 December 2019 в 02:51
поделиться

В основном вам нужно сделать две вещи:

  1. Слабое связывание любых фреймворков, которых нет в 3.2 SDK.
  2. Напишите тесты времени выполнения для любых API, которые являются новыми для iOS 4.

Чтобы сделать первое, щелкните правой кнопкой мыши цель и выберите «Получить информацию». Фреймворки перечислены в инспекторе (на вкладке «Общие») с раскрывающимся списком рядом с ними, в котором можно выбрать «Слабое» связывание. Это гарантирует, что приложение по-прежнему будет работать, если фреймворк отсутствует.

Чтобы сделать второе, вы можете сделать что-то вроде следующего, чтобы проверить новую блочную анимацию в iOS 4:

if ([UIView respondsToSelector:@selector(animateWithDuration:animations:)]) {
    // Your awesome animation code here
} else {
    // Your almost-as-awesome, non-block-based animation code here.
}

Используя интроспективные методы, такие как -respondsToSelector: , вы можете избежать вызов чего-то, что текущая операционная система не поддерживает.

Обратите внимание, что если вы хотите поддерживать iPhone OS 3.0, должны применяться те же правила.

Наконец, также возможно - хотя и не рекомендуется - поступать так:

#ifdef __IPHONE_4_0
    // Your iOS 4.0-compatible code here
#elif defined(__IPHONE_3_2)
    // Your iPhone OS 3.2-compatible code here
#elif defined(__IPHONE_3_0)
    // Your iPhone OS 3.0-compatible code here
#endif

Почему это не рекомендуется? Просто: будет скомпилирован только код версии iOS с наивысшим номером . Приложения для iPhone не компилируются отдельно для разных версий iOS, поэтому, чтобы заставить работать , вам придется выпустить несколько версий приложения.

11
ответ дан 3 December 2019 в 02:51
поделиться
2
ответ дан 3 December 2019 в 02:51
поделиться

В этом вопросе речь идет об управлении рисками. Риски включают:

  1. Apple не выпустит ожидаемую "унифицированную 4.1" ОС в течение в нужные вам сроки
  2. ОС будет выпущена вовремя для ваших но один или оба из GameCenter или iAds не включены
  3. GameCenter и/или iAds включены, но они не соответствуют точному API которые вы ожидали
  4. API соответствуют вашим ожиданиям, но но в них есть ошибки, так как это первая версия на iPad
  5. и т.д...

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

1
ответ дан 3 December 2019 в 02:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: