Разработка веб-приложений для iPad, iPhone и iPod

Разработка веб-приложений для iPad, iPhone и iPod

Всем привет! У меня хорошая новость - авторы временно.нет постепенно просыпаются после летнего отдыха. За это время мы много сделали и многому научились. Пришло время делиться этими знаниями с нашими дорогими читателями.

Сегодня я хочу сделать краткий обзор того, что позволяет делать мобильный сафари на айДевайсах, какие инструменты есть в руках у веб-разработчиков и как эти инструменты применять.

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

Наша задача - уметь такие приложения делать, ведь мы очень любим наших пользователей, правда?

Как вы думаете, напишу ли я в будущем статью вроде “Оптимизация сайта для iPod Shuffle и Nano”?

Материал этой статьи будет устаревать, потому что чуть ли не каждую неделю выходит какая-то новая библиотека для трогательных девайсов. Поэтому я буду ее дополнять по мере поступления какой-либо новой информации.

Итак, начнем.

Иконка приложения

Про это уже была небольшая статья. Но здесь надо повториться.
Когда мы добавляем закладку “Домой” (можно сказать на рабочий стол), мы можем задать иконку, которая будет отображаться.

Задается иконка следующим образом:

 <link rel="apple-touch-icon" href="/apple-touch-icon.png" /> 

С появлением четвертого айФона и айПада, требование к этой иконке изменились - теперь она должна быть размером 114x114 для айфона или 72x72 для айпада. В общем-то размер этой иконки может быть и больше, сафари самостоятельно сожмет до нужного разрешения и добавит “стеклянность” иконке. Если стеклянность иконке не к лицу, тогда вместо apple-touch-icon следует прописывать apple-touch-icon-precomposed:

<link rel="apple-touch-icon-precomposed" href="/apple-touch-icon-precomposed.png" />

Полноэкранный режим

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

 <meta name="apple-mobile-web-app-capable" content="yes" />

Скрываем статус-бар

Для того, чтобы изменить статус-бар, используется мета-тег apple-mobile-web-app-status-bar-style

 <meta name="apple-mobile-web-app-status-bar-style" content="default" />

content здесь может быть один из трех вариантов - default, black или black-translucent.

Отключаем зум

Для управления зумом используется мета-тег viewport. Отключаем возможность зумить:

 <meta name="viewport" content="user-scalable=no, width=device-width" />

Картинка загрузки (splash image)

Если такая картинка не будет задана, то при открытии приложения, будет показан скриншот последнего состояния приложения.

 <link rel="apple-touch-startup-image" href="./startup.png" />

Картинка должна быть точно следующих размеров (иначе устройство его не примет):

  • 320x480 (iPhone < 4, iPod Touch)
  • 640x960 (iPhone 4, новый iPod Touch)
  • 768x1004 (iPad portrait)
  • 1024x748 (iPad landscape)

Все описанные выше пункты позволять создать веб-приложение используя html, css и javascript, которое будет внешне выглядеть как нативное. Да, его нельзя опубликовать в апп стор, но если приложение.

Ориентация экрана

В зависимости от ориентации айДевайса возможно вы захотите по-разному отображать содержимое. Самое простое - использовать такие объявления css:

 <link rel=”stylesheet” media=”all and (orientation:portrait)” href=”portrait.css”>
<link rel=”stylesheet” media=”all and (orientation:landscape)” href=”landscape.css”>

portrait.css будет использован для портретной ориентации, а landscape.css соответственно для ландшафтной.

С помощью js также можно отловить событие поворота экрана. Для этого служит событие orientationchange

 window.addEventListener('orientationchange', ChangeOrientation, false);

function ChangeOrientation() {
 var orientation = Math.abs(window.orientation) === 90 ? 'landscape' : 'portrait';
 alert(orientation);
}

Избавляемся от эластичного скролла

В сафари есть замечательная фича - эластичный скролл в конце и начале страницы. Нечто подобное я когда-то делал с помощью jQuery в этой статье. Демо здесь. Чтобы создать еще более достоверную имитацию нативного приложения, от этой фичи можно избавиться парой строчек js

 <script>
function NoElasticScroll(e) {
  e.preventDefault(); }
</script>
<body ontouchmove="NoElasticScroll(event);" >
</body>

Определение iOS

Для того, чтобы определить, на каком из айДевайсов просматривается страница, можно использовать следующий сниппет:

 var Device = {};

