Обновление, октябрь 2012 г .:
В Adobe AIR 3.5 adl представляет функцию, называемую «поддержка нескольких SWF», которая позволяет использовать загрузчики для загрузки SWF-файлов, поставляемых в .ipa.(локальные файлы, а не с серверов), чтобы иметь код в них.Компилятор adl AOT компилирует SWF-файлы, включенные в .ipa, что позволяет загружать их и работать под iOS.
AIR 3.5 на момент написания этой статьи в настоящее время находится в стадии бета-тестирования и доступна на сайте Adobe Labs:
Обратите внимание, что для этой функции требуется -swf-version = 18 или выше корневого SWF-файла (необязательно загружаемых ресурсов) и пространства имен AIR.в XML-файле приложения заканчивается 3.5.
Предыдущий ответ:
Я хотел обновить этот ответ, потому что я многое узнал об этой проблеме с тех пор, как впервые посмотрелв него.
Корень проблемы заключается в том, что при создании приложений iOS с AIR Apple TOS запрещает интерпретацию кода во время выполнения - и это включает в себя байт-код SWF.Поэтому загрузка SWF-файлов с кодом в них (даже простые анимационные команды, такие как stop (), gotoAndPlay () и т. Д.) Запрещена и не будет работать через Loader (до AIR 3.5).
- Обратите внимание, что совершенно нормально загружать SWF-файлы для их содержимого векторной графики.Графика отобразится, но код не будет выполнен.
Однако для этого есть несколько обходных путей.Оба обходных пути позволяют избежать Loader путем компиляции ресурсов с кодом в них в основной SWF, потому что, как только они станут частью основного SWF, компилятор AIR (adt) будет кросс-компилировать код в target-c, и все будет работать нормальнона устройствах iOS.
Использование библиотек SWC
Это лучший вариант для разработки под iOS.Если вы скомпилируете свои графические ресурсы (файл .fla) в SWC (или экспортируете SWC из символов в вашей библиотеке), а затем скомпилируете свой основной SWF-файл с этими SWC-файлами, это пройдет через компилятор, и код ActionScript будет выполняться на устройствах iOS.
Использование SWFMerge для [встроенных] SWF-файлов
Внедрение ресурсов в SWF-файлы очень просто и выглядит следующим образом:
[Embed(source="GameLevel.swf")]
private var GameLevel:Class;
public function main():void
{
var my_level:* = new GameLevel();
addChild(my_level);
}
В этом случае, еслиВ gameLevel.swf есть код, обычно он не работает в iOS, потому что новый gameLevel () будет создавать Loader и интерпретировать SWF-байт-код.Но если вы сначала запустите вышеуказанный SWF-файл через мой инструмент SWFMerge, он возьмет встроенный SWF-файл и объединит его с корневым SWF-файлом.Затем ADT скомпилирует ваш основной SWF-файл (включая встроенный код) в target-C, он будет работать на iOS и обратите внимание: новый gameLevel () теперь приводит непосредственно к экземпляру вашего ресурса - НЕ к загрузчику.
Инструмент SWFMerge находится здесь:
http://www.onetacoshort.com/temp/SWFMerge_alpha.swf
Дайте мне знать в комментариях, если этот обходной путь работает для вас или у вас есть проблемы.
Использование загрузчиков
До версии AIR 3.5, если вы используете загрузчик для загрузки SWF-файла (независимо от того, включен этот SWF-файл в IPA или подается с веб-сервера), целевая SWF-графика будет загружаться очень хорошо, ноНикакой код внутри SWF не будет выполнен, опять же, потому что это запрещено Apple TOS.
Начиная с AIR 3.5, упаковка SWF-файлов в .ipa в качестве ресурсов с использованием Loader будет работать, даже если они содержат код, как этокод теперь AOT-скомпилирован adt.Для этого требуется -swf-version = 18 или более корневого SWF-файла (не обязательно активов) и пространства имен AIR, заканчивающегося 3.5 в файле XML приложения.
Однако технически возможно интерпретировать байт-код SWF, этопросто юридическое ограничение App Store не делать.Если вы хотите провести тестирование только на устройстве iOS и не будете распространять свое приложение через App Store, вы можете скомпилировать SWF-файл, используя опцию adt -target ipa-test-interpreter
, и загрузка SWF-файлов с кодом в них будет работать.