Блог от AS3Coder'a о JavaScript, HTML, CSS... и немного о Flash.

пятница, 17 сентября 2010 г.

Разработка приложений для iPhone на ActionScript 3.0 во FlashDevelop (Packager for iPhone)

Немного истории

За несколько дней до выхода последней на текущий момент среды разработки Flash-приложений Adobe Flash CS5, компания Apple выпустила запрет на разработку приложений для телефонов iPhone, используя сторонние технологии. А это означало то, что самая ожидаемая возможность новой платформы - портирование Flash-приложений на iOS (операционная система телефонов iPhone и планшетов iPad) использоваться не может. Для сообщества Flash-разработчиков это было настоящим ударом. Вокруг того события было много шума и обсуждений...

Adobe ничего не оставалось и пришлось смириться с этим. Они заявили, что прекращают все инвестиции в разработку Packager for iPhone и сконцентрируют своё внимание на мобильной платформе Android. Кстати у них это неплохо получилось: AIR и FlashPlayer уже есть на Android.

9 сентября 2010 года компания Apple заявляет об отмене ограничений на разработку приложений для iOS используя сторонние технологии. Для разработчиков Flash-платформы это стало радостной новостью. Adobe видимо тоже это обрадовало, и на забытой странице Packager for iPhone появилось специальное сообщение от 9 сентября о том, что Adobe возобнавляет работы над проектом Packager for iPhone. Я попробовал перевести его:

Недавнее заявление Apple о том, что он снял ограничения на принципы разработки третьими сторонами имеет прямые последствия для Packager для iPhone. Функция доступна для использования разработчиками уже сегодня и сейчас мы возобновим работу по развитию этой функции в будущих выпусках. Это отличная новость для разработчиков, и мы слышим от них, что новые приложения AIR для устройств iOS уже утверждены на Apple App Store. Мы хотим отметить, что ограничения на работу Flash содержимого в браузерах iOS устройств остается в силе.



Packager for iPhone

Из названия видно, что это упаковщик. Что же именно он упаковывает? А упаковывает он AIR-приложения. Т.е. мы будем разрабатывать AIR-приложения, после чего портировать их в родные для iOS инсталяторы приложения IPA файлы. Естественно нам будут доступны не все возмодности AIR. Именно поэтому Adobe собрал отдельную версию AIR SDK и назвал её «Packager for iPhone», который также умеет конвертировать приложения AIR в IPA.

Использование упаковщика доступно нам в двух вариантах:
  • Встроенные функции во Flash CS5
  • Отлельная библиотека AIR SDK
В данном посте я хочу показать пример разработки AIR-приложений для iPhone, используя FlashDevelop совместно с AIR SDK

Настроим FlashDevelop

О том, что такое FlashDevelop, как его установить и настроить, я говорить не буду. Если у вас его еще нету, то смотрите пост "FlashDevelop: установка и настройка". Кроме того, во избежания ошибок компилятора, советую обновить Flex SDK до версии 4.0.1. Найти последнюю версию сборки можно на сайте проекта.

Первым делом нужно скачать Packager for iPhone. Ссылку можно найти на официальной странице проекта. После загрузки нужно распаковать данный архив в постоянную директорию. Например у меня он лежит по адресу: C:\Program Files\Adobe\Adobe Packager for iPhone

Теперь открываем FlashDevelop и в Tools > Custom Arguments... заводим новый аргумент с именем PackagerForiPhonePath. В значении указываем выше выбранный путь до библиотеки нашего упаковщика.



Загружаем подготовленный мной образ проекта. Кладем его в Tools > Application Data... > Projects. Если всё сделано правильно, должен появиться новый типа проекта "Packager for iPhone Projector"



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




Создадим новый проект

Идем в Project > New Project, называем наш проект "My first application for iPhone", выбираем тип проекта "Packager for iPhone Projector", жмем "OK". Получаем новый проект.



Сразу пробуем. Нажимаем F5. И видим окно нашего приложения с размерами для iPhone.



