AIR 응용 프로그램 업데이트사용자는 컴퓨터 또는 브라우저(간편한 설치 기능 사용)에서 AIR 파일을 두 번 클릭하여 AIR 응용 프로그램을 설치하거나 업데이트할 수 있습니다. Adobe® AIR® 설치 응용 프로그램은 설치를 관리하고 사용자가 기존 응용 프로그램을 업데이트하려고 할 경우 경고를 표시합니다. 그러나 Updater 클래스를 사용하여 설치된 응용 프로그램이 새 버전으로 업데이트되게 할 수도 있습니다. 설치된 응용 프로그램은 새 버전을 다운로드하고 설치할 수 있음을 감지할 수 있습니다. Updater 클래스에는 사용자 컴퓨터의 AIR 파일을 가리키고 해당 버전으로 업데이트할 수 있게 하는 update() 메서드가 포함되어 있습니다. Updater 클래스를 사용하려면 응용 프로그램이 AIR 파일로 패키지화되어야 합니다. 기본 실행 파일 또는 패키지로 패키지화된 응용 프로그램은 기본 플랫폼에서 제공하는 업데이트 기능을 사용해야 합니다. 업데이트 AIR 파일의 응용 프로그램 ID와 제작자 ID가 모두 일치해야 응용 프로그램이 업데이트됩니다. 제작자 ID는 서명 인증서에서 파생됩니다. 업데이트와 업데이트할 응용 프로그램이 모두 동일 인증서로 서명되어야 합니다. AIR 1.5.3 이상의 경우 응용 프로그램 설명자 파일에는 <publisherID> 요소가 포함됩니다. AIR 1.5.2 이하를 사용하여 개발된 응용 프로그램 버전이 있으면 이 요소를 사용해야 합니다. 자세한 내용은 publisherID를 참조하십시오. AIR 1.1 이상부터 응용 프로그램을 마이그레이션하여 새 코드 서명 인증서를 사용할 수 있습니다. 응용 프로그램을 마이그레이션하여 새 서명을 사용하려면 업데이트 AIR 파일을 새 인증서와 원래 인증서를 둘 다 사용하여 서명해야 합니다. 인증서 마이그레이션은 단방향 프로세스입니다. 마이그레이션 후에는 새 인증서(또는 두 인증서)로 서명된 AIR 파일만 기존 설치에 대한 업데이트로 인식됩니다. 응용 프로그램의 업데이트 관리는 복잡할 수 있습니다. AIR 1.5에는 AdobeAIR 응용 프로그램에 대한 새로운업데이트 프레임워크가 포함됩니다. 이 프레임워크에서는 개발자가 AIR 응용 프로그램에서 적절한 업데이트 기능을 제공하는 데 도움이 되는 API를 제공합니다. 인증서 마이그레이션을 사용하여 자체 서명된 인증서를 상용 코드 서명 인증서로 변경하거나 자체 서명된 인증서 또는 상용 인증서를 다른 자체 서명된 인증서 또는 상용 인증서로 변경할 수 있습니다. 인증서를 마이그레이션하지 않으면 새 버전을 설치하기 전에 기존 사용자가 현재 응용 프로그램 버전을 제거해야 합니다. 자세한 내용은 인증서 변경을 참조하십시오. 응용 프로그램에는 업데이트 메커니즘을 포함하는 것이 좋습니다. 응용 프로그램의 새 버전을 만들 경우 업데이트 메커니즘을 사용하면 사용자에게 새 버전을 설치하도록 알릴 수 있습니다. AIR 응용 프로그램 설치 프로그램은 AIR 응용 프로그램이 설치, 업데이트 또는 제거될 때 로그 파일을 생성합니다. 이러한 로그를 참조하여 설치 문제의 원인을 확인할 수 있습니다. 설치 로그를 참조하십시오. 참고: 새 버전의 Adobe AIR 런타임에는 업데이트된 WebKit 버전이 포함될 수 있습니다. 업데이트된 WebKit 버전은 배포된 AIR 응용 프로그램의 HTML 내용을 예상치 않게 변경시킬 수 있습니다. 이러한 변경을 위해서는 응용 프로그램을 업데이트해야 할 수 있습니다. 업데이트 메커니즘을 사용하면 응용 프로그램의 새 버전을 사용자에게 알릴 수 있습니다. 자세한 내용은 HTML 환경(ActionScript 개발자용) 또는 About the HTML environment(HTML 개발자용)을 참조하십시오.
응용 프로그램 업데이트Updater 클래스(flash.desktop 패키지에 포함됨)에 있는 update() 메서드는 현재 실행되는 응용 프로그램을 다른 버전으로 업데이트하는 데 사용할 수 있습니다. 예를 들어, 데스크톱에 특정 버전의 AIR 파일("Sample_App_v2.air")이 있는 경우 다음 코드는 응용 프로그램을 업데이트합니다. 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);
JavaScript 예제: var updater = new air.Updater();
var airFile = air.File.desktopDirectory.resolvePath("Sample_App_v2.air");
var version = "2.01";
updater.update(airFile, version);
응용 프로그램에서 Updater 클래스를 사용하기 전에 사용자나 응용 프로그램은 업데이트된 버전의 AIR 파일을 컴퓨터에 다운로드해야 합니다. 자세한 내용은 사용자 컴퓨터에 AIR 파일 다운로드를 참조하십시오. Updater.update() 메서드 호출의 결과런타임의 응용 프로그램에서 update() 메서드를 호출하면 런타임은 응용 프로그램을 닫은 다음 AIR 파일에서 새 버전을 설치하려고 합니다. 런타임은 AIR 파일에 지정된 응용 프로그램 ID 및 제작자 ID가 update() 메서드를 호출하는 응용 프로그램의 응용 프로그램 ID 및 제작자 ID와 일치하는지 확인합니다. 응용 프로그램 ID 및 제작자 ID에 대한 자세한 내용은 AIR 응용 프로그램 설명자 파일을 참조하십시오. 또한 버전 문자열이 update() 메서드에 전달된 version 문자열과 일치하는지도 확인합니다. 런타임은 설치가 성공적으로 완료되면 새 버전의 응용 프로그램을 열고, 그렇지 않으면(설치가 완료될 수 없으면) 기존(설치 전) 버전의 응용 프로그램을 다시 엽니다. Mac OS에서는 업데이트된 버전의 응용 프로그램을 설치하려면 사용자에게 응용 프로그램 디렉토리에 설치할 수 있는 적절한 시스템 권한이 필요합니다. Windows 및 Linux에서는 사용자에게 관리 권한이 있어야 합니다. 업데이트된 버전의 응용 프로그램에 업데이트된 버전의 런타임이 필요한 경우에는 새 런타임 버전이 설치됩니다. 런타임을 업데이트하려면 사용자에게 컴퓨터에 대한 관리 권한이 필요합니다. ADL을 사용하여 응용 프로그램을 테스트할 때 update() 메서드를 호출하면 런타임 예외가 발생합니다. 버전 문자열update() 메서드의 version 매개 변수로 지정된 문자열이 응용 프로그램 설명자 파일의 version 또는 versionNumber 요소에 있는 문자열과 일치해야 AIR 파일이 설치됩니다. version 매개 변수를 지정하는 것은 보안상의 이유로 필요합니다. 응용 프로그램에서 AIR 파일의 버전 번호를 확인하도록 설정하면 응용 프로그램에서 의도하지 않게 이전 버전을 설치하는 일은 없어집니다. 이전 버전의 응용 프로그램에는 현재 설치된 응용 프로그램에서 수정된 보안 취약점이 있을 수 있습니다. 또한 응용 프로그램에서는 AIR 파일의 버전 문자열을 설치된 응용 프로그램의 버전 문자열과 비교하여 다운그레이드 공격을 방지해야 합니다. AIR 2.5 이전 버전에서는 포맷에 관계없이 모든 버전 문자열을 사용할 수 있습니다. 예를 들어 "2.01" 또는 "version 2"일 수 있습니다. AIR 2.5 이상에서는 버전 문자열이 마침표로 분리된 최대 3개의 세 자리 숫자여야 합니다. 예를 들어 “.0”, “1.0” 및 “67.89.999”가 모두 유효한 버전 번호입니다. 응용 프로그램을 업데이트하기 전에 업데이트 버전 문자열의 유효성을 검사해야 합니다. Adobe AIR 응용 프로그램에서 AIR 파일을 웹을 통해 다운로드하는 경우 웹 서비스에서 Adobe AIR 응용 프로그램에 다운로드할 버전을 알릴 수 있는 메커니즘을 마련하는 것이 좋습니다. 이렇게 하면 응용 프로그램에서 이 문자열을 update() 메서드의 version 매개 변수로 사용할 수 있습니다. AIR 파일의 버전을 알 수 없는 다른 방법으로 AIR 파일을 얻은 경우 AIR 응용 프로그램에서 AIR 파일을 검사하여 버전 정보를 확인할 수 있습니다. AIR 파일은 ZIP 압축 파일이고 응용 프로그램 설명자 파일은 압축 파일의 두 번째 레코드입니다. 응용 프로그램 설명자 파일에 대한 자세한 내용은 AIR 응용 프로그램 설명자 파일을 참조하십시오. 응용 프로그램 업데이트를 위한 서명 작업 과정애드혹 방식으로 업데이트를 제작하면 여러 응용 프로그램 버전을 관리하는 작업이 복잡해지고 인증서 만료 날짜를 추적하는 일도 어려워집니다. 업데이트를 제작하기 전에 인증서가 만료될 수도 있습니다. Adobe AIR 런타임은 마이그레이션 서명 없이 제작된 응용 프로그램 업데이트를 새로운 응용 프로그램으로 취급합니다. 사용자는 먼저 현재 AIR 응용 프로그램을 제거한 후에야 응용 프로그램 업데이트를 설치할 수 있습니다. 문제를 해결하려면 별도의 배포 URL에 각각의 업데이트된 응용 프로그램을 최신 인증서와 함께 업로드하십시오. 인증서가 180일의 유예 기간 안에 있을 때는 마이그레이션 서명을 적용할 것을 알리는 메커니즘을 포함하십시오. 자세한 내용은 업데이트된 버전의 AIR 응용 프로그램에 서명을 참조하십시오. 서명을 적용하는 방법에 대한 자세한 내용은 ADT 명령을 참조하십시오. 다음 작업을 수행하여 마이그레이션 서명을 적용하는 프로세스를 간소화합니다.
사용자 정의 응용 프로그램 업데이트 사용자 인터페이스 제공AIR에는 기본 업데이트 인터페이스가 포함되어 있습니다. 이 인터페이스는 사용자가 컴퓨터에 응용 프로그램의 버전을 처음 설치할 때 항상 사용됩니다. 그러나 이후 인스턴스의 경우 사용자가 고유의 인터페이스를 정의할 수 있습니다. 응용 프로그램에서 사용자 정의 업데이트 인터페이스를 정의하는 경우 현재 설치된 응용 프로그램에 대한 응용 프로그램 설명자 파일에서 customUpdateUI 요소를 지정합니다. <customUpdateUI>true</customUpdateUI> 응용 프로그램이 설치되고 사용자가 설치된 응용 프로그램과 일치하는 응용 프로그램 ID 및 제작자 ID가 포함된 AIR 파일을 열면 런타임은 기본 AIR 응용 프로그램 설치 프로그램이 아니라 응용 프로그램을 엽니다. 자세한 내용은 customUpdateUI를 참조하십시오. 응용 프로그램에서 실행된 시기(NativeApplication.nativeApplication 객체가 load 이벤트를 전달한 시기)와 응용 프로그램을 업데이트할지 여부(Updater 클래스 사용)를 확인할 수 있습니다. 응용 프로그램에서 업데이트하도록 결정하는 경우 표준 실행 인터페이스와 다른 고유의 설치 인터페이스를 사용자에게 제공할 수 있습니다. 사용자 컴퓨터에 AIR 파일 다운로드Updater 클래스를 사용하려면 먼저 사용자나 응용 프로그램이 AIR 파일을 사용자 컴퓨터에 로컬로 저장해야 합니다. 참고: AIR 1.5에는 개발자가 AIR 응용 프로그램에서 적절한 업데이트 기능을 제공하는 데 도움이 되는 업데이트 프레임워크가 포함되어 있습니다. Update 클래스의 update() 메서드를 직접 사용하는 것보다 이 프레임워크를 사용하는 것이 훨씬 쉽습니다. 자세한 내용은 업데이트 프레임워크 사용을 참조하십시오.
다음 코드는 AIR 파일을 URL(http://example.com/air/updates/Sample_App_v2.air)에서 읽고 AIR 파일을 응용 프로그램 저장소 디렉토리에 저장합니다. 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.");
}
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.");
}
자세한 내용은 다음 항목을 참조하십시오.
응용 프로그램이 처음 실행되는지 확인응용 프로그램을 업데이트한 후 사용자에게 "시작" 또는 "환영" 메시지를 제공할 수 있습니다. 응용 프로그램은 시작될 때 처음 실행되는지 여부를 확인하므로 이러한 메시지를 표시할지 여부를 결정할 수 있습니다. 참고: AIR 1.5에는 개발자가 AIR 응용 프로그램에서 적절한 업데이트 기능을 제공하는 데 도움이 되는 업데이트 프레임워크가 포함되어 있습니다. 이 프레임워크에서는 응용 프로그램 버전이 처음으로 실행되는지 여부를 확인하는 간편한 방법을 제공합니다. 자세한 내용은 업데이트 프레임워크 사용을 참조하십시오.
이렇게 하는 한 가지 방법은 응용 프로그램을 초기화할 때 응용 프로그램 저장소 디렉토리에 파일을 저장하는 것입니다. 응용 프로그램은 시작될 때마다 해당 파일이 있는지 확인해야 합니다. 파일이 없으면 현재 사용자의 경우 응용 프로그램이 처음 실행되는 것이고, 파일이 있으면 응용 프로그램이 이미 한 번 이상 실행된 것입니다. 파일이 있고 현재 버전 번호보다 이전의 버전 번호를 포함하는 경우 사용자가 새 버전을 처음 실행하는 것입니다. 다음 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>
다음 예제에서는 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>
응용 프로그램에서 데이터를 응용 프로그램 저장소 디렉토리 등에 로컬로 저장하는 경우 처음 실행될 때 이전 버전에서 이전에 저장된 데이터를 확인할 수 있습니다. 업데이트 프레임워크 사용응용 프로그램에 대한 업데이트를 관리하는 작업은 번거로울 수 있습니다. AdobeAIR 응용 프로그램을 위한 업데이트 프레임워크는 개발자가 AIR 응용 프로그램에서 강력한 업데이트 기능을 구현할 수 있도록 하는 API를 제공합니다. AIR 업데이트 프레임워크는 개발자를 위해 다음 작업을 수행합니다.
AIR 업데이트 프레임워크는 응용 프로그램을 위한 샘플 사용자 인터페이스를 제공하며, 응용 프로그램 업데이트에 대한 기본 정보 및 구성 옵션을 사용자에게 제공합니다. 응용 프로그램에서 업데이트 프레임워크에 사용할 사용자 정의 사용자 인터페이스를 정의할 수도 있습니다. AIR 업데이트 프레임워크에서는 AIR 응용 프로그램의 업데이트 버전에 대한 정보를 간단한 XML 구성 파일에 저장할 수 있습니다. 대부분의 응용 프로그램에서는 일부 기본 코드가 포함되도록 이러한 구성 파일을 설정하면 최종 사용자가 쉽게 업데이트 작업을 수행할 수 있습니다. Adobe AIR에는 업데이트 프레임워크 외에도 AIR 응용 프로그램이 새 버전으로 업그레이드하는 데 사용할 수 있는 Updater 클래스가 포함되어 있습니다. Updater 클래스를 사용하여 응용 프로그램을 사용자 컴퓨터의 AIR 파일에 포함된 버전으로 업그레이드할 수 있습니다. 그러나 업그레이드 관리에는 단순히 응용 프로그램이 로컬에 저장한 AIR 파일을 기반으로 업데이트되는 것 이상의 작업이 포함될 수 있습니다. AIR 업데이트 프레임워크 파일AIR 업데이트 프레임워크는 AIR 2 SDK의 frameworks/libs/air 디렉토리에 있으며 다음 파일을 포함합니다.
자세한 내용은 다음 단원을 참조하십시오. Flex 개발 환경 설정AIR 2 SDK의 frameworks/libs/air 디렉토리에 있는 SWC 파일은 Flex 및 Flash 개발에 사용할 수 있는 클래스를 정의합니다. Flex SDK를 사용하여 컴파일할 때 업데이트 프레임워크를 사용하려면 amxmlc 컴파일러에 대한 호출에 ApplicationUpdater.swc 또는 ApplicationUpdater_UI.swc 파일을 포함합니다. 다음 예제에서는 컴파일러가 Flex SDK 디렉토리의 lib 하위 디렉토리에 있는 ApplicationUpdater.swc 파일을 로드합니다. amxmlc -library-path+=lib/ApplicationUpdater.swc -- myApp.mxml 다음 예제에서는 컴파일러가 Flex SDK 디렉토리의 lib 하위 디렉토리에 있는 ApplicationUpdater_UI.swc 파일을 로드합니다. amxmlc -library-path+=lib/ApplicationUpdater_UI.swc -- myApp.mxml Flash Builder를 사용하여 개발할 경우 [Properties] 대화 상자에서 [Flex Build Path settings]의 [Library Path] 탭에 SWC 파일을 추가합니다. SWC 파일을 amxmlc 컴파일러(Flex SDK 사용) 또는 Flash Builder에서 참조할 디렉토리로 복사해야 합니다. HTML 기반 AIR 응용 프로그램에 프레임워크 파일 포함업데이트 프레임워크의 frameworks/html 디렉토리에는 다음 SWF 파일이 포함되어 있습니다.
AIR 응용 프로그램의 JavaScript 코드에서는 SWF 파일에 정의된 클래스를 사용할 수 있습니다. 업데이트 프레임워크를 사용하려면 ApplicationUpdater.swf 또는 ApplicationUpdater_UI.swf 파일을 응용 프로그램 디렉토리 또는 하위 디렉토리에 포함합니다. 그런 다음 JavaScript 코드에서 프레임워크를 사용할 HTML 파일에 파일을 로드하는 script 태그를 포함합니다. <script src="applicationUpdater.swf" type="application/x-shockwave-flash"/> 또는 이 script 태그를 사용하여 ApplicationUpdater_UI.swf 파일을 로드합니다. <script src="applicationupdater_ui.swf" type="application/x-shockwave-flash"/> 이러한 두 파일에서 정의되는 API는 이 문서의 나머지 부분에서 설명합니다. 기본 예제: ApplicationUpdaterUI 버전 사용업데이트 프레임워크의 ApplicationUpdaterUI 버전은 응용 프로그램에서 쉽게 사용할 수 있는 기본 인터페이스를 제공합니다. 다음은 기본 예제입니다. 먼저 업데이트 프레임워크를 호출하는 AIR 응용 프로그램을 만듭니다.
그런 다음 AIR 응용 프로그램의 업데이트 버전을 웹 서버에 추가합니다.
이것은 기본적인 예제이지만 많은 응용 프로그램에 충분한 업데이트 기능을 제공합니다. 이 문서의 나머지 부분에서는 업데이트 프레임워크를 사용자 요구에 가장 잘 맞게 사용하는 방법을 설명합니다. 업데이트 프레임워크 사용과 관련된 다른 예제를 보려면 Adobe AIR 개발자 센터의 다음 샘플 응용 프로그램을 참조하십시오.
AIR 2.5로 업데이트AIR 2.5에서 응용 프로그램에 버전 번호를 할당하는 규칙이 변경되었기 때문에 AIR 2 업데이트 프레임워크는 AIR 2.5 응용 프로그램 설명자에 있는 버전 정보를 파싱할 수 없습니다. 이러한 비호환성 때문에 AIR 2.5 SDK를 사용하도록 응용 프로그램을 업데이트하기 전에 새 업데이트 프레임워크를 사용하도록 응용 프로그램을 업데이트해야 합니다. 따라서 AIR 2.5 이전 버전에서 AIR 2.5 이상으로 응용 프로그램을 업데이트할 때는 두 개의 업데이트가 필요합니다. 첫 번째 업데이트는 AIR 2 네임스페이스를 사용하고 AIR 2.5 업데이트 프레임워크 라이브러리를 포함해야 합니다(여전히 AIR 2.5 SDK를 사용하여 응용 프로그램 패키지를 만들 수 있음). 두 번째 업데이트는 AIR 2.5 네임스페이스를 사용하고 응용 프로그램의 새 기능을 포함할 수 있습니다. AIR Updater 클래스를 직접 사용하여 중간 업데이트가 AIR 2.5 응용 프로그램으로 업데이트되는 것을 제외하고는 아무것도 수행되지 않도록 할 수도 있습니다. 다음 예제에서는 버전 1.0에서 2.0으로 응용 프로그램을 업데이트하는 방법을 보여 줍니다. 버전 1.0은 이전 2.0 네임스페이스를 사용합니다. 버전 2.0은 2.5 네임스페이스를 사용하며, AIR 2.5 API를 사용하여 구현된 새로운 기능을 포함하고 있습니다.
<?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>
업데이트 설명자 파일 정의 및 웹 서버에 AIR 파일 추가AIR 업데이트 프레임워크를 사용할 때는 웹 서버에 저장된 업데이트 설명자 파일에 사용 가능한 업데이트에 대한 기본 정보를 정의합니다. 업데이트 설명자 파일은 간단한 XML 파일입니다. 응용 프로그램에 포함된 업데이트 프레임워크는 이 파일을 확인하여 새 버전이 업로드되었는지 확인합니다. 업데이트 설명자 파일의 포맷은 AIR 2.5에서 변경되었습니다. 새로운 포맷은 다른 네임스페이스를 사용합니다. 원래의 네임스페이스는 “http://ns.adobe.com/air/framework/update/description/1.0”입니다. AIR 2.5 네임스페이스는 “http://ns.adobe.com/air/framework/update/description/2.5”입니다. AIR 2.5 이전에 생성된 AIR 응용 프로그램은 버전 1.0 업데이트 설명자만 읽을 수 있습니다. AIR 2.5 이상에 포함된 업데이터 프레임워크를 사용하여 생성된 AIR 응용 프로그램은 버전 2.5 업데이트 설명자만 읽을 수 있습니다. 이러한 버전 비호환성 때문에 종종 두 개의 업데이트 설명자 파일을 만들어야 합니다. AIR 2.5 버전의 응용 프로그램에 있는 업데이트 논리는 새 포맷을 사용하는 업데이트 설명자를 다운로드해야 합니다. 이전 버전의 AIR 응용 프로그램은 계속 원래의 포맷을 사용해야 합니다. AIR 2.5 이전에 만든 버전에 대한 지원을 중지하기 전까지 업데이트를 릴리스할 때마다 두 파일을 모두 수정해야 합니다. 업데이트 설명자 파일에는 다음 데이터가 포함됩니다.
version 및 url 요소는 필수이고, description 요소는 선택 사항입니다. 다음은 샘플 버전 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>
그리고 다음은 샘플 버전 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>
여러 언어를 사용하여 description 태그를 정의하려면 lang 특성을 정의하는 여러 text 요소를 사용합니다. <?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>
업데이트 설명자 파일을 업데이트 AIR 파일과 함께 웹 서버에 배치합니다. 업데이트 설명자에 포함된 templates 디렉토리에는 샘플 업데이트 설명자 파일이 포함됩니다. 여기에는 단일 언어 버전과 여러 언어 버전이 모두 포함됩니다. 업데이트 프로그램 객체 인스턴스화코드에서 AIR 업데이트 프레임워크를 로드한 후(Flex 개발 환경 설정 및 HTML 기반 AIR 응용 프로그램에 프레임워크 파일 포함 참조) 다음과 같이 업데이트 프로그램 객체를 인스턴스화해야 합니다 ActionScript 예제: var appUpdater:ApplicationUpdater = new ApplicationUpdater(); JavaScript 예제: var appUpdater = new runtime.air.update.ApplicationUpdater(); 앞의 코드에서는 사용자 인터페이스를 제공하지 않는 ApplicationUpdater 클래스를 사용합니다. 사용자 인터페이스를 제공하는 ApplicationUpdaterUI 클래스를 사용하려면 다음을 사용합니다. ActionScript 예제: var appUpdater:ApplicationUpdaterUI = new ApplicationUpdaterUI(); JavaScript 예제: var appUpdater = new runtime.air.update.ApplicationUpdaterUI(); 이 문서의 나머지 코드 샘플에서는 appUpdater라는 업데이트 프로그램 객체를 인스턴스화한 것으로 가정합니다. 업데이트 설정 구성ApplicationUpdater 및 ApplicationUpdaterUI는 모두 응용 프로그램과 함께 제공되는 구성 파일을 통해 또는 응용 프로그램의 ActionScript나 JavaScript를 통해 구성할 수 있습니다. XML 구성 파일에서 업데이트 설정 정의업데이트 구성 파일은 XML 파일이며, 다음 요소를 포함할 수 있습니다.
ApplicationUpdaterUI의 구성 파일에는 updateURL 및 delay 요소와 함께 다음 요소가 포함될 수 있습니다.
다음은 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>
다음은 defaultUI 요소에 대한 정의를 포함하는 ApplicationUpdaterUI 프레임워크의 구성 파일 예제입니다. <?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>
configurationFile 속성을 해당 파일의 위치로 지정합니다. ActionScript 예제: appUpdater.configurationFile = new File("app:/cfg/updateConfig.xml");
JavaScript 예제:appUpdater.configurationFile = new air.File("app:/cfg/updateConfig.xml");
업데이트 프레임워크의 templates 디렉토리에는 샘플 구성 파일 config-template.xml이 포함됩니다. 업데이트 설정 ActionScript 또는 JavaScript 코드 정의이러한 구성 매개 변수를 다음과 같이 응용 프로그램의 코드를 사용하여 설정할 수도 있습니다. appUpdater.updateURL = " http://example.com/updates/update.xml"; appUpdater.delay = 1; 업데이트 프로그램 객체의 속성은 updateURL 및 delay입니다. 이러한 속성은 구성 파일의 updateURL 및 delay 요소와 동일한 설정 즉, 업데이트 설명자 파일의 URL과 업데이트 확인 간격을 정의합니다. 구성 파일 및 코드의 설정을 지정하는 경우 코드를 사용하여 설정한 속성이 구성 파일의 해당하는 설정보다 우선합니다. 업데이트 프로그램을 사용하기 전에 즉, 업데이트 프로그램 초기화에서 설명한 대로 업데이트 프로그램 객체의 initialize() 메서드를 호출하기 전에 구성 파일이나 스크립트를 통해 updateURL 속성을 정의해야 합니다(업데이트 설명자 파일 정의 및 웹 서버에 AIR 파일 추가 참조). ApplicationUpdaterUI 프레임워크는 업데이트 프로그램 객체에 대한 다음과 같은 추가 속성을 정의합니다.
각 속성은 ApplicationUpdaterUI 사용자 인터페이스에 있는 하나 이상의 대화 상자에 해당합니다. 각 속성은 기본값이 true인 부울 값입니다. false로 설정할 경우 해당하는 대화 상자가 업데이트 절차의 일부로 표시되지 않습니다. 이러한 대화 상자 속성은 업데이트 구성 파일의 설정을 재정의합니다. 업데이트 프로세스AIR 업데이트 프레임워크에서는 다음 단계에 따라 업데이트 프로세스를 완료합니다.
업데이트 프로그램 객체는 이러한 각 단계 완료 시 이벤트를 전달합니다. ApplicationUpdater 버전에서 프로세스 단계의 성공적인 완료를 알려 주는 이벤트를 취소할 수 있습니다. 이러한 이벤트 중 하나를 취소하려면 프로세스의 다음 단계는 취소됩니다. ApplicationUpdaterUI 버전에서 업데이트 프로그램은 사용자가 프로세스의 각 단계에서 취소 또는 진행 여부를 선택할 수 있는 대화 상자를 표시합니다. 이벤트를 취소하는 경우 업데이트 프로그램 객체의 메서드를 호출하여 프로세스를 다시 시작할 수 있습니다. 업데이트 프로그램의 ApplicationUpdater 버전에서 업데이트 프로세스를 진행하는 동안 현재 상태를 currentState 속성에 기록합니다. 이 속성은 다음과 같은 값의 문자열로 설정됩니다.
업데이트 프로그램 객체의 일부 메서드는 업데이트 프로그램이 특정 상태에 있는 경우 경우에만 실행됩니다. 업데이트 프로그램 초기화구성 속성을 설정한 후(기본 예제: ApplicationUpdaterUI 버전 사용) initialize() 메서드를 사용하여 업데이트를 초기화합니다. appUpdater.initialize(); 이 메서드는 다음과 같은 작업을 수행합니다.
이 메서드를 호출하면 업데이트 프로그램 객체에서 다음 이벤트를 전달합니다.
UpdateEvent.INITIALIZED 이벤트가 전달되면 업데이트 프로세스가 완료됩니다. initialize() 메서드를 호출하면 업데이트 프로그램이 업데이트 프로세스를 시작하고 타이머 지연 시간 설정에 따라 모든 단계를 완료합니다. 그러나 언제든 업데이트 프로그램 객체의 checkNow() 메서드를 호출하여 업데이트 프로세스를 시작할 수 있습니다. appUpdater.checkNow(); 업데이트 프로세스가 이미 실행되고 있는 경우 이 메서드는 아무 작업도 수행하지 않습니다. 그렇지 않으면 업데이트 프로세스를 시작합니다. 업데이트 프로그램 객체는 checkNow() 메서드 호출의 결과로 다음 이벤트를 전달합니다.
checkForUpdate 이벤트를 취소하는 경우 업데이트 프로그램 객체의 checkForUpdate() 메서드를 호출할 수 있습니다. 다음 단원을 참조하십시오. 이벤트를 취소하지 않으면 업데이트 프로세스에서 업데이트 설명자 파일을 확인하는 과정을 계속합니다. ApplicationUpdaterUI 버전에서 업데이트 프로세스 관리ApplicationUpdaterUI 버전에서 사용자는 사용자 인터페이스의 대화 상자에서 취소 버튼을 통해 프로세스를 취소할 수 있습니다. 또한 ApplicationUpdaterUI 객체의 cancelUpdate() 메서드를 호출하여 업데이트 프로세스를 프로그래밍 방식으로 취소할 수 있습니다. ApplicationUpdaterUI 객체의 속성을 설정하거나 업데이트 구성 파일의 요소를 정의하여 업데이트 프로그램에서 표시하는 대화 상자 확인을 지정할 수 있습니다. 자세한 내용은 업데이트 설정 구성을 참조하십시오. ApplicationUpdater 버전에서 업데이트 프로세스 관리ApplicationUpdater 객체에서 전달한 이벤트의 preventDefault() 메서드를 호출하여 업데이트 프로세스의 단계를 취소할 수 있습니다(업데이트 프로세스 참조). 기본 비헤이비어를 취소하면 응용 프로그램에서 사용자에게 계속할지 묻는 메시지를 표시할 수 있게 됩니다. 다음 단원에서는 프로세스 단계가 취소된 경우 업데이트 프로세스를 계속하는 방법에 대해 설명합니다. 업데이트 설명자 파일 다운로드 및 해석업데이트 프로그램에서 업데이트 설명자 파일을 다운로드하기 직전에 업데이트 프로세스가 시작되기 전에 ApplicationUpdater 객체에서 checkForUpdate 이벤트를 전달합니다. checkForUpdate 이벤트의 기본 비헤이비어를 취소하는 경우 업데이트 프로그램은 업데이트 설명자 파일을 다운로드하지 않습니다. 다음과 같이 checkForUpdate() 메서드를 호출하여 업데이트 프로세스를 다시 시작할 수 있습니다. appUpdater.checkForUpdate(); checkForUpdate() 메서드를 호출하면 업데이트 프로그램이 업데이트 설명자 파일을 비동기적으로 다운로드하여 해석합니다. checkForUpdate() 메서드 호출의 결과로 업데이트 프로그램 객체에서 다음 이벤트를 전달할 수 있습니다.
업데이트 AIR 파일 다운로드업데이트 프로그램에서 업데이트 설명자 파일을 성공적으로 다운로드 및 해석한 후 ApplicationUpdater 객체는 updateStatus 이벤트를 전달합니다. 기본 비헤이비어는 사용 가능한 업데이트가 있는 경우 다운로드를 시작하는 것입니다. 기본 비헤이비어를 취소하는 경우 downloadUpdate() 메서드를 호출하여 업데이트 프로세스를 다시 시작할 수 있습니다. appUpdater.downloadUpdate(); 이 메서드를 호출하면 업데이트 프로그램에서 AIR 파일의 업데이트 버전을 비동기적으로 다운로드합니다. downloadUpdate() 메서드는 다음 이벤트를 전달할 수 있습니다.
응용 프로그램 업데이트업데이트 다운로드가 완료되면 ApplicationUpdater 객체는 downloadComplete 이벤트를 전달합니다. 기본 비헤이비어를 취소하는 경우 installUpdate() 메서드를 호출하여 업데이트 프로세스를 다시 시작할 수 있습니다. appUpdater.installUpdate(file); 이 메서드를 호출하면 업데이트 프로그램은 AIR 파일의 업데이트 버전을 설치합니다. 이 메서드에는 업데이트 사용할 AIR 파일을 참조하는 File 객체인 file 매개 변수 하나가 포함되어 있습니다. installUpdate() 메서드 호출의 결과로 ApplicationUpdater 객체가 beforeInstall 이벤트를 전달할 수 있습니다.
임의의 AIR 파일에서 설치installFromAIRFile() 메서드를 호출하여 사용자 컴퓨터에 있는 AIR 파일의 업데이트 버전을 설치할 수 있습니다. appUpdater.installFromAIRFile(); 이 메서드를 호출하면 업데이트 프로그램은 AIR 파일의 업데이트 버전을 설치합니다. installFromAIRFile() 메서드는 다음 이벤트를 전달할 수 있습니다.
업데이트 프로세스 취소cancelUpdate() 메서드를 호출하여 업데이트 프로세스를 취소할 수 있습니다. appUpdater.cancelUpdate(); 이 메서드는 완료되지 않은 다운로드 파일을 삭제하여 대기 중인 다운로드를 취소하고 정기 확인 타이머를 다시 시작합니다. 업데이트 프로그램 객체가 초기화되고 있는 경우 이 메서드는 아무 작업도 수행하지 않습니다. ApplicationUpdaterUI 인터페이스 지역화ApplicationUpdaterUI 클래스에서는 업데이트 프로세스를 위한 기본 사용자 인터페이스를 제공합니다. 여기에는 사용자가 프로세스를 시작하고, 프로세스를 취소하고, 기타 관련 작업을 수행할 수 있는 대화 상자가 포함됩니다. 업데이트 설명자 파일의 description 요소를 사용하면 응용 프로그램에 대한 설명을 여러 언어로 정의할 수 있습니다. 다음과 같이 lang 특성을 정의하는 여러 text 요소를 사용합니다. <?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>
업데이트 프레임워크에서는 최종 사용자의 지역화 체인에 가장 잘 맞는 설명을 사용합니다. 자세한 내용은 업데이트 설명자 파일 정의 및 웹 서버에 AIR 파일 추가를 참조하십시오. Flex 개발자는 "ApplicationUpdaterDialogs" 번들에 새 언어를 직접 추가할 수 있습니다. JavaScript 개발자는 업데이트 프로그램 객체의 addResources() 메서드를 호출할 수 있습니다. 이 메서드는 언어에 대한 새 리소스 번들을 동적으로 추가합니다. 리소스 번들은 언어에 대한 지역화된 문자열을 정의합니다. 이러한 문자열은 다양한 대화 상자 텍스트 필드에서 사용됩니다. JavaScript 개발자는 ApplicationUpdaterUI 클래스의 localeChain 속성을 사용하여 사용자 인터페이스에서 사용되는 로캘 체인을 정의할 수 있습니다. 일반적으로 JavaScript(HTML) 개발자만 이 속성을 사용합니다. Flex 개발자는 ResourceManager를 사용하여 로캘 체인을 관리합니다. 예를 들어 다음 JavaScript 코드는 루마니아어와 헝가리어의 리소스 번들을 정의합니다. 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;
자세한 내용은 언어 참조 설명서에서 ApplicationUpdaterUI 클래스의 addResources() 메서드에 대한 설명을 참조하십시오. |
|