Adobe Air заметки

В первую очередь это для самого себя. Чтоб не потерять мысли :)

Перечень иконок, предоставленные Colin Holgate, thank you :)


These are the Android sizes:

<icon>
 <image48x48>icons/48.png</image48x48>
 <image72x72>icons/72.png</image72x72>
 <image36x36>icons/36.png</image36x36>
 <image96x96>icons/96.png</image96x96>
 <image144x144>icons/144.png</image144x144>
</icon>

These are the iOS 7 sizes:

<icon>
 <image40x40>icons/40.png</image40x40>
 <image76x76>icons/76.png</image76x76>
 <image80x80>icons/80.png</image80x80>
 <image120x120>icons/120.png</image120x120>
 <image152x152>icons/152.png</image152x152>
 <image48x48>icons/48.png</image48x48>
 <image72x72>icons/72.png</image72x72>
 <image36x36>icons/36.png</image36x36>
 <image96x96>icons/96.png</image96x96>
 <image29x29>icons/29.png</image29x29>
 <image57x57>icons/57.png</image57x57>
 <image114x114>icons/114.png</image114x114>
 <image512x512>icons/512.png</image512x512>
 <image50x50>icons/50.png</image50x50>
 <image58x58>icons/58.png</image58x58>
 <image100x100>icons/100.png</image100x100>
 <image144x144>icons/144.png</image144x144>
 <image1024x1024>icons/1024.png</image1024x1024>
</icon>


— Для тех, кому нужна AS3 справка в offline — можете скачать ее тут help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/standalone.zip

— Есть такая клевая игра SnailBoy www.youtube.com/watch?v=6PVTAI0C_og и у нее последнее время пошло много негативных отзывов. Игра на Air 3.9, Starling, Nape и т.д. Причину отзывов я решил уточнить у ее автора. Оказалось 60 000+ пользователей (со слов автора игры) жаловались не на краши (их было всего 5 штук), а на невозможность загрузки уровня. Игра зависала. Автор игры заверил меня, что это не Air виноват, а он допустил косяк в коде и сейчас вопрос решен )

— Когда необходимо поменять цвет StatusBar на iOS с черного на белый — в XML дескрипторе добавляем:

UIStatusBarStyle
UIStatusBarStyleLightContent

— В Air IPAInfoPlist.java поменять XCode идентификаторы на 5.0 (сейчас 4.5)

— При сборке через коммандную строку можно настраивать уровень оптимизации и инлайна кода. А еще… можно невероятно уменьшать размер файла. Но с этим надо работать — мне просто лень ковыряться в ядре Air. Можно отрезать внеднерние frameworks встроенных в cборку.

— Air так долго делает сборку под мобилы лишь потому, что из файлов 5-20 мегабайт делается бинарник сжатый arсlite'ом

— Во время компиляции приложений Adobe Air iOS — создается байткод на ассемблере и он же собирается. При желании его можно выкусить и восстановить вручную и получить исходниник Adobe Air для iOS. Впринципе это можно делать полностью через коммандную строку. Не так, как обычно это делается. Я имею ввиду, что с помощью разных as-arm.exe, arm-apple-darwin9-as.exe, ld64.exe и т.д. идущик в комплекте с Adobe Air. Мало кто в реальности поманиет сложность и гениальность создания компилятора под iOS из под Windows. Unity3D это не просто так не могут сделать. Они будут приводить разные отмазки на этот счет. Но… просто у них видимо все на Mac OS работают и они решили не париться на этот счет :)

p.s. постепенно буду дополнять

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

0
Еще бы заметки по защите флешки добавил — вообще было бы супер.
+1
В ближайшее время сделаю. Я часть статьи написал уже.
0
ждем дополнений!
+3
Мало кто в реальности поманиет сложность и гениальность создания компилятора под iOS из под Windows
Я осмелюсь предположить, что понимаю. И полагаю, что это не сложнее чем любой другой компилятор. Поэтому задам такой вопрос: в чем принципиальная сложность и гениальность компиляции под проц иОС в отличии от тех-же пней, который под виндоуз, мак и линух? Это ведь равноценно утверждению, что компилятор С++ под иОС гениальнее компилятора С++ под виндоуз.
Ну другие форматы «экзешников», ну команды другие. Не вижу никаких повышенных сложностей и гениальностей.

