#ios #air #flash-builder
#iOS #air #flash-builder
Вопрос:
Возникли некоторые проблемы с запуском сборки релиза приложения Air IOS для Ipad (на базе starling).
Я выполняю сборку релиза и сохраняю файл ipa на своем диске. Я дважды щелкаю ipa, чтобы загрузить его в iTunes, и оттуда я устанавливаю приложение на iPad.
После установки на ipad приложению не удается загрузить какие-либо внешние файлы. Я запускаю предварительный загрузчик и пытаюсь загрузить ресурсы через Loadermax, однако, похоже, это не удается.
Вот раздел кода, в котором происходит сбой приложения: (ПРИМЕЧАНИЕ: все это работает в режиме отладки, как в Air simulator, так и в режиме отладки на устройстве через usb)
import com.greensock.events.LoaderEvent;
import com.greensock.loading.ImageLoader;
import flash.filesystem.File;
...
...
var _imageLoader:ImageLoader;
...
...
private function loadAssets():void{
var _appFile:File = File.applicationDirectory;
_appFile = _appFile.resolvePath("assets/statics/blueImage.png");
_imageLoader = new ImageLoader(_appFile.nativePath, {onComplete:onImageLoaded, onFail:onImageLoadFail});
}
private function onImageLoaded(e:LoaderEvent):void{
traceOut("OH MY GOD BATMAN, IT WORKED!!!"); // traceOut is a helper method that prints to a textfield on the display
}
private function onImageLoadFail(e:LoaderEvent):void{
traceOut("back to the Bat Cave...");
}
...
...
В режиме отладки приведенный выше код показывает:
OH MY GOD BATMAN, IT WORKED!!!
В сборке релиза:
back to the Bat Cave...
Кто-нибудь знает, где я схожу с рельсов? Я не использую какие-либо ANE или подобные.
На основе SDK: «http://ns.adobe.com/air/application/14.0«
Комментарии:
1. Вы указываете внешние файлы, которые должны быть включены в экспортированный IPA?
2. Используя flash Builder, я указываю файлы, которые должны быть включены (папки)….
3. Работает ли это при использовании стандартного режима отладки или просто режима быстрой отладки? Я предполагаю, что вы хороши в Fast, который на самом деле является просто приложением Flash, но не подходит в Standard, который представляет собой кросс-скомпилированное приложение Objective-C, которое не запускается во время выполнения Flash. Это объясняет, почему он работает в режиме отладки, а не в выпуске (который близок к стандартной отладке). Обычно я получаю доступ к встроенным файлам, используя
[Embed()]
синтаксис или, при использовании Flex,Embed()
синтаксис.4. Приложение использует слишком много ресурсов, чтобы я мог встроить их все при компиляции, поэтому я должен выполнить загрузчик. Я выполняю «стандартную» отладку на устройстве.
5. Я еще раз взглянул на параметры упаковки сборки проекта, и я вижу, что все папки «ресурсы» и «конфигурация» и вспомогательные файлы проверены, однако, когда я решаю выполнить сборку релиза, я не вижу эти папки в качестве опций для проверки / снятия флажков —- вы думаете, что это то, где все идет не так? Или я могу предположить, что, поскольку они выбраны с помощью параметров «упаковка сборки проекта», они уже включены?
Ответ №1:
ПК не чувствительны к регистру, но Ios чувствительна. В режиме симулятора или отладки имя файла «myFile» будет работать, даже если это действительно «myfile» (обратите внимание на разницу в шапке), в режиме выпуска произойдет сбой.
Если это не сработает, попробуйте использовать свойство url файла вместо nativePath. Также вы можете легко проверить, существует ли файл перед его загрузкой:
if(_appFile.exist)
Также, когда вы зависите от пользовательских фреймворков, вы заставляете себя зависеть от их недостатков. Используйте классический экземпляр загрузчика, чтобы повторить ту же операцию и посмотреть, удастся ли она. Вы будете удивлены, сколько раз пользовательский фреймворк может давать сбой при выполнении простых операций просто из-за того, как он настроен внутри.
Комментарии:
1. Хммм… Об этом не подумал, собираюсь попробовать и посмотреть, сработает ли это. Скрестив пальцы (сообщу вам в понедельник).
2. Я прокомментировал ядро приложения и довел его до точки, когда все, что оно делает, это запускает starling и загружает в sharedobject (который, похоже, работает, поскольку он достигает обработчика успеха для него), а затем я пытаюсь загрузить в XML-файл через urlloader: var _appFile:File = File.applicationDirectory.resolvePath («configuion/config.xml «); _urlLoader.load(новый запрос URL(_appFile.nativePath)); выдает ошибку ввода-вывода… (путь должен быть неправильным, или файлов там нет)… как я могу проверить, какие файлы были установлены (изучить ipa)??
3. urlloader захочет использовать свойство url файла, а не nativepath. сохраняйте nativepath только для файловых операций.
4. итак, какой там должен быть код? новый запрос URL («configuration/config.xml «)? разве собственный путь не преобразуется просто в строку типа: «varsomestuffGUIDmyAppconfigurationconfig.xml «? разве это не должно сработать? Он вылетает при отладке…
5. nativepath предоставит вам путь, который может прочитать только система, в то время как url предоставит вам URL-адрес (универсальный тип ссылки). URLLoader не может прочитать ссылку nativepath, только пакет файловой системы может. URLLoader может прочитать URL. _appFile.url был бы правильным для URLLoader. Например, на ПК собственный путь будет использовать вместо / для всех ссылок.
Ответ №2:
Во-первых, спасибо людям, которые помогли разобраться в корне этой проблемы и ее решении, особенно BotMaster.
Проблема действительно связана с Flashbuilder и ошибкой, связанной с его мастером сборки выпуска.
После прочтения этого:https://forums.adobe.com/message/5750011
Что я сделал, так это:
- нажмите кнопку «Экспортировать сборку выпуска» во Flashbuilder,
- ВАЖНО: установите флажок «Сохранить папку bin-release-temp».
- Нажмите Далее
- Нажмите «Отмена»
- С помощью проводника Windows перейдите в папку bin-debug и скопировали папки «ресурсы» и «конфигурация» в папку «bin-debug-temp», созданную flash-builder
- Я возвращаюсь к Flash Builder и снова нажимаю на кнопку «Экспортировать сборку выпуска».
- Установите флажок «Сохранить папку bin-release-temp».
- Нажмите Далее
- Установите флажки рядом с «ресурсами» и «конфигурацией», нажмите Готово.
во вновь сгенерированном файле ipa были папки, которые мне требовались.
Еще раз спасибо тем, кто внес свой вклад в устранение этой ошибки.