iPad, Adobe, Flash и многозадачность

Ну что ж, продолжим обозревать возможности Apple iPad… Шучу, шучу, мне самому писать обзор про iPad основательно поднадоело — значительно приятней этим гаджетом все же пользоваться, чем рассказывать о том, какой он замечательный. Про батарею, кстати, совершенно не врали, 10-11 часов активного использования — интернет через WiFi, видео, игры (без особого уклона в 3D), так что супер, а завтра еще проверю, способен ли iPad заменить ноутбук при перемещении по городу между встречами весь день.
Однако, вторая половина недели была полна и других событий, о которых я не успел написать, потому что вначале летел в самолете, а потом понемногу приходил в себя после трансатлантического перелета. В частности, Apple анонсировала прошивку iPhone OS 4.0 для iPhone и iPad, показала в ней новые возможности (в том числе и многозадачность), а также слегка “подкрутила” соглашение разработчиков, чем вызвала бурю возмущений в Интернете, в основном иницируемую Adobe и ее поклонниками.

Сначала про многозадачность, так как она важна и для второй части статьи про Flash. Метод, которым пошла Apple, решив обеспечить многозадачность, простым не назовешь. Напомню, что сейчас iPhone OS сама по себе многозадачна, но пользоваться этим могут лишь некоторые приложения Apple — приложение для звонков, для сообщений, календарь, приложение для iPod, и тд. Всем остальным приходится либо выкручиваться с помощью Push-уведомлений, либо ничего не делать вообще при выключении. Другой экстрим — это многозадачность в Windows Mobile, Symbian и Android, где все приложения могут работать в фоновом режиме, загружая таким образом процессор и память телефона, и довольно быстро сажая батарейку телефона. В итоге на эти телефоны приходится устанавливать различные менеджеры задач, с помощью которых периодически приходится определенные задачи выгружать, чтобы батареи хватило на дольше. Иногда это приводит к неприятным ситуациям, как у меня при тестировании Nexus One, когда Яндекс.Карты, будучи запущенными на засунутом в карман телефоне, за час разрядили немаленькую батарею телефона (видимо, в судорожных поисках спутников).
[ad#intext-inside]
Что сделала Apple, на первый взгляд, довольно таки разумно, но нужно будет посмотреть, как это будет реализовано в действительности. Я всегда говорил, что мне лично многозадачность особо не нужна, за исключением определенных сценариев, например, обсуждения по скайпу какого-то документа — и в этой ситуации мне одновременно нужен и документ, и Skype. Так вот, Apple определила семь типичных сценариев, когда может потребоваться тот или иной вид многозадачности, и предоставит разработчикам системные API (вызовы) для работы с ними:
– Хотите VoIP в фоновом режиме? Пожалуйста.
– Хотите GPS-трекинг? Вот вам. (кстати, именно это мне пригодится, так как у меня давно есть клиент, который хочет приложение-трекер перемещения, но отсылка данных на сервер только из активного приложения его не устраивает).
– Требуете аудио в фоновом режиме, но не из iPod? И для этого теперь будет API (любители интернет-радио оценят).
– Завершение работы — например, когда пользователь загружал данные на определенный сайт, при переключении из программы загрузка продолжится
– Система уведомлений (местных и серверных) — когда приложение, желающее уведомить пользователя о каком-то событии, показывает на экране сообщение об этом (полученное либо с сервера, либо из недр системы)
– “Замораживание” процессов — когда при переходе из приложения состояние программы фактически “фиксируется” в памяти, а при возвращении в нее программа продолжает работать с того же места (должно быть удобно для игр).
Чем это лучше системы “каждый процесс сам за себя”, который реализован в других мобильных системах? Как это я себе представляю, именно за счет централизованного контроля на уровне системы, приложения будут получать нужные им данные без риска того, что какое-то одно из них “надругается” над батареей до полной ее разрядки. Конечно, надо смотреть вживую, как это все будет сделано на самом деле (а маркетинговые выступления Apple надо делить как минимум на два), но звучит все многообещающе и должно, по крайней мере, в вопросе многозадачности убрать у критиков iPhone хотя бы эту тему.
Расстроило меня другое — то, что это обновление системы с многозадачностью будет доступно летом только для пользователей iPhone (причем не всех, а только для моделей 3GS — 2G/3G модели пролетают), а вот для владельцев iPad это обновление обещано только осенью. Лично мне казалось, что для iPad такое обновление следует выпускать в первую очередь, но, видимо, он и так неплохо продается, а теперь, как я и предполагал, имея впереди “пряник многозадачности”, пользователи будут покупать его еще охотней. Ну а осенью, перед началом рождественских продаж в октябре, Apple выпустит для iPad программное обновление, чтобы еще дополнительно подстегнуть спрос на праздничные покупки. В принципе, с точки зрения маркетинга объяснимо, но осадок все равно остался 🙂
Однако, восторг от новых возможностей iPhone OS 4.0 потонул в воплях Adobe, которая обнаружила в новом соглашении с разработчиками в системе iPhone OS 4.0 интересное дополнение к тексту, которым Apple фактически перечеркнула возможность компиляции Flash-приложений для iPhone из нового пакета Adobe CS5, который вроде как должен поступить в продажу на этой неделе. В нем Adobe сделала замечательную, казалось бы, для своих пользователей фичу — создав приложение в Adobe Flash, можно было скомпилировать приложение для iPhone и даже потом подать его в App Store для продажи. А тут, откуда не возьмись, за неделю до выхода этого CS5 оказывается, что все усилия по созданию этой возможности пошли “коту под хвост”, благодаря всего лишь паре строк из этого соглашения. Если раньше этот пункт звучал так:

3.3.1 — Applications may only use Documented APIs in the manner prescribed by Apple and must not use or call any private APIs.

А стало так:

3.3.1 — Applications may only use Documented APIs in the manner prescribed by Apple and must not use or call any private APIs. Applications must be originally written in Objective-C, C, C++, or JavaScript as executed by the iPhone OS WebKit engine, and only code written in C, C++, and Objective-C may compile and directly link against the Documented APIs (e.g., Applications that link to Documented APIs through an intermediary translation or compatibility layer or tool are prohibited).

Если вкратце — то язык только Objective-C, и никаких фреймворков-посредников, писать надо чисто для системы iPhone OS. Adobe, конечно, обиделась, вплоть до того, что один из евангелистов технологии Flash (сотрудник Adobe, между прочим), предложил Apple пойти и совершить с собой неестественный акт (“Go screw youself, Apple”). Под это дело было вывалено немало обид и наездов на Apple, мол, это Apple сделала специально, чтобы навредить продажам CS5 (хотя она никоим образом с этим программным продуктом не конкурирует), и тд, и тп. Вы же знаете, что Стив Джобс давно на Flash нехорошо поглядывал, и тут он нанес решающий удар. А “кисо” обиделось и фыркнуло, что разработчики под Flash и так справятся, без Apple. (хочу я посмотреть, как эти разработчики под Flash будут продавать свои приложения на вебе, но это так, к делу не относится). А вообще, Илья Бирман очень хорошо написал про ситуацию с Adobe и Flash, рекомендую почитать — я бы лучше не сказал (правда, я бы все же чуть вежливее это написал).
Я надеюсь, что Илья будет не против, если я процитирую тут один абзац, который попадает в самую точку:

Зачем Эплам нужно наносить ущерб продажам ЦС5? Нет ответа. Что Эплам нужно, так это чтобы после выхода ЦС5 десятки тысяч людей не прислали своё флешевое говно, не знающее ни о мультитаче, ни об интерфейсных гайдлайнах, ни о грамотном взаимодействии с ОС, учитывающем её особенности, к ним на рассмотрение в Апстор.

Так что, как мне кажется, у истории с Flash и анонсом многозадачности в iPhone OS есть определенная связь. В частности, есть подозрение, что непрозрачность программ, сделанных в Flash (а также в MonoTouch и других кросс-платформенных инструментах) и является основным фактором “непроходимости” этих программ на платформу. Одно дело, когда программа разработана с помощью родных инструментов, ее архитектура абсолютно прозрачна и ясна, предсказуема система работы потоков внутри приложения, схема расположения ресурсов и тд.
[ad#intext-inside]
А совсем другое дело, когда приложение загружается внутри своей собственной среды или же создано с учетом кросс-платформенности, а все ее ресурсы лежат одним огромным многомегабайтным комком — в этом случае обеспечить нормальное функционирование многозадачности системы в том виде, в котором разрабатывает ее Apple, будет очень сложно (если возможно вообще). Из-за этого и возник такой запрет на сторонние инструменты разработки (и приложения, с их помощью созданные), а Adobe начала там искать вселенский заговор с целью подорвать гегемонию Creative Suite.
А дальше, я думаю, будет только интересней 🙂