Это правильный способ создания универсального iOS-приложения? Xcode 4 - кажется, работает?

Вот как я сделал универсальное приложение из существующего проекта iPhone, создав ~ipad.xib(s) с использованием дубликатов, а затем добавив их обратно в резервную копию проекта и проверив универсальность.

Я использовал xcode 4.02 с базовым SDK 4.3.3 с целью развертывания 3.1.2.

  1. Сделайте резервную копию всего вашего проекта где-нибудь.
  2. Щелкните правой кнопкой мыши цель iPhone и выберите дубликат. Выберите дубликат для iPad, а не просто дубликат. Это создает новую папку с именем Resources-iPad с подпапкой под названием classs под ней, а под ней находятся копии всех xib-файлов всего проекта. (Самое смешное, что когда я смотрю на эти файлы в Finder, у них нет расширения .xib, хотя они показывают расширение в окне xcode — почему? Finder все равно говорит, что это xib-файлы.)
  3. В этот момент у меня было две цели. Это казалось неправильным, поэтому я пошел в поисковик и сделал резервную копию новой папки Resources-iPad, а затем удалил весь проект.
  4. Скопируйте исходный проект iPhone, резервную копию которого я создал на шаге 1.
  5. Добавлена ​​резервная копия папки «Ресурсы-iPad» и отредактированы так, чтобы они хорошо выглядели для iPad.
  6. Теперь у меня была одна цель, которая казалась хорошей, и я сделал ее универсальным устройством вместо iPhone в сводке целей.
  7. Однако при развертывании на симуляторе или устройстве у меня возникло непоследовательное поведение — иногда без видимой причины использовался неправильный xib.
  8. Это исправило - в xcode в папке Resources-iPad/classes переименуйте все xibs для ipad из mynibname.xib в mynibname~ipad.xib (тильда впереди и все строчные буквы)

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

iPad 2 с 4.3, iPod touch v1 с 3.1.2, iPod touch v4 (retina) с 4.1

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

О, у меня нет iPad 1, и я не могу проверить это устройство, но, похоже, оно не работает правильно в симуляторе iPad 3.2, но все другие устройства и симуляторы работают нормально.


person hoak    schedule 06.09.2011    source источник
comment
Лучший способ сделать это сейчас — сделать две раскадровки, одну для iPhone и одну для iPad.   -  person hoak    schedule 16.01.2013


Ответы (1)


Я видел, как многие люди используют 2 отдельных класса для каждого устройства. Почему? Не мог сказать вам!

Что я делаю, так это использую 1 класс как для iPad, так и для iPhone, только я использую макрос для определения текущего устройства:

Например

#define IDIOM           UI_USER_INTERFACE_IDIOM()
#define IPAD            UIUserInterfaceIdiomPad   

if (IDIOM == IPAD)
{
    /* do something specific for iPad. */
} else {
    /* do something specific for iPhone, like set up frames. */
}

Конечно, вам нужно будет создать версии ваших интерфейсов для iPad, но это самая простая часть.

Что касается идентификации его как универсального приложения, в настройках вашего проекта есть параметр, а также параметр Семейство целевого устройства в настройках сборки, для которого необходимо установить значение iPhone/iPad<. /сильный>.

Это почти все, что я делаю для создания универсальных приложений, и на это уходит гораздо меньше времени, чем на написание конкретных классов для каждого устройства!

person WrightsCS    schedule 06.09.2011
comment
Спасибо. Код, который у меня есть, кажется, в порядке - он просто работает и загружает новые перья без каких-либо других изменений. Как вы сказали, мне нужно убедиться, что установлено целевое семейство устройств. Думаю, я просто прекращу поддержку до iOS 4 и продолжу шоу, если никто не посчитает, что я сделал что-то не так. - person hoak; 07.09.2011
comment
Я думаю, что безопасно прекратить поддержку 3.x сейчас. - person WrightsCS; 07.09.2011