Actualización de aplicaciones de AIR

Los usuarios pueden instalar o actualizar cualquier aplicación de AIR haciendo doble clic en el archivo de AIR de su equipo o desde un navegador (mediante la perfeccionada función de instalación). El instalador de Adobe® AIR™ gestiona la instalación y avisa al usuario si está actualizando una aplicación previa existente.

Sin embargo, también es posible permitir que las propias aplicaciones se actualicen solas mediante la clase Updater. (Una aplicación instalada puede detectar nuevas versiones disponibles para su descarga e instalación.) La clase Updater incluye un método update() que permite al usuario apuntar a un archivo de AIR de un equipo y actualizar a dicha versión. Your application must be packaged as an AIR file in order to use the Updater class. Applications packaged as a native executable or package should use the update facilities provided by the native platform.

Tanto el ID de aplicación como el ID de editor de un archivo de actualización de AIR deben coincidir para que la aplicación se actualice. El ID de editor proviene del certificado de firma. Tanto la actualización como la aplicación que va a actualizarse deben estar firmadas con el mismo certificado.

Para AIR 1.5.3 o posterior, el archivo descriptor de la aplicación incluye un elemento <publisherID>. Este elemento debe usarse si existen versiones de la aplicación desarrolladas utilizando AIR 1.5.2 o una versión anterior. Para obtener más información, consulte publisherID.

En AIR 1.1 y posterior, es posible migrar una aplicación para utilizar un nuevo certificado de firma para el código. Para migrar una aplicación y utilizar una nueva firma, es preciso firmar el archivo de actualización de AIR con el certificado nuevo y con el original. La migración de certificados es un proceso que no se puede invertir. Una vez concluida la migración, sólo se reconocerán como actualizaciones de la instalación existente aquellos archivos de AIR firmados con el nuevo certificado (o con ambos certificados).

La administración de las actualizaciones de aplicaciones puede resultar un proceso complicado. AIR 1.5 incluye el nuevo marco de actualización para las aplicaciones de AdobeAIR. Este marco proporciona las API que ayudan a los desarrolladores a ofrecer buenas capacidades de actualización en aplicaciones de AIR.

Puede utilizar la migración de certificados para pasar de un certificado firmado automáticamente a un certificado comercial de firma de código, o de uno firmado automáticamente a otro del mismo tipo. Si no migra el certificado, los usuarios existentes deberán quitar su versión actual de la aplicación para poder instalar la nueva versión. Para obtener más información, consulte Cambio de certificado.

Es recomendable incluir un mecanismo de actualización en la aplicación. Si se crea una nueva versión de la aplicación, el mecanismo de actualización puede indicar al usuario que instale la nueva versión.

El instalador de aplicaciones de AIR crea archivos de registro cuando se instala, se actualiza o se elimina una aplicación de AIR. Puede consultar estos registros para ayudar a determinar la causa de cualquier problema de instalación. Consulte Installation logs (Registros de instalación; en inglés).

Nota: las nuevas versiones del motor de ejecución Adobe AIR puede incluir versiones actualizadas de WebKit. Una versión actualizada de WebKit puede implicar cambios inesperados en el contenido HTML de una aplicación implementada de AIR. Estos cambios pueden requerir la actualización de la aplicación. Un mecanismo de actualización puede informar al usuario de la nueva versión de la aplicación. Para obtener más información, consulte Entorno HTML (para desarrolladores de ActionScript) o Entorno HTML (para desarrolladores HTML).

Actualización de aplicaciones

La clase Updater (del paquete flash.desktop) incluye un método, update(), que se puede utilizar para actualizar la aplicación actualmente en ejecución a una versión distinta. Por ejemplo, si el usuario tiene una versión del archivo de AIR ("Sample_App_v2.air") en el escritorio, el siguiente código actualizaría la aplicación:

Ejemplo de ActionScript:

var updater:Updater = new Updater(); 
var airFile:File = File.desktopDirectory.resolvePath("Sample_App_v2.air"); 
var version:String = "2.01"; 
updater.update(airFile, version);

Ejemplo de JavaScript:

var updater = new air.Updater(); 
var airFile = air.File.desktopDirectory.resolvePath("Sample_App_v2.air"); 
var version = "2.01"; 
updater.update(airFile, version);

Antes de que una aplicación utilice la clase Updater, el usuario o la aplicación deben descargar la versión actualizada del archivo de AIR en el equipo. Para obtener más información, consulte Descarga de un archivo de AIR en el equipo del usuario.

Resultados de la llamada al método Updater.update()

Cuando una aplicación del motor de ejecución llama al método update(), éste cierra la aplicación y, a continuación, intenta instalar la nueva versión del archivo de AIR. Se comprueba que el ID de aplicación y el ID de editor especificados en el archivo de AIR coinciden con el ID de aplicación y de editor de la aplicación que llama al método update(). (Para obtener más información sobre el ID de aplicación y el ID de editor, consulte AIR application descriptor files.) También comprueba si la cadena de versión coincide con la cadena version transferida al método update(). Si la instalación concluye correctamente, el motor de ejecución abre la nueva versión de la aplicación. En caso contrario (si la instalación no concluye correctamente), vuelve a abrir la versión existente de la aplicación (previa a la instalación).

En Mac OS, para instalar una versión actualizada de una aplicación, el usuario debe contar con adecuados privilegios del sistema para instalar en el directorio de la aplicación. En Windows y Linux, el usuario debe disponer de privilegios de administrador.

Si la versión actualizada de la aplicación requiere una versión actualizada del motor de ejecución, se instala la versión más reciente del motor de ejecución. Para actualizar el motor de ejecución, el usuario debe tener privilegios administrativos para el equipo.

Al verificar una aplicación con ADL, llamar al método update() produce una excepción de tiempo de ejecución.

Cadena de versión

Para que el archivo de AIR se pueda instalar, la cadena que se especifica como parámetro version del método update() debe coincidir con el elemento version o versionNumber del archivo descriptor de la aplicación para el archivo de AIR que va a instalarse. Es preciso especificar el parámetro version por motivos de seguridad. Al solicitar a la aplicación que verifique el número de versión en el archivo de AIR, la aplicación no instalará por error una versión anterior. (Una versión anterior de la aplicación puede presentar una vulnerabilidad de seguridad que se haya solucionado en la aplicación instalada actualmente.) La aplicación también comprueba la cadena de versión en el archivo de AIR y la compara con la de la aplicación instalada para evitar desactualizaciones.

Prior to AIR 2.5, the version string can be of any format. Por ejemplo, "2.01" o "versión 2". In AIR 2.5, or later, the version string must be a sequence of up to three, three-digit numbers separated by periods. For example, “.0”, “1.0”, and “67.89.999” are all valid version numbers. You should validate the update version string before updating the application.

