| « Russian Flash Platform User Group | Особенности дебага на Mac OS » |
Показ версии flex-приложения
Часто встречается такая задача - показ информации о версии приложения в GUI. Например, пользователь нажимает кнопку About и получает информацию о том, какой версией программы пользуется.
Пожалуй самое неудачное решение - это подгрузка информации о версии во время выполнения программы (например из конфигурационного xml). В этом случае вы никогда не можете быть уверены в том, с какой версией собственно имеете дело.
Вывод: информация о версии должна быть зашита в приложение на этапе компиляции и быть доступна в коде.
Способы решения:
- захардкодить информацию о версии в коде Это самый простой способ, который некоторые используют. Например, можно задействовать с этой целью несколько констант. Однако способ может быть продуктивным только, если вы полностью уверены, что в один прекрасный момент не забудете обновить значение версии. И это абсолютно не продуктивно, если у вас есть разные версии приложения, основанные на одной и той же версии кода.
- сделать include .as-файла с необходимыми данными Этот способ тоже требует ответственности от вас, так как файл тоже будет необходимо обновлять. Но этот способ достаточно удобен, если генерить as-файл автоматически при сборке. Похожий способ описан в посте Adding Build, Build Date, Revision and Revision Date in your Flex App.
- при сборке автоматически обновлять какой-то класс с информацией о версии Это просто немного другой идеологически способ, основанный на предыдущем. У вас есть какой-то класс со статическими константами, который вы автоматически корректируете при сборке. В этом случае приятно, что нет include-ов.
- использовать resource bundle (идею этого способа сгенерил Constantiner) Этот способ уже меньше похож на шаманство и больше на адекватный. Понятное дело, что автоматическая генерация properties файла принесет натоящее счастье.
- использование условной компиляции во Flex 3 Этот способ безусловно самый изящный. Более подробно можно почитать об условной компиляции в посте Условная компиляция в Flex 3 beta 2 ‘Moxie’. На английском можно почитать пост Conditional compilation in Moxie.
Приведу пример использования resource bundle.
Вы определяете (а при реальной сборке генерите автоматически), например файл Version.properties в виде:
version_number = 3.2.15
release_type = alpha
В коде используем обычный ResourceBundle API.
Вот пример для mxml.
XML:
<mx:TitleWindow x="172" y="121" width="250" height="200" layout="absolute"> | |
<mx:Text x="24" y="26" text="@Resource(key='version_number', bundle='Version')" /> | |
</mx:TitleWindow> |
Если вы знаете еще какие-то решения, то будет очень интересно их обсудить. ![]()
PS: Существует библиотека, которая частично помогает решить проблему. Эта библиотека описана в посте Release version API.
Трекбек адрес этой записи
URL трекбека (щелкните правой кнопкой мыши и скопируйте ссылку)
6 комментариев
сборку осуществляем ant-ом
Как это сделать удобнее всего IMHO во flex-е до 3-й версии:
1. Делаем template файл для версии VersionInfoTemplate.as, аля
package com.anychart {
class VersionInfo {
public static const version:String = '4.%major%.%minor%';
}
}
2. делаем ini файл version.ini
version.major=4
version.minor=0
3. в анте волшебный таргет:
<target name="updateVersionInfo">
<propertyfile file="${path.anychart}/version.ini">
<entry key="version.minor" type="int" operation="+" value="1" />
</propertyfile>
<property file="${path.anychart}/version.ini" />
<!-- major version -->
<copy file="${path.anychart}/src/com/anychart/VerionInfoTemplate.as"
tofile="${path.anychart}/src/com/anychart/VerionInfo.as"
overwrite="true"/>
<replace file="${path.anychart}/src/com/anychart/VerionInfo.as" token="%major%" value="${version.major}"/>
<replace file="${path.anychart}/src/com/anychart/VerionInfo.as" token="%minor%" value="${version.major}"/>
</target>
Как следствие, при каждой сборке инсталла не надо заморачиваться над версиями, они автоматически инкрементятся перед сборкой ;-)
Это для тех, кто использует flex 2
Мы используем 3-й вариант
сборку осуществляем ant-ом
Спасибо за такой подробный и полезный комментарий. Очень приятно, когда такие комментарии читаешь.
еще удобно версию из svn брать
Согласна. Вообще сложно себе представить работу без использования системы контроля версий.
Потому как номер версии это обычно изменение API.
Приведу пример:
Если у вас есть зависимость от версии библиотеки, то при её перекомпиляции, всё продолжает работать.
Думаю что более правильно назвать это номер сборки.
Потому как номер версии это обычно изменение API.
Я может быть не совсем прозрачно выразилась. Я не предлагаю номер версии генерить автоматически.
Автоматически генерятся уже готовые файлы с нужной структурой.