Показать сообщение отдельно
Старый 22.10.2012, 23:02
Astraport вне форума Посмотреть профиль Отправить личное сообщение для Astraport Найти все сообщения от Astraport
  № 1  
Ответить с цитированием
Astraport
 
Аватар для Astraport

блогер
Регистрация: Sep 2009
Сообщений: 2,463
Записей в блоге: 2
По умолчанию Проблема получения доступа к элементам SWF в AIR для iOS

Как известно политика безопасности не разрешает использовать вторичные SWF с кодом в iOS. Но в моем случае, в SWF запакованы только ассеты (Movie clip) с разными instance names. Поэтому проблем не должно быть в принципе.

Итак, скачиваем SWF с сервера обычным лоадером, сохраняем в applicationStorageDirectory, затем добавляем на сцену тоже лоадером и все прекрасно работает. Но только в дебаговой версии. Компилируем в ad hoc и ассеты не добавляются. Сами понимаете, нормальных трейсов в таком режиме нет, Монокль для iOS не распространяется, ошибок нет, приходится обходиться визуальными трейсами в самописном окне.

Пробуем понять причину:
Код AS3:
bgInfo //это полученный после загрузки swf LoaderInfo и судя по размеру totalBytes там все как нужно
 
_background = new (getSkinClass(bgInfo, "mcBG"))() as DisplayObject;
_background.x = (stage.stageWidth - _background.width) / 2;
_background.y = (stage.stageHeight - _background.height) / 2;
addChild(_background);
 
bgInfo.applicationDomain.getQualifiedDefinitionNames().length;// здесь у нас NaN
getDefinitionNames(bgInfo);//это класс etc, за что ему отдельное спасибо, но тоже не спасет, здесь вообще ничего не происходит, пусто.
 
public static function getSkinClass(asset_info:LoaderInfo, skinAsset:String):Class{
			try{
				var assetClass:Class = asset_info.applicationDomain.getDefinition( skinAsset ) as Class;
				return assetClass;
			} catch(e:Error) {
				throw new IllegalOperationError( 'getSkinAsset( ' + skinAsset + ' ) - error msg: ' + e.message );
			}
			return null;
		}
Что тут может быть не так? Почему такие проблемы? Бьюсь почти месяц. AIR SDK 3.3, 3.4, 3.5. Flex SDK 4.6, 4.8 - в любых комбинациях.
Прошу помочь любыми советами, наводками.

Добавлено через 10 минут
Да и ещё. Те же самые SWF прекрасно загружаются тем же кодом главного приложения, если находятся в папке с приложением (applicationDirectory). Ну это ещё можно перенести. Но совершенное чудо происходит, если сделать такой финт - не скачивать SWF с сервера, а просто скопировать (программно) из папки applicationDirectory в папку applicationStorageDirectory и потом уже от туда добавлять на сцену лоадером (код добавления везде один и тот же, меняются только урлы) - часть ассетов нормально добавляется, часть не добавляется. Без всякой логики и причин.
__________________
In Code We Trust