Si una aplicación de Adobe AIR descarga un archivo de AIR por Internet, se recomienda disponer de un mecanismo que permite al servicio Web notificar a la aplicación de Adobe AIR sobre la descarga actual de la versión. La aplicación puede utilizar esta cadena como el parámetro version del método update(). Si el archivo de AIR se obtiene por otros medios que impiden conocer la versión del archivo de AIR, la aplicación de AIR puede examinar el archivo de AIR para extraer la información sobre su versión. (Un archivo de AIR es un archivo ZIP comprimido y el archivo descriptor de la aplicación es el segundo registro del archivo.)

Para obtener más información sobre el archivo descriptor de aplicación, consulte AIR application descriptor files.

Flujo de trabajo de firma para actualizaciones de la aplicación

Publishing updates in an ad-hoc manner complicates the tasks of managing multiple application versions and also makes tracking certificate expiry dates difficult. Certificates may expire before you can publish an update.

Adobe AIR runtime treats an application update published without a migration signature as a new application. Users must uninstall their current AIR application before they can install the application update.

To resolve the problem, upload each updated application with the latest certificate to a separate deployment URL. Include a mechanism that reminds you to apply migration signatures when your certificate is within the 180 days grace period. See Firma de una versión actualizada de una aplicación de AIR for more information.

See Comandos de ADT for information on how to apply signatures.

Perform the following tasks to streamline the process of applying the migration signatures:

  • Upload each updated application to a separate deployment URL.

  • Upload the upgrade descriptor XML file and the latest certificate for the update to the same URL.

  • Sign the updated application with the latest certificate.

  • Apply a migration signature to the updated application with the certificate used to sign the previous version located at a different URL.

Presentación de una interfaz de usuario personalizada para las actualizaciones de la aplicación

AIR incluye una interfaz de actualización predeterminada:

Esta interfaz siempre se utiliza la primera vez que el usuario instala la versión de una aplicación en un ordenador. Sin embargo, es posible definir una interfaz propia para utilizarla en el futuro. Si su aplicación define una interfaz de actualización personalizada, especifique un elemento customUpdateUI en el archivo descriptor de la aplicación para la aplicación instalada actualmente:

<customUpdateUI>true</customUpdateUI>

Cuando la aplicación se instale y el usuario abra un archivo de AIR con un ID de aplicación e ID de editor que coincidan con los de la aplicación instalada, será el motor de ejecución el encargado de abrir la aplicación, no el archivo de instalación predeterminado de la aplicación de AIR. For more information, see customUpdateUI.

La aplicación puede decidir, cuando se ejecute (cuando el objeto NativeApplication.nativeApplication distribuye un evento load), si actualiza o no la aplicación (con la clase Updater). Si decide actualizarse, puede presentar su propia interfaz de instalación al usuario (interfaz que no es igual que la estándar).

Descarga de un archivo de AIR en el equipo del usuario

Para poder utilizar la clase Updater, el usuario o la aplicación deben guardar primero localmente un archivo de AIR en el equipo del usuario.

Nota: AIR 1.5 incluye un marco de actualización que ayuda a los desarrolladores a ofrecer buenas capacidades de actualización en aplicaciones de AIR. El uso de este marco puede resultar mucho más sencillo que la utilización del método update() de la clase Update directamente. Para obtener más información, consulte Utilización del marco de actualización.

