앱셀러레이터 이노베이션 펀드와 플래티노(Platino)

애니팡 성공이후로 우리나라에서도 모바일 게임 돌풍이 일고 있다. 난 참 이런거 싫은데… 우리 나라 사람들은 미리 준비 안하고, 뭐가 한번 터졌다하면 우르르.. -_-;;;

여튼 약 1주일전 지난 10월 3일 수요일이 되겠다. 타이타늄을 만든 앱셀러레이터라는 회사에서 이노베이션 펀딩을 하겠다고 발표했는데…

http://techcrunch.com/2012/10/03/appcelerator-innovation-fund/

그 첫 수혜자로 레니카(Lanica)라는 회사에 투자를 했단다. 5~6년간 총 $50 밀리언 달러!! 한화로 약 557억원.. ㅎㄷㄷ 이제막 시작한 기업에 이 큰돈을 투자하다뉘… 앱셀러레이터가  돈을 엄청 벌었나보다…

하지만 레니카라는 회사는 말이 신생이지, 구성원을 면면히 살펴보니 창업자부터 코어 엔지니어 까지 이바닥 게임 엔진 분야에서 공력이 있는 사람들이네… +_+_+

코로나랩스 홈페이지 – http://www.coronalabs.com/
레니카 홈페이지 – 
http://lanica.co/

 

여튼 이게 중요한게 아니고.. 레니카에서 만드는 플래티노라는 플랫폼이 기대된다!!

http://lanica.co/about/platino/

요약하면,

OpenGL 을 이용해 성능과 효율을 잡고, 아이소메트릭 타일 엔진과 스프라이트 쉬트, Box2D 물리엔진과 파티클 효과, 그리고 셰이더(Shaders)- GPU등 하드웨어를 활용한 렌더링 기술, CSS3D에서 제공하는 pseudo-3d와 같은 2.5D 와 네이티브 인터페이스등등..

소개 내용을 보자하면, 유니티3D와 비견될만하다. 과연 유니티3D의 아성을 넘을수있을까? 곧 Beta 테스트를 진행할 모양인데,.. 이번 코드스토롱때 공개한다니까.. 쫌만 기다려보자!

참고로 테스터에 참여할 사람은 여기로..

http://lanica.co/about/signup-for-our-beta-program/

 

아이폰의 시스템 경로와 타이타늄 파일시스템 경로

아이폰앱으로 개발을 하든 타이타늄으로 아이폰앱을 만들든 중요한 사실이 하나있다.
바로 아이폰의 각 시스템 폴더들은 각자의 역할들이 있다는 사실이다.
따라서 각 폴더의 역할이 무엇이지 제대로 알고 역할에 맞게 파일을 저장해야한다.
만약 따르지 않은면?? 애플은 여러분의 앱을 결코 용납하지 않을 것(?) 이다!!

일단 아이폰에서 특정 앱의 루트 파일 경로는 다음과 같다.

/Applications/apple_app_id/

아이폰 시뮬레이터는 다음과 같다.

/Users/user_name/Application Support/iPhone Simulator/ios_version/Applications/apple_app_id/

그럼 타이타늄 파일스템의 경로들이 어떤 경로들을 가르키고 있는지 정리해본다. 참고로 위 루트 경로는 중복되므로 생략한다.

  • Titanium.Filesystem.applicationDataDirectory:
    /Documents/ – iTunes와 공유되는 폴더
  • Titanium.Filesystem.applicationDirectory:
    /Applications/ – 애플리케이션 폴더
  • Titanium.Filesystem.applicationCacheDirectory:
    /Library/Caches/ – 설정이나 캐시등을 저장하는 폴더
  • Titanium.Filesystem.applicationSupportDirectory
    /Library/Application Support/ – iCloud 자동 백업, 다른 앱과 연동에 필요한 데이터를 저장하는 폴더
  • Titanium.Filesystem.resourcesDirectory
    /[AppName.app]/ – 타이타늄 앱 리소스 폴더
  • Titanium.Filesystem.tempDirectory
    /tmp/ – 임시파일, 앱이 죽거나 재시작하면 없어진다.

SQLite로 만든 DB 자동으로 업데이트 하기

앱을 만들다보면 앱안에서 사용하던 데이터를 종종 바꿔야하는 경우가 있다. 이럴 경우 앱을 다시 배포하거나 데이터를 DB로 만들어서 DB를 바꿔줘야한다. 하지만 전자의 경우 앱을 재배포해야하는 문제가 있기 때문에 후자를 선호한다.

