Можно ли встраивать или загружать SWF при создании приложений для iPhone (разрешено ли Apple) - PullRequest
4 голосов
/ 31 декабря 2011

Я немного запутался, стоит ли вставлять SWF-файлы или загружать их при создании приложений для iphone. Кто-нибудь знает, в чем преимущества каждого (который предпочтительнее использовать)? Я знаю, что встраивание SWF-файлов должно быть немного быстрее, чем их загрузка, но это все?

Кроме того, и это очень важно, я читал, что Apple отклонит любое приложение с внешними SWF-файлами. Это действительно правильно? Если да, решит ли эту проблему встраивание или загрузка указанных SWF-файлов?

Заранее спасибо

РЕДАКТИРОВАТЬ: после некоторого поиска, оказалось, что у Apple действительно есть проблемы с загрузкой внешних SWF-файлов, вы все еще можете это сделать, но ваши SWF-файлы не должны иметь прикрепленный ActionScript, вот ссылка http://whizzkid74.blogspot.com/2010/12/air-for-iphone-loading-external-swf.html Однако это ничего не говорит о встраивании swfs, поэтому мой вопрос таков: можете ли вы встраивать swfs при написании приложений на iphone ??

РЕДАКТИРОВАТЬ Чтобы уточнить, когда я говорю внешние SWF. Я имею в виду SWF, которые находятся в вашей системе локально, но вам нужно добавить их в вашу программу, так как они содержат MovieClips или Sprites и т. Д., Которые вам нужны. Я не имел в виду SWF, которые нужно загружать с веб-сайта или из онлайн-источника. (надеюсь, что все проясняет)

РЕДАКТИРОВАТЬ Изменено название вопроса ... Проблема решена, спасибо за помощь, ребята, и счастливого Нового года = D

Ответы [ 3 ]

7 голосов
/ 18 января 2012

Обновление, октябрь 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-файлов с кодом в них будет работать.

3 голосов
/ 31 декабря 2011

Я не знаком с правилами для приложений Apple и iPhone, но обычно, когда я делаю приложения / игры, я встраиваю все. Преимущества:

  • Ваша игра / приложение в одном SWF, чтобы легко поделиться
  • Ваша игра / приложение загружается быстрее, так как все ресурсы находятся там во время загрузки
  • Вы не зависите от доступа в интернет для получения своих активов (если вы загружаете их с сайта) - хорошо для приложения
  • Ваша игра / приложение будет "просто работать" - никаких проблем с безопасностью, никаких проблем с изменением URL-адресов / отключением сайта (если они внешние)
  • Если вы используете SWC вместо SWF (кстати, SWC также может быть загружен), то вы также можете воспользоваться строгой типизацией

Недостатки:

  • Если вам нужно обновить один из ваших активов, вам необходимо переиздать игру / приложение
2 голосов
/ 02 января 2012

Ответ - да, вы можете встраивать SWF, но это не единственный способ. Вы также можете использовать обычные методы Loader со всем, что связано с основным SWF:

var myLoader:Loader = new Loader();
// iOS apps act as if the main SWF is in a folder 
// and the other SWFs are in the same (or sub) folders. 
var url:URLRequest = new URLRequest("loadedSWF.swf");
myLoader.load(url);
addChild(myLoader);
myLoader.x = 50;
myLoader.y = 30;

С одним предупреждением: во время компиляции (в «Настройках Air for iOS», в списке «Включенные файлы») вы должны указать SWF-файлы, которые вы хотите загрузить, и они будут скомпилированы в IPA ,

Таким образом, вы не можете вызывать внешние SWF-файлы, но вы наверняка можете получить доступ к другим SWF-файлам с помощью тега embed или с помощью (что можно назвать) встраивания IPA.


Edit:

Поскольку вопрос и заголовок немного изменились с тех пор, как я впервые ответил на это, вот более общее резюме. Apple не позволяет загружать локальные SWF-файлы так же, как если бы вы использовали Flash Player на веб-сайте. Невозможно загрузить SWF (или что-либо еще) с использованием «относительных» или «локальных» ссылок в i-устройстве , если только этот контент не скомпилирован в приложение. Это не относится к некоторым типам «удаленной» загрузки SWF, а также не относится к «родному» кодированию Actionscript, но это не то, о чем (первоначальный) вопрос был.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...