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

 모바일 어플리케이션을 제작할 때 간혹 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

 
 원래는 JQTouch가 공식적으로 아이패드를 지원하지 않기 때문에, 폰갭으로 아이패드 앱을 개발하는 경우는 많지 않습니다.
 (물론 Sencha Touch가 있습니다만, 공포의 듀얼 라이센스를 감당해 낼 수 있을 때의 이야기... ㅎㄷㄷㄷ)

 하지만 폰갭으로 아이패드 앱. 정확히는 아이폰/아이패드가 동시 지원되는 앱을 만들 경우, 두 기기의 해상도에 맞는 타이틀 이미지(일명 Launch Screen)를 각각 제공해줘야 합니다.

 물론 이미지가 하나라도 알아서 리사이징을 해 줍니다만, 로딩 종료 시 순간적으로 이미지가 정상 사이즈로 보여지는 문제가 있기 때문에 가능하면 두 개의 이미지를 제공해 주는 편이 좋습니다.
 (뭐 정상 사이즈로 보여지는 그 순간이 채 1초도 되지 않으니 무시해도 되긴 합니다만...)

 해결 방법은 간단하게도, info-plist의 Launch Image(UILaunchImageFile)을 아이폰 용과 아이패드 용을 따로 나눠서 잡아주면 됩니다만(참고), 폰갭의 경우 이 부분에 관한 버그가 있어서 아이패드 용 런치 스크린이 적용이 안 될 수도 있습니다.

 이 경우 아이패드에서도 임의로 아이폰용 런치 이미지를 사용하죠. 로딩 종료시 이미지가 320px x 460px로 줄어드는 광경을 체험해 보실 수 있습니다.(머엉)

 뭐 폰갭의 버그인지 다른 이유인지를 확실히 모르겠습니다만, 해결 방법은 AppDelegate.m에 다음 코드를 추가해 주시면 됩니다.(참고)

- (void)applicationDidFinishLaunching:(UIApplication *)application
{   
    [ super applicationDidFinishLaunching:application ];
   
    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {
        UIImage* image = [[UIImage alloc] initWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Default-Portrait" ofType:@"png"]];
        imageView = [[UIImageView alloc] initWithImage:image];
        [image release];
       
        imageView.tag = 1;
        [window addSubview:imageView];
        [imageView release];
    }
}


 이상입니다.

 여담이지만 드디어 제가 개발한 앱이 심사에 들어갔습니다.
 빠르면 다음주, 늦어도 다다음주에는 공개가 가능할 것 같네요 ㅋㅋ.

 공개가 된다면 홍보 포스팅을 하도록 하겠습니다 ㅎㅎ.
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



 생각보다 일찍 번역본이 나왔네요.
 쳇, 이러면 고생하면서 원서로 읽은 보람이 없잖아... ㅡ_ㅡ

 일단 짧습니다. 원서 기준 167페이지!
 그럼에도 불구하고 필요한 내용은 거진 다 들어있습니다. 정말 굉장하죠.
 (개인적으로 쓰레기에 근접한 서적으로 평가하는 어떤 책과는 다릅니다)

 많은 분들이 폰갭 활용이 이 책의 핵심이라고 생각하시지만,
 실제로는 jQuery플러그인 중 하나인 jQTouch가 이 책의 핵심입니다.

 저 jQTouch을 통해서 지-_-랄같은 대쉬코드의 늪에서 벗어날 수 있죠.
 jQTouch를 쓰면서 내가 왜 대쉬코드 따위에 얽매였는지 후회스러울 정도입니다.(..)

 책의 기본은 웹 기반 어플리케이션 개발을 표방하는 만큼,
 처음에는 모바일 웹에서의 HTML, CSS, javascript활용에 대한 간단한 언급을 한 후,
 이후 jQuery를 활용하는 방법과, jQTouch를 이용한 좀 더 리치한 UI작성을 보여줍니다.

 이후 클라이언트에서의 데이터 저장 방법, 폰갭을 이용한 어플리케이션 배포 등등
 어플 개발을 위한 기타 몇몇가지 부분을 설명한 후 마무리.


 참 간단하면서도 필요한 것만 꼼꼼하게 설명해 주는 바람직한 서적입니다.
 왠만하면 내년 쯤 번역되었으면 했던 원서 애독자의 뜻을 이해해주지 못하다니 안타깝네요(..)

 이 책 이후에 읽어야 할 서적으로는 핵심만 골라 배우는 스마트폰 웹 개발이 있습니다.
 참고로 저는 원서로 읽을 생각이었으나 이미 번역이 되어있군요.
 원서도 참 전략적으로 읽어야겠다는 생각이 듭니다.(..)

 여하튼 좋은 책입니다. 모바일 웹&어플리케이션 개발자들은 필독!

 
IPHONEAPPS개발하기
카테고리 컴퓨터/IT > 프로그래밍/언어 > 웹프로그래밍 > HTML+JAVASCRIPT
지은이 조나단 스타크 (아이티씨, 2010년)
상세보기


Posted by 강성희 Trackback 0 : Comment 2


 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