19 сентября 2010 в 18:22

Делаем 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
Александр Бацуев @AlDev
карма
43,2
рейтинг 0,0
Самое читаемое Разработка

Комментарии (60)

  • 0
    Можно было сделать общий чат с одинаковой комнатой, ну да ладно
  • +2
    а я думал Apple не любит Adobe Flash. Я проспал?
    • +8
      Apple сняли ограничения.
      www.apple.com/pr/library/2010/09/09statement.html
      In particular, we are relaxing all restrictions on the development tools used to create iOS apps
    • 0
      Это безответная любовь Adobe к Apple.
      • 0
        Правильная любовь и должна быть безусловной.
  • +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
          чем
  • 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) и посмотреть.
  • НЛО прилетело и опубликовало эту надпись здесь
    • 0
      да

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