Device.isiPhone = function() {
return navigator.userAgent.indexOf('iPhone') != -1;
}
Device.isiPod = function() {
return navigator.userAgent.indexOf('iPod') != -1;
}
Device.isiPad = function() {
return navigator.userAgent.indexOf('iPad') != -1;
}
Device.isiOS = function() {
return Device.isiPhone || Device.isiPod || Device.isiPad;
}

Вот как выглядит ЮзерАгент у этих девайсов:

iPhone:

 Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543a Safari/419.3 

iPod (старый):

 Mozilla/5.0 (iPod; U; CPU like Mac OS X; en) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/3A101a Safari/419.3 

iPad:

 Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) version/4.0.4 Mobile/7B367 Safari/531.21.10 

Инструменты, библиотеки

C самого появления айПада, на свет стали рождаться различные фреймворки, плагины для фреймворков, плагины для плагинов фреймворков и так далее.
Яблочники сделали для айПада страничку с хелпом, которая работала как нативное приложение. Там использовался своя наработка, которая называлась AdLib. В интернетах ее прозвали “секретным фреймворком Эпла” )) линк.

Прошло некоторое время и появились не такие секретные наработки.

jQTouch

Это jQuery-плагин, призванный упростить разработку веб-приложений. Все весьма просто и понятно. Анимация работает замечательно только на iPhone, iPod Touch. На айпаде некоторые виды анимации глючат - поэтому желательно предварительно проверить, если вы хотите, например использовать поворот куба. А на андроиде вообще желательно обойтись без анимации. Во всяком случае, на моем Герое, css-трансформация работает очень... неприятно.

 

 

Sencha Touch

Сенча - это такой зеленый чай, производится в Японии.

Сенча Тач - это объединение вышеупомянутого jQTouch, extJS и Raphaël (последняя библиотека - разработка Дмитрия Барановского, упрощающая работу с векторной графикой на вебе).

Сенча Тач позиционируется как ДжаваСкрипт-фреймворк для разработки веб-приложений для тач-девайсов iOS и Android. На сайте доступно много демок. Рекомендую заценить.

 

iScroll

Этот инструмент попроще. Единственное что он делает - позволяет скролить контент внутри блока фиксированного размера. Как раз то что надо, чтобы создавать веб-приложения. Мой выбор.

 

Slablet

Слаблет - это CSS/jQuery фреймворк для создания веб-проектов для айпада. Для скролла контента используется вышеупомянутый iScroll.

Демо

 

 

jQuery Touchwipe Plugin

Плагин для обработки события “wipe”. Или “протирания” по-русски. Когда пальцем (ну или кому как удобнее) проводим по экрану, например, слева направо. Для нативных приложений iPhone это движение обычно вызывает кнопочки удаления элемента.

iToggle for jQuery

Плагин jQuery для имитации нативных чекбоксов айДевайсов.

 

jQuery Slider Егора Хмелева

Этот слайдер отличается от прочих тем, что поддерживает работу на айДевайсах.

[offtop] Егор сейчас в команде, работающей над замечательным проектом Букмейт (у меня еще есть пара инвайтов, могу выслать).
Для чтения на айДевайсах там имеется неплохое веб-приложение... хотя его можно и значительно улучшить.

 

Инструменты для рисования интерфейсов, вайрфреймов и прототипирования

Для начала мне нравится интерфейс набросать на бумаге. За бугром есть нету проблемы приобрести блокнот для этой цели. И найти их нету проблемы.

Если вы производите такие блокноты (или знаете где их достать), пишите в комментах, я обязательно добавлю в статью.

А пока для домашних нужд предлагаю использовать распечатки.

Для прототипирования онлайн могу предложить два приложения

Mobione

Читатель targa кинул ссылку на этот ресурс. Это виндуз-приложение, дающее необходимый инструментарий для создания дизайна и тестирования(!) приложений.

 

MockingBird

Кстати, обнаружил что 15 сентября они выходят из стадии Беты. Очень неплохой инструмент.

 

iPhoneMockup

Наброска интерфейса для айфона.

Вдохновение

Парк приложений для айДевайсов постоянно растет. И очень часто можно найти какое-то интересное решение в интерфейсе. Все приложения не пересмотришь, но интересные идеи можно найти на Эмбере. Конкретно по айПаду здесь.

Ну а несомненно лучший способ вдохновиться - это получить приз от Временно ;)

Расскажите друзьям

Оцените статью:
  • 1
  • 2
  • 3
  • 4
  • 5

Комментарии — 67

Евгений
Умрут скоро ваши айфоны :)