El siguiente código lee un archivo de AIR desde una dirección URL (http://example.com/air/updates/Sample_App_v2.air) y lo guarda en el directorio de almacenamiento de la aplicación:

Ejemplo de ActionScript:

var urlString:String = "http://example.com/air/updates/Sample_App_v2.air"; 
var urlReq:URLRequest = new URLRequest(urlString); 
var urlStream:URLStream = new URLStream(); 
var fileData:ByteArray = new ByteArray(); 
urlStream.addEventListener(Event.COMPLETE, loaded); 
urlStream.load(urlReq); 
 
function loaded(event:Event):void { 
    urlStream.readBytes(fileData, 0, urlStream.bytesAvailable); 
    writeAirFile(); 
} 
 
function writeAirFile():void { 
    var file:File = File.applicationStorageDirectory.resolvePath("My App v2.air"); 
    var fileStream:FileStream = new FileStream(); 
    fileStream.open(file, FileMode.WRITE); 
    fileStream.writeBytes(fileData, 0, fileData.length); 
    fileStream.close(); 
    trace("The AIR file is written."); 
}

Ejemplo de JavaScript:

var urlString = "http://example.com/air/updates/Sample_App_v2.air"; 
var urlReq = new air.URLRequest(urlString); 
var urlStream = new air.URLStream(); 
var fileData = new air.ByteArray(); 
urlStream.addEventListener(air.Event.COMPLETE, loaded); 
urlStream.load(urlReq); 
 
function loaded(event) { 
    urlStream.readBytes(fileData, 0, urlStream.bytesAvailable); 
    writeAirFile(); 
} 
 
function writeAirFile() { 
    var file = air.File.desktopDirectory.resolvePath("My App v2.air"); 
    var fileStream = new air.FileStream(); 
    fileStream.open(file, air.FileMode.WRITE); 
    fileStream.writeBytes(fileData, 0, fileData.length); 
    fileStream.close(); 
    trace("The AIR file is written."); 
}

Para obtener más información, consulte:

Comprobar si una aplicación se está ejecutando por primera vez

Una vez actualizada la aplicación, puede ofrecer al usuario un mensaje de bienvenida o de primeros pasos. Al iniciarse, la aplicación comprueba si se está ejecutando por primera vez para saber si debe mostrar o no el mensaje.

Nota: AIR 1.5 incluye un marco de actualización que ayuda a los desarrolladores a ofrecer buenas capacidades de actualización en aplicaciones de AIR. Este marco proporciona métodos sencillos para comprobar si una versión de una aplicación se está ejecutando por primera vez. Para obtener más información, consulte Utilización del marco de actualización.

Una forma de hacerlo es guardar un archivo en el directorio de almacenamiento de la aplicación al inicializarla. Cada vez que se inicie la aplicación, comprobará si existe este archivo. Si el archivo no existe, significa que la aplicación se está ejecutando por primera vez para el usuario. Si el archivo existe, significa que el usuario ya ha ejecutado la aplicación al menos una vez. Si el archivo existe y su número de versión es anterior a la versión actual, significa que el usuario está ejecutando la aplicación por primera vez.

Este concepto se demuestra en el siguiente ejemplo de Flex:

<?xml version="1.0" encoding="utf-8"?> 
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"  
    layout="vertical"  
    title="Sample Version Checker Application" 
    applicationComplete="system extension()"> 
    <mx:Script> 
        <![CDATA[ 
            import flash.filesystem.*; 
            public var file:File; 
            public var currentVersion:String = "1.2"; 
            public function system extension():void { 
                file = File.applicationStorageDirectory; 
                file = file.resolvePath("Preferences/version.txt"); 
                trace(file.nativePath); 
                if(file.exists) { 
                    checkVersion(); 
                } else { 
                    firstRun(); 
                } 
            } 
            private function checkVersion():void { 
                var stream:FileStream = new FileStream(); 
                stream.open(file, FileMode.READ); 
                var reversion:String = stream.readUTFBytes(stream.bytesAvailable); 
                stream.close(); 
                if (reversion != currentVersion) { 
                    log.text = "You have updated to version " + currentVersion + ".\n"; 
                } else { 
                    saveFile(); 
                } 
                log.text += "Welcome to the application."; 
            } 
            private function firstRun():void { 
                log.text = "Thank you for installing the application. \n" 
                    + "This is the first time you have run it."; 
                saveFile(); 
            } 
            private function saveFile():void { 
                var stream:FileStream = new FileStream(); 
                stream.open(file, FileMode.WRITE); 
                stream.writeUTFBytes(currentVersion); 
                stream.close(); 
            } 
        ]]> 
    </mx:Script> 
    <mx:TextArea ID="log" width="100%" height="100%" /> 
</mx:WindowedApplication>

Este concepto se muestra en el siguiente ejemplo de JavaScript:

<html> 
    <head> 
        <script src="AIRAliases.js" /> 
        <script> 
            var file; 
            var currentVersion = "1.2"; 
            function system extension() { 
                file = air.File.appStorageDirectory.resolvePath("Preferences/version.txt"); 
                air.trace(file.nativePath); 
                if(file.exists) { 
                    checkVersion(); 
                } else { 
                    firstRun(); 
                } 
            } 
            function checkVersion() { 
                var stream = new air.FileStream(); 
                stream.open(file, air.FileMode.READ); 
                var reversion = stream.readUTFBytes(stream.bytesAvailable); 
                stream.close(); 
                if (reversion != currentVersion) { 
                    window.document.getElementById("log").innerHTML  
                            = "You have updated to version " + currentVersion + ".\n"; 
                } else { 
                    saveFile(); 
                } 
                window.document.getElementById("log").innerHTML 
                                 += "Welcome to the application."; 
            } 
            function firstRun() { 
                window.document.getElementById("log").innerHTML  
                            = "Thank you for installing the application. \n" 
                            + "This is the first time you have run it."; 
                saveFile(); 
            } 
            function saveFile() { 
                var stream = new air.FileStream(); 
                stream.open(file, air.FileMode.WRITE); 
                stream.writeUTFBytes(currentVersion); 
                stream.close(); 
            } 
        </script> 
    </head> 
    <body onLoad="system extension()"> 
        <textarea ID="log" rows="100%" cols="100%" /> 
    </body> 
</html> 

Si la aplicación guarda datos localmente (por ejemplo, en el directorio de almacenamiento de la aplicación), puede buscar datos guardados previamente (de versiones anteriores) durante la primera ejecución de la aplicación.

Utilización del marco de actualización

Managing updates to applications can be tedious. The update framework for AdobeAIR applications provides APIs that enable developers to provide robustupdate capabilities in AIR applications. The AIR update framework performs the following tasks for developers:

  • Periodically check for updates based on an interval or when the user requests

  • Descargue archivos de AIR (actualizaciones) desde un origen web.

  • Alerte al usuario la primera vez que ejecuta la versión recién instalada.

  • Confirme que el usuario desea comprobar si hay actualizaciones.

  • Muestre al usuario información sobre la versión de la nueva actualización.

  • Muestre al usuario el progreso de la descarga y la información sobre los posibles errores.

El marco de actualización de AIR proporciona una interfaz de usuario de ejemplo para su aplicación. Proporciona al usuario información básica y opciones de configuración para las actualizaciones de la aplicación. La aplicación también puede definir una interfaz de usuario para su uso con el marco de actualización.

El marco de actualización de AIR permite almacenar información sobre la versión de actualización de una aplicación de AIR en sencillos archivos de configuración XML. En la mayoría de aplicaciones, al definir los archivos de configuración e incluir algo de código básico, los resultados de funcionalidad de la actualización son buenos para el usuario.

Aun sin el uso del marco de actualización, Adobe AIR incluye una clase Updater que las aplicaciones de AIR pueden emplear para actualizar a nuevas versiones. La clase Updater permite que una aplicación se actualice a una versión incluida en un archivo de AIR en el equipo del usuario. No obstante, la administración de la actualización puede implicar un proceso más complejo que el basar simplemente la actualización de la aplicación en un archivo de AIR almacenado localmente.

Archivos en el marco de actualización de AIR

El marco de actualización de AIR se incluye en el directorio frameworks/libs/air del SDK de AIR 2. Incluye los siguientes archivos:

  • applicationupdater.swc: define la funcionalidad básica de la biblioteca de actualización, para su uso en ActionScript. Esta versión no contiene interfaz de usuario.

  • applicationupdater.swf: define la funcionalidad básica de la biblioteca de actualización, para su uso en JavaScript. Esta versión no contiene interfaz de usuario.

  • applicationupdater_ui.swc: define la funcionalidad básica de la biblioteca de actualización de la versión Flex 4, incluyendo una interfaz de usuario que la aplicación puede utilizar para mostrar las opciones de actualización.

  • applicationupdater_ui.swf: define la funcionalidad básica de la biblioteca de actualización de la versión de JavaScript, incluyendo una interfaz de usuario que la aplicación puede utilizar para mostrar las opciones de actualización.

Para obtener más información, consulte las siguientes secciones:

Configuración del entorno de desarrollo de Flex

Los archivos SWC del directorio frameworks/libs/air del SDK de AIR 2 definen clases que se pueden utilizar en el desarrollo de Flex y Flash.

Para utilizar el marco de actualización al compilar con el SDK de Flex, incluya el archivo ApplicationUpdater.swc o ApplicationUpdater_UI.swc en la llamada al compilador amxmlc. En el siguiente ejemplo, el compilador carga el archivo ApplicationUpdater.swc en el subdirectorio lib del directorio Flex SDK:

amxmlc -library-path+=lib/ApplicationUpdater.swc  -- myApp.mxml

En el siguiente ejemplo, el compilador carga el archivo ApplicationUpdater_UI.swc en el subdirectorio lib del directorio Flex SDK:

amxmlc -library-path+=lib/ApplicationUpdater_UI.swc  -- myApp.mxml

Al realizar el desarrollo con el uso de Flash Builder, añada el archivo SWC en la ficha de ruta de biblioteca de la configuración de la ruta de compilación de Flex en el cuadro de diálogo de propiedades.

Asegúrese de copiar los archivos SWC en el directorio al que se hará referencia en el compilador amxmlc (usando el SDK de Flex) o Flash Builder.

Inclusión de archivos del marco en una aplicación de AIR basada en HTML

El directorio frameworks/html del marco de actualización incluye los siguientes archivos SWF:

  • ApplicationUpdater.swf: define la funcionalidad básica de la biblioteca de actualización, sin ninguna interfaz de usuario.

  • ApplicationUpdater_UI.swf: define la funcionalidad básica de la biblioteca de actualización, incluyendo una interfaz de usuario que la aplicación puede utilizar para mostrar las opciones de actualización.

El código JavaScript de las aplicaciones de AIR puede utilizar clases definidas en archivos SWF.

Para utilizar el marco de actualización, incluya el archivo ApplicationUpdater.swf o ApplicationUpdater_UI.swf en el directorio de la aplicación (o un subdirectorio) A continuación, en el archivo HTML que utilizará el marco (en código JavaScript), incluya una etiqueta script que cargue el archivo:

<script src="applicationUpdater.swf" type="application/x-shockwave-flash"/>

O bien, utilice esta etiqueta script para cargar el archivo ApplicationUpdater_UI.swf:

<script src="applicationupdater_ui.swf" type="application/x-shockwave-flash"/>

La API definida en estos dos archivos se describe en el resto del documento.

Ejemplo básico: Uso de la versión ApplicationUpdaterUI

La versión ApplicationUpdaterUI del marco de actualización proporciona una interfaz básica que se puede emplear fácilmente en la aplicación. A continuación se incluye un ejemplo básico.

En primer lugar, cree una aplicación de AIR que llame al marco de actualización:

  1. Si su aplicación es una aplicación de AIR basada en HTML, cargue el archivo applicationupdaterui.swf:

    <script src="ApplicationUpdater_UI.swf" type="application/x-shockwave-flash"/>
  2. En la lógica del programa de su aplicación de AIR, cree una instancia de un objeto ApplicationUpdaterUI.

    En ActionScript, utilice el siguiente código:

    var appUpdater:ApplicationUpdaterUI = new ApplicationUpdaterUI(); 

    En JavaScript, utilice el siguiente código:

    var appUpdater = new runtime.air.update.ApplicationUpdaterUI(); 

    Es posible que desee añadir este código en una función de inicialización que se ejecute una vez cargada la aplicación.

  3. Cree un archivo de texto denominado updateConfig.xml y añádale lo siguiente:

    <?xml version="1.0" encoding="utf-8"?> 
    <configuration xmlns="http://ns.adobe.com/air/framework/update/configuration/1.0"> 
         <url>http://example.com/updates/update.xml</url> 
        <delay>1</delay> 
    </configuration>

    Edite el elemento URL del archivo updateConfig.xml para que coincida con la ubicación final del archivo descriptor de actualización en su servidor web (consulte el siguiente procedimiento).

    delay es el número de días que la aplicación espera entre las búsquedas de actualizaciones.

  4. Añada el archivo updateConfig.xml al directorio del proyecto de su aplicación de AIR.

  5. Haga que el objeto updater haga referencia al archivo updateConfig.xml y llame al método initialize() del objeto.

    En ActionScript, utilice el siguiente código:
    appUpdater.configurationFile = new File("app:/updateConfig.xml"); 
    appUpdater.initialize();
    En JavaScript, utilice el siguiente código:
    appUpdater.configurationFile = new air.File("app:/updateConfig.xml"); 
    appUpdater.initialize();
  6. Cree una segunda versión de la aplicación de AIR que tenga una versión distinta a la primera aplicación. (La versión se especifica en el archivo descriptor de la aplicación, en el elemento version.)

A continuación, añada la versión de actualización de la aplicación de AIR al servidor web:

  1. Sitúe la versión de actualización del archivo de AIR en el servidor web.

  2. Cree un archivo de texto denominado updateDescriptor.2.5.xml y agréguele el siguiente contenido:

    <?xml version="1.0" encoding="utf-8"?> 
         <update xmlns="http://ns.adobe.com/air/framework/update/description/2.5"> 
           <versionNumber>1.1</versionNumber> 
           <url>http://example.com/updates/sample_1.1.air</url> 
           <description>This is the latest version of the Sample application.</description> 
        </update>

    Edite los elementos versionNumber, URL y description del archivo updateDescriptor.xml para que coincida con el archivo de AIR de actualización. This update descriptor format is used by applications using the update framework included with the AIR 2.5 SDK (and later).

  3. Cree un archivo de texto denominado updateDescriptor.1.0.xml y agréguele el siguiente contenido:

    <?xml version="1.0" encoding="utf-8"?> 
         <update xmlns="http://ns.adobe.com/air/framework/update/description/1.0"> 
           <version>1.1</version> 
           <url>http://example.com/updates/sample_1.1.air</url> 
           <description>This is the latest version of the Sample application.</description> 
        </update>

    Edite los elementos version, URL y description del archivo updateDescriptor.xml para que coincida con el archivo de AIR de actualización. This update descriptor format is used by applications using the update framework included with the AIR 2 SDK (and earlier).

    Nota: Creating this second update descriptor file is only necessary when you are supporting updates to applications created prior to AIR 2.5.
  4. Add the updateDescriptor.2.5.xml and updateDescriptor.1.0.xml file to the same web server directory that contains the update AIR file.

Este es un ejemplo básico, pero proporciona la funcionalidad de actualización suficiente para diversas aplicaciones. En el resto del documento se describe cómo emplear el marco de actualización para que mejor se adapte a sus necesidades.

Para obtener otro ejemplo del uso de marco de actualización, consulte las siguientes aplicaciones de ejemplo en el entro de desarrollo de Adobe AIR:

Updating to AIR 2.5

Because the rules for assigning version numbers to applications changed in AIR 2.5, the AIR 2 update framework cannot parse the version information in an AIR 2.5 application descriptor. This incompatibility means that you must update your application to use the new update framework BEFORE you update your application to use the AIR 2.5 SDK. Thus, updating your application to AIR 2.5 or later from any version of AIR before 2.5, requires TWO updates. The first update must use the AIR 2 namespace and include the AIR 2.5 update framework library (you can still create the application package using the AIR 2.5 SDK). The second update can use the AIR 2.5 namespace and include the new features of your application.

You can also have the intermediate update do nothing except update to your AIR 2.5 application using the AIR Updater class directly.

The following example illustrates how to update an application from version 1.0 to 2.0. Version 1.0 uses the old 2.0 namespace. Version 2.0 uses the 2.5 namespace and has new features implemented using AIR 2.5 APIs.

  1. Create an intermediate version of the application, version 1.0.1, based on version 1.0 of the application.

    1. Use AIR 2.5 Application Updater framework while creating the application.

      Nota: Use applicationupdater.swc or applicationupdater_ui.swc for AIR applications based on Flash technology and applicationupdater.swf or applicationupdater_ui.swf for HTML-based AIR applications.
    2. Create an update descriptor file for version 1.0.1 by using the old namespace and the version as shown below:

      <?xml version="1.0" encoding="utf-8"?> 
          <update xmlns="http://ns.adobe.com/air/framework/update/description/2.0"> 
              <version>1.0.1</version> 
              <url>http://example.com/updates/sample_1.0.1.air</url> 
              <description>This is the intermediate version.</description> 
          </update>
  2. Create the version 2.0 of the application that uses AIR 2.5 APIs and 2.5 namespace.

  3. Create an update descriptor to update the application from the 1.0.1 version to 2.0 version.

<?xml version="1.0" encoding="utf-8"?> 
    <update xmlns="http://ns.adobe.com/air/framework/update/description/2.5"> 
        <version>2.0</version> 
        <url>http://example.com/updates/sample_2.0.air</url> 
        <description>This is the intermediate version.</description> 
    </update>

Definición del archivo descriptor de actualización y adición del archivo de AIR al servidor web

Cuando se utiliza el marco de actualización de AIR, se define la información básica sobre la actualización disponible en un archivo descriptor de actualización, almacenado en el servidor web. Un archivo descriptor de actualización es un sencillo archivo XML. El marco de actualización incluido en la aplicación comprueba este archivo para ver si se ha cargado una nueva versión.

Formato del archivo descriptor de actualización modificado para AIR 2.5. El nuevo formato utiliza un espacio de nombres distinto. El espacio de nombres original es “http://ns.adobe.com/air/framework/update/description/1.0”. El espacio de nombres de AIR 2.5 es “http://ns.adobe.com/air/framework/update/description/2.5”.

AIR applications created prior to AIR 2.5 can only read the version 1.0 update descriptor. AIR applications created using the updater framework included in AIR 2.5 or later can only read the version 2.5 update descriptor. Because of this version incompatibility, you often need to create two update descriptor files. The update logic in the AIR 2.5 versions of your application must download an update descriptor that uses the new format. Earlier versions of your AIR application must continue to use the original format. Both files must be modified for every update that you release (until you stop supporting versions created before AIR 2.5).

El archivo descriptor de actualización contiene los siguientes datos:

  • versionNumber: la nueva versión de la aplicación de AIR. Use the versionNumber element in update descriptors used to update AIR 2.5 applications. The value must be the same string that is used in the versionNumber element of the new AIR application descriptor file. El número de versión del archivo descriptor no coincide con el número de versión del archivo de actualización de AIR, el marco de actualización emitirá una excepción.

  • version: nueva versión de la aplicación de AIR. Use the version element in update descriptors used to update applications created prior to AIR 2.5. The value must be the same string that is used in the version element of the new AIR application descriptor file. Si la versión del archivo descriptor no coincide con la versión del archivo de actualización de AIR, el marco de actualización emitirá una excepción.

  • versionLabel—The human readable version string intended to be shown to users. The versionLabel is optional, but can only be specified in version 2.5 update descriptor files. Use it if you use a versionLabel in the application descriptor and set it to the same value.

  • url: ubicación del archivo de actualización de AIR. Se trata del archivo que contiene la versión de actualización de la aplicación de AIR.

  • description: información sobre la nueva versión. Esta información se puede mostrar al usuario durante el proceso de actualización.

Los elementos version y url son obligatorios. El elemento description es opcional.

A continuación se incluye un archivo descriptor de actualización de ejemplo de la versión 2.5:

<?xml version="1.0" encoding="utf-8"?> 
     <update xmlns="http://ns.adobe.com/air/framework/update/description/2.5"> 
       <versionNumber>1.1.1</versionNumber> 
       <url>http://example.com/updates/sample_1.1.1.air</url> 
       <description>This is the latest version of the Sample application.</description> 
    </update>

A continuación se incluye un archivo descriptor de actualización de ejemplo de la versión 1.0:

<?xml version="1.0" encoding="utf-8"?> 
     <update xmlns="http://ns.adobe.com/air/framework/update/description/1.0"> 
       <version>1.1.1</version> 
       <url>http://example.com/updates/sample_1.1.1.air</url> 
       <description>This is the latest version of the Sample application.</description> 
    </update>

Si desea definir la etiqueta description mediante varios idiomas, utilice varios elementos text que definan un atributo lang:

<?xml version="1.0" encoding="utf-8"?> 
     <update xmlns="http://ns.adobe.com/air/framework/update/description/2.5"> 
       <versionNumber>1.1.1</versionNumber> 
       <url>http://example.com/updates/sample_1.1.1.air</url> 
       <description> 
           <text xml:lang="en">English description</text> 
           <text xml:lang="fr">French description</text> 
           <text xml:lang="ro">Romanian description</text> 
       </description> 
    </update>

Sitúe el archivo descriptor de actualización, junto con el archivo de actualización de AIR, en el servidor web.

El directorio de plantillas incluido con el descriptor de actualización contiene archivos descriptores de actualización de ejemplo. Éstos incluyen versiones en un solo idioma y varios idiomas.

Creación de una instancia del objeto updater

Tras cargar el marco de actualización de AIR en su código (consulte Configuración del entorno de desarrollo de Flex e Inclusión de archivos del marco en una aplicación de AIR basada en HTML), es necesario crear una instancia del objeto updater, tal y como se muestra en el siguiente ejemplo.

Ejemplo de ActionScript:

var appUpdater:ApplicationUpdater = new ApplicationUpdater();

Ejemplo de JavaScript:

var appUpdater = new runtime.air.update.ApplicationUpdater();

El código anterior utiliza la clase ApplicationUpdater (que no proporciona ninguna interfaz de usuario). Si desea usar la clase ApplicationUpdaterUI (que proporciona una interfaz de usuario), utilice lo siguiente:

Ejemplo de ActionScript:

var appUpdater:ApplicationUpdaterUI = new ApplicationUpdaterUI();

Ejemplo de JavaScript:

var appUpdater = new runtime.air.update.ApplicationUpdaterUI();

En los ejemplos de código restantes de este documento se presupone que se ha creado una instancia de un objeto updater denominada appUpdater.

Definición de la configuración de actualización

Tanto ApplicationUpdater como ApplicationUpdaterUI se pueden configurar mediante un archivo de configuración incluido con la aplicación, o bien, a través de ActionScript o JavaScript en la aplicación.

Definición de la configuración de actualización en un archivo de configuración XML

El archivo de configuración de actualización es un archivo XML. Puede incluir los siguientes elementos:

  • updateURL: una cadena. Representa la ubicación del descriptor de actualización en el servidor remoto. Se permite cualquier ubicación URLRequest válida. Se debe definir la propiedad updateURL, a través del archivo de configuración o mediante un script (consulte Definición del archivo descriptor de actualización y adición del archivo de AIR al servidor web). Esta propiedad se debe definir antes de utilizar el elemento updater (antes de llamar al método initialize() del objeto updater, descrito en Inicialización del marco de actualización).

  • delay: un número. Representa un intervalo de tiempo determinado en días (se permiten valores similares a 0,25) para buscar actualizaciones. El valor de 0 (valor predeterminado) especifica que updater no realiza ninguna comprobación periódica automática.

El archivo de configuración para ApplicationUpdaterUI puede incluir el siguiente elemento además de los elementos updateURL y delay:

  • defaultUI: una lista de elementosdialog. Cada elemento dialog dispone de un atributo name que se corresponde con el cuadro de diálogo en la interfaz de usuario. Todos los elementos dialog cuentan con un atributo visible que define si el cuadro de diálogo es visible. El valor predeterminado es true. Entre los posibles valores para el atributo name se encuentran los siguientes:

    • "checkForUpdate": corresponde a los cuadros de diálogo de búsqueda de actualizaciones, sin actualizaciones y error de actualización.

    • "downloadUpdate": corresponde al cuadro de diálogo de descarga de actualizaciones.

    • "downloadProgress": corresponde a los cuadros de diálogo de progreso y error de descarga.

    • "installUpdate": corresponde al cuadro de diálogo de instalación de la actualización.

    • "fileUpdate": corresponde a los cuadros de diálogo de actualización de archivo, no actualización de archivo y error de archivo.

  • "unexpectedError": corresponde al cuadro de diálogo de error inesperado.

    Cuando se establece en false, el cuadro de diálogo correspondiente no aparece como parte del proceso de actualización.

A continuación se incluye un ejemplo del archivo de configuración para el marco ApplicationUpdater:

<?xml version="1.0" encoding="utf-8"?> 
<configuration xmlns="http://ns.adobe.com/air/framework/update/configuration/1.0"> 
      <url>http://example.com/updates/update.xml</url> 
      <delay>1</delay> 
</configuration>

Se muestra un ejemplo del archivo de configuración para el marco ApplicationUpdaterUI, que incluye una definición para el elemento defaultUI:

<?xml version="1.0" encoding="utf-8"?> 
<configuration xmlns="http://ns.adobe.com/air/framework/update/configuration/1.0"> 
      <url>http://example.com/updates/update.xml</url> 
      <delay>1</delay> 
      <defaultUI> 
         <dialog name="checkForUpdate" visible="false" /> 
         <dialog name="downloadUpdate" visible="false" /> 
         <dialog name="downloadProgress" visible="false" /> 
      </defaultUI> 
</configuration>

Seleccione la propiedad configurationFile en la ubicación de ese archivo:

Ejemplo de ActionScript:

appUpdater.configurationFile = new File("app:/cfg/updateConfig.xml");
Ejemplo de JavaScript:
appUpdater.configurationFile = new air.File("app:/cfg/updateConfig.xml");

El directorio de plantillas del marco de actualización incluye un archivo de configuración de ejemplo, config-template.xml.

Definición de la configuración de actualización con código ActionScript o JavaScript

Estos parámetros de configuración también se pueden establecer utilizando código en la aplicación, tal y como se muestra a continuación:

appUpdater.updateURL = " http://example.com/updates/update.xml"; 
appUpdater.delay = 1;

Las propiedades del objeto updater son updateURL y delay. Estas propiedades definen la misma configuración que los elementos updateURL y delay en el archivo de configuración: la dirección URL del archivo descriptor de actualización y el intervalo para buscar actualizaciones. Si se especifica un archivo de configuración y la configuración en código, todas las propiedades establecidas utilizando código tienen prioridad sobre la configuración correspondiente en el archivo de configuración.

Se debe definir la propiedad updateURL, a través del archivo de configuración o mediante script (consulte Definición del archivo descriptor de actualización y adición del archivo de AIR al servidor web) antes de utilizar updater (antes de llamar al método initialize() del objeto updater, descrito en Inicialización del marco de actualización).

El marco ApplicationUpdaterUI define estas propiedades adicionales del objeto updater:

  • isCheckForUpdateVisible: corresponde a los cuadros de diálogo de búsqueda de actualizaciones, sin actualizaciones y error de actualización.

  • isDownloadUpdateVisible: corresponde al cuadro de diálogo de descarga de actualizaciones.

  • isDownloadProgressVisible: corresponde a los cuadros de diálogo de progreso y error de descarga.

  • isInstallUpdateVisible: corresponde al cuadro de diálogo de instalación de la actualización.

  • isFileUpdateVisible: corresponde a los cuadros de diálogo de actualización de archivo, no actualización de archivo y error de archivo.

  • isUnexpectedErrorVisible: corresponde al cuadro de diálogo de error inesperado.

Todas las propiedades hacen referencia a uno o varios cuadros de diálogo en la interfaz de usuario ApplicationUpdaterUI. Cada propiedad es un valor booleano, con un valor predeterminado de true. Cuando se establece en false, los cuadros de diálogo correspondientes no aparecen como parte del proceso de actualización.

Estas propiedades de cuadro de diálogo anulan la configuración del archivo de configuración de actualización.

Proceso de actualización

El marco de actualización de AIR completa el proceso de actualización en los siguientes pasos:

  1. Con la inicialización de updater se verifica si se ha realizado una comprobación de actualización en el intervalo de días definido (consulte Definición de la configuración de actualización). Si hay programada una comprobación de actualización, el proceso de actualización continúa.

  2. Updater descarga e interpreta el archivo descriptor de actualización.

  3. También se descarga el archivo de actualización de AIR.

  4. Updater instala la versión actualizada de la aplicación.

El objeto updater distribuye eventos a la finalización de cada uno de estos pasos. En la versión de ApplicationUpdater, es posible cancelar los eventos que indiquen la correcta finalización de un paso en el proceso. Si cancela uno de estos eventos, se cancelará el siguiente paso del proceso. En la versión de ApplicationUpdaterUI, updater presenta un cuadro de diálogo que permite al usuario cancelar o continuar en cada paso del proceso.

Si cancela el evento, se pueden llamar a métodos del objeto updater para reanudar el proceso.

Conforme progresa la versión ApplicationUpdater de updater en el proceso de actualización, se registra su estado actual, en una propiedad currentState. Esta propiedad se establece en una cadena los siguientes posibles valores:

  • "UNINITIALIZED": updater no se ha inicializado.

  • "INITIALIZING": updater se está inicializando.

  • "READY": updater se ha inicializado.

  • "BEFORE_CHECKING": updater no ha comprobado aún el archivo descriptor de actualización.

  • "CHECKING": updater está buscando un archivo descriptor de actualización.

  • "AVAILABLE": el archivo descriptor de updater está disponible.

  • "DOWNLOADING": updater está descargando el archivo de AIR.

  • "DOWNLOADED": updater ha descargado el archivo de AIR.

  • "INSTALLING": updater está instalando el archivo de AIR.

  • "PENDING_INSTALLING": updater se ha inicializado y hay actualizaciones pendientes.

Algunos métodos del objeto updater sólo se ejecutan si updater se encuentra en un determinado estado.

Inicialización del marco de actualización

Una vez definidas las propiedades de configuración, (consulte Ejemplo básico: Uso de la versión ApplicationUpdaterUI), llame al método initialize() para inicializar la actualización:

appUpdater.initialize();

Este método realiza lo siguiente:

  • Inicializa el marco de actualización, realizando una instalación silenciosa de forma sincrónica de todas las actualizaciones pendientes. Es necesario llamar a este método durante el inicio de la aplicación, ya que es posible que reinicie la aplicación cuando se llame.

  • Compruebe si hay alguna actualización pendiente y la instala.

  • Si se produce un error durante el proceso de actualización, borra el archivo de actualización y la información de la versión del área de almacenamiento de la aplicación.

  • Si el intervalo de días de comprobación de actualización ha caducado, inicia el proceso de actualización. De lo contrario, reinicia el temporizador.

La llamada a este método puede provocar que el objeto updater distribuya los siguientes eventos:

  • UpdateEvent.INITIALIZED: se distribuye cuando se completa la inicialización.

  • ErrorEvent.ERROR: se distribuye cuando se produce un error durante la inicialización.

Al distribuir el evento UpdateEvent.INITIALIZED, el proceso de actualización se completa.

Cuando se llamada al método initialize(), updater inicia el proceso de actualización y completa todos los pasos, en función de la configuración del intervalo de demora del temporizador. No obstante, también puede iniciar el proceso de actualización en cualquier momento llamando al método checkNow() del objeto updater:

appUpdater.checkNow();

Este método no realiza ninguna operación si el proceso de actualización ya se está ejecutando. De lo contrario, inicia el proceso de actualización.

El objeto updater puede distribuir el siguiente evento como resultado de la llamada al método checkNow():

  • UpdateEvent.CHECK_FOR_UPDATE justo antes de que intente descargar el archivo descriptor de actualización.

Si se cancela el evento checkForUpdate, se puede llamar al método checkForUpdate() del objeto updater. (Consulte la siguiente sección.) Si no cancela el evento, el proceso de actualización continúa comprobando el archivo descriptor de actualización.

Administración del proceso de actualización en la versión de ApplicationUpdaterUI

En la versión de ApplicationUpdaterUI, el usuario puede cancelar el proceso mediante los botones Cancelar de los cuadros de diálogo de la interfaz de usuario. Asimismo, es posible cancelar mediante programación el proceso de actualización llamando al método cancelUpdate() del objeto ApplicationUpdaterUI.

Se pueden establecer las propiedades del objeto ApplicationUpdaterUI o definir elementos en el archivo de configuración de actualización para especificar qué confirmaciones de cuadro de diálogo muestra updater. Para obtener más información, consulte Definición de la configuración de actualización.

Administración del proceso de actualización en la versión de ApplicationUpdater

Puede llamara al método preventDefault() de los objetos de evento distribuidos mediante el objeto ApplicationUpdater con el fin de cancelar pasos del proceso de actualización (consulte Proceso de actualización). La cancelación del comportamiento predeterminado ofrece a la aplicación una oportunidad para mostrar un mensaje al usuario donde se le pregunta si se desea continuar.

En las siguientes secciones se describe cómo continuar con el proceso de actualización cuando se ha cancelado un paso del proceso.

Descarga e interpretación del archivo descriptor de actualización

El objeto ApplicationUpdater distribuye el evento checkForUpdate antes de que comience el proceso de actualización y justo antes de que updater intente descargar el archivo descriptor de actualización. Si cancela el comportamiento predeterminado del evento checkForUpdate, updater no descargará el archivo descriptor de actualización. Puede llamar al método checkForUpdate() para reanudar el proceso de actualización:

appUpdater.checkForUpdate();

Al llamar al método checkForUpdate(), updater interpreta y descarga de forma asincrónica el archivo descriptor de actualización. Como resultado de la llamada al método checkForUpdate(), el objeto updater puede distribuir los siguientes eventos:

  • StatusUpdateEvent.UPDATE_STATUS: updater ha descargado e interpretado el archivo descriptor de actualización correctamente. Este evento cuenta con las siguientes propiedades:

    • available: valor booleano. Se establece en true si existe una versión distinta disponible a la de la aplicación actual; de lo contrario, se establece en false (la versión es la misma).

    • version: cadena. La versión del archivo descriptor de la aplicación del archivo de actualización.

    • details: conjunto. Si no existen versiones localizadas de la descripción, este conjunto devuelve una cadena vacía ("") como primer elemento y la descripción como segundo elemento.

      Si existen varias versiones de la descripción (en el archivo descriptor de actualización), el conjunto contiene varios subconjuntos. Cada conjunto dispone de dos elementos: el primero es un código de idioma (como, por ejemplo, "en") y el segundo es la descripción correspondiente (una cadena) para ese idioma. Consulte Definición del archivo descriptor de actualización y adición del archivo de AIR al servidor web.

  • StatusUpdateErrorEvent.UPDATE_ERROR: hubo un error y updater no pudo descargar ni interpretar el archivo descriptor de actualización.

Descarga del archivo de actualización de AIR

El objeto ApplicationUpdater distribuye el evento updateStatus una vez que updater descarga e interpreta correctamente el archivo descriptor de actualización. El comportamiento predeterminado es comenzar a descargar el archivo de actualización, si está disponible. Si cancela este comportamiento, puede llamar al método downloadUpdate() para que se reanude el proceso de actualización:

appUpdater.downloadUpdate();

Al llamar a este método, updater descarga de forma asincrónica la versión de actualización del archivo de AIR.

El método downloadUpdate() puede distribuir los siguientes eventos:

  • UpdateEvent.DOWNLOAD_START: se ha establecido la conexión con el servidor. Al utilizar la biblioteca ApplicationUpdaterUI, este evento muestra un cuadro de diálogo con una barra de progreso para realizar un seguimiento del curso de la descarga.

  • ProgressEvent.PROGRESS: se distribuye periódicamente conforme progresa la descarga del archivo.

  • DownloadErrorEvent.DOWNLOAD_ERROR: se distribuye si se produce un error al conectar o descargar el archivo de actualización. También se distribuye para estados HTTP no válidos; por ejemplo, “404 - File not found” (No se encontró el archivo). Este evento cuenta con una propiedad errorID, un entero que define información de error adicional. Una propiedad adicional subErrorID puede incluir más información de error.

  • UpdateEvent.DOWNLOAD_COMPLETE: updater ha descargado e interpretado correctamente el archivo descriptor de actualización. Si no cancela este evento, la versión de ApplicationUpdater procede a instalar la versión de actualización. En la versión de ApplicationUpdaterUI, se muestra un cuadro de diálogo al usuario en el que puede optar por continuar con el proceso.

Actualización de la aplicación

El objeto ApplicationUpdater distribuye el evento downloadComplete cuando finaliza la descarga del archivo de actualización. Si cancela el comportamiento predeterminado, puede llamar al método installUpdate() para que se reanude el proceso de actualización:

appUpdater.installUpdate(file);

Al llamar a este método, updater instala una versión de actualización del archivo de AIR. El método incluye un parámetro, file, que es un objeto File que hace referencia al archivo de AIR para usar como actualización.

El objeto ApplicationUpdater puede distribuir el evento beforeInstall como resultado de la llamada al método installUpdate():

  • UpdateEvent.BEFORE_INSTALL: se distribuye justo antes de la instalación de la actualización. En ocasiones, resulta útil evitar la instalación de la actualización en este momento, de modo que el usuario pueda completar el trabajo actual antes de que continúe la actualización. Con la llamada al método preventDefault() del objeto Event se pospone la instalación hasta el siguiente reinicio y no puede comenzar ningún proceso de actualización adicional. (Se incluyen actualizaciones que podrían aparecer con la llamada al método checkNow() o debido a la comprobaciones periódicas.)

Instalación desde un archivo arbitrario de AIR

Puede llamar al método installFromAIRFile() para instalar la versión de actualización desde un archivo de AIR en el equipo del usuario:

appUpdater.installFromAIRFile();

Este método hace que updater instale una versión de actualización de la aplicación desde el archivo de AIR.

El método installFromAIRFile() puede distribuir los siguientes eventos:

  • StatusFileUpdateEvent.FILE_UPDATE_STATUS: se distribuye una vez que ApplicationUpdater ha validado correctamente el archivo enviado utilizando el método installFromAIRFile(). Este evento tiene las propiedades siguientes:

    • available: se establece en true si existe una versión distinta disponible a la de la aplicación actual; de lo contrario, se establece en false (las versiones son las mismas).

    • version: cadena que representa la nueva versión disponible.

    • path: representa la ruta nativa del archivo de actualización.

    Puede cancelar este evento si la propiedad disponible del objeto StatusFileUpdateEvent se define como true. La cancelación del evento implica que no continúe la actualización. Llame al método installUpdate() para continuar con la actualización cancelada.

  • StatusFileUpdateErrorEvent.FILE_UPDATE_ERROR: hubo un error y updater no pudo instalar la aplicación de AIR.

Cancelación del proceso de actualización

Puede llamar al método cancelUpdate() para cancelar el proceso de actualización:

appUpdater.cancelUpdate();

Este método cancela todas las descargas pendientes, elimina todos los archivos descargados incompletos y reinicia el temporizador de comprobación periódica.

El método no realiza ninguna operación si el objeto updater se está inicializando.

Localización de la interfaz ApplicationUpdaterUI

La clase ApplicationUpdaterUI proporciona una interfaz de usuario predeterminada para el proceso de actualización. Esto incluye cuadros de diálogo que permiten al usuario iniciar y cancelar el proceso y llevar a cabo otras operaciones relacionadas.

El elemento description del archivo descriptor de actualización permite definir la descripción de la aplicación en varios idiomas. Emplee varios elementos text que definan atributos lang, tal y como se muestra a continuación:

<?xml version="1.0" encoding="utf-8"?> 
     <update xmlns="http://ns.adobe.com/air/framework/update/description/1.0"> 
       <version>1.1a1</version> 
       <url>http://example.com/updates/sample_1.1a1.air</url> 
       <description> 
           <text xml:lang="en">English description</text> 
           <text xml:lang="fr">French description</text> 
           <text xml:lang="ro">Romanian description</text> 
       </description> 
    </update>

El marco de actualización utiliza la descripción que mejor se adapta a la cadena de localización del usuario final. Para obtener más información, consulte Definición del archivo descriptor de actualización y adición del archivo de AIR al servidor web.

Los desarrolladores de Flex puede añadir directamente un nuevo idioma al paquete"ApplicationUpdaterDialogs".

Los desarrolladores de JavaScript pueden llamar al método addResources() del objeto updater. Este método agrega de forma dinámica un nuevo paquete de recursos para un idioma. El paquete de recursos define cadenas localizadas para un idioma. Estas cadenas se utilizan en distintos campos de texto de cuadro de diálogo.

Los desarrolladores de JavaScript pueden emplear la propiedad localeChain de la clase ApplicationUpdaterUI para definir la cadena de configuraciones regionales empleada en la interfaz de usuario. Generalmente sólo los desarrolladores de JavaScript (HTML) utilizan esta propiedad. Los desarrolladores de Flex pueden usar ResourceManager para administrar la cadena de configuraciones regionales.

Por ejemplo, el siguiente código de JavaScript define paquetes de recursos para rumano y húngaro:

appUpdater.addResources("ro_RO", 
                    {titleCheck: "Titlu", msgCheck: "Mesaj", btnCheck: "Buton"}); 
appUpdater.addResources("hu", {titleCheck: "Cím", msgCheck: "Üzenet"}); 
var languages = ["ro", "hu"]; 
languages = languages.concat(air.Capabilities.languages); 
var sortedLanguages = air.Localizer.sortLanguagesByPreference(languages, 
                         air.Capabilities.language, 
                         "en-US"); 
sortedLanguages.push("en-US"); 
appUpdater.localeChain = sortedLanguages;

Para obtener más información, consulte la descripción del método addResources() de la clase ApplicationUpdaterUI en la referencia del lenguaje.