Здесь мы можем даже проэмулировать поворот девайса. Для этого выбираем Device > Rotate Left или Rotate Right. Окно приложения изменит размеры соотвественно.



Теперь подробнее расмотрим файлы проекта.



Так как это AIR-приложение мы имеем всё тоже что и в обычном AIR-проекте. Остановимся только на application.xml. Он имеет небольшие дополнения к стандартным дескрипторам.
<?xml version='1.0' encoding='UTF-8'?>
<application xmlns='http://ns.adobe.com/air/application/2.0'>
    <!--  -->
    <!-- The application ID uniquely identifies your application. 
         The recommended form is a dot-delimited, 
         reverse-DNS-style string, such as 'com.company.AppName'. 
         The compiler uses this value as the bundle ID for the iPhone application. -->
    <id>TestProject</id>
    <!--  -->
    <!-- The name used for the iPhone installer file. 
                     Do not include a plus sign (+) character in the filename. -->
    <filename>TestProject</filename>
    <!--  -->
    <!-- The name of the application displayed in the iTunes application and in the iPhone. 
         Do not include a plus sign (+) character in the name -->
    <name>Test Project</name>
    <!--  -->
    <!-- Helps users to determine which version of your application they are installing. 
         The version is used as the CFBundleVersion of the iPhone application. 
         It must be in a format similar to nnnnn[.nn[.nn]] 
                                 where n is a digit 0-9 and brackets indicate optional components, 
         such as 1, 1.0, or 1.0.1. iPhone versions must contain only digits and decimal points. 
         iPhone versions can contain up to two decimal points. -->
    <version>1.0</version>
    <!--  -->
    <!-- The element contains the following child elements to specify the properties 
                     for of the initial appearance of the application -->
    <initialWindow>
      <!--  -->
      <!-- The rendering mode used by the application. There are three possible settings:
            - cpu—The application uses the CPU to render all display objects. 
                                                  No hardware acceleration is used.
            - gpu—The application uses the iPhone GPU to composite bitmaps.
            - auto—This feature has not been implemented. -->
      <renderMode>gpu</renderMode>
      <!--  -->
      <!-- Identifies the root SWF file to compile into the iPhone application -->
      <content>TestProject.swf</content>
      <!--  -->
      <!-- Specifies that the application uses the entire screen of the iPhone -->
      <fullScreen>false</fullScreen>
      <!--  -->
      <!-- Specifies that the initial aspect ratio of the application 
                             is in portrait mode (rather than landscape). 
           Note the Default.png file used to define the initial window of the application 
                                         should be 320 pixels wide and 480 pixels high, 
           regardless of this setting. -->
      <aspectRatio>portrait</aspectRatio>
      <!--  -->
      <!-- Specifies whether the orientation of content in the application automatically 
                             reorients as the device itself changes physical orientation -->
      <autoOrients>true</autoOrients>
    </initialWindow>
</application>


На данный момент в нем не полный список дескрипторов, а только необходимый для разработки и отладки.

В следующих версиях образа проекта я буду добавлять их по необходимости. Ну если не втерпеж, полный список можно найти в официальном справочнике "Setting iPhone application properties in the application descriptor file"




Пробуем что-нибудь написать

