Советы по портированию iPhone-приложений на iPad

Development for iOS
Буквально несколько дней назад мне пришлось портировать одно небольшое приложение с iPhone на iPad. В целом все прошло довольно безболезненно, но было несколько граблей, на которые я не преминул наступить. Поэтому хотелось бы представить несколько советов по упомянутому выше портированию. За основу взята эта небольшая статья, дополненная некоторыми моими собственными советами и замечаниями.

Совет первый: nib-файлы.


Последуйте совету Apple и начните портирование своего приложения с пункта меню «Upgrade Current Target for iPad ...», которое вы легко найдете в контекстном меню (правая клавиша мыши, если кто-то не в курсе) текущего таргета (Target) в XCode. Таким образом, все ваши nib-файлы пользовательского интерфейса будут продублированы в папке «Resources-iPad», а к имени каждого файла добавится постфикс «-iPad».

Следующим шагом будет обработка ваших новоиспеченных nib-файлов таким образом, чтобы они замечательно смотрелись на просторном XGA экране эппловского планшета. На этом этапе у вас есть, так сказать, две опции. Опция первая – открывать каждый nib-файл в «Interface Builder» и в меню «File» выбирать пункт «Create iPad Version». Лично я так и сделал и, в общем, достиг желаемого результата. Однако в интернетах рекомендуют еще один способ: в каждом из nib-ов выставлять атрибуты следующим образом:

Внимание на галочку Autoresize Subviews!


Здесь прошу обратить внимание на галочку «Autoresize Subviews», она, как понятно из названия, отвечает у данного конкретного элемента UI (View) за автоматическое изменение размеров всех своих дочерних элементов. Эта опция позволит изменять размер всей, так сказать, иерархии элементов всего лишь изменяя размер элемента (View) самого верхнего уровня.

Кроме того, рекомендуется тут же проверить настройки размера и расположения ваших вьюшек (View), так как, если до теперешнего момента вы ориентировались лишь на экраны размером 320x480, скорее всего эти настройки будут выставлены неправильно.

Не забудьте проверить размер и расположение своих вьюшек!


Совет второй: классы-контроллеры.


В ваших классах-контроллерах вам, вероятно, понадобится динамически изменять размер ваших элементов пользовательского интерфейса. Тут вам на помощь придет следующая конструкция условной компиляции:

#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_3_2
//Сюда помещаем код, специфичный для iPad
#else
//А сюда – для версий iPhone OS меньшей, чем 3.2
#endif


Кроме того, в SDK 3.2 появилась замечательное свойство в классе UIDevice – userInterfaceIdiom (типа UIUserInterfaceIdiom). Определение типа выглядит следующим образом:

typedef enum {
UIUserInterfaceIdiomPhone,
UIUserInterfaceIdiomPad,
} UIUserInterfaceIdiom;


Невооруженным глазом видно, что, проверяя значение этого свойства (property), можно легко узнать, следует ли нам использовать iPad- или iPhone-тип интерфейса на конкретном девайсе.

Совет третий: Targets.


В тех же интернетах рекомендуют заранее определиться, на каких девайсах предполагается работа вашего приложения: iPhone, iPad или же и на том, и на другом. Эту настройку можно явно указать в файле Info.plist, но рекомендуется сообщить компилятору о своем выборе менее явно, выбрав в свойствах проекта вкладку «Build» и пункт «Targeted Device Family».

В пункте «Base SDK» нужно указать «iPhone Device 3.2», даже если вы хотите поддерживать лишь iPad. Звучит, конечно, немного странно (iPhone-то до сих пор на 3.1.3), но это как раз тот пункт, который вам нужен. В любом случае, есть еще такая замечательная опция «iPhone OS Deployment Target», которая как раз и позволяет дифференцировать девайсы, на которых предполагается работа приложения: для поддержки только планшета iPad укажите версию ОС «3.2», а для поддержки iPhone и iPad – версию «3.1.3».

Совет четвертый: submit.


Как бы то ни было, почти наверняка вы столкнетесь с некоторыми типичными ошибками при попытке добавлении вашего приложения в AppStore. Вот они!

The binary you uploaded was invalid. The bundle did not contain an icon for iPhone and iPod of exactly 57x57 pixels, in .png format.

Как вариант – iTunes Connect может также вам сигнализировать о том, что у Вас нет иконки размером 72x72 специально для iPad. Дело в том, что теперь вы должны предоставлять обе иконки, для обоих типов девайсов. А так как XCode копирует все ресурсы бандла (bundle resources) в одно корневое, так сказать, «пространство имен», то имена этих двух ресурсов (иконки для iPhone и иконки для iPad) должны быть разными. Лично я рекомендую иконку для планшета назвать по аналогии с остальными ресурсами «icon-iPad.png». После этого в файле Info.plist вы должны указать имя файла бОльшей иконки, то есть в нашем случае «icon-iPad.png».

The binary you uploaded was invalid. The bundle identifier is already in use by a different software package.

Помните: даже если ваше портируемое с iPhone приложение предполагает работу лишь на планшетах iPad, вам следует поменять идентификатор пакета (bundle identifier), чтобы избежать конфликтов имен с текущим iPhone-приложением.

Кроме того, я встречал описание такой вот ошибки:

Your binary indicates support for iPhone/iPod touch. You must provide an iPhone/iPod touch screenshot.

Причем ошибка возникала также у тех, кто загружал приложение, помеченное как «iPad-only». Возможно, ответ кроется в том, что некорректно проверялась настройка «Target device» в файле Info.plist. Скорее всего, сейчас баг уже исправлен.

Совет пятый: скриншоты


Ну и конечно же не забудьте добавить скриншоты к новой версии своего приложения, поддерживающей планшеты Apple, об этом вам, в общем-то, сразу после успешной загрузки просигналит iTunes Connect. Помните, скриншоты нужно добавлять для каждой локализации!

Совет шестой: ориентация


Здесь, конечно, имеется в виду ориентация UI в зависимости от положения девайса — портретная и альбомная. Дело в том, что с выходом планшета Apple несколько ужесточила требования соответствия своим рекомендациям (iPad Human Interface Guidelines), и теперь, если вы, к примеру, пожелаете сделать обновление своего приложения, не позаботившись о его работе во всех возможных ориентациях, Apple настоятельно порекомендует вам добавить такую возможность.

Итоги


Что ж, надеюсь, все описанные выше советы сэкономят вам хоть немного времени. Удачного портирования!
Tags:iPadiPhonexcode tipsпортированиеappstore
Hubs: Development for iOS
+24
4.2k 43
Comments 16

Popular right now

Top of the last 24 hours