Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flash Приложения: AIR, Zinc и тд. (http://www.flasher.ru/forum/forumdisplay.php?f=94)
-   -   Проблема получения доступа к элементам SWF в AIR для iOS (http://www.flasher.ru/forum/showthread.php?t=185857)

Astraport 22.10.2012 23:02

Проблема получения доступа к элементам 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 и потом уже от туда добавлять на сцену лоадером (код добавления везде один и тот же, меняются только урлы) - часть ассетов нормально добавляется, часть не добавляется. Без всякой логики и причин.

Konung 14.11.2012 17:47

Привет, не разобрались с проблемой?

Astraport 14.11.2012 18:08

Частично - да, помогли добрые люди. Там главное в ассетах нужно имена проставить и в названии символа в библиотеке и в инстансах, ну и добавить на сцену. Обращаться по имени.

Konung 14.11.2012 18:14

Видимо ключевой момент, что на сцену надо добавлять? через getDefinition из библиотеки не получится вытянуть? у меня не получается на устройстве.

Astraport 14.11.2012 19:18

Обязательно, но не знаю насколько ключевой.

maincode 14.11.2012 21:01

Добавлять на Stage и брать по имени - это обязательно!
Если Вы задаете linkage, и пытаетесь вытащить картинку с помощью getDefinition, вы используете код(!) загруженной флешки, т.к. создаете класс(!), не важно какой (Bitmap это или Sprite), а использование кода в загруженной флешке запрещено.

Astraport 14.11.2012 21:06

Цитата:

а использование кода в загруженной флешке запрещено.
В 3.5 уже нет.

maincode 14.11.2012 23:51

интересно, не знал )

Karmodi 15.11.2012 08:34

Приветствия. Подскажите пожалуйста. У меня схожая проблема, надо загрузить на iPad swf`ки, при этом они чаще всего содержат код - который можно ( и нужно ) игнорировать. Можно ли это сделать не получая ошибки, если это не возможно то, есть ли возможность "отрезать" весь код на стороне сервера? Спасибо.

Astraport 15.11.2012 11:26

Цитата:

Можно ли это сделать не получая ошибки, если это не возможно то, есть ли возможность "отрезать" весь код на стороне сервера?
Какие ошибки получаете? Отрезать код на стороне сервера...


Часовой пояс GMT +4, время: 03:20.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.