태그 보관물: MAC

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

맥에서 아이폰 개인용 핫스팟 USB 테더링 문제

이전부터 맥에서 아이폰으로 개인용 핫스팟 USB 테더링을 잘쓰고 있었습니다.

그런데 언제부터인가 아이폰을 연결해도 네트워크에서 ‘연결 안됨’으로 표시 되었습니다.

하지만 아이튠즈에서는 아이폰이 연결된 것으로 표시되었습니다.
저에게 문제가 일어난 정확한 시점은 모르겠지만 검색결과 아이튠즈 1.7 업데이트와 연관된 것으로 보입니다.

다행히 해결법을 찾았습니다.
아래 2개의 링크에서 파일을 각각 받아서 압축을 풉니다.

  1. http://www.mediafire.com/file/44rgtt5k6ot0t72/AppleUSBEthernetHost.kext.zip
  2. http://cvad-mac.narod2.ru/Kext_Utility

AppleUSBEthernetHost.kext 파일을 마우스로 잡아서 Kext Utility.app 에 떨어뜨립니다.
그러면 Kext Utility 프로그램이 실행되면서 어떠한 처리가 진행됩니다.
처리가 끝나면 이제 아이폰을 연결하고 개인용 핫스팟을 켜고 USB 연결을 시도하시면 됩니다.

* 출처 – https://discussions.apple.com/thread/4386838

 

맥에서 NFS 마운트

맥에서 NFS 마운트를 하는데 아래와 같은 오류가 났습니다.

$ sudo mount -t nfs 서버주소:/경로 /마운트경로
mount_nfs: /마운트경로: Operation not permitted

이럴때는 아래와 같이 -P 옵션을 주면 됩니다.
(주의: 그냥 -P만 쓰면 안됩니다. 옵션을 뜻하는 -o를 앞에 넣어줘야 합니다.)

$ sudo mount -o -P -t nfs 서버주소:/경로 /마운트경로