
Adobe Air заметки
В первую очередь это для самого себя. Чтоб не потерять мысли :)
Перечень иконок, предоставленные Colin Holgate, thank you :)
— Для тех, кому нужна 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. постепенно буду дополнять
Перечень иконок, предоставленные 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. постепенно буду дополнять
- +5
- TheRabbit
Комментарии (15)
Ну другие форматы «экзешников», ну команды другие. Не вижу никаких повышенных сложностей и гениальностей.
Ну и боюсь 5й пункт не соответствует представляемой действительности вообще (компиляция кода). Насколько известно мне, код АС под иОС выполняется в виртуальной машине, как и в винде в флешплеере. И о какой там компиляции идет речь я не представляю. А то что аир в бинарнике целевой платформы — так а в чем он должен быть то? В бинарнике под интеловские процы? — работать же не будет.
Там происходит просто сборка: бинарник рантайма + байткод виртуальной машины флеша, который этим бинарником и выполняется.
Бинарник рантайма, байткод вирт. машины, байткод самого приложения с кодом разработчика — это все собирается в один файл из разных модулей, как конструктор лего. Те же фреймворки xcode — можно включать и отключать прямо в компиляторе в ручном режиме halfmoon. Почему Unity3D не компилирует под iOS на винде? Если все не гениально и просто? В их отмазки о том, что им это не надо — я никогда в жизни не поверю.
Методы, которые для этого используются — запатентованы компанией Adobe Systems Inc. Ничего секретного и сложного. Просто Adobe почесали затылок раньше остальных. Только в этом году Adobe запатентовала 151 решение и что-то там около 10 касаются Adobe Air.
P.S. Гениальность имелась ввиду лишь в том, что они придумали как это сделать и сделали. А не искали отмазки «почему нам это не надо» :)
Насчет целесообразности сборки под целевой платформой: есть решения, которые компилят и под Мак и под Вынь из одного кода. Причем именно компилят! Но тем не менее делают это из под отдельной именно целевой платформы. А целесообразность тут в отладке. Т.е. выгнать код под другую платформу не проблема. Проблема затем его запустить и дебажить в абсолютно другой среде. Более органично на целевой, более приспособленной платформе и компильнуть и запустить сразу в режиме отладки или релизном.
Ну а вобще ничего суперсложного не вижу. То что юнити не делают работу с иОс из под винды — плоховато, канешн. Тем более под три десктопных и андроид у них билдится из под винды.
Думаю, Адоби просто заранее на маке скомпилировала и подписала модули AIR, наподобие нативных расширений, и потом просто цепляет к ним ресурсы и байткод, вот и вся магия. Но из-за такой «гениальной» архитектуры код в разы тормознутей, чем нативный эквивалент.
Можно ссылку? Интересно почитать, что они там могли изобрести в области компилирования.
У Unity3D вообще DLL от винды работают на iOS. Ты можешь открыть любой ipa на unity3d и это увидеть своими глазами. Ничего «нативного» кроме лаунчера там нет. И даже код игры легче скомуниздить тем же рефлектором. Для справки — код из iOS на Adobe Air можно вытащить тоже. Но это сложнее сделать.
И да и нет. Сама вирт. машина в виде статической либы. Но она не подписана как всё и остальное. Ты же подписываешь своими сертификатами, а не адобовскими ) Вот и подпись идет по-новой каждый раз во время сборки. По-этомо компиляция идет дольше обычного. А в начиная с 3.9 версии у них поменялся малость комппилятор и всестало быстрее. Хотя вообще не понимаю — почему они его на С++ не написали (компилятор). Неужели это не повысило бы скорость компилирования?
Подписание кода в Adobe Air происходит после того, как всё было собрано в IPA и подпись уже накатом идет. Там каждый файлик перегоняется в asm, компилируется из него и подписывается. Ты затронул правильную тему — один из патентов был на эту тему.
Ссылку дать не смогу, т.к. эта информация из «уст в уста» :) Когда переписывался с одним программистом, который в Adobe Air проекте (кстати, они почему-то не developers, а engineers) — затронули тему unity3d и более правильной организации кода самой вирт. машины. Ну я выступил типа ребят там меньше, а код у них — и javascript и с# и boo… И вообще там 3Д ide есть ) И когда мы дошли до iOS — он и сказал, что «зато у нас патент на методы и принципы создания ios файлов и их подписи из винды». В принципе я сам не проверял, но не доверять ему смысла нет. И тут я для себя решил, что их патентнами пользуются некоторые компании типа Microsoft для сборки из VisualStudio :) И за это отсегивают им денежку.
Может ты хотел сказать — «You can certainly use managed DLL's in iOS game»? Т.е. все таки не все длл от винды?
Вот managed dll и в них есть код игры на C# и прочие штуки это все тоже части виртуальной машины. А бинарник самого Unity3D лежит как положено и у Air отдельно. Только в случае с Air — все либы нативные, а не dll-ки виндовые. Либы с рисунка расковыриваются .net декомпиляторами. А это уже не может быть iOS нативом.
Вот и весь прикол. Если Unity3D научатся подписывать и собирать свои файлы как это делается в Adobe Air — у них получится сборки делать в Windows для iOS. И никакие отмазки типа Apple это запрещает не прокатят. Кому надо — тому разрешают.
Короче говоря — я из iOS приложения на Adobe Air могу гарантированно вытащить abc код и открыть его дизассемблером и выгнать из него as3 код назад. Ну или не заморачиваться так — просто распарсить abc код в as3 файлы.
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
Что делает там abc код? Не знаю. Но он часть бинарника и его можно изменить, переподписать приложение и назад записать в iOS устройство :) И всё будет работать. Но это уже взлом. Я хоть и не евангелист адобов, но если уж и ломать что-то — только Unity3D :D