Новости
- Додайте developerWorks в свій iPhone
- Створення списку команд
- Лістинг 1. commands.xml
- Лістинг 2. commands.php
- створення інтерфейсу
- Лістинг 3. Скрипт, що створює простий інтерфейс
- Малюнок 1. Примітивний інтерфейс
- Лістинг 4. index.php
- Малюнок 2. Сторінка index.php, відкрита в Safari
- Лістинг 5. do.php
- телекінез
- Малюнок 3. Інтерфейс iPhone Remote
- висновок
- Ресурси для скачування
Розробка власних програм для iPhone
Я надзвичайно гордий собою: я протримався цілих чотири дні, перш ніж купити iPhone. Звичайно, мене багато в чому спонукав до покупки той факт, що мій попередній телефон був неабияким мотлохом. Але що мене дійсно підкупило, так це наявність в iPhone вбудованого Wi-Fi-блоку і - що ще важливіше - відмінного браузера. Справа в тому, що набір засобів розробки (SDK) для iPhone - це стандартний динамічний HTML (DHTML), що виконується в Web-браузері. Так що можна використовувати такі звичні клієнтські технології, як HTML, каскадні таблиці стилів (CSS) і асинхронний JavaScript ™ + XML (Ajax) в комбінації з будь-серверної технологією, який тільки побажаєте: PHP, Rails, Java ™.
Після того як я трохи пограв з моїм новим iPhone'ом і виконав пару стандартних речей: подзвонив декільком людям, побалуватися з Google Maps і послухав мелодії за допомогою функціональності iPod, я зрозумів: пора розробити що-небудь спеціально для мого телефону. Отже, виникло питання, що саме розробити?
Додайте developerWorks в свій iPhone
Не пропустіть єдину в своєму роді стрічку developerWorks. Виберіть тему, розділ, бренд, статтю, прочитайте анотацію або відвідайте сам сайт за допомогою свого iPhone і цього посилання: http://www.ibm.com/developerWorks/iphone .
Що ж, однією річчю, яку я втратив, відмовившись від старого телефону, була програма 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
<Commands> <command title = "Next Song"> tell application "iTunes" to next track </ command> <command title = "Previous Song"> tell application "iTunes" to back track </ command> </ commands>
Файл представляє собою список тегів <command>. У кожного тега є атрибут, що задає удобочитаем ім'я команди (title). У свою чергу, вміст тега <command> є кодом на AppleScript, який буде виконуватися при запиті відповідної команди. Через особливості формату XML, щоб використовувати в коді AppleScript символи кутових дужок (<або>) і амперсанда (&), їх необхідно закодувати їх як & lt ;, & gt ;, and & amp ;, відповідно.
Для обробки цього XML-файла я створив в PHP 5-й версії клас Command, який зчитує цей файл, повертає імена команд і запускає їх на виконання, використовуючи команду osascript з Mac OS X. Код, що описує цей клас, представлений в лістингу 2 .
Лістинг 2. commands.php
<? Php class Commands {private $ _commands; function __construct () {$ this -> _ commands = array (); $ Doc = new DOMDocument (); $ Doc-> load ( 'commands.xml'); $ Cmds = $ doc-> getElementsByTagName ( 'command'); foreach ($ cmds as $ cmd) {$ this -> _ commands [] = array ( 'title' => $ cmd-> getAttribute ( 'title'), 'command' => $ cmd-> firstChild-> nodeValue); }} Function getCommands () {$ cmds = array (); foreach ($ this -> _ commands as $ cmd) {$ cmds [] = $ cmd [ 'title']; } Return $ cmds; } Function runCommand ($ id) {$ ph = popen ( "osascript", "w"); fwrite ($ ph, $ this -> _ commands [$ id] [ 'command']); fclose ($ ph); }}?>
Конструктор класу насамперед зчитує файл commands.xml, використовуючи PHP-клас DomDocument. Далі він витягує всі елементи command за допомогою методу getElementsByTagName. Потім, сформувавши масив елементів, отриманих з <command>, конструктор визначає змінну примірника класу _commands, записуючи в неї імена команд і відповідні їм AppleScript-команди.
У класі також визначено два додаткові методи:
- Метод getCommands (), який просто повертає список імен команд
- Метод runCommand (), який виконує команду, задану порядковим номером, використовуючи для цього osascript - консольний інтерпретатор AppleScript-коду.
створення інтерфейсу
Після того як ми створили XML-файл зі списком команд і описали PHP-клас Commands пора б реалізувати до них деякий інтерфейс. Просто щоб перевірити, що все нормально працює, створимо поки досить примітивний інтерфейс. Він показаний в лістингу 3 .
Лістинг 3. Скрипт, що створює простий інтерфейс
<Html> <body> <? Php require_once ( 'commands.php'); $ Cmds = new Commands (); ?> <? Php $ id = 0; foreach ($ cmds-> getCommands () as $ cmd) {?> <a href="do.php?id=<?php echo($id);?> "> <? php echo ($ cmd); ?> </a> <br/> <? Php $ id ++; }?> </ Body> </ html>
Спочатку скрипт створює об'єкт екземпляра класу Command і за допомогою методу getCommands () запитує список команд. Далі скрипт формує набір посилань на сторінку do.php, використовуючи порядковий номер команди та ім'я команди, яке повертається класом Commands.
Відкривши цю сторінку в браузері Safari, можна побачити щось на зразок малюнка 1 .
Малюнок 1. Примітивний інтерфейс
Я міг би вже використовувати цю сторінку як інтерфейс для мого iPhone, і все б працювало. Але при цьому не було б тієї динаміки, яка є в iPhone. Так що наступне, що ми повинні зробити - це покращити наш інтерфейс, скориставшись інструментарієм iUI. В лістингу 4 приведений код, який це робить.
Лістинг 4. index.php
<! DOCTYPE html PUBLIC "- // W3C // DTD XHTML 1.0 Strict // EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns = "http : //www.w3.org/1999/xhtml "> <head> <title> Mac Controller </ title> <meta name =" viewport "content =" width = 320; initial-scale = 1.0; maximum-scale = 1.0; user-scalable = no; "/> <style type =" text / css "media =" screen "> @ import" iui / iui.css "; </ style> <script type =" application / x-javascript "src =" iui / iui.js "> </ script> </ head> <body> <div class =" toolbar "> <h1 id =" pageTitle "> </ h1> <a id =" backButton "class = "button" href = "#"> </a> </ div> <? php require_once ( 'commands.php'); $ Cmds = new Commands (); ?> <Ul title = "Commands" selected = "true"> <? Php $ id = 0; foreach ($ cmds-> getCommands () as $ cmd) {?> <li> <a href="do.php?id=<?php echo($id);?> "> <? php echo ($ cmd ); ?> </a> </ li> <? Php $ id ++; }?> </ Ul> </ body> </ html>
Спочатку ми підключаємо CSS-файл з iUI, який містить всі ті стилі, які і надають сторінці iPhone-подібний вид. Далі підключаємо JavaScript-файл з iUI, повністю реалізує динаміку додатки. Після цього за допомогою класу Commands отримуємо список команд і формуємо на його основі невпорядкований список (<ul>), що містить елементи списку (<li>) для кожного елемента. Ні, це не настільки жахливо, наскільки звучить. Насправді ви можете тепер відкрити цю сторінку в Safari, і вона буде мати точно такий же вигляд, як і в самому iPhone (див. малюнок 2 .
Малюнок 2. Сторінка index.php, відкрита в Safari
Нічого страшного, якщо ви працюєте під Windows: сьогодні є версії Safari і для Windows, і для Mac. Звичайно, PHP-скрипт, який виконує цей код, повинен працювати під Mac, так як він запускає osascript для виконання AppleScript-коду. Однак якщо ви захочете зробити додаток під DOS або UNIX® ви можете використовувати системні команди цих операційних систем.
Останнє, що ми повинні зробити - це створити файл do.php, до якого звертається index.php для виконання власне самих команд. Цей файл показаний в лістингу 5 .
Лістинг 5. do.php
<? Php require_once ( 'commands.php'); $ Cmds = new Commands (); $ Cmds-> runCommand ($ _GET [ 'id']); ?>
Тепер можна відкрити сторінку в Safari на своєму ж комп'ютері і поклацати по посиланнях, щоб перевірити, що додаток працює. Якщо все в порядку, iTunes буде включати наступну або попередню пісню відповідно до командою, яку ви вибрали.
У моїй системі мені довелося підредагувати один файл: /etc/httpd/httpd.conf. Треба було змінити User на моє ім'я користувача, і Group - на staff. Потім я перезапустив сервер Apache, виконавши консольную команду:
% Apachectl graceful
після чого iTunes став перемикати треки вперед і назад, коли я клацав по посиланнях. Тепер можна включити iPhone і отримати доступ до додатка, запустивши Safari і відкривши в ньому сторінку по IP-адресою мого локального комп'ютера. І все це буде відмінно працювати, поки мої лептоп і iPhone будуть знаходитися в одній Wi-Fi-мережі.
телекінез
Коли я виконував невелике дослідження для цієї статті, я виявив, що ця концепція віддаленого управління Mac'ом за допомогою iPhone вже реалізована - причому на більш високому рівні. проект називається telekinesis (Телекінез), і його сайт розміщений на Google Code. Відповідний додаток отримало назву iPhone Remote і запускається під Mac OS X як додаток з графічним призначеним для користувача інтерфейсом (GUI-додаток).
Якщо запустити iPhone Remote, то він відкриє в браузері Safari сторінку, яка буде виглядати точно так само як в iPhone і як показано на малюнку 3 .
Малюнок 3. Інтерфейс iPhone Remote
Звідси можна керувати програмами та запускати їх, переглядати документи, віддалено використовувати iTunes і навіть переміщатися по екрану і виконувати консольні команди-і все це можна з iPhone.
iPhone Remote запитує ім'я користувача та пароль, тому стороння людина не зможе скористатися вашим Mac'ом, коли ви встановили це додаток. Так що iPhone можна використовувати як пристрій для захищеної роботи з даними в віртуальної робочої мережі (VNC - virtual network computing) вашого Mac'а.
висновок
Розробляти під iPhone дуже легко. Реклама стверджує, що iPhone надає доступ до «справжньому» Інтернету, а не до його мобільної версії, і це правда: за допомогою iPhone можна переглядати звичайні сторінки так, як якщо б вони були відкриті на Mac'е або PC. А такі інструментарії для створення інтерфейсу, як iUI допомагають надати додатком більш схожий на iPhone зовнішній вигляд і динаміку, зручні для роботи з додатками, подібними до наведеного тут додатком iPhone-ПДУ, зробленому на XML і PHP.
Ресурси для скачування
Схожі теми
- оригінал статті iPhone development with PHP and XML (EN) .
- iPhone : Загляньте на сайт Apple, присвячений iPhone, - відмінний ресурс для пошуку інформації про iPhone. (EN)
- Домашня сторінка PHP : Відвідайте цю сторінку, щоб більше дізнатися про PHP. (EN)
- iUI toolkit : Загляньте на сайт Джо Хьюїтта і дізнайтеся більше про інструментарій iUI. (EN)
- Salling Clicker : Дізнайтеся більше про програму Salling Clicker, що надихнула автора на створення цієї статті. Вона зберігає в собі ще багато фантастичних можливостей для тих, хто хоче використовувати свій мобільний телефон для управління Mac'ом або PC. (EN)
- iPhone Remote : Вивчіть програму iPhone Remote проекту «telekenesis» - повну версію наведеного тут прикладу. (EN)
- Сертифікація IBM XML : Дізнайтеся, як отримати від IBM Сертифікат розробника в XML і суміжних з XML областях. (EN)
- У вас є iPhone? : Тепер ви з гарантією не пропустите жодної статті з стрічки developerWorks. Виберіть тему, розділ, бренд, статтю, прочитайте анотацію або відвідайте сам сайт. Все це можна зробити за допомогою вашого iPhone і цього посилання: http://www.ibm.com/developerWorks/iphone . (EN)
- Пробна версія програмного забезпечення від IBM : Використовуйте у вашому наступному проекті програмне забезпечення, яке можна завантажити безпосередньо з developerWorks. (EN)
Підпишіть мене на повідомлення до коментарів
Отже, виникло питання, що саме розробити?Отже, як же можна використовувати Safari для управління Mac'ом?
Php require_once ( 'commands.php'); $ Cmds = new Commands (); ?
Gt; <?
Php $ id = 0; foreach ($ cmds-> getCommands () as $ cmd) {?
Php?
Id=<?
Php echo($id);?
Php echo ($ cmd); ?