На прошлой неделе, пока Соединенные Штаты праздновали День жареных индеек, пришлось поближе посмотреть на зверя по имени Packager for iPhone. Появилась пара мыслей, которые хочу тут записать.
Мысли:
- Хоть и Flash Builder Burrito - еще не релиз, но уже достатно стабильная среда для разработки AIR приложений под мобильные устройства на базе Android (и не только Android, но web-приложений на Flex).
- У Flash Builder Burrito отсутствует поддержка разработки (сборка проекта, отладка в IDE, эмулятор) под iPhone. Приходится пока решать эти проблемы самостоятельно (через фунцию Eclipse Run External Tools). Но без iTunes тут не обойтись. На выходе PFI выдает IPA файл, который ручками несем на телефончик (с помощью iTunes). К слову сказать, отладка на устройстве поддерживается в каком-то виде. Но я пока не пробовал.
- Из п.1 вытекает, то что, workflow разработки под Android более простой (при запуске или отладке приложения можно выбрать где запускать приложение - на телефоне или в эмуляторе). Это было наглядно продемонстрировано на конференции Adobe MAX.
- Кросскомпиляция - это еще один большой вопрос. Известно, что Flash Player вне закона на на i-платформе. А вот под Android существует «родной» AIR, поэтому и удается достичь результатов (в т.ч. указанных в п.3).
- Из-за отсутствия «родного» runtime, в iPhone не поддерживаются многие API Flash Player-а. Но и сейчас уже можно многое делать: есть поддержка акселерометра, жестов и тачевых событий (gestures and touch events), использовать геолокационные сервисы, читать фотки из Camera Roll.
- Отсутствует поддержка родных (native) Cocoa-контролов. Это не беда, если вы делаете приложение-игру в шарики, где контролы можно и нарисовать. Но для бизнес-приложений приделтся либо эмулировать контролы (читай, рисовать свои, но похожие на «родные»). Все это ведет к тому, что приложение работает мягко говоря «небыстро».
- Из п. 6 может показаться, что все совсем плохо. Но это не так. Во Flex 4 Adobe представили инфраструктуру скинов (skins) и разделения представления (appearance) и поведения (behavior) контролов. В версии 4.5 Flex SDK появились облегченные скины и Item Renderer-ы для мобильных приложений. Так же, появились компоненты , реализующие UX паттерны мобильных приложений (компонент spark.components.View, например, представляет определенное состояние экрана приложения (Думаю по аналогии с View в Android). Совственно, приложение построено на смене этих видов (View)).
- Хотя Packager for iPhone не требует наличия установленного xCode и iPhone SDK, регистрировать в программе для разработчиков все же необходимо (для получения сертификатов и ключей, чтобы тестировать на устройстве и подписывать приложение).
- Из п.8 вытекает еще один интересный вывод - чтобы разрабатывать на Flex/AS3 под iPhone не обязательно иметь Mac. Можно и под Windows (благо, packager, как и mxml компилятор во Flex SDK написан на Java).
- Чтобы PFI скомпилировал приложение необходимо помнить 2 вещи (во всяком случае, я столкулся с такими проблемами) - передавать PFI нужно swf без отладочной информации (-debug=false флаг компилятора) и никаких RSL (все внешние библиотеки, в т.ч. Flex Framework, должны линковаться как Merge Into Code (иначе можно увидель белый экран после запуска приложения на iPhone)
- Компилируется в IPA достаточно долго (минуты две-три), не выдавая никаких сообщений о процессе компиляции (может плохо искал, но не нашел verbose mode) Т.е. если неполучилось - выдаст stacktrace, если получилось, то ничего выдаст. И да, бывают вот такие приколы
- PFI официально поддерживает AIR 2.0 SDK, но мне удалось ему скормить и приложение, которое написано с использованием AIR 2.5 (немного подправив файл манифеста).
- Изначально, PFI был представлен как часть Flash Professional CS5, но т.к. мой основной инструмент Eclipse + Flash Builder (former Flex Builder), я с флешом и не стал заморачиваться. Может там workflow более приятный.
На этом пока все. Более подробные детали настройки инфраструктуры разработки с использованием Packager for iPhone представлены в этом документе (так же тут описаны поддерживаемые API) и FAQ.
p.s. Android-ом пока не обзавелся, поэтому мучаю iPhone.
