Делаем iphone приложение на Flash CS5

    Итак, в связи с тем, что Apple сняли волшебное ограничение и теперь на Adobe Flash CS5 можно официально делать iPhone/iPad приложения (детали: flash-ripper.com), вашим глазам представляется тутор — как сделать это своими руками.

    Что сделаем:
    Простенький p2p чат

    Что потребуется:
    1. Adobe Flash CS 5 (качать с adobe.com)
    2. iPhone Certificate (не пугайтесь, расскажу где взять)
    3. (по желанию) jailbroken iphone/ipad

    Итак, поехали…

    Создание iphone приложения


    Открываем Adobe Flash CS 5 и в Create New выбираем iPhone OS:

    Вуаля. Теперь можно творить.

    (в принципе вы можете пропустить все до Deploy и сделать любое свое приложение, но дело ваше)
    Поперетаскиваем на приложение компоненты:


    Поясню что и зачем:
    Your id — это id, который присваивает Adobe Stratus. По этому id можно будет установить p2p соединение с приложением и слать аудио/видео/команды напрямую.
    Remote id — это id, с которым мы соединимся/соединились

    Остальное должно быть понятно.

    Прописываем id-шники.
    TextInput возле Your Id обзовем localIdText и сделаем read-only
    TextInput возле Remote Id обзовем remoteIdText
    Большую и страшную TextArea обзовем chatLog
    Кнопку Connect — btnConnect
    Кнопку Send — btnSend

    Теперь небольшой код для фрейма:
    import flash.net.NetConnection;
    import flash.events.MouseEvent;
     
    const SERVER_ADDRESS:String = "rtmfp://stratus.adobe.com/";           
    const DEVELOPER_KEY:String = "зарегестрируйтесь в adobe stratus и вам его дадут ;-)"
     
    var connection:NetConnection;
    var streamIn:NetStream;
    var streamOut:NetStream;
     
    var isInStreamInitialized:Boolean;
     
    enabled = false;
     
    connection = new NetConnection()
    connection.addEventListener(NetStatusEvent.NET_STATUS,connStatus);               
    connection.addEventListener(AsyncErrorEvent.ASYNC_ERROR,asyncErr);               
    connection.connect(SERVER_ADDRESS+DEVELOPER_KEY);  
     
    function connStatus(event:NetStatusEvent):void{
    if (event.info.code == "NetConnection.Connect.Success"){
    localIdText.text = connection.nearID
    initOutStream();
    }
    }
     
    function asyncErr(event:AsyncErrorEvent):void{
    trace(event);
    }
     
    function initOutStream():void{
     
    isInStreamInitialized = false;
     
    enabled = true;
     
    streamOut = new NetStream(connection,NetStream.DIRECT_CONNECTIONS);
    streamOut.addEventListener(NetStatusEvent.NET_STATUS,streamStatus);
    streamOut.publish("media");
     
    var streamOutClient:Object = new Object()
    streamOutClient.onPeerConnect = function(farStream:NetStream):Boolean{  
    remoteIdText.text = farStream.farID;
    initInStream(farStream.farID);
    chatLog.text = "[Connected]\n"+chatLog.text;
    return true;         
    };
    streamOut.client = streamOutClient;
    }
     
    function initInStream(farID:String):void{
    if (isInStreamInitialized) return;
    streamIn = new NetStream(connection,farID);
    streamIn.addEventListener(NetStatusEvent.NET_STATUS,streamStatus);
    streamIn.play("media");
    streamIn.client = this;
    isInStreamInitialized = true;
    }
     
    function streamStatus(event:NetStatusEvent):void{
    trace("streamStatus: "+event.info.code);
    }
     
    function receiveMessage(msg:String):void{
    trace("receiveMessage: "+msg)
    chatLog.text = "<< "+msg+"\n"+chatLog.text;   
    }
     
    function sendMessage(msg:String):void{
    streamOut.send("receiveMessage",msg);
    chatLog.text = ">> "+msg+"\n"+chatLog.text;
    }
     
    btnSend.addEventListener(MouseEvent.CLICKfunction(e:MouseEvent):void {
    sendMessage(messageText.text);
    messageText.text = ""
     });
     
    btnConnect.addEventListener(MouseEvent.CLICKfunction(e:MouseEvent):void {
    initInStream(remoteIdText.text);
    });


    Пояснять его не буду. Кому интересно — Добро пожаловать в комментарии.
    На тему самого кода и использования Flash-евых компонентов — да, криво, да, можно нормально — но это же просто эксперимент ;-)

    Deploy


    Итак, приложение сделали. Cmd+Enter (или Ctrl+Enter)… и мы видим standalone плеер.
    Но это же скучно :-( Хочется увидеть приложение на девайсе. Пощупать его.
    Приступим. Сначала надо собрать ipa.
    Publish IPA

    Для того, что бы сделать ipa, нам потребуется iPhone certificate.
    Получить его можно двумя способами:
    1. Вы зарегистрированный Apple Developer, заплатили 100$ и у вас уже есть волшебный файл
    2. Вы просто хотите попробовать сделать iPhone приложение, или же сделать приложение для Cydia
    В первом случае все и так есть :) Во втором идем и качаем p12 отсюда

    Теперь настроим publishing. Открываем File -> Publish settings. Переходим на вкладку Flash.
    Возле Player: iPhone OS давим кнопку Settings:

    Во вкладке Deployment укажем путь к сертификату p12
    Password: 1234
    Так же укажем Provisioning profile. В результате получится примерно так:


    Все. Теперь давим File -> Publish и грустно ждем…


    В папке c fla у нас теперь лежит ipa. Уря! Осталось чуть-чуть

    Запуск ipa на iPhone/iPad

    Расскажу как это сделать в случае, когда используется серый ключик + jailbroken device.
    А сделать это очень просто:
    1. Двойной щелчок по ipa — откроется iTunes и в приложения добавится наш ipa
    2. Синхронизация с девайсом — приложение на девайсе
    Собственно все!

    Чат в действии:
    iPad:


    Mac:

    (id я набирал руками)

    Архив с fla и ipa:
    http://batsuev.com/habr/p2p-chat.zip
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 60
    • 0
      Можно было сделать общий чат с одинаковой комнатой, ну да ладно
      • +2
        а я думал Apple не любит Adobe Flash. Я проспал?
      • +2
        Не по гайдам интерфейс сделан ) Нет?
        • +2
          Я написал извинения за интерфейс и за код) Хотелось просто попробовать :)
          • +1
            Да я в порядке шутки. Забабахать флексовую шкуру что-ли для iphone чтоб по гайдам все было ) Интересно, адобовцы по такому случаю не сделают сами бесплатную?
        • НЛО прилетело и опубликовало эту надпись здесь
          • +2
            Этот ключик — подпись приложений. Естественно, в App Store приложения с ним не примут.
            Валидацию перед установкой на девайс приложение так же не пройдет, если девайс не jailbreak-нут.

            Так что с таким ключем — либо эксперименты, либо в Cydia.
            • НЛО прилетело и опубликовало эту надпись здесь
              • 0
                Честно говоря, я тоже не лазил в детали и не могу ответить на этот вопрос. Можно попробовать :)
                • 0
                  Думаю что цифровая подпись ключа. От AppStore.
            • –1
              Вот из-за таких «икспириментов» Apple и не хотели разрешать флэш. Жаль, что передумали.
              • +3
                Чем плох «икспиримент»?
                • –8
                  Всем. А в первую очередь, подходом. «Смотрите, теперь можно не напрягаясь на коленке говночятик написать!» Почему на флэше и тд, никого не интересует.
                  • +9
                    Цель была увидеть — как сделать iPhone приложение используя Flash.
                    Можно было сделать просто Hello, Habr! Это точно так же достигло бы цели.
                    «Чятег» получился ибо было интересно — будет ли работать Peer2Peer.
                    Следующий раз подберу что-нибудь более вменяемое, спасибо :)
                • +3
                  Не переживайте — «пердящих» приложений уже не пропускают )
                  • +1
                    Да я не переживаю, ворчу немножко :)
                  • НЛО прилетело и опубликовало эту надпись здесь
                    • –3
                      Бессмысленностью.
                  • 0
                    Спасибо, очень занимательно. Особенно насчет «свободного» сертификата. Теперь можно спокойно тестировать приложения на айфоне, прежде чем получать AppStore Id.
                    • 0
                      Немного поворчу — сложно это назвать тестированием, приложение работает само по себе, вы не можете поставить банально брекпоинты, вопрос по поводу нормального профайлинга так же открыт. Ну а возможность тестировать приложения на jailbreak'ом устройстве с gdb/instruments без сертификата была и ранее.
                    • +1
                      Скорей бы для Flex выпустили поддержку.
                      • 0
                        И с перфомансом поборолись заодно
                        • 0
                          A preview version of “Hero” is expected to be available later in 2010 :(
                          labs.adobe.com/technologies/flex/mobile/
                          • +1
                            Ну вообще технически превью уже есть — Download Flex Hero, но пока еще нет части, относящейся к мобилкам; думаю к AdobeMAX появится, а то и раньше.
                        • –5
                          [offtopic]2365 не прочитанных сообщений это жесть :D [/offtopic]
                          • НЛО прилетело и опубликовало эту надпись здесь
                          • +1
                            Надеюсь, приложения с таким ненативным для iPhone интерфейсом в AppStore пускать не будут.
                            А в остальном — всегда хорошо, когда большему кол-ву людей открывается возможность писать приложения.
                            • +3
                              Это дефолтный Flash-овый интерфейс и я извинился за его использование :) iPhone-овские UI компоненты к сожалению недоступны.
                            • +3
                              Как насчет тормозов флеша? Очень многие флешки не гладко бегают и на «родных» компах, как обстоят дела с аЙДевайсами?
                              • 0
                                в айДевайсах очень многие нативные решения крашатся, так что думаю у флеша с производительностью проблемы будут точно.
                                • +5
                                  все плохо — все тормозит. пока использовать не возможно — простые вещи тормозят, не говоря уже о полноценных играх или приложениях. мы дня 3 тесты гоняли — использовали разные методики портирования своих игр.
                                  • +2
                                    Оно тормозит страшно:(
                                  • 0
                                    Классный туториал. Я тоже пользовался не так давно этим mobileprovision, но не так далеко копал :)
                                    По поводу скорости могу сказать, что даже такая штука будет все равно хоть слегка, но подтормаживать. И время экспорта пустой флешки в районе двух минут — тоже удручает )
                                    • 0
                                      отдельный packager доступен в Labs с конца мая labs.adobe.com/technologies/packagerforiphone/
                                      причем разрабатывать можно не только flash но и AIR. Т.е. если правильно понимаю можно использовать Flex (о чем спрашивали выше).
                                      • 0
                                        простите, а откуда у вас ключ? это ваш или где-то нашли?
                                        • +1
                                          Нашел в англоязычной статье на такую же тему. Ссылки, к сожалению, под рукой нет.
                                        • 0
                                          Круто, буду пробовать. Хочу сделать книжку рисованую и на C# это было бы для меня просто нереально, а вот на флеше может получится.
                                          Спасибо за статью!
                                          • 0
                                            А C# вроде бы никто и не прикрутил :-(

                                            Жалко, что с последними мобильными платформами умерла изначальная концепция Java — работа на любых платформах.
                                            • 0
                                              А C# вроде бы никто и не прикрутил :-(


                                              зачем Мигеля обидели?

                                              monotouch.net/
                                              • 0
                                                Посмотрел сайт по ссылке и вспомнил, что уже находил его, но вариант платить 400 долларов меня пока не устраивает.

                                                Недавно купил iPad и хочется просто попробовать что-нибудь к нему написать. Пока наиболее реальным вариантом остается мак ось под виртуалкой и учить Object C.
                                                • 0
                                                  в этом нет ничего страшного. Все остальное — от лукавого. ;-)
                                          • +2
                                            Не стоит забывать о том, что Аппле может передумать через неделю.
                                            • 0
                                              охохо) Я что-то даже не замечал этот пункт при создании нового фла файла, круто, теперь можно пользоваться удобными знакомыми компонентами)) Интересно, а в плане функциональности/скорости флэш с СДК сравнится?
                                              • 0
                                                В плане производительности готовых приложений флэш никогда не сравнится с нативными приложениями на Objective C (если только приложения не совсем кривые). Просто по своей природе.
                                                • –1
                                                  Benchmark'и никого не интересуют. Вопрос в субъективных ощущениях.
                                              • –2
                                                Теперь будет туева хуча приложений на флеш! Всякие открытко-отправлялки…
                                                • 0
                                                  и что? вы обязаны их устанавливать?
                                                  • 0
                                                    я уже никому ничем не обязан, но вот захламление app store будет
                                              • 0
                                                приложения под iphone теперь можно ваять в среде windows?
                                                • 0
                                                  Класс, получилось!
                                                  А для iPad сейчас нет возможности таким образом делать приложения?
                                                  • +1
                                                    есть, после обновления Flash CS5 появляется профиль и для iPad.
                                                    • 0
                                                      Оооо, что же я не обновлялся
                                                      Спасибо!
                                                  • 0
                                                    Создал приложение в Flash, по Вашей статье. Но когда пытаюсь записать его на iPhone, то iTunes выдает ошибку: Данное приложение не совместимо с этим iPhone.

                                                    В чем может быть проблема?

                                                    iPhone 3g, 4.2.1
                                                    • 0
                                                      Честно говоря — не знаю. Эксперимент был давно и больше я эту тему сильно не копал. Попробуйте использовать последний flex sdk (4.5) и посмотреть.
                                                    • НЛО прилетело и опубликовало эту надпись здесь

                                                    Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.