#
Евгений
Evgenij
Отчего умрут-то? )
Foggy
Отличная статья, спасибо!)
Я, правда, пока не собираюсь делать фейсы для этих игрушек, ибо моим сайтам они ни к чему, но тема полезная.
Евгений, просили же не начинать эту тему :-)

кстати, к тегу pre вам неплохо бы прописать отступы между строками по меньше ;-)
#
Foggy
Евгений
@Evgenij

Они не практичные, щас htc начал разрабатывать новую систему андроид, намного быстрее и практичней.

А айфон, это только брэнд и ничего больше.
#
Евгений
Evgenij
Foggy, пожалуйста. Всегда рад ;)
А для чего вы завернули коммент в pre?
Evgenij
Евгений, спасибо что разъяснили :)
Foggy
Evgenij, только потому что это можно сделать)))
#
Foggy
Triball
Очень полезный сайт у Вас, автор, и данная тема тоже. Спасибо за статьи.
А не подскажете ли как различать на чём смотрят, на фоне или на паде или на плеере?
Офтоп - знаете, одно и тоже отображается в браузерах немного по-разному, так вот, я заметил, что сафари отображает всё очень похоже на оперу. Кто-нибудь согласен с мнением?
yeap
Ну наконец то вы проснулись. Крутая статья. Спасибо.

