Конфигурации выпуска / отладки с Flash + AS3

Недавно я столкнулся с неловкой ситуацией с некоторым кодом Flash, когда мне пришлось случайно отправить клиентам сборку, в которой не все мои отладочные флаги и переменные были сброшены. (Он отправлял запросы на отладку, а не на сервер выпуска и т. Д.)

Частично это было связано с плохой организацией кода с моей стороны; Я решил это.

Однако, похоже, что Flash не позволяет устанавливать разные конфигурации сборки, а в настройках компиляции ActionScript размещены различные переключатели, расположенные таким образом, что если вы забудете что-то проверить / снять отметку (OMG, я забыл отключить поддержку отладчика!) просто случилось, как это случилось со мной. В любом случае, я считаю, что вручную перепрыгивать между моей конфигурацией выпуска и конфигурацией отладки очень легко.

Итак, другие разработчики, какие методы вы используете для безошибочного переключения между конфигурацией тестирования и конфигурацией сборки, которую вы отправляете своему боссу / клиентам / кому бы то ни было?

Я знаю, что мне, вероятно, следует притормозить, но я бы предпочел настроить что-нибудь так, чтобы я мог просто щелкнуть переключателем. Я просто возвращаюсь во Flash после долгого перерыва (Flash MX + немного 2004 года).

О, и я осознаю бесполезность отключения поддержки отладки и установки паролей импорта и всего прочего, моя цель - просто уберечь детей от скриптов в моем проекте. Декомпиляторы превзошли все это, так что .....

В любом случае, спасибо!


person Tom Corelis    schedule 28.03.2009    source источник


Ответы (4)


Я использую класс среды, например:

public class MyEnvironment {
  public static const DEBUG:Boolean = true;
  public static const SERVER:String = 'localhost';
  // More here
}

Импортируйте это в свой основной класс ActionScript и убедитесь, что все ваши вспомогательные функции ссылаются на него. Например, ваши функции отладчика должны выполняться, только если MyEnvironment.DEBUG истинно, а ваши сетевые функции должны отправлять запросы в MyEnvironment.SERVER.

В моей настройке я бы сохранил это как MyEnvironment.as. (Очевидно, что в реальной жизни имя класса будет другим.) Я бы также сохранил копии как MyEnvironment.as-debug и MyEnvironment.as-release; у последнего будут другие настройки. Затем, если мне понадобится сборка релиза, мой сценарий сборки скопирует MyEnvironment.as-release в MyEnvironment.as (перезаписав оригинал) и перекомпилирует. Это загрузит все мои настройки выпуска в мой основной класс ActionScript; напротив, если я запускаю сценарий для отладки.

person Ron DeVera    schedule 28.03.2009
comment
В порядке. Можно ли тогда управлять настройками публикации ActionScript 3 в коде? Благодарю за ваш ответ! - person Tom Corelis; 28.03.2009

Если вы используете Flash CS4, вы можете использовать константы конфигурации. Вы найдете их в разделе Параметры публикации | Параметры ActionScript3.0 ... | Константы конфигурации.

Если вы добавили DEBUG :: PLAYER, вы можете использовать такой код:

config namespace DEBUG;

//... code here ...

DEBUG::PLAYER
{
    trace("Player state here");
}

Теперь вы можете просто переключать константу между истинным и ложным.

person Jacob Poul Richardt    schedule 28.03.2009
comment
Потрясающий! Хотя, казалось бы, такого рода вещи недоступны в CS3, не так ли? - person Tom Corelis; 30.03.2009
comment
Да, я почти уверен, что это новая функция в CS4. Но я не уверен на 100%. - person Jacob Poul Richardt; 30.03.2009

Хорошая идея - использовать визуальную подсказку, когда вы находитесь в режиме отладки. Когда установлен флаг DEBUG, отобразите TextField с «режимом отладки» и, возможно, номером версии или чем-то подобным в одном из углов экрана.

Когда вы выполните последние тесты перед отправкой клиенту, вы увидите, что забыли отключить режим DEBUG.

Конечно, это зависит от того, как вы структурируете свой проект. Как описано в другом ответе, хорошо хранить флаг в «глобальном» классе высокого уровня, доступном для всего приложения.

person Sander Versluys    schedule 28.03.2009

Я использую flashvar под названием "TestingEnvironment". При запуске приложения я проверяю loaderInfo.parameters, чтобы узнать, установлено ли для него значение «true» (строковый литерал, а не логическое значение), и если это так, я устанавливаю для общедоступного статического var debugMode в экземпляре глобального класса Environment значение true. Тогда все мои классы увидят, что мы находимся в тестовой среде, и будут действовать соответственно.

Кроме того, поскольку я использую другой код страницы для встраивания для тестирования и производства, я ожидаю, что flashvar никогда не попадет во встраиваемую рабочую страницу. А если это так, его просто выключить, перекомпиляция не требуется.

person Community    schedule 06.09.2009