태그 보관물:

3종 OS별 XULRunner 배포판을 만들면서

XUL로 개발한 프로그램을 리눅스, 맥, 윈도우 3종 OS별로 XULRunner를 포함시켜 배포판을 만들어봤습니다.

별것 아니지만 몰라서 고생했던 내용을 몇가지 적어보겠습니다.

 

터미널에서 xulrunner 실행시 ‘Mozilla XULRunner <Error> – <Error>’ 메시지가 출력되면 다른 버전의 xulrunner로 교체합니다.
6.0 버전이 안정된 버전이라고 합니다. 저는 6.0에서 정상적으로 실행했습니다.

XULRunner와 직접적인 연관은 없는 내용인데 *.app 폴더의 아이콘을 변경해도 바뀌지 않는다면 .DS_store 파일을 지워봅니다.

터미널에서 실행시 키입력을 터미널이 가로채는 등의 문제가 있었습니다. 근본적인 해결방법은 찾지 못해서 터미널을 이용하지 않고 직접 실행시켰습니다. 이 경우 터미널에서 실행하는 것 처럼 -jsconsole 옵션으로 자바스크립트 콘솔창을 띄우지 못합니다. 그래서 스크립트로 직접 띄웠습니다.

function showErrorConsole() {
    var windowManager = Components.classes['@mozilla.org/appshell/window-mediator;1'];
    var windowManagerInterface = windowManager.getService(Components.interfaces.nsIWindowMediator);
    var errorConsoleWindow = windowManagerInterface.getMostRecentWindow("global:console");

    if ( errorConsoleWindow ) {
        errorConsoleWindow.focus();
    } else {
        window.open("chrome://global/content/console.xul", "_blank",
                    "chrome,extrachrome,menubar,resizable,scrollbars,status,toolbar");
    }
}

* 출처: http://aadima.com/xulrunner/xrdebug.html

 

윈도우

XULRunner 실행 후 오류가 나서 아무런 윈도우가 뜨지 않았어도 프로세스가 종료되지 않고 동작을 하고 있을 가능성이 높습니다. 다시 실행하기전에 프로세스가 완전하게 종료되었는지 확인해야 합니다.

 

리눅스

별다른 문제없이 쉽게 성공했습니다.

 

공통

XULRunner 버전별로 XUL 프로그램 파일 구조가 다를 수 있습니다.

chrome.manifest 파일의 위치가 다르면 chrome.manifest 내의 경로도 달라집니다.

chrome.manifest가 chrome 폴더랑 경로가 같다면
– content myapp chrome/content/

chrome.manifest가 chrome 폴더내에 있다면
– content myapp content/

 

XULRunner로 XUL 프로그램을 실행시 -jsconsole 옵션을 추가하면 디버깅 및 문제를 해결하는데 도움이 됩니다.

$ xulrunner application.ini -jsconsole

 

-jsconsole 옵션을 추가하고 xulrunner를 실행하면 프로그램의 코드를 수정하고 재시작 하여도 캐쉬로 인해 수정하기 이전의 코드로 동작하는 문제가 있습니다.
이때는 prefs.js 파일에 아래의 코드를 추가하여 캐쉬가 되지 않도록 하면 됩니다.

pref(“nglayout.debug.disable_xul_cache”, true);
pref(“nglayout.debug.disable_xul_fastload”, true);

 

XUL이 제공하는 콘솔창에 메시지를 출력하는 방법

function jsdump(str) {
    Components.classes['@mozilla.org/consoleservice;1']
        .getService(Components.interfaces.nsIConsoleService)
        .logStringMessage(str);
}

* 참고: https://developer.mozilla.org/en-US/docs/XPCOM_Interface_Reference/nsIConsoleService?redirectlocale=en-US&redirectslug=nsIConsoleService#Logging_a_simple_message

 

기타 참고 자료

  • https://developer.mozilla.org/en-US/docs/XULRunner/Deploying_XULRunner_1.8