Категория: Инструкции, статьи, новости об iPhone/iPad
Я чрезвычайно горд собой: я продержался целых четыре дня, прежде чем купить iPhone. Конечно, меня во многом побудил к покупке тот факт, что мой предыдущий телефон был изрядным хламом. Но что меня действительно подкупило, так это наличие в iPhone встроенного Wi-Fi-блока и — что ещё важнее — отличного браузера. Дело в том, что набор средств разработки ПО (SDK) для iPhone – это стандартный динамический HTML (DHTML), исполняемый в Web-браузере. Так что можно использовать такие привычные клиентские технологии, как HTML, каскадные таблицы стилей (CSS) и асинхронный JavaScript™ + XML (Ajax) в комбинации с любой серверной технологией, какой только пожелаете: PHP, Rails, Java™.
После того как я немного поиграл с моим новым iPhone’ом и проделал пару стандартных вещей: позвонил нескольким людям, побаловался с Google Maps и послушал мелодии с помощью функциональности iPod, я понял: пора разработать что-нибудь специально для моего телефона. Итак, возник вопрос, что именно разработать?
Что ж, одной вещью, которой я лишился, отказавшись от старого телефона, была программа Salling Clicker. Salling Clicker превращал любой телефон в пульт дистанционного управления (ПДУ) для Macintosh (а сегодня он с тем же успехом работает и с Microsoft® Windows®). Используя это приложение, можно запускать на компьютере с ОС Macintosh скрипты AppleScript, осуществляя всевозможные полезные штуки, такие как управление Apple iTunes или KeyNote (Apple-альтернатива Microsoft Office PowerPoint®). На смартфонах это требовало загрузки на телефон небольшого приложения. Но iPhone не позволяет закачивать специальные приложения, потому что в роли SDK выступает Web-браузер Apple Safari. Итак, как же можно использовать Safari для управления Mac’ом?
Я нашёл такое решение: надо задействовать PHP на моей машине с Mac OS X совместно с инструментарием iUI toolkit от Джо Хьюитта (Joe Hewitt). Этот инструментарий (toolkit) формирует на Web-странице интерфейс, напоминающий iPhone. Он также реализует такую же динамику страницы. Например, когда вы движетесь по списку элементов, iUI переходит от края до края страницы, точно так же, как это делает iPhone, когда вы работаете с контакт-листом.
Создание списка команд
оздание приложения начнём с определения некоторого числа команд, которые сможет выполнять наш iPhone как пульт дистанционного управления. Для задания списка команд мы используем XML-файл. Этот файл показан в листинге 1.
Листинг 1. commands.xml
<br />&lt;commands&gt;<br /> &lt;command title="Next Song"&gt;<br /> tell application "iTunes" to next track<br /> &lt;/command&gt;<br /> &lt;command title="Previous Song"&gt;<br /> tell application "iTunes" to back track<br /> &lt;/command&gt;<br />&lt;/commands&gt;<br />
Файл представляет собой список тегов . У каждого тега есть атрибут, задающий удобочитаемое имя команды (title). В свою очередь, содержимое тега является кодом на AppleScript, который будет выполняться при запросе соответствующей команды. Из-за особенностей формата XML, чтобы использовать в коде AppleScript символы угловых скобок () и амперсанда (&), их необходимо закодировать их как , and &, соответственно.
Для обработки этого XML-файла я создал в PHP 5-й версии класс Command, который считывает этот файл, возвращает имена команд и запускает их на выполнение, используя команду osascript из Mac OS X. Код, описывающий этот класс, представлен в листинге 2
Конструктор класса первым делом считывает файл commands.xml, используя PHP-класс DomDocument. Далее он извлекает все элементы command с помощью метода getElementsByTagName. Затем, сформировав массив элементов, полученных из , конструктор определяет переменную экземпляра класса _commands, записывая в неё имена команд и соответствующие им AppleScript-команды.
В классе также определены два дополнительных метода: -Метод getCommands(), который просто возвращает список имён команд -Метод runCommand(), который выполняет команду, заданную порядковым номером, используя для этого osascript - консольный интерпретатор AppleScript-кода.
Создание интерфейса
После того как мы создали XML-файл со списком команд и описали PHP-класс Commands пора бы реализовать к ним некоторый интерфейс. Просто чтобы проверить, что всё нормально работает, создадим пока довольно примитивный интерфейс. Он показан в листинге 3.
Сначала скрипт создаёт объект экземпляра класса Command и с помощью метода getCommands() запрашивает список команд. Далее скрипт формирует набор ссылок на страницу do.php, используя порядковый номер команды и имя команды, которое возвращается классом Commands. Открыв эту страницу в браузере Safari
Рисунок 1. Примитивный интерфейс
Я мог бы уже использовать эту страницу как интерфейс для моего iPhone, и всё бы работало. Но при этом не было бы той динамики, которая есть в iPhone. Так что следующее, что мы должны сделать – это улучить наш интерфейс, воспользовавшись инструментарием iUI. В листинге 4 приведён код, который это делает.
Вначале мы подключаем CSS-файл из iUI, который содержит все те стили, которые и придают странице iPhone-подобный вид. Далее подключаем JavaScript-файл из iUI, полностью реализующий динамику приложения. После этого с помощью класса Commands получаем список команд и формируем на его основе неупорядоченный список (
), содержащий элементы списка (
) для каждого элемента. Нет, это не настолько ужасно, насколько звучит. На самом деле вы можете теперь открыть эту страницу в Safari, и она будет иметь точно такой же вид, как и в самом iPhone
Рисунок 2. Страница index.php, открытая в Safari
Ничего страшного, если вы работаете под Windows: сегодня есть версии Safari и для Windows, и для Mac. Конечно, PHP-скрипт, который выполняет этот код, должен работать под Mac, так как он запускает osascript для выполнения AppleScript-кода. Однако если вы захотите сделать приложение под DOS или UNIX® вы можете использовать системные команды этих операционных систем.
Последнее, что мы должны сделать – это создать файл do.php, к которому обращается index.php для выполнения собственно самих команд. Этот файл показан в листинге 5.
Теперь можно открыть страницу в Safari на своём же компьютере и пощёлкать по ссылкам, чтобы проверить, что приложение работает. Если всё в порядке, iTunes будет включать следующую или предыдущую песню в соответствии с командой, которую вы выбрали.
В моей системе мне пришлось подредактировать один файл: /etc/httpd/httpd.conf. Надо было изменить User на моё имя пользователя, и Group - на staff. Затем я перезапустил сервер Apache, выполнив консольную команду:
% apachectl graceful
после чего iTunes стал переключать треки вперёд и назад, когда я щёлкал по ссылкам. Теперь можно включить iPhone и получить доступ к приложению, запустив Safari и открыв в нём страницу по IP-адресу моего локального компьютера. И всё это будет отлично работать, пока мои лэптоп и iPhone будут находиться в одной Wi-Fi-сети.
Телекинез
реализована – причем на более высоком уровне. Проект называется telekinesis (телекинез), и его сайт размещён на Google Code. Соответствующее приложение получило название iPhone Remote и запускается под Mac OS X как приложение с графическим пользовательским интерфейсом (GUI-приложение).
Если запустить iPhone Remote, то он откроет в браузере Safari страницу, которая будет выглядеть точно так же как в iPhone
Рисунок 3. Интерфейс iPhone Remote
Отсюда можно управлять приложениями и запускать их, просматривать документы, удалённо использовать iTunes и даже перемещаться по экрану и выполнять консольные команды—и всё это можно с iPhone.
iPhone Remote запрашивает имя пользователя и пароль, поэтому посторонний человек не сможет воспользоваться вашим Mac’ом, когда вы установили это приложение. Так что iPhone можно использовать как устройство для защищённой работы с данными в виртуальной рабочей сети (VNC - virtual network computing) вашего Mac’а.
Заключение
Разрабатывать под iPhone очень легко. Реклама утверждает , что iPhone предоставляет доступ к «настоящему» Интернету, а не к его мобильной версии, и это правда: с помощью iPhone можно просматривать обычные страницы так, как если бы они были открыты на Mac’е или PC. А такие инструментарии для создания интерфейса, как iUI помогают придать приложению более похожий на iPhone внешний вид и динамику, удобные для работы с приложениями, подобными приведенному здесь приложению iPhone-ПДУ, сделанному на XML и PHP.
Об авторе
Джек Д. Херрингтон (Jack D. Herrington) - главный инженер-программист с более чем двадцатилетним опытом работы. Он автор трех книг: " Генерирование кода в действии ", " Podcasting Hacks " и " PHP Hacks ". Написал более 30 статей. Вы можете связаться с Джеком по адресу jherr@pobox.comp.
Привет, Уважаемый! Думаю, ты понимаешь, что зашел простым гостем и пользоваться всеми привелегиями "своего" человека на сайте не сможешь? Стань "своим" для лучшего сайта для iPhone, iPod Touch и iPad, зарегистрировавшись, или же поспеши войти в свою учетную запись!