2010-02-20 13 views
5

Estoy tratando de usar la fecha y hora en que se creó el SWF (revisión de control de fuente/marca de tiempo como SVN: las palabras clave no son suficientes para nuestras necesidades, necesitamos saber el tiempo de compilación, no el tiempo de compromiso).Constantes de tiempo de compilación flexible - Marca de tiempo

He intentado usar ActionScript (como la documentación sugiere que debería ser capaz de):

-define+=COMPILE::Timestamp,"new Date()" 

Pero esto da "el inicializador para un valor de configuración debe ser una constante de tiempo de compilación"

he intentado conseguir que se deje caer al terminal y utilice el comando date (utilizando diversas configuraciones individuales y dobles comillas), por ejemplo:

-define+=COMPILE::Timestamp,`date +%Y%m%d%H%M%S` 

sólo puedo g y funciona con cadenas simples y expresiones constantes simples (por ejemplo, puedo hacer 4-2 y será 2 en tiempo de ejecución. Pero no puedo hacer que haga algo cuyo valor no se conocería explícitamente en el momento en que declaro la definición.

¿Alguien ha tenido algo de suerte con algo como esto?

Respuesta

3

que tenían el mismo problema y terminó using this blog post como punto de partida. Funcionó muy bien para mí. Solo tuve que actualizar algunos pedacitos de la clase para flexionar 4. Saqué la fecha del swf cumplido.

+1

Ese enlace que proporcionó me llevó a este blog publicación: http: //www.i gorcosta.org/?p=220. Esto lo destila aún más y no introduce ninguna dependencia de biblioteca adicional. Le da acceso al tiempo de compilación de su tiempo de ejecución (no utiliza define, pero lo lee de una clase vacía a través de 'LoaderInfo.getLoaderInfoByDefinition (emptyClass) .bytes' y analiza esto usando un bytearray) – MightyE

+0

Brilliant. Gracias MightyE. – mrjrdnthms

0

La clave de su problema es más probable en la siguiente declaración del Adobe refiriéndose a tiempo de compilación Constantes: La constante puede ser un valor booleano, cadena, o un número, o una expresión que se puede evaluar en ActionScript en tiempo de compilación .

Supongo que Timestamp no está disponible en tiempo de compilación.

Sin embargo, es posible que trate de usar una cadena en lugar (algo así)

public function GetUnixTime():String{ 
var myDate:Date = new Date(); 
var unixTime:Number = Math.round(myDate.getTime()/1000); 
return unixTime.toString(); 
} 

Otra idea es que se puede obtener la información del archivo compilado.

Espero que esto ayude.

+0

La "o una expresión que se puede evaluar en ActionScript en tiempo de compilación" es lo que me dio esperanza, pero incluso el escenario más simple que pude concebir ('-define + = COMPILE :: Timestamp," Date() "') no funciona (ni tampoco 'new Date(). toString()'). Intenté crear un método como el suyo, pero da el mismo error que el indicado anteriormente, "El inicializador para un valor de configuración debe ser una constante de tiempo de compilación." – MightyE

+0

Ah, también, la marca de tiempo del disco derrota lo que estaba tratando de lograr, que era hacer que el cliente de Flex" supiera "la fecha/hora en que se creó (estoy un poco sorprendido de que no haya constantes proporcionadas de este tipo). Para usar la marca de tiempo, necesitaríamos algo del lado del servidor para leer la marca de tiempo y reportarla. Esto lo hace dependiente de la hora y la zona horaria del servidor en el que se está ejecutando, algunos servidores específicos- software adicional, y particularmente en situaciones de error (parte de lo que queremos hacer es incluir tiempo de compilación en informes de errores), esto puede fallar en nosotros. – MightyE

+0

FWIW, un pequeño fondo: esta es una biblioteca que se integrará en otras aplicaciones. No podemos garantizar necesariamente que ejecutará un tiempo de ejecución particular del lado del servidor, ni siquiera necesariamente que se ejecute en una página web, aplicación de aire, aplicación de escritorio, widget de teléfono, etc. – MightyE

0

Después de una extensa investigación, he llegado a la conclusión de que esto simplemente no es factible.

0

Si no usa FlexBuilder para hacer sus compilaciones, puede hacerlo con bastante facilidad.

Hago algo así con FlexMojos en Maven.

En la sección de configuración relevantes:

   <definesDeclaration> 
        <property><name>BUILD::buildVersion</name><value>"${project.version}"</value></property> 
        <property><name>BUILD::buildRevision</name><value>"${buildNumber}"</value></property> 
       <property><name>BUILD::buildTimestamp</name><value>"${timestamp}"</value></property> 
       </definesDeclaration> 

FlexBuilder mucho chupa bastante como un entorno de construcción por razones como el que usted mencionar

Cuestiones relacionadas