Ну и боюсь 5й пункт не соответствует представляемой действительности вообще (компиляция кода). Насколько известно мне, код АС под иОС выполняется в виртуальной машине, как и в винде в флешплеере. И о какой там компиляции идет речь я не представляю. А то что аир в бинарнике целевой платформы — так а в чем он должен быть то? В бинарнике под интеловские процы? — работать же не будет.
Там происходит просто сборка: бинарник рантайма + байткод виртуальной машины флеша, который этим бинарником и выполняется.
+1
Ты понял не совсем правильно. Я говорю только про Adobe Air.

Бинарник рантайма, байткод вирт. машины, байткод самого приложения с кодом разработчика — это все собирается в один файл из разных модулей, как конструктор лего. Те же фреймворки xcode — можно включать и отключать прямо в компиляторе в ручном режиме halfmoon. Почему Unity3D не компилирует под iOS на винде? Если все не гениально и просто? В их отмазки о том, что им это не надо — я никогда в жизни не поверю.

Методы, которые для этого используются — запатентованы компанией Adobe Systems Inc. Ничего секретного и сложного. Просто Adobe почесали затылок раньше остальных. Только в этом году Adobe запатентовала 151 решение и что-то там около 10 касаются Adobe Air.

P.S. Гениальность имелась ввиду лишь в том, что они придумали как это сделать и сделали. А не искали отмазки «почему нам это не надо» :)
+2
Ну это получается «кто быстрей того и тапки». Гениальности никакой нет.

Насчет целесообразности сборки под целевой платформой: есть решения, которые компилят и под Мак и под Вынь из одного кода. Причем именно компилят! Но тем не менее делают это из под отдельной именно целевой платформы. А целесообразность тут в отладке. Т.е. выгнать код под другую платформу не проблема. Проблема затем его запустить и дебажить в абсолютно другой среде. Более органично на целевой, более приспособленной платформе и компильнуть и запустить сразу в режиме отладки или релизном.

Ну а вобще ничего суперсложного не вижу. То что юнити не делают работу с иОс из под винды — плоховато, канешн. Тем более под три десктопных и андроид у них билдится из под винды.
+2
Почему Unity3D не компилирует под iOS на винде?
Насколько я понимаю, там траблы не в самом компилировании, а в подписании бинарников.
Думаю, Адоби просто заранее на маке скомпилировала и подписала модули AIR, наподобие нативных расширений, и потом просто цепляет к ним ресурсы и байткод, вот и вся магия. Но из-за такой «гениальной» архитектуры код в разы тормознутей, чем нативный эквивалент.

Методы, которые для этого используются — запатентованы компанией Adobe Systems Inc
Можно ссылку? Интересно почитать, что они там могли изобрести в области компилирования.
0
Но из-за такой «гениальной» архитектуры код в разы тормознутей, чем нативный эквивалент.
Тормоза там не из-за этого. Архитектура кода не совсем правильная. Как говориться «Welcome to India» ))

У Unity3D вообще DLL от винды работают на iOS. Ты можешь открыть любой ipa на unity3d и это увидеть своими глазами. Ничего «нативного» кроме лаунчера там нет. И даже код игры легче скомуниздить тем же рефлектором. Для справки — код из iOS на Adobe Air можно вытащить тоже. Но это сложнее сделать.

заранее на маке скомпилировала и подписала модули AIR
И да и нет. Сама вирт. машина в виде статической либы. Но она не подписана как всё и остальное. Ты же подписываешь своими сертификатами, а не адобовскими ) Вот и подпись идет по-новой каждый раз во время сборки. По-этомо компиляция идет дольше обычного. А в начиная с 3.9 версии у них поменялся малость комппилятор и всестало быстрее. Хотя вообще не понимаю — почему они его на С++ не написали (компилятор). Неужели это не повысило бы скорость компилирования?