Я написал вот такой небольшой код:
package 
{
  import flash.display.StageAlign;
  import flash.display.StageScaleMode;
  import flash.display.Stage;
  import flash.display.Sprite;
  import flash.events.Event;
  import flash.events.StageOrientationEvent;
  import flash.text.TextField;
  import flash.text.TextFieldAutoSize;
  import flash.text.TextFormatAlign;
  import flash.text.TextFormat;
  /**
   * ...
   * @author AS3Coder
   */
  public class Main extends Sprite 
  {
    private var message_txt:TextField;
    //
    function Main():void 
    {
      addEventListener(Event.ADDED_TO_STAGE, onAddToStage, false, 0, true);
    }
    //
    private function create ():void
    {
      message_txt = new TextField();
      message_txt.autoSize = TextFieldAutoSize.LEFT;
      message_txt.defaultTextFormat = new TextFormat("Tahoma", 11, 0, false, false, false, null, null, TextFormatAlign.CENTER);
      stage.addChild(message_txt);
      stage.dispatchEvent(new StageOrientationEvent(StageOrientationEvent.ORIENTATION_CHANGE));
    }
    //
    private function onAddToStage (e:Event):void
    {
      removeEventListener(Event.ADDED_TO_STAGE, onAddToStage, false);
      //
      stage.align = StageAlign.TOP_LEFT;
      stage.scaleMode = StageScaleMode.NO_SCALE;
      stage.addEventListener(StageOrientationEvent.ORIENTATION_CHANGE, onStageOrientationChange, false, 0, true);
      //
      create();
    }
    //
    private function onStageOrientationChange (e:StageOrientationEvent):void
    {
      message_txt.text = "My first application for iPhone\nStage orientation: " + stage.orientation;
      message_txt.x = stage.stageWidth * .5 - message_txt.width * .5;
      message_txt.y = stage.stageHeight * .5 - message_txt.height * .5;
    }
  }
}
Результат получился такой:



Попробуем повернуть:



Работает :)

Если вы еще не имели опыт разработки AIR-приложений, то вам сюда "Создание AIR-приложения во FlashDevelop".

Компиляция IPA-файлов

Упаковка IPA-файлов - это отдельная задача, которая требует реального устройства и получения сертификатов от Apple. Поэтому я отпущу пока эту тему. Как только у меня будет весь необходимый материал, я обязательно опишу по шагам всё решение этой задачи.




О чем еще стоит сказать

А сказать еще стоит о многом. Так как тема новая и не достаточно изученная, материала много. И рамках одного поста рассказать обо всем не получится. Пока только могу предложить пищу для размышлений, которую мы разберем позже:
В довесок хочу сказать, что Apple также обещала в скором времени выпустить свод правил для приложений, публикуемых в App Store. Так что ждем. А пока читаем публикацию Роста на эту тему: «Flash на iPad и "таблетках": о чем надо знать разработчикам».
           

Смотрите также:

7 комментариев:

  1. Хороший обзор! Спасибо! Особенно порадовало то что используете FlashDeveloper.

    ОтветитьУдалить
  2. Кладем его в Tools > Application Data... > Projects. Небольшая опечатка:
    Кладем его в Tools > Application Files... > Projects.

    ОтветитьУдалить
  3. Добрый день!

    а кто-нибудь знает где найти примеры готовых программ под айфон?
    гугл как то слабо в этом помогает, на самой адобе тоже пока не удалось найти

    ОтветитьУдалить
  4. to Alex
    Ну не знаю как гугл, но ютуб нормально помогает: http://www.youtube.com/watch?v=ZRMfTv5TW9Q&feature=related

    ОтветитьУдалить
  5. Здравствуй, спасибо за материал.
    К сожалению ссылка на Packager for iPhone не рабочая.
    Будь добр, залей куда нибудь этот архивчик.
    Заранее благодарен.

    ОтветитьУдалить
  6. Теперь должно быть Packager For iPhone входит в сборку Flex SDK или AIR SDK.

    ОтветитьУдалить
  7. Подскажите, пожалуйста, стоит ли делать

    "Теперь открываем FlashDevelop и в Tools ... указываем выше выбранный путь до библиотеки нашего упаковщика."

    Если Packager For Iphone входит в сборку Flex SDK?

    И, возможно, подскажете, чем отличается данный метод разработки от разработки через Adobe Flash CS5. Какие преимущества/недостатки у разработки приложений под iPhone есть у Flash Developer?

    Заранее спасибо.

    ОтветитьУдалить

Можно использовать некоторые HTML-теги, например <b>, <i>, <a>

Поиск по блогу

Обо мне



Farid Shamsutdinov (AS3Coder)
Russia, Tatarstan, Kazan
as3coder@gmail.com

Подробнее...

Постоянные читатели

© 2014 Farid Shamsutdinov. При копировании материалов, ссылка на источник обязательна. Технологии Blogger.