Я хотел бы, создают игру и для iPhone и для iPad. По сути, имело бы смысл запускать этот проект с нуля как универсальное приложение. Однако iPhone и iPad в настоящее время выполняют две различных версии iOS, так как iOS 4 еще не доступен для iPad. Существует две iOS 4 функции (GameCenter и iAd), что я хотел бы поддерживать в своей игре.
Большое спасибо заранее для всей Вашей мудрости!
Править: Я понимаю, что эта проблема включает риски управления. Я знаю о рисках, но я больше интересуюсь любыми техническими конструктивными соображениями, связанными с созданием универсального приложения, когда iOS фрагментируется среди различных устройств на iOS.
Если вы собираетесь создать универсальное приложение, просто запомните следующие два фрагмента исходного кода:
Использование классов, только если они доступны на текущем устройстве
Рассмотрим этот фрагмент кода:
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, вы можете реализовать пользовательский интерфейс, удалить эту проверку и выпустить обновление в магазин.
В основном вам нужно сделать две вещи:
Чтобы сделать первое, щелкните правой кнопкой мыши цель и выберите «Получить информацию». Фреймворки перечислены в инспекторе (на вкладке «Общие») с раскрывающимся списком рядом с ними, в котором можно выбрать «Слабое» связывание. Это гарантирует, что приложение по-прежнему будет работать, если фреймворк отсутствует.
Чтобы сделать второе, вы можете сделать что-то вроде следующего, чтобы проверить новую блочную анимацию в 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, поэтому, чтобы заставить работать , вам придется выпустить несколько версий приложения.
Хороший пост на эту тему: http://cocoawithlove.com/2010/07/tips-tricks-for-conditional-ios3-ios32.html
В этом вопросе речь идет об управлении рисками. Риски включают:
Только вы можете определить, какой уровень каждого риска вас устраивает, насколько вероятным вы считаете каждый риск, можете ли вы смягчить каждый риск, и каковы будут затраты в случае возникновения проблем на этом пути.