Обновление, октябрь 2012 г .:
В Adobe AIR 3.5 adl представляет функцию, называемую «поддержка нескольких SWF», которая позволяет использовать загрузчики для загрузки SWF-файлов, поставляемых в .ipa (локальные файлы, а не с серверов), чтобы иметь код в них. Компилятор adl AOT компилирует SWF-файлы, включенные в .ipa, что позволяет загружать их и работать под iOS.
На момент написания этой статьи AIR 3.5 в настоящее время находится в стадии бета-тестирования и доступна на сайте Adobe Labs:
Обратите внимание, что для этой функции требуется -swf-version = 18 или выше корневого SWF-файла (необязательно загружаемых ресурсов) и пространства имен AIR, заканчивающегося 3.5 в XML-файле приложения.
Предыдущий ответ:
Причина, по которой внешние SWF-файлы с кодом в не работает, заключается в том, что ADT-компилятор Air кросс-компилирует ваш корневой SWF-файл (и только ваш корневой SWF-файл) в код target-c, потребляемый устройством iOS. [Встроенные] SWF-файлы и включенные в .ipa (до версии AIR 3.5) не кросс-компилируются.
Я создал обходной путь для этой проблемы для встроенных ресурсов:
[Embed(source="gameLevel.swf")]
private var gameLevel:Class;
...
addChild(new gameLevel());
В этом сценарии, если в коде gameLevel.swf содержится код, он, как правило, не будет работать в iOS, поскольку новый gameLevel () будет создавать загрузчик и интерпретировать байт-код SWF. Но если вы сначала запустите вышеуказанный SWF-файл через мой инструмент SWFMerge, он возьмет встроенный SWF-файл и объединит его с корневым SWF-файлом. В результате ADT скомпилирует ваш встроенный код в target-C, он будет работать на iOS, и обратите внимание: новый gameLevel () теперь приводит к экземпляру вашего ресурса - НЕ к загрузчику.
Инструмент SWFMerge находится здесь:
http://www.onetacoshort.com/temp/SWFMerge_alpha.swf
LMK, если этот обходной путь работает для вас, или если у вас возникли проблемы. Ура!
-Джефф