요즘 따라 포스팅이 자주 올라오죠?
 개발이 거의 끝나고, 자잘한 버그를 수정하는 중이라 그렇습니다 ㅎㅎ.
 이 버그 이외에도 몇 가지 버그와 팁 등을 발견했는데, 시간이 나는대로 포스팅하도록 하겠습니다.

 모바일 어플리케이션을 제작할 때 간혹 jQuery의 serialize메소드를 이용해야 할 경우가 있습니다. ajax를 이용하여 비동기 액션을 해야 하는 경우가 이에 해당됩니다.

 그런데 가끔가다 serialize메소드가 정상적으로 동작하지 않는 경우가 있습니다.
 이 중 가장 많이 나오는 문제는 아무런 직렬화 없이 공백 문자를 반환하는 경우이죠.

 이 경우는 원인이 너무 많아서 일일이 다 적기는 힘들고(..)
 가장 많이 하는 실수는 폼의 각 요소들에 name속성을 부여하지 않아서 생긴 문제입니다.
 대부분의 개발자들은 폼의 요소들에 id속성만 주지 name속성은 부여하지 않거든요. 하지만 jQuery의 serialize메소드를 이용하기 위해서는 반드시 name속성을 부여해 줘야 합니다.

 그리고 두 번 째 문제. 현재 JQTouch에서 가장 많이 일어나는 문제인데,
 폼 요소들 중 email타입만 직렬화가 되지 않는 경우입니다.

 
<form method="post">
        <ul class = "rounded-each">
            <li>
                 <label for="from">From</label>
                 <input type="email" id="from" name="from" autocapitalize="off"/>
            </li>
             <li>
                 <label for="to">To</label>
                 <input type="email" id="to" name="to" autocapitalize="off"/>
             </li>
             <li>
                 <label for="content">Content</label>
                 <textarea id="content" name="content"></textarea>
            </li>
            <input class="submit" id="submit" name="commit"
type="submit" value="Send" />
        </ul>
</form>

 위 폼의 경우는 content의 내용만 직렬화가 되고, from과 to의 내용은 직렬화가 되지 않습니다.

 이 문제는 사파리 브라우저(모바일, 데스크톱 포함)에서만 일어나는 문제이며, 파이어폭스 브라우저에서는 일어나지 않는 특이한 버그입니다.
 (사파리,파이어폭스를 제외한 브라우저는 잘 모르겠습니다. 아마도 webkit엔진을 사용하는 브라우저라면 비슷한 버그가 일어나겠죠?)

 해결 방법은 간단하게도, jQuery의 버전을 최신으로 업그레이드 해주시면 됩니다.
 
 이 버그가 특히나 JQTouch개발자에게 자주 일어나는 이유는 JQTouch가 최근까지 업그레이드가 되지 않고 있기 때문이죠. 개발자가 경쟁 프레임워크인 Sencha로 옮겼기 때문입니다.
 덕분에 JQTouch에 포함되어 있는 jQuery는 무려 1.3.2! 오래되도 한참 오래 된 버전이죠 ㅎㄷ.
 
 그렇기때문에 굳이 JQTouch를 사용하고 있지 않더라도, jQuery버전이 1.3.2인 분들에게도 동일한 버그가 일어날 것입니다.



Posted by 강성희 Trackback 0 : Comment 0

 정말 오랜만의 글이네요.

 자바스크립트로 모바일 앱을 개발할 경우 모바일의 회전에 맞춰 인터페이스를 바꿔줘야 하는 경우가 있습니다.

   이 경우 'orientationchange'라는 이벤트에 함수를 바인딩하면 모바일 기기가 회전할 때 마다 콜백 함수를 호출받을 수 있습니다.

$(window).bind('orientationchange', updateOrientation);

function updateOrientation() {
            orientation = window.innerWidth < window.innerHeight ? 'profile' : 'landscape';

            $body.removeClass('profile landscape')
                        .addClass(orientation)
                        .trigger('turn', {orientation: orientation});

            // scrollTo(0, 0);
}

JQTouch 라이브러리 내에 존재하는 코드 중 하나입니다.
기기 회전 시 HTML의 body에 'landscape'또는 'profile' 클래스를 추가하죠.


 하지만  특정 경우(특히 아이패드 환경)에서는 이 'orientationchange' 이벤트가 호출되지 않는다고 합니다.
 여러가지 원인이 있는 것 같은데, 아직 확실하게 고쳐지지 않은 것 같네요.

 이 경우에는 'orientationChanged'라는 이벤트를 이용해 보세요.

$(window).bind('orientationChanged', updateOrientation);

function updateOrientation() {
            orientation = window.innerWidth > window.innerHeight ? 'profile' : 'landscape';

            $("ul li textarea").removeClass('profile landscape')
                                      .addClass(orientation)
                                      .trigger('turn', {orientation: orientation});
  }

 단 이 이벤트의 경우 기기가 회전하기 전에 호출되는 것 같더군요.
 가령 회전 전 상태가 가로이면, 가로 상태로 함수가 호출되고 이후에 회전을 시작합니다.
 
 왠지 이벤트가 거꾸로 먹는 것 같으면 이 부분을 의심해보세요 ㅎㅎ


 - 추가(2010년 9월 16일) -
 찾아보니 JQTouch에서 제공하는 'turn'이라는 트리거가 있네요.
(http://wiki.github.com/senchalabs/jQTouch/callbackevents)
 위 코드에서도 사용하고 있었는데 전혀 눈치채지 못했네요 ^^;

 직접 사용해보진 않았지만 공식 위키에 있는 내용이니 신뢰하셔도 될 것 같습니다.
Posted by 강성희 Trackback 0 : Comment 0


 PhoneGapLibInstaller.pkg을 실행해 폰갭을 설치하는 중에 오류가 일어날 수 있습니다.

 'Command+L' 버튼을 누르면 오류 메시지를 확인할 수 있는데, 'Phonegap PackageKit: install Failed: PKG: pre-install scripts for ...' 등의 메시지가 적혀 있을 겁니다.

 확인 결과 설치 스크립트의 라인 종료자 문제라고 하네요. 
 GitHub에 수정판이 올라와 있으니 해당 버전의 파일을 다운받아 설치하시면 정상적으로 폰갭을 설치하실 수 있습니다.

 혹여나 안 되는 경우는 XCode와 iPhoneSDK를 최신 버전으로 갱신해라. 라는 이야기가 있었는데 해 본 결과 저와는 연관이 없었네요. -_-
 하여간 이 바닥이나 저 바닥이나 다 똑같다니깐...[..]

 요즘 폰갭과 JQTouch를 이용한 아이폰 개발을 공부하고 있는데, 국내에는 자료나 커뮤니티가 없으니까 이런저런 고생이 많네요.
 혹여나 관심 있는 분들이 여럿 계시다면 전용 커뮤니티라도 하나 만들어야 될 것 같습니다.


 서적은 Building iPhone Apps with HTML, CSS, and Javascript가 제일 유명한 것 같더라구요. 살짝 훑어봤는데 내용도 참 쉽게 잘 썼고, 책도 앏은 편이라 마음이 편하고...[..]

 아마존에서는 이 책과 관련 서적 세 권을 한꺼번에 묶어서 팔더군요. 
 제 암울한 영독 능력이라면 저 세 권을 다 보기 전에 스마트폰의 패러다임이 바뀌어 버리지 않을까 합니다.[..]
Posted by 강성희 Trackback 0 : Comment 0