Подписание кода в Adobe Air происходит после того, как всё было собрано в IPA и подпись уже накатом идет. Там каждый файлик перегоняется в asm, компилируется из него и подписывается. Ты затронул правильную тему — один из патентов был на эту тему.

Можно ссылку? Интересно почитать, что они там могли изобрести в области компилирования.
Ссылку дать не смогу, т.к. эта информация из «уст в уста» :) Когда переписывался с одним программистом, который в Adobe Air проекте (кстати, они почему-то не developers, а engineers) — затронули тему unity3d и более правильной организации кода самой вирт. машины. Ну я выступил типа ребят там меньше, а код у них — и javascript и с# и boo… И вообще там 3Д ide есть ) И когда мы дошли до iOS — он и сказал, что «зато у нас патент на методы и принципы создания ios файлов и их подписи из винды». В принципе я сам не проверял, но не доверять ему смысла нет. И тут я для себя решил, что их патентнами пользуются некоторые компании типа Microsoft для сборки из VisualStudio :) И за это отсегивают им денежку.
0
У Unity3D вообще DLL от винды работают на iOS.
Хм… Не верится.
Может ты хотел сказать — «You can certainly use managed DLL's in iOS game»? Т.е. все таки не все длл от винды?
0
Ясное дело не exe на ios работает :)
Вот managed dll и в них есть код игры на C# и прочие штуки это все тоже части виртуальной машины. А бинарник самого Unity3D лежит как положено и у Air отдельно. Только в случае с Air — все либы нативные, а не dll-ки виндовые. Либы с рисунка расковыриваются .net декомпиляторами. А это уже не может быть iOS нативом.


Вот и весь прикол. Если Unity3D научатся подписывать и собирать свои файлы как это делается в Adobe Air — у них получится сборки делать в Windows для iOS. И никакие отмазки типа Apple это запрещает не прокатят. Кому надо — тому разрешают.
0
Насколько я знаю под iOS Adobe Air именно компилирует — флеш-байткод в виртуальной машине под iOS не выполняется — Сделано это по той причине, что iOS не позволяет делать JIT (Just in Time) компиляцию, которая используется в современных виртуальных машинах для оптимизации производительности — iOS запрещает выполнение кода сгенерированного динамически приложением (видимо как метод борьбы с вирусами). Поэтому Adobe AIR для iOS приходится делать так называемую AOT (Ahead of Time) компиляцию — в отличии от Android — там я так понимаю выполняется в виртуальной машине с JIT-компиляцией.
+1
Что касается именно флеш байт-кода, то он в iOS хранится внутри виртуальной машины в виде abc файлов, склеенных вместе с основными abc файлами флеш рантайма и прочими obj-c файлами.
Короче говоря — я из iOS приложения на Adobe Air могу гарантированно вытащить abc код и открыть его дизассемблером и выгнать из него as3 код назад. Ну или не заморачиваться так — просто распарсить abc код в as3 файлы.
0
Интресено что там делает флеш-байткод в этом случае — вот про то, что я говорил: blogs.adobe.com/airodynamics/2012/07/04/aot-or-interpreter/
0
И вот еще:

We created a new compiler front end that allowed LLVM to understand ActionScript 3 and used its existing ARM back end to output native ARM assembly code. We call this Ahead of Time (AOT) compilation—in contrast to the way Adobe Flash Player and Adobe AIR function on the desktop using Just in Time (JIT) compilation.

отсюда:

www.adobe.com/devnet/logged_in/abansod_iphone.html
0
В этом вся и замануха. Заставить работать такие вещи и проходить успешно iOS требования весьма не просто. И не грех патентовать ;)
Что делает там abc код? Не знаю. Но он часть бинарника и его можно изменить, переподписать приложение и назад записать в iOS устройство :) И всё будет работать. Но это уже взлом. Я хоть и не евангелист адобов, но если уж и ломать что-то — только Unity3D :D
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.