아이폰 앱중에 서울버스앱이 바로 이런 경우에 해당한다. 노선정보가 매번 바뀔때마다 앱을 새로 배포하지않고, 노선정보 DB만 업데이트해준다.  사실 서울버스앱 내부적으로 SQLite를 써서 바꿔치고 있는지는 모르겠지만.. 아마도 그렇치 않을까 조심히 추측해본다.

그럼, SQLite를 이용해 데이터베이스를 바꿔치는 방법에 대해 알아보자.

타이타늄에서 SQLite DB 인스톨하기

일단, 타이타늄에서 DB를 인스톨하는 방법은 간단하다.

 Ti.Database.install( String path, String dbName) API 문서 참고 

아이폰의 경우 아래 코드와 같이 호출하게 되면, 해당 DB가 /Library/Private Documents/에 .sql 확장자가 붙어서 저장된다.

code>> Ti.Database.install(“test.db”, “DB”);
save path>> /Applications/apple_app_id/Library/Private Documents/DB.sql

위와 같은 경로에 DB가 저장되는 이유는 Apple 정책이기 때문에 특별한 이유는 없다.
물론 이유는 있겠지만, 자세한 내막은 모르므로 일단 패스~

SQLite DB 자동 업그레이드 하기

먼저 자동 업그레이드 시나리오는 이렇다.

  1. DB 서버가 따로 있고, 웹에서 DB를 관리한다.
  2. 웹에서 제공하는 DB에 뭔가 수정사항이 생긴다.
  3. 앱에서 웹DB의 수정이 있는지 체크한다. (체크하는 방법은 두가지다. 서버에서 푸시하던지, 아니면 주기적으로 체크하는 방법이 있다. )
  4. 여튼 수정이 있다면 웹DB를 HTTP요청을 통해 다운로드 받는다
    Ti.Network.createHTTPClient() 를 이용한다.
  5. 그리고 다운로드 받은 DB파일을 인스톨한다!
    Ti.Database.install()을 이용한다.

그런데 문제가 있다.  바로 DB가 인스톨되는 저장소가 /Library/Private Documents/ 라는 사실이다. 현재 타이타늄(2.1.3GA)버전에서는 해당 폴더에 직접 액세스하는 방법을 제공하고있지 않기 때문에 인스톨한 DB를 지울 방법이 없다는 사실!! 뚜둥…OTL

DB를 지우지 않고, 인스톨하는 방법

인스톨한 DB를 지우지 못한다면, 아무리 install() 메소드를 호출해도 DB가 복사되지 않는다!
따라서 여기서 핵심은 기존 DB를 지우는데 있다!! 물론 지우지 않고 해결하는 방법도 있다.

먼저 지우지 않고 해결하는 방법은 다른 이름으로 DB를 만들고, 내부적으로 DB경로를 바꾸는 방법이다. 뭐 일단 이 방법도 DB가 자주 업데이트 되지 않는다면 쓸만한 방법이다. 하지만 DB가 자주 업데이트되면 내부 공간에 파일이 누적되는 문제가 있다. 그래서 언제가는 지워야한다!!

여튼 다른 이름으로 DB를 만들고, 내부적으로 DB경로를 바꿀때는 Ti.App.properties 를 사용하면 유용하다. 프로퍼티는 특별한 DB를 설정하지 않아도 마치 쿠키처럼 동작하기 때문에 처음 앱을 설치할때는 앱내부DB를 이용해 설치하고, 이후에 웹에서 DB를 다운로드 받게 되면 프로퍼터를 이용해 새로운 DB경로를 설정해두면 된다.

기존 DB를 지우고 새롭게 인스톨하는 방법 

그럼 다시 본론으로 돌아와서 어찌됐꺼나 중요한건 기존 DB를 지워야한다는 사실이고, 현재 타이타늄 API는 /Library/Private Documents/ 폴더에 접근하는 방법을 제공하고 있지 않다는 사실이다.

이 문제는 약간의  꼼수가 필요하다. 결국 파일 시스템에서 접근할때의 최종 경로가 /Library/폴더를 가르키게만 하면 되기 때문에 일단은 Ti.FireSystem.applicationDirectory를 이용해 경로를 가져오고, 이 경로에서 /Application 경로를 /Library로 바꿔주기만하면 쉽게 해결된다!!

자 그럼 고기낚는법은 알려드렸으니, 나머지는 여러분들의 몫~
사실은 귀찮아서..-_-;;;..