Введение в создание универсальных приложений для iOS

22 апреля 2011 г.

Введение в создание универсальных приложений для iOS

Вступление

С появлением iPad, iPhone SDK 3.2 стал поддерживать разработку приложений трех типов: iPad, iPhone и универсальные.

iPhone – приложения. iPhone – приложения оптимизированы для работы на iPhone и iPod touch. Эти приложения запускаются на iPad в своем оригинальном разрешении или могут быть опционально подогнаны под большой дисплей удвоением пикселей.
iPad – приложения. iPhone SDK 3.2 поддерживает разработку iPad приложений, которые оптимизированы что бы задействовать все преимущества данного устройства, но запускаются только на нем.
Универсальные приложения. iPhone SDK 3.2 поддерживает разработку универсальных приложений. Универсальные приложения оптимизируются для запуска на всех iOS дивайсах. Это по существу приложение и под iPhone и под iPhone скомпилированное в один исполняемый файл.
Универсальные приложения могут определять на каком устройстве они запущенны и предоставлять лучшее что есть в этом дивайсе.
Хорошо разработанные Universal приложения усиливают уникальные аппаратные средства устройства, обеспечивают правильный выбор элементов пользовательского интерфейса, и используют только функциональность, которая поддерживается этим устройством.
Apple рекомендует, чтобы iOS разработчики разрабатывали свои приложения как Universal. Создание Universal приложений облегчает жизнь всем. Это, легче для разработчиков, потому что только одним приложением необходимо управлять на App Store. Это легче для пользователей, потому что они будут знать, что приложение запустится на любом устройстве, которое они имеют.

Проектирование Universal App

Думаете ли вы об оптимизации существующего iPhone приложения или о создании нового под iPad, вы должны воспользоваться возможностью проектирования вашего приложения как Universal.
В проектировании Universal приложений для iOS важным является то, как интерфейс пользователя, будет отделен от базового кода приложения. Классы iPhone SDK и API предоставляют модульную структуру, которая предоставляет полное разделение данных вашего приложения и его логики от элементов представления информации.
Первым шагом в создании Universal приложений является проектирование интерфейса для каждого из устройств – один для iPhone/iPod-touch другой для iPad. На большую часть вашего проекта будут влиять функции, которые вы пожелаете представить в каждом из устройств. Ниже приведены примеры того, о чем стоит думать при отделении дизайна iPad от iPhone/iPod touch.

ОриентацияИспользование акселерометра позволяет приложению определить текущею ориентацию iOS устройства. С этой информацией у приложения появляется возможность оптимизироваться так, что бы было удобно пользователю, используя альтернативную разметку. Это поддерживается некоторыми iPhone приложениями. Хотя поддержка множественной ориентации для iPhone не всегда желаема, очень важно что бы приложение под iPad ее поддерживало.
РазметкаИспользуйте большой экран iPad что бы дать людям доступ к большему числу информации в одном месте, что бы сфокусировать внимание на требуемом контенте, чтобы сгладить иерархию экранов в вашем приложении, радикально уменьшить полноэкранные переходы, и добавить реализма, физики и ошеломляющей графики к вашему интерфейсу.
ЖестыБольший размер экрана iPad делает возможным использование широкого разнообразия жестов. Например, это полагает, что пользователь мог выполнить жест с четырьмя пальцами на iPad, но не будет, вероятно, считать это легким на iPod или iPhone. Хорошо разработанное Universal приложение, обеспечит различные способы ввода.
Split viewsSplit view – уникальная возможность iPad, которая предоставляет приложениям новый способ для предоставления информации бок о бок. Важно тщательно изучить, как использовать этот инструмент, оставляя тем не менее возможность доступа к той же информации если приложение запущенно на iPhone или iPod touch
PopoversПохож на Split view, предоставляет новый способ доступа к настройкам приложения.
ЖелезоiPad, iPhone и iPod touch имеют почти одинаково функционирующее железо. Если вы используете функционал, который не поддерживается железом другого устройства, вы должны гарантировать, что этот недостаток будет обработан должным образом на другом устройстве. Например приложения запущенные на iPod не могут использовать камеру, но можно было бы предоставить им возможность выбирать изображения из библиотеки изображений.
Условное кодирование

Во время проектирования Universal приложений, вам будет необходимо использовать условное кодирование, что бы определить доступность функции во время работы приложения. Условное кодирование позволяет быть уверенным, что вы загружаете правильные ресурсы, что используете поддерживаемый функционал и должным образом усиливаете возможности железа. Помните, что принимать решения в условном коде нужно на как можно низком уровне. Старайтесь избегать гипотез базирующихся на типе устройства или версии ОС. Принятие кодом решений на самом низком из возможных уровней, позволит вашим приложениям автоматически использовать новый функционал когда выйдет очередное обновление OS. Ваше приложение будет сразу использовать новые возможности, без необходимости обновления.
Для следующих возможностей требуется условный код:

РесурсыNib-файлы. В коде необходимо определять на какой платформе вы запускаетесь и загружать подходящие ресурсы для каждой. Нпример, что бы гарантировать правильное представление интерфейса, вам может потребоваться два nib-файла: один для iPhone другой для iPad интерфейса. Вашему коду будет необходимо проверить на каком устройстве произошел запуск и затем выбрать подходящий nib-файл.

Графика. Вы возможно захотите загружать различные ресурсы для каждого устройства. Например, для iPad графика может быть больше чем для iPhone.
КлассыНекоторые классы Cocoa Touch поддерживаются только на определенном устройстве. Перед его использованием необходимо проверить его доступность.
Например, iOS 3.2 позволяет совместное использование документов. Эта функция поддерживается только на iPad. Ваш код должен будет проверить существование класса UIDocumentInteractionController, используя метод NSClassFromString(), который возвращает необходимый класс если он существует и nil в противном случае. Если класс существует, то ваше приложение сможет его испоользовать, если же нет, то вам придется искать обходные пути для обеспечения корректной работы устройства без поддержки использования документов совместно.
Методы и функцииНекоторые устройства поддерживают различные методы и функции. Если Вы используете функции на одном устройстве, которые не существуют на другом, вам необходима weak-link к функции и выполнить проверку во время выполнения программы, перед вызовом метода. Базовый класс для всех объектов Cocoa, NSObject, имеет встроенную поддержку возможности вызова метода во время выполнения программы. Методы instancesRespondToSelector и respondsToSelector позволят вам определить, имеет ли объект или его подкласс требуемый метод на данном устройстве.
Например, если вы хотите найти NSString используя регулярные выражения, вы должны были бы проверить NSString на поддержку NSRegularExpressionSearch. Если поддержка есть, то вы начнете поиск в NSString. Если результат NO, вы должны пойти по другой ветке кода, так как вы делели на iPhone до iPad.
Новый API существующих ФреймворковНовые API добавляются к Фреймворкам подобным способом.
Совместимость с железомИногда бывает необходимо определить, поддерживается ли текуще железо. Вы можете использова тот же способ что и при определении доступности метода или функции. Например, если вы попытались определить имеет ли устройство камеру, вы бы запросили UIImagePickerControllerSourceTypeCamera из UIImagePickerController, и сделали бы некоторые заключения в случае ответа NO.

Создание Universal-приложений вознаградит Ваших клиентов большим опытом независимо от того, на каком устройстве они запускают Ваше приложение, и сделает управление Вашими приложениями на App Store более простым. Проект хорошо, запишите хороший условный код, и создайте большие приложения!

Теги: рубрика Интернет