본문 바로가기

Adobe AIR

[AIR] Native Installer로 패키징된 AIR 어플리케이션 Update

  Flash Builder 에서 Flash Project, Flex Project 그리고, Actionscript Project 를 생성하여 Adobe AIR 어플리케이션을 개발 할 수 있습니다. 결과물은 .air 확장자 또는 윈도우에서는 .exe, 맥OSX 에서는 .dmg 로 설치 파일을 만들수 있습니다. 


 Adobe AIR 의 단점중 하나가 AIR Runtime 이 설치 되어 있어야 동작 한다는 점 입니다. 하지만 .exe 나 .dmg 로 설치 파일을 패키징 하게 되면 설치 파일에 AIR Runtime 을 포함 시킬수 있기 때문에 사용자가 따로 AIR Runtime 을 찾아서 설치 안해도 된다는 장점이 있습니다. 얼마 전까지만 해도 Android OS에서 동작 하는 Adobe AIR 어플리케이션을 패키징 하는 옵션에 AIR Runtime 을 포함시키는 옵션이 없었는데 AIR 3.0 에서 추가 되었다고 하니, 이제 Android 에서도 AIR Runtime 을 따로 설치 하는 수고를 하지 않아도 될것 같습니다. 



 웹을 기반으로 하는 서비스들은 개발사 측에서 새로운 버전을 웹에 배포 하면 새로운 버전을 바로 사용할 수 있습니다. 하지만 Adobe AIR 기반의 데스크톱 또는 모바일 설치 서비스들은 개발사가 따로 업데이트를 구현해 줘야 합니다. 친절하게도 Adobe 는 업데이트를 아주 쉽게 구현할 수 있는 클래스를 제공해 주고 있습니다. 


import flash.fileSystem.File;

import flash.desktop.Updater; 
var updater:Updater = new Updater();// applicationStorageDirectory에 설치파일이 저장되어있다고 가정

var airFile:File = File.applicationStorageDirectory.resolvePath("새로운설치파일이름");

var version:String = "새로설치될버전";

updater.update(airFile, version);

 

 새로운 설치 파일을 다운로드 받은 후에 위와 같이 Updater 클래스를 이용하면 알아서 새로운 버전으로 업데이트를 하게 됩니다. 하지만 Updater 클래스는 .air 로 패키징 되어 설치된 어플리케이션만 사용할 수 있습니다. Native Installer (.exe 또는 .dmg)로 패키징 된 어플리케이션은 사용할 수 없습니다.



(Export 옵션에 AIR package, native installer 등을 제공 하고 있다)


Updater 를 이용한 업데이트 코드를 Native Installer 로 패키징되어 설치된 어플리케이션에서 실행 시키면 에러를 발생 시킵니다. 



0 : This method is not supported in this profile 



Updater 클래스의 isSupported 역시 false 로 나오게 됩니다. Reference 를 보면 다음과 같이 기술되어 있습니다.



 Updater 클래스는 데스크톱 프로파일에서만 지원되며, 확장 데스크톱 응용 프로그램(기본 설치 프로그램을 사용하여 설치한 응용 프로그램)과 AIR 모바일 프로파일 또는 AIR for TV 프로파일에서는 지원되지 않습니다. Updater.isSupported 속성을 확인하십시오.



 Reference 에 떡하니 안된다고 기술되어 있습니다. Updater 클래스라고 해서 당연히 Native Installer 에서도 될거라 생각했던 제가 순진했던 거였습니다. 그리고 친절하게 다음줄에 Native Installer 에 대한 내용이 기술 되어 있습니다.



확장 데스크톱 응용 프로그램(기본 설치 프로그램으로 설치한 응용 프로그램)에서는 새로운 버전의 기본 설치 프로그램을 다운로드하여 File.openWithDefaultApplication() 메서드를 통해 실행할 수 있습니다. 


힌트만 알려줄 뿐 업데이트 방법에 대해서는 나와 있지 않습니다. (레퍼런스 어딘가에는 존재 하더군요) 

 Native Installer 로 패키징된 어플리케이션을 업데이트 시키는건 의외로 간단 합니다. 하지만 왠지 찝찝하게 느껴지는 업데이트 입니다. 일단 업데이트 시킬 파일을 다운로드 받습니다. 그리고 실행 시킵니다. 구체적인 코드를 다음과 같습니다. (파일을 다운로드 받는 과정은 생략합니다.)



if(NativeProcess.isSupported) {                        

var nativeProcessInfo:NativeProcessStartupInfo = new NativeProcessStartupInfo();

// file 은 설치파일을 나타내는 FIle 객체

nativeProcessInfo.executable = file;

nativeProcessInfo.arguments = new Vector.<String>();

nativeProcessInfo.workingDirectory = file.parent;

// NativeProcessStartupInfo 를 통해 실행

var process:NativeProcess = new NativeProcess();

process.start(nativeProcessInfo);

NativeApplication.nativeApplication.exit(0);  

}  


 

 위의 코드를 실행 시키면 실행 되고 있는 어플리케이션은 종료 되고 새로 다운 받은 어플리케이션 파일을 실행 합니다. 해당 파일이 실행 되면 다음과 같은 설치 화면이 나타나고 바꾸기를 클릭하면 새로운 버전으로 설치 됩니다.





 업데이트라고 하기에는 좀 빈약해 보이는 방법 입니다. 좀 더 깔끔하게 설치 및 업데이트를 하고 싶다고 하면 설치 및 제거 업데이트를 구현한 인스톨러를 만들고 그 안에서 Native Installer 로 패키징된 파일을 설치 하는 방법을 사용해야 합니다. AIR 자체적으로는 위의 화면을 바꾸는 방법이 아직까지는 제공되지 않고 있습니다. Daum 마이피플이 인스톨러를 이용하여 설치/제거/업데이트를 하는 경우에 속 합니다.





 Adobe AIR 가 원소스 멀티플랫폼이라는 장점을 내세우면서 홍보를 하고 있는데요. 아직 까지는 설치 호환성에서 다소 문제가 보입니다. 물론 사용자 컴퓨터 환경이 너무 다양해서 테스트 못하는 점도 이해 하지만 모바일에 신경 쓰기 이전에 데스크탑용 AIR Runtime 의 설치 호환성을 좀 더 보완해 줬으면 하는 바램 입니다.