Сейчас только владельцы htc понабегут, у них алергия на приставку «ай». )
#
yeap
targa
Для разработки по iPhone есть такая клевая штука как MobiOne Studio.
В нем и дизайн набросать можно, но я использовал только Test Center - отлично подходит для проверки (там есть встроенный DOM Inspector похожий на FireBug`ный).
#
targa
Киря
Евгений,
Htc не разрабатывает операционку андройд, она от гугл :D
Айфоны от того и покупают что бренд.
Evgenij
targa, спасибо. Крутая программа.

Triball, добавил в статью определение девайса.
targa
Не знаю в тему или нет (все таки про iPhone и другие яблоки речь), но может еще стоит упомянуть что есть Opera Mobile emulator под Windows (настольный) и Mozilla Firefox Fennec (тоже для "больших" компов).
В них можно посмотреть как сайт будет выглядеть (примерно) в этих мобильных браузерах).
Также можно поставить эмулятор Android и в нем посмотреть как сайт вглядит по Android. Хотя наверное еще что-то можно делать :), но мне нужно было только это (у меня эмулятор тормозил сильно).
#
targa
Serrgey
Спасибо за статью. Давно пора свой сайты оптимизировать под айфоны и айпады
yaris
спасибо за статью, пригодится. :) сейчас многие оптимизируют сайты, тем более если они стоят этого
#
yaris
Psycho
Evgenij, еще совершенно недавно вышла библиотека jquery mobile (http://jquerymobile.com/) ровно в след за вышедшей Sencha Touch с давольно обширным саппорт листом http://jquerymobile.com/gbs/.
#
Psycho
Evgenij
Psycho,
jQuery Mobile еще не вышла, а, как обещают разработчики, выйдет позднее в этом году. За этой разработкой я внимательно слежу.
Psycho
А ну да в процессе еще :) Ну тогда еще есть GWT. Буквально на прошлой неделе я тестировал сайт заказчика, который писал на SmartGWT, в стандартном браузере Android 2.2 на HTC Desire и в дельфине(как-то так называется :) помоему) сайт работал отлично. Есть несколько кастомных библиотек у GWT для написания под mobile, правда ничего о них сказать не могу, так как не работал еще с ними :)(гугл выдал первую http://www.ohloh.net/p/gwt-mobile-webkit)
#
Psycho
Alex
Дайте инвайт на букмейт плиз :)
спасиб
#
Alex
Evgenij
Отправил. Инвайты кончились (
Psycho
Я тоже хочу инвайт на букмейт :)
#
Psycho
Виталий
Отличная подборка, спасибо!
#
Виталий  
alkali
@Евгений

Они не практичные, щас htc начал разрабатывать новую систему андроид, намного быстрее и практичней.

А айфон, это только брэнд и ничего больше.


ORLY?
#
alkali
Чистяков Денис
Спасибо, отличная подборка материала и полезных ссылок, в мемориз.
#
Чистяков Денис
Ден
Круто!!!!
Shkolnik
Айфон никогда не умрет)
А какой язык програмирования вы юзаете?
makito
Немного понял - вы сначала убираете плавную прокрутку страницы:
"Избавляемся от эластичного скролла"

а затем реализуете то же с помощью другой вещи:
iScroll

вот и непонятно немного.
А вообще статься классная - сразу сел делать приложение для iPhone :)
#
makito
Evgenij
макито,
избавляемся от эластичного скролла всей страницы, но добавляется скролл для каких-то отдельных блоков. То есть здесь все нормально.
vitalik
Прочитал с удовольствием.Было интересно. Спасибо
Дмитрий
Расскажите, можно ли как-то кэшировать HTML приложение на айпаде, чтобы оно работало даже без соединения с интернетом?
#
Дмитрий
Evgenij
Да, в сафари поддерживается Offline Storage и другие прелести html5.
Документация на developer.apple.com
В ближайшее время мы раскроем эту тему в отдельной статье.
Artem
Можете мне создать приложение для iPad? Или подскажите мне пожалуйста, все этапы действий чтобы создать приложение, и к каким людям обращаться. Есть у вас статьи на эти темы?
#
Artem
Василий
О, круто! вери вери круто! Интересная вещь
Nickproger
Спасибо, очень актуальная статья!
Андрей
Большое спасибо.. Вот озадачили созданием приложения для iPad (раньше делал сайты). Ищу с чего начать.. Было бы здорово создать какой-нибудь комплект (на Ваш выбор) и документацию для новичков-разработчиков..
#
Андрей  
newApp
Классная инфа,Здорово, спасибо!!!
#
newApp
dmija
иконку сделал, работает,
но не понятно со splash image,
как нужно называть файлы, куда класть на сервере и какой код?
сделал один горизонтальный 1004х748, назвал startup.png,
вставил код
не работает, где можно почитать документацию?
#
dmija
dmija
пардон, код не вывелся: link rel="apple-touch-startup-image" href="startup.png"
#
dmija
Zhendalf
dmija,
Картинка должна быть точно следующих размеров (иначе устройство его не примет):

320x480 (iPhone < 4, iPod Touch)
640x960 (iPhone 4, новый iPod Touch)
768x1004 (iPad portrait)
1024x748 (iPad landscape)
Hayko
Privet!...u menya takaya problema... postavil , na site a u menya 2 versii site-a: mobilnaya i classic....shas izmenenia kotorie ya sdelal v portrait.css vidni i na classic mode s obichnogo browsera...kak sdelatj tak shto bi vovremya prosmotra site a s iPhone-a etot link rabotal a vovremya prosmotra s obichnogo browsera on bi ne deistvoval???
spasibo
#
Hayko
Ted
А из jQuery-based фреймворков для iOS что лучше, точнее что бы вы посоветовали, cодержащее уже готовые блоки? Стоит ли весь десктопный сайт клонировать в i-версию, или все-таки будет достаточно какой-то конкретной функциональности? Проблема в том, что много десктопных версий сайтов оказалось несовместимы с iPad (не работают некоторые UI элементы), а траффик с них идет...
snake302
Есть разработчик приложениий для iphone/ipad ? Прошу ответить мне в твттер если есть http://twitter.com/MR_Snake302
#
snake302  
Алекс
Если создать иконку на столе iPad, то при клике по ней, каждый раз происходит перезагрузка страницы, в отличие от Сафари который выводит то, что было до выхода из браузера. Можно ли повлиять на это поведение, чтобы при клике по иконке загружалось то, что было до выхода?
#
Алекс
Евгений
Алекс, на это поведение к сожалению никак нельзя повлиять.
Святослав
сделал все как нужно, вот только если в веб приложении нажать на какую нибуть кнопку, перейти на другую страницу и т.д. оно сразу же включает через сафари ...
#
Святослав  
Saint_Byte
А как же jquery mobile ?
Vitali
Заюзал iScroll все замечательно, список пальцем прокручивается, но перестала прокручиваться вся страница целиком (( Как быть?
#
Vitali
yatut11
Евгений, а как отслеживать события? mouseup, mousemove, mousedown или для touchscreen устройств существуют другие? если да, то как они называются и сколько их?
#
yatut11
Андрей
Иконка работает на ура. Сделал еще до прочтения этой статьи. А вот здесь вычитал про полноэкранный режим и сокрытие статус-бара. Все вставил как написано. В тот же head где и иконкино описание. Не работает. Сайт по-прежнему открывается и с адресной строкой и со статус баром. Может что в кэше застряло или втыкаю не туда? Помогите плз. Очень надо. Сайт location.sobr-a.ru
И второй вопрос. Нужно такой же финт с иконкой сделать на Android для этого же сайта. Там ведь тоже такие закладки делаются на рабочем столе. Правда убогие в виде ленточек. Но на ленточке вместо звезды можно иконку делать как-то. Это видно если разместить yandex, например. Весь инет перерыл, а найти не могу. Наверное тоже не сложно как-то должно быть.
Андрей
С иконкой на андроиде разобрался, сразу как-то не дошло, что это банальное favicon.ico))))
Evgenij
Андрей, сайт открывается на весь экран, если запускать тыкая по иконке. У вас все отлично, так и происходит.
Что касается статус-бара, то надо поставить значение black-translucent чтобы контент был на весь экран. Подробнее в документации
Андрей
Евгений, огромное спасибо за ответ. Но все же мне не понятно что у меня хорошо? Вы мой сайт открывали и у вас все работает? Я открываю, тыкая по иконке на рабочем столе, но страница открывается с адресной строкой в браузере. Подскажите, что не так?
Evgenij
У меня открывается на весь экран: http://db.tt/ORgwu5x1
Андрей
Евгений, Ваша ссылка у меня не открывается. Не могли бы вы кинуть картинку в почту tecinfo@mail.ru Буду очень благодарен.
Evgenij
Случайно подчистил дропбокс. Ссылку восстановил и на почту отправил на всякий случай.
Сергей
в чем отличие в разработке для Android'а?
#
Сергей
Илья
Подскажите пожалуйста, как избавится от того что айустройства "подсвечивают" цифры у меня на сайте как ссылки. К примеру. Я на сайте указываю стоимость товара, а айпад, распознает стоимость как контактную информацию и хочет цену добавить в контакты. Что мне нужно добавить на сайт, чтоб такое не происходило. ??
Evgenij
Илья, вот так:
<meta name="format-detection" content="telephone=no" />
Глеб
Приветствую! Подскажите, плиз, - мне надо, чтобы при повороте Айфона не менялась ориентация моей странички. Нужна всегда портретная. Что нужно сделать?
#
Глеб
Max
Наблюдается положительная тенденция: если год назад действительно удобных инструментов практически не было, то сейчас уже есть из чего выбирать и с чем работать. Наиболее знаковым событием стал недавний выход DietCoda, который хорош не только как самостоятельное приложение, но и как дополнение к десктопной версии. Кстати, вот, пожалуй, самый большой и полный обзор инструментов разработки сайтов на iPad.
Artem
Как разрабатывать то понятно, почему нет элементарного как можно установить на устройство созданное веб приложение!!??!?!?!?!??!
Петр
можете рассказать про jQTouch. подключение, использование
Сергей
Автору громадное спасибо. У меня есть спец проект для моб устройств. Клиентам фотографии выкладываю для просмотра с айпада или айфона сразу применил открытие страницы с иконки как положение в полном экране. Респект автору. Оч полезная статья!!!!
Еее
Подскажите пожалуйста, реально ли создать веб приложение типа адресной книги, при этом база данных офлайн с возможностью синхронизации с сервером? Большое спасибо!
#
Еее
Еее
Или проще, как сохранять данные, введенные пользователем в форме, если нет интернета?
#
Еее
Andrey
Подскажите пожалуйста, сделал версию мобильного сайта, сделал иконку(линк) на раб. стол Iphone, после этого изменил немного сайт, в браузере на телефоне изменения видны, а по клику на иконке загружается старая версия сайта, очистка кэша сафари не помогает, где старая версия могла закэшироваться и как ее убрать? Иконку тоже несколько раз удалял, не помогает.
#
Andrey

Новый комментарий

как выглядит какой тег
жирный текст <b>жирный текст</b>
курсивный тект <i>курсивный тект</i>
зачеркнутый текст <s>зачеркнутый текст</s>
подчеркнутый текст <u>подчеркнутый текст</u>
ссылка <a href="адрес">ссылка</a>
function foo() { ... }
<pre><code>function foo() { ... } </code></pre>
разрешенные теги или посмотреть как будет выглядеть
как выглядит какой тег
жирный текст <b>жирный текст</b>
курсивный тект <i>курсивный тект</i>
зачеркнутый текст <s>зачеркнутый текст</s>
подчеркнутый текст <u>подчеркнутый текст</u>
ссылка <a href="адрес">ссылка</a>
function foo() { ... }
<pre><code>function foo() { ... } </code></pre>
разрешенные теги или посмотреть как будет выглядеть

metin2 pvp metin2 pvp serverler pvp serverler