Adobe AIR 를 이용한 멀티플랫폼 어플리케이션

회사를 이직하면서 맡은 업무가 주로 모바일 플랫폼에 대응하는 어플리케이션을 개발하는 내용이었습니다.
iOS, Android, Phonegap(하이브리드) 등 개발한 앱 개수는 적응데 다양한 플랫폼을 경험 할 수 있었습니다.

고객사가 일본에 있는 교육 관련된 컨텐츠를 주로 만드는 회사여서 그런지 교육과 관련된 어플리케이션을 주로 작성하였습니다.

위의 두개는 Adobe AIR를 이용하여 직접 작성한 어플리케이션입니다. 작품의 퀄리티나 내용은 별로 없지만 처음 접하는 Adobe AIR를 사용한다는 것이 매력이 있었습니다.

위에 있는 6개의 항목은 제가 유지보수를 하고 있는 항목중의 일부 입니다. 초등학교용으로 제작된 어플리케이션으로 수학을 재미있게 배울 수 있도록 도움을 주는 어플리케이션입니다. 수학 어플리케이션은 컨텐츠도 많고 여러가지 기능이 많이 포함되어 복잡한 어플리케이션입니다.


Adobe AIR 로 어플리케이션을 개발 해도 괜찮은 경우

  1. iOSAndroid등에서 기본적으로 제공하는 컴포넌트등을 사용하지 않아도 되는 경우. 예) ListView, TableView.
  2. 디자이너가 별도로 있어 이미지 생산에 문제가 없는 경우
  3. 화려한 애니메이션 효과가 필요한 경우.

위의 3가지 경우에 해당된다면 Adobe AIR를 사용해서 어플리케이션을 개발해도 크로스플랫폼 대응에는 문제가 없습니다.

제가 대응한 플랫폼은 Android, iOS, Windows 입니다. 개수는 적지만 점유율이 많은 플랫폼을 대응하는거기 때문에 좋습니다.


Adobe AIR절대 개발하면 안되는 경우

절대라는 단어는 함부로 쓰지 말아야 하지만 절대라고 적은 이유는 Adobe AIR 로 어플리케이션을 개발 해도 괜찮은 경우 에서 해당되는 항목이 하나라도 있는 경우에는 개발 소스 작성 보다는 다른 부분에 더 많은 공수가 들어갑니다.

고객이 iOS, Android에서 제공하는 기본 컴포넌트와 같은 UI를 요청하는 경우

iOSAndroid에서는 기본 컴포넌트 사용이 편리하게 구성이 되어 있습니다. 그렇지만 그것과 동일한 기능을 Adobe AIR를 이용해서 하려면 정말 피곤이…몰려옵니다.

못 만드는 것은 아닙니다. 그렇지만 직접 만들려고 하면 쉽지는 않을 겁니다.

디자이너가 별도로 없는 경우

제가 말하는 디자이너는 그래픽 편집이 가능한 사람입니다. 개발자도 물론 편집은 할 수 있습니다. 그렇지만 고객이 원하는 만큼 좋게 하는 분은 찾기 힘듭니다.

고객이 원하는 디자인을 해줄 수 있는 사람이 없다면 포기해야 합니다. Adobe AIR의 경우 버튼을 만들때 이미지를 3개 정도 추가합니다. MouseOver, MouseDown, MouseUp 상태의 이미지가 필요합니다.
이런 사소한 이미지를 개발자가 직접 만들면서 작업한다는 것은 어려운 일입니다.

물론 다른 플랫폼용 개발에서도 디자인은 필요하지만 기본 버튼으로만 작성된 어플리케이션도 심심치 않게 볼 수 있습니다.

화려한 애니메이션 효과가 필요한 경우

Adobe Flash의 경우 화려한 UI를 작성하는데 다른 플랫폼에 비해 쉽습니다.
예를들어 Kiosk의 경우 기능이 많지는 않지만 화려하게 작성된 경우가 많이 있습니다. 이럴 경우 Adobe AIR를 사용하면 보다 쉽게 작성할 수 있습니다.

이상입니다.

In App Purchase in AIR SDK 16

이슈사항

Error Image

Flash를 이용하여 크로스 플랫폼을 지원하는 어플리케이션을 개발하다 보니 iOS 버전용 앱내구매(In App Purchase)와 관련된 이슈사항를 공유해드리고자 합니다.

Google 에서 Adobe air Storekit 으로 검색 하면 처음에 나타나는 페이지는 밀크게임즈 링크 입니다. 회사에서도 이전 버전은 밀크게임즈 에 있는 StoreKit 라이브러리를 이용해서 앱내구매 프로세스를 진행하였으나 Apple의 64Bit 지원 정책이 변경됨에 따라 AIR SDK 버전을 부득이하게 16이상으로 변경하게 되었습니다. AIR버전 16버전에서는 밀크게임즈 Storekit 라이브러리를 사용하는 경우 컴파일 오류가 발생되며 빌드가 되지 않는 심각한 문제가 발생하였습니다.

원인

밀크게임즈에서 제공하는 ANE(AIR Native Extension)가 64Bit에서 컴파일되지 않아 발생되는 문제입니다.

대안

원본 소스를 64Bit 버전으로 다시 컴파일

하지만 현실적으로 유료 라이브러리를 소스 공개해주는 회사는 거의 없습니다.

ANE가 업데이트 되는 시점을 기다린다.

개발하는 회사에서는 시급한 문제지만 라이브러리 판매자 입장에서는 라이브러리 업데이트에 대해 긴급하게 대응하지 않기 때문에 현실적으로 대안이 되지 못합니다.

다른 라이브러리 사용.

64Bit가 지원되는 StoreKit 라이브러리가 있다면 해당 라이브러리를 이용하는 것도 괜찮은 방법입니다.

해결

Adobe Game SDK ProductStore ANE 를 이용하여 신규로 개발하는 방법을 택했습니다.
그렇지만 Adobe Game SDK를 설치하면 인스톨 되는 ANE 파일은 32Bit 전용으로 64Bit 지원 버전은 별도로 다운 받아야 합니다. 다운로드 링크

[개발후기] 폰갭을 이용한 어플리케이션 개발

안녕하세요. 벌써 가을이 가고 겨울이 오는거 같습니다.

오늘은 그간 제가 진행 했던 하이브리드 어플리케이션 개발에 대해 리뷰를 조금 하려고 합니다.
만약 하이브리드 어플리케이션 개발을 생각중이거나 현재 개발중이라고 하면 조금은 도움이 될거라고 생각합니다.
폰갭은 HTML, Javascript, CSS를 이용하여 개발한 내용을 소스 수정 없이 안드로이드와 iOS단말에 적용이 가능하다는 장점이 있습니다.
웹에서 검색을 하게 되면 폰갭으로 주로 작업하는 내용은 간단한 HelloWorld 출력을 하거나 단순 예제를 빌드하는 문제가 없을 것 같은 부분만 만들어 문제점이 없는 것처럼 보입니다.
그렇지만 실제 개발을 해보니 문제가 없는 것은 아니었습니다.
1. 화면 레이아웃 문제
선택 영역_004
위의 이미지를 보시게 되면 Kitkat과 ICS에서 서로 다르게 보이는 것을 확인할 수 있습니다.
비록 여백이 빠지는 내용이긴 하지만 사용자의 입장에서 보면 해당 어플리케이션은 문제가 있는 것 처럼 보입니다.
(제가 테스트한 Kitkat과 iPad4, WebBrowser에서는 모두 동일하게 출력이 되는 것을 확인 하였습니다.)
화면 레이아웃은 개발을 하면서 수정하기가 가장 어려운 부분입니다. 현재 화면과 관련된 CSS를 수정하고 빌드해서 안드로이드 단말에 설치하고 다시 수정하고 이런일을 수십번 반복해야 동일한 화면을 얻을 수 있습니다.
2. 연산 오류
선택 영역_005
곱셈 연산을 하는 어플리케이션 입니다. 그렇지만 연산의 결과가 서로 다릅니다. 문제는 Javascript API 연산에 있었습니다. Javascript에는 String Type을 Integer Type으로 변경하는 parseInt() 라는 메소드가 있습니다. parseInt()의 결과값이 두 버전간에 서로 다르게 표시되어 발생된 문제입니다.
Kitkat: parseInt("010") => 10
ICS: parseInt("010") => 0
위의 표처럼 두개의 연산 결과가 서로 다르기 때문에 문제가 발생됩니다.
 3. 성능
저의 경우는 주로 Java 위주로 개발을 했기 때문에 Javascript는 그냥 문법 정도만 알고 있습니다. 그런 수준으로 개발을 해서 그런지는 몰라도 앱의 반응이 굉장히 느려 보였습니다. 성능은 검색을 해보면 “Phonegap에서 성능 최적화 하기” 등의 글을 쉽게 찾을 수 있습니다. 어느 정도는 해결이 가능할 것으로는 보입니다.
4. 어떤 문제가 나올지 모름
 폰갭의 주된 개발은 웹 브라우저를 기반으로 해서 작업을 합니다. 그렇지만 위에서 보는 것처럼 브라우저와 폰갭으로 빌드한 어플리케이션에서 다르게 동작한다면 반드시 해당 단말에서 테스트를 해야만 합니다. 지뢰가 묻혀 있는 밭을 건너는 느낌일겁니다.
UI, 연산 오류, 성능은 어찌 보면 모두 수정이 가능한 내용입니다. 그렇지만 저의 경우 위와 같이 간단한 수학 문제 풀이를 하는 어플리케이션을 한달동안 30개 정도 만들었는데 개발기간이 10일이었다면 UI를 수정하고 확인하는데 걸린 시간이 20일정도 소요된거 같습니다.
만약 폰갭으로 어플을 개발할 예정이시라면 에로 사항도 분명히 있다는 점을 염두하셨으면 좋겠습니다.