Часто встречается такая задача - показ информации о версии приложения в 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 комментариев

Комментарий от: AlDev [Посетитель] Email · http://anychart.com/blog
Мы используем 3-й вариант :)
сборку осуществляем 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
2007-12-02 @ 12:09
Комментарий от: Ira [Посетитель]
еще удобно версию из svn брать
2007-12-02 @ 12:48
Мы используем 3-й вариант :)
сборку осуществляем ant-ом


Спасибо за такой подробный и полезный комментарий. Очень приятно, когда такие комментарии читаешь.
2007-12-02 @ 14:22
еще удобно версию из svn брать


Согласна. Вообще сложно себе представить работу без использования системы контроля версий.
2007-12-02 @ 14:23
Думаю что более правильно назвать это номер сборки.
Потому как номер версии это обычно изменение API.

Приведу пример:
Если у вас есть зависимость от версии библиотеки, то при её перекомпиляции, всё продолжает работать.
2007-12-03 @ 12:50
Думаю что более правильно назвать это номер сборки.
Потому как номер версии это обычно изменение API.


Я может быть не совсем прозрачно выразилась. Я не предлагаю номер версии генерить автоматически.
Автоматически генерятся уже готовые файлы с нужной структурой.
2007-12-03 @ 17:18

Оставить комментарий


Ваш email адрес. (Не будет показан на сайте.)

Ваш URL будет показан.
:!: :?: :idea: :) :D :p B) ;) :> :roll: :oops: :| :-/ :( :'( |-| :>> :yes: ;D :P :)) 88| :. :no: XX( :lalala: :crazy: >:XX
(Заменить прерывания строк на <br />)
(Имя, email и сайт)
(Разрешить пользователям посылать вам сообщения (ваш email не отображается).)
3 + 2 + 7 - 1?
antispam test

Вы можете использовать OpenID чтобы предоставить ваше имя, email и url.