RSS

카테고리 보관물: iphone, ios, xcode, html5, javascript

하이브리드 앱 개발환경 Appspresso 소개

우리 회사에서는 유난히 하이브리드 앱에 대해서 관심이 높다. 반년 전쯤 애플 앱스토어에 업데이트 걸었다가 승인이 나기까지 한달이 넘게 걸렸던 적이 있었는데, 그 후로 회사에선 네이티브 앱에 대해서는 의구심을 갖기 시작한 것 같다. 빠른 반응속도나 유저 경험은 좋지만, 비즈니스의 명운을 앱스토어가 쥐고 있다는 점이 네이티브 앱은 탐탁치 못했나 보다. 쫄았나? 🙂

하이브리드 앱이란 껍데기만 네이티브로 만들고 그 속 알맹이는 html5와 javascript로 채운다는 개념이다. 이것은 한번 앱스토어에 통과되면 끝. 콘텐츠를 서버쪽에서 맘대로 바꿔치기 할 수 있으니, 교육용 콘텐츠로 승인받고 음란물을 틀수도 있게 되는 것인데. 그만큼 비즈니스가 자유를 갖게 된다는 것이다. 그런 불순한 목적이 아니더라도, 내가 내 콘텐츠를 서비스 하는데 애플에 30%를 떼주는 것이 콘텐츠 사업하는 사람들에게는 칼만 안든 강도로 여겨져서 받아들이기 힘든 조건일 수 있기 때문에 미국의 유수 언론사들도 앱스토어를 통한 판매에는 소극적인 것이다.

그리고 안드로이드와 아이폰, 윈도우 폰까지 가세하면 얼마나 플랫폼이 다양하지 않나? 이걸 일일이 대응하려면 개발비용이 만만치 않을 것이다. 하이브리드 앱은 껌데기만 개발해 놓고 그 속은 html5라니 responsible web으로 꾸며내면 적은 비용으로 여러 플랫폼 지원이 가능해진다는 것은 부인하기 어렵다.

별 내용 아닌 걸 길게 이야기 했는데, 아무튼 하이브리드 앱 만의 장점이 분명히 존재한다.

단점은 짧게 이야기 하면 성능이 쥐약이란 것. 네이티브에서 휙휙 돌아가는 자연스러운 움직임은 아직까지는 어려운 것 같다. html5기술의 비약적 성장으로 많이 극복되었다지만, 네이티브는 놀고 있는게 아니므로 네이티브 앱의 화려한 무공에 따라가는 것은 어불 성설일것이다. 따라서 하드웨어의 성능을 극한으로 사용하는 정말 잘 만들어진 앱은 네이티브에서 계속 나올 것이라고 봐도 요 몇 년간는 틀리지 않을 듯.

이런 치명적인 단점에도 불구하고 하이브리드 앱이 차지 할 수 있는 시장이 분명 존재한다. 그닥 반응속도 빠를 필요도 없고 화려한 하드웨어 성능도 필요없는 단순한 기능 수행정도의 앱을 찍어만들어야 한다면 하이브리드 앱이 그 대안이 될 수 있겠다.

하지만 하이브리드 앱을 맨땅에서 시작하는 건 불가능에 가깝다. 네이티브를 완벽하게 이해한 상태에서 웹기술을 함께 접목할 수 있는 절대고수들의 영역이기에 우리 같은 사람들은 범접할 수 없다. 따라서 우리는 그들이 만들어 놓은 것을 가져다 쓰는 호사를 누려보자. 하이브리드 앱 개발을 쉽게 도와주는 앱스프레소가 바로 그것인데. 서양의 PhoneGap과 유사한 하이브리드 앱 개발환경이다.

간단한 회원가입을 하면 다운받을 수 있으니 홈페이지를 한번 방문해보길 추천한다.

홈페이지, 다운로드 페이지

백문이 불여일견이니 아래 동영상을 한번 보면 감이 올 것이다. 근데 소리가 없네 😦

아래는 홍보글이에요.

앱스프레소는 웹기술을 사용하여 모바일 앱을 빌드할 수 있는 무료 통합개발환경입니다.

외국의 PhoneGap과 같은 개념을 갖고 있으면서도, Eclipse 기반의 개발환경이 무척 편리하다는 평을 받고 있습니다.

현재 단일소스로 Apple iOS, Google Android 앱을 빌드할 수 있으며, 전세계 웹앱 도매시장인 WAC을 위한 앱으로도 패키징할 수 있습니다.

이외에도 Microsoft Windows Phone, RIM BlackBerry, 삼성 바다 등으로 지원 범위를 확대해 나갈 예정입니다.

순수한 국내기술로 2년여에 걸쳐 개발된 앱스프레소는 2011년 3월에 베타버전이 릴리즈되었고, 2011년 11월30일 정식버전이 발표될 예정입니다.

11월 30일은 kth 2011 개발자 컨퍼런스가 있는 날입니다. 이날 keynote 세션에서 앱스프레소가 발표됩니다.

다음은 관련된 인터넷뉴스 기사입니다.

iOS-안드로이드 앱 개발 한 번에…어떻게?

“앱스프레소 7월 정규버전 PDK 추가…완성도 높아질 것”

KTH, 지식공유 개발자 컨퍼런스 ‘H3’ 개최

앱스프레소는 개인과 기업 모두 상업적인 용도로도 무료사용이 가능합니다.

자세한 앱스프레소 소개는 http://appspresso.com/ko/about-ko 에서 보실 수 있습니다.

무료 다운로드는 http://appspresso.com/ko/download-ko 에서 하실 수 있습니다.

복잡한 가입자정보 없이 이메일만 등록하시면 됩니다. 등록하신 이메일로 다운로드 가능한 인터넷 url 주소를 보내드립니다.

 

Xcode 4.2에서 armv6가 빠진 이유

Xcode 4.2에서 프로젝트 설정에 들어가보면 Architecture 설정부분이 있는데 이번 4.2버전부터 armv6가 기본으로 제외되었다. 설정을 추가 함으로 컴파일러 경고를 없이할 수 있는데, 자세한 내용은 다음 링크를 참조하면 쉽게 수정가능하다.

http://www.weston-fl.com/blog/?p=3050

그런데, 왜 armv6가 빠졌는지 생각해보자면, 현재 iOS device중에서 armv6 기반은 iPhone 3 이전모델과 iPod touch 1,2세대까지다. iPhone 3는 국내에서 보기 힘든 모델이고 iPod touch도 4세대가 나온지 일년이 다 되어가는 시점에서 1,2세대는 참 오래전 이야기일 뿐이다.

공교롭게도 위 제외된 모델에는 iOS 5를 설치할 수 없다. 애플이 향후 iOS 5를 전략적으로 밀기 위해서 나머지 것들을 정리하려는 계산에서 Xcode 4.2에서 armv6를 제외한 것이라고 본다.

혹시, 당신이 만들고 있는 앱이 iPod touch 1,2세대까지 지원해야하는 앱이라면 armv7 뿐만 아니라 armv6도 함께 추가해줘서 호환성을 보장할 필요가 있겠다.

 
 

웹-앱 게이트웨이로 하이브리드 앱 만들기 동영상 강좌

아이폰 네이티브 앱에서 웹뷰를 띄워서 하이브리드 웹앱의 형태로 개발하는 사례가 늘어가고 있다. 심지어 프레임만 웹으로 가져가고 나머지는 모두 웹뷰에서 처리하는 앱도 있는데 나름 장점이 있겠다.

  • 애플 승인 없이 앱을 업데이트 할 수 있다.
  • 안드로이드/아이폰 두 플랫폼을 한 번에 개발할 수 있다.

이 두가지만으로도 비즈니스 측면에서 유용성 면에서 네이티브 개발보다 웹뷰를 통한 개발이 훨씬 우위에 있다고 하겠다.다가 HTML5의 막강한 파워를 아이폰/안드로이드 모두 지원하고 있기 때문에 자바스크립트 개발자들은 네이티브를 몰라도 얼마든지 모바일 웹 개발이 가능해졌다.

하지만 한계는 존재하는데, 카메라나 엑셀러미터 정보등 하드웨어 장치에 대한 인터페이스는 아직 제대로 마련되어 있지 않은 관계로 네이티브와 웹뷰 사이에 가교역할을 해줘야 할 경우가 많다.

이 컨셉으로 만든 것이 웹-앱 게이트웨이로 웹뷰를 호출할 때 네이티브의 UI를 정의하거나 UI의 이벤트를 웹의 JS호출로 변경하거나 하는 트릭을 넣은 것이다.

자세한 내용은 다음 동영상을 잠깐 보면 이해가 될 것이다.

내용

  • 웹뷰 – 앱 UI 정의
  • 앱에서 버튼 탭 이벤트를 웹뷰의 JS호출로 변환
난이도: 중급

 

소스코드는 github에 올라가 있다.

 
 

WWDC 2011 훔쳐보기?

WWDC 2011에 참가하지는 못했지만, 동료 두 명이 현장에 참가중이라 그들의 도움과 트위터와 각종 블로그를 통해서 접수되는 내용들을 정리해보려고 한다.

이번 WWDC에서도 변함없이 예측이 난무하고 있다. 대표적인 예측 페이지는 mashable의 2011 WWDC  8가지 예측이다. 요약하자면 다음과 같다.

  1. iOS 위젯(안드로이드와 유사한) 기능과 새로워진 노티기능
  2. 애플이 인수한 Siri회사의 인공지능 기술이 녹아든 개인 비서 기능으로 음성으로 명령하면 길을 안내하고 레스토랑을 예약하는 등의 기능을 수행한다. 또 Nuance 라이센스를 기반으로하는 강력한 음성인식 기술이 iOS5에 들어갈 것이란 예측
  3. 새로워진 에어포트/타임 캡슐 – 여기에도 iOS가 올라갈지 모른단다. (최피디 생각: 헐~ Apple TV에 이어 iOS가 확장일로군요)
  4. Universal Remote Computer Access – 어디서든 맥북만 있으면 내 맥으로 접근이 가능해지는 기능으로 iCloud와 Time Capsule로 가능해진다고 함. (최피디 생각: 이전에 MobileMe와 TimeCapsule로 가능했던 기능 아니었던가?)
  5. iCloud를 통한 스트리밍 음악
  6. 무선 동기화 – 30핀 아이폰 코넥터를 더 이상 쓸 필요가 없을지도 모른다.
  7. 트위터, 페이스북같은 소셜 네트워크의 통합 – (최피디 생각: 유출 동영상으로 확인 되었으니 거의 정확한 예측인듯)
  8.  iOS와 Mac OSX와의 융합
One More Thing 배너? 이번에도 스티브 잡스가 One more thing 하면서 뭔가 이야기 할 것 같은데요. 궁금하네요~! 🙂
새로운 노티 기능에 대한 이미지
출처: http://www.macrumors.com/2011/06/06/wwdc-2011-pre-keynote-roundup-and-coverage-details/
윗쪽 상태 바를 이용하고 있습니다. 이번에는 초록색이군요. 🙂
아래 내용은
에서 올라오는 문자 중계를 보고 실시간으로 정리한 글입니다.

한국시간으로 오늘 새벽 2:00부터 약 2시간동안 발표된 WWDC 2011 Keynote 내용을 정리했습니다.

키노트 주제는 Lion, iOS 5, Cloud 이야기입니다.

Lion – 새로운 Mac OS X 운영체제

통계

  • 전세계 5천400만 액티브 맥유저
  • PC가 마이너스 1% 성장하는 동안 맥은 28%성장.
  • 맥유저의 73%는 노트북 유저.
  • 유닉스 기반으로 한 Mac OS X는 올해로 10년된 운영체제입니다.
  • Lion 에는 250개 이상의 신기능이 포함되었다고 합니다.

대표기능 소개

 Multi-touch gestures

새로운 방식의 스크롤, 핀치 줌이라는군요. 마우스의 죽음으로 표현되네요. 다양한 제스처로 명령을 내릴 수 있습니다.(매직트랙패드 수요가 늘어 날 것 같습니다.)

 

Full-screen apps

사파리, iCal, 미리보기 등이 전체화면으로 즐길 수 있게 되네요.

Mission Control

“birds eyed view” Expose를 확장시킨 기능으로 실행중인 앱들이 그룹핑되고 선택하거나 스페이스(가상 데스크탑)사이를 이동시킬 수 있는 기능. 스페이스 숫자가 고정값이 아니라 동적으로 늘어나고 줄어든다는군요.

Mac App Store

올해 1월에 시작되었지만 새로운 소프트웨어를 구매하기 가장 좋은 장소가 되었음.

이전에는 Office Depo, Wallmart, Best Buy에서 소프트웨어를 샀지만 이제는 맥용 앱스토어에서 가장 많은 소프트웨어를 사고 있음.

In-app purchase가 기본 포함이고, 푸시 알림기능, 샌드박스 모델이 포함

Launchpad

간단한 제스쳐로 내가 사용하는 모든 앱을 아이패드의 스프링보드처럼 보이게 할 수 있습니다.  폴더를 만들어 앱들을 그룹핑할 수 있습니다.

Resume

Lion에서 각 앱은 이전 상태를 기억했다 다음 실행시 그 위치(상태)에서 동작함. 심지어 셧다운 하고 새로 시작해도 이전의 모습 그대로 시작할 수 있다고 합니다.

Auto-save

이젠 SAVE 해야한다는 강박관념에서 탈출할 수 있게 됨. 자동으로 작업중인 것들을 저장한다.

Versions

초간단 문서 버전 관리 가능. 문서의 모든 변경에 버전을 매겨서 해당 버전으로 되돌아가거나 이전 버전의 내용을 새 버전으로 복사할 수 있음. 타임머신(애플의 백업&버전관리 앱) 처럼 프리뷰로 버전을 비교할 수 있음.

AirDrop

컴퓨터끼리 파일을 복사하는데 USB 메모리 이상이 없었다. 하지만 Lion에서 P2P방식으로 파일을 주고 받을 수 있는 AirDrop제공함. Finder(Mac의 파일매니저)에 AirDrop 메뉴를 선택하면 현재 내 주변 네트워크에서 보이는 컴퓨터(사람)를 찾아서 특정하면 그 사람에게 파일을 보낼 수 있게 된다.

Mail

완전히 바뀜. iPad의 그것 처럼 바뀌었음.

검색 개선

쓰레드 기능 (대화형, re:re:re:이런거 없애준듯)

기타

FaceTime, FileValut 2등 250개의 기능과 1,000개 이상의 API가 추가됨.

판매

Lion은 Mac App Store에서만 판다. DVD없음.

이제까지 유래가 없는 쉬운 업그레이드. 전체 용량은 4GB. 부팅 여러번 할 필요 없이 다른 앱 설치하듯 해주면됨.

29.99$ (최피디 생각: 올레~!).

오늘 개발자 프리뷰 공개.

7월에 일반 공개.

Lion Server

– 서버 앱, 프로파일 매니저, 아이패드용 무선 파일 공유, 푸시 알림을 서버 이용자들에게 보낼 수 있음. 위키 서버3, iCal Server 3, Mail Server 3. Xsan

iOS 5

통계

  • 현재까지 2억대 iOS device 판매됨.
  • 시장의 44%차지하는 1위의 mobile OS.
  • 첫14달동안 2천5백만대 iPad 판매.
  • iTunes Music: 150억개 노래 판매.
  • iBookstore: 1억3천만 권 책 다운로드
  • App Store: 현재 425,000 개 앱스 존재(이 중 90,000개 아이패드 전용). 3년이 안되어 140억개 다운로드. 개발자에게 25억불 지불(최피디 생각: 나에겐 한푼도 안줘놓구 ;-( ).  2억2천5백만 계정 모두 원클릭 결제.

미래가 현실로: iOS 5

  • 1,500개 새로운 API.
  • 툴의 엄청난 향상.
  • 200개의 신기능.

Notification Center 통합 알림 관리 기능

천 억 개의 푸시 알림이 보내졌었음. 이렇게 많이 쓰지만, lock상태에서는 받은 리스트가 유지 되지 못하는 문제를 보완하여 하나의 장소에서 모든 알림을 통합 관리함. (최피디 생각: 안드로이드 따라했구만~! 잘했어.)

게임등의 앱을 실행 중에 메시지가 오더라고 기존의 앱을 중단하지 않고 사용할 수 있도록 지원함.

iMessage

3G나 Wifi를 통하여 무제한의 문제 메시지를 주고 받을수 있는 기능. iPad와 iPod touch에서도 대화할 수 있게 된다. 문자메시지, 사진, 비디오, 위치, 연락처를 교환할 수 있다. 암호화되어 전송된다. 다른 사람이 타이핑 중임을 알 수 있다. (최피디 생각: WhatsApp이나 카카오 톡과 유사한 기능)

Newsstand

모든 구독하는 잡지들이 한 곳에서 백그라운드로 다운로드 되어짐. 한국어 언어설정에서는 “뉴스 가판대”로 번역되어 있음. 최신의 잡지가 왔음이 표시되고, 들어가보면 바뀐 표지로 직관적으로 알 수 있음. 잡지는 iBooks 라이브러리에서 구매할 수 있음.

Reminders

할일 목록을 관리해주는 앱. iCal, Outlook, iCould와 연동되어서 각 디바이스간에 자동 동기화. 위치기반으로 할 일을 등록해서 알려주도록 설정할 수 있어서, 쇼핑몰 근처에 갔을 때 구매해야하는 리스트를 보여주는 식이다.

트위터

한 주에 10억 트윗이란 엄청난 트래픽. 트위터는 대세.

트위터가 iOS에 통합된다. 설정에서 트위터를 세팅해놓으면 SSO(Single Sign On) 동작된다. 즉, 트위터 로그인 하는 어떤 앱이든 다시 로그인 할 필요 없이 한번에 로그인 됨. 또 각종 공유버튼에 트위터가 포함되어서 사파리, 사진, 비디오에서 트위터로 쉽게 보낼 수 있음. @유저명으로 자동으로 수신자를 넣을 수 있음.

Camera

빨라짐. lock 걸렸을 때 패스코드 넣을 필요없이 바로 사진찍을 수 있는 버튼 추가 됨.

볼륨업 버튼으로 사진찍을 수 있음

핀치(두 손가락을 벌리는)로 줌을 조절할 수 있음.

iCloud로 사진을 Photo Stream할 수 있다.

Photos

편집 기능 있음. 자르고 돌리고 적목감소 기능. 원클릭 보정.

사파리

모바일 브라우저 중 64%가 사파리.

90%이상의 모바일 브라우징이 사파리 엔진에서 일어나고 이것은 오픈소스 프로젝트 중.

브라우져 탭기능 지원

Reader – 거추장스런 광고 등을 제거하고 내용만 뽑아서 보여주는 기능

Reading List – Instapaper 같은 기능. 한군데에서 추가/삭제하면 모든 디바이스로 갱신됨.

PC Free

동기화를 위하여 컴퓨터가 더이상 필요없다.

무선 동기화. 30핀 아이폰 라인이 더이상 필요 없어짐.

iCloud를 통하여 백업과 리스토어를 자동으로 할 수 있음.

Mail

rich-text formatting. 들여쓰기 제어. 드래그할 수 있는 주소, 중요메일 flag기능, 전체 내용 검색. 메일박스에 폴더 추가 삭제.

iPad용 swipe-to-inbox기능

기업용 메일을 위하여, S/MIME 암호화 지원

Calendar

년간 일정보기 뷰 종류 추가. iCloud 동기화 지원.

Game Center

5천만 게임 유저 사용중. (참고: Xbox live가 8년동안 3천만 유저).

Wi-Fi Sync

같은 wi-fi안에 Mac이나 PC가 있다면 iOS 디바이스를 충전하기 위해 파워에 꼽으면 동기화하게 됨. 항상 새로운 컨텐츠로 동기화 되어 있음.

아이 패드용 Multitasking 제스처

멀티테스크 전환을 위해서는 네 손가락 이상으로 왼쪽에서 오른쪽으로 쓸면 다음 앱으로 전환됨.

AirPlay Mirroring for iPad 2

iPad2에서 Apple TV로 연결된 큰 스크린의 TV로 무선으로 스크린을 미러(복사)할 수 있음. Wifi로 iTunes에 동기화.

기타

내장형 사전 – 텍스트 선택하면 copy메뉴 옆에 새로생긴 define 선택하면 사전으로 이동.

엄지손가락 타이핑을 위한 새로운 변형 키보드. 모든 앱에서 상태를 기억함.

새로운 개발 툴

xcode, simulator, core image 오늘 개발자 seed나감.

출시

iOS 5는 가을에 출시 (iPhone 3GS, 4, iPad 1/2, iPod touch 3세대이상)

iCloud

디바이스가 늘어나면서, 동기화가 골치아픈 문제! 이를 클라우드로 해결한다. cloud로 보내면 알아서 나머지 디바이스로 푸시하는 방식.

공짜

MobileMe는 99달러였는데 이제 오늘부터 iCloud는 공짜.

앱스토어

이제까지 샀던 모든 앱을 볼 수 있고 download from cloud 버튼을 통해서 추가 비용없이 다운받을 수 있다. 앞으로는 한 디바이스에서 받기만 하면 다른 곳에서 그냥 설치된다.

iBooks

앱스토와 같다. 구매 내역이 생기고 버튼을 누르면 새 디바이스로 간다. 북마크도 클라우드로 동기화 된다.

백업

하루에 한 번 연락처 정보를 클라우드에 백업한다. 새 폰을 사서 패스워드만 넣으면 자동으로 내려진다.

클라우드에서의 문서

Pages, Numbers, Keynote 모두 클라우드로 백업 동기화 됨.

iCould Storage APIs

개발자도 iCloud에 데이터를 저장하고 가져올 수 있게 된다. NSUserDefaults같은 앱의 설정을 클라우드에 올리 수 있게 되었음.

Photo Stream

iCloud를 이용하여 사진을 스트리밍으로 공유함.

30일동안 최근 1000장만 저장됨.

iTunes in the Cloud

구매 내역을 내려받고 필요한 앱이나 미디어를 받을 수 있음. 자동으로 받게 할 수 도 있음.

256kbps

원곡이 256kbps보다 질이 낮더라도 클라우드에서 256kbps를 찾아서 다운받아 준다.

백업 공간 5GB

메일과 문서 백업을 위한 5GB 무료 저장공간. 구매한 음악, 앱스, 책은 포함되지 않음. 포토 스트림도 제외된 크기.

공개 일정

오늘 개발자 베타를 공개.

가을에 모든 디바이스에 작동될 것임. iOS5에 iCloud 전기능이 배포됨.

iTunes Match

iTunes music store에서 구매한 것 뿐만 아니라 내가 개인 적으로 구매한 CD를 rip한 것을 클라우드에 올려 스토어에서 좋아할 것 같은 노래를 찾아 주는 서비스. 몇 분만에 추천해준다. 2만곡이 넘어도 24.99달러로 서비스해줌. (아마존은 200불) 이를 위해서 제3 데이터 센터를 North Carolina에 대규모로 건설했다.

 

태그: , ,

애플 푸시 알림 서비스(APNS) 개요

애플의 푸시 노티피케이션 서비스(APNS)를 사용하는 방법
1. APNS란?
iOS 앱스가 백그라운드로 돌아가고 있을 때에도, 해당 앱을 깨우거나 메시지를 전달할 수 없을까? 크게 두가지로 방법이 있는데 하나는 local notification과  remote notification이다. 이름처럼 local notification은 앱스 내의 타이머를 세팅하고 알람해주는 방식이고 remote notification은 원격 서버에서 메시지를 보내서 앱스에게 전달되는 방식이다. (주의! local notification은 ios 4.0 이후로 지원한다.)
본 글에서 이야기 하려는 것은 remote notification이다.
2. 등장인물
remote notificaiton을 설명하려면 세명의 등장인물이 있다. 앱스와 APNS서버와 APNS Provider 이다. 이들의 역할은 다음과 같다.
  • 앱스  – 내가 만든 앱
  • APNS서버 – 애플이 구축해놓은 iOS장치로 푸시 메시지를 보내는 클라우드 서버
  • APNS Provider – 애플의 APNS서버로 특정 디바이스의 앱스로 푸시 메시지를 보내달라고 요청하는 역할의 전용 서버.
3. 동작 방식
이 주인공들 사이에서 어떤 일이 일어나서 푸시 메시지가 전달되나 살펴보면 다음과 같다.
  1. 어떤 앱스가 APNS서버에게 푸시용으로 사용할 deviceToken를 요청해서 받는다.
  2. apps는 받은 deviceToken를 APNS Provider에게 보낸다.
  3. APNS Provider는 해당 deviceToken으로 푸시 메시지를 보내줄 것을 APNS서버로 요청한다.
  4. APNS 서버는 deviceToken를 보고 어느 디바이스의 어떤 앱스인지 판단하고 보낸다.
4. device token 좀 더 자세히
device token은 애플에서 암호화 해서 전달될 64바이트 문자열이다. 개념적 정의는 어느 디바이스와 어느 앱스를 특정하는 역할이다. 즉 메일 수신 주소와 비슷하다. someApp@someDevice 으로 이해하면 되겠다. 이것은 iOS앱스를 실행할 때 미리 정의된 콜백함수를 구현함으로 받을 수 있다.

– (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken

device token은 두 종류가 있는데, 개발(development)용과 배포(production)용이다. 개발인증서로 sign된 경우는 development용 device token이, 배포용인 경우는 배포용으로 받아지게 된다.
5. APNS Provider
애플의 APNS 클라우드 서버에 특정 deviceToken으로 어떤 메시지를 보내달라고 요청하는 전용서버인데, 이해하기 쉬운 예를 들자면 보내는 메일 서버같은 개념이다. deviceToken이 이메일 수신자라면 APNS Provider에서 해당 수신자로 어떤 내용을 보내달라고 요청한다. 이때 애플의 클라우드와 SSL 보안 접속을 하기 때문에 이 서버에는 인증서가 설치되어 있어야 한다.
필자도 apns-php 프로젝트의 도움으로 쉽게 푸시서비스를 구현할 수 있었다.
관련 참고 자료
 
 

태그: , , ,

Google App Engine 사용 후기

gae icon

구글 앱엔진으로 프로젝트 하나를 마쳤습니다.

간단한 이미지 콘텐츠 관리서버와 API를 앱엔진에서 구성하고, 아이폰에서 해당 API를 호출하여 이미지를 보여주는 형태의 서비스입니다.

처음으로 앱엔진을 이용해봤지만 간단한 후기를 적어 보고자 에어를 펼쳤습니다. 혹시 누군가에게 도움이 되길 바라며, 유리병에 넣고 바다에 던져보는 거지요. 🙂

처음 앱엔진을 접했던 것은 2008년 12월쯤 아이폰 앱스를 개발하면서 cocos2d라는 라이브러리를 이용할 때였습니다. 거기 글로벌 랭킹를 관리해주는 아이가 바로 앱엔진이었던 것이였죠. 벌써 2년이 훌쩍 넘었군요. 좀 더 호기심을 가지고 들여다 봤다면 클라우드를 먼저 접해볼 수 있었겠지만 그리 못했습니다. 아쉬움이 많이 남습니다.

2년사이에 간간히 앱엔진으로 뭔가를 해봐야겠다는 생각 뿐이었고 실행에 옮기지 못했습니다. 그 사이에 저는 전업 앱개발자가 되어가고 있었지요. 이전에 하던 서버쪽 개발은 별로 흥미를 끌지 못했던 시기였습니다. 전업 앱개발자로서 SNS를 개발해보고 나서 API서버의 역할과 앱과의 통신에 대해서 이해하게 되었지요.

그래서 개인 프로젝트에 적용해보기로 맘먹었고, 그래서 머리 속 기억 저편의 앱엔진을 다시 전두엽으로 불러냈습니다. 😉

2년이란 시간이 지나는 동안 앱엔진은 자바 런타임을 도입했다는 것 외에는 큰 변화가 없었습니다. 하지만 관련해서 사용자들의 리뷰는 넘쳐나고 있었지요. 이들의 리뷰와 간증 덕분에 쉽게 이것을 해보자는 결정과 함께 착수했습니다.

약 2달간의 짬짬이 공부가 시작된 셈입니다. 꾸준하진 못했지만 토요일마다 카페에서 앱엔진을 배우기 위해서 이런저런 코딩을 해보고 실제로 서비스를 구현해봤습니다.

결론적으로 서비스는 파이썬 기반의 앱엔진으로 구현이 되었습니다.

구현하기까지 삽질한 순서를 회고해보면,

1. 초기 샘플 코드 재구현해보기 (방명록 구현하기)
2. 사진 올리고 보여주기 구현
3. data model 구현
4. json출력하기 구현
5. 관리자 페이지 작성
6. API 페이지 작성
7. Memcache 적용

이렇게 꼽을 수 있겠네요.

이 정도로 앱엔진의 모든 기능을 써봤다고 말하기는 많이 부족하지만, 간단한 RESTful 웹서비스 구현은 할 수 있겠구나는 확신이 생기더군요. 각 단계에서 느꼈던 소회를 불어보려고 합니다.

1. 초기 샘플를 따라서 구현

앱엔진의 초기 화면에서 삐적 마른 아저씨가 보여주는 동영상을 몇 번 보면서 따라했습니다. 모방을 충분히 해보니까 이 동네가 어떻게 돌아가는 지 조금 알 거 같더군요. 이 방명록 샘플에 필요한 모든 게 다 들어있다고 해도 되겠습니다. webapp framework를 사용하여 request 처리하는 방법과 처리 결과를 django를 이용해서 response하는 방법 datastore Model를 만드는 방법 이것만으로도 기본적인 웹서비스를 만들기 위한 기초는 놓여졌다고 봐야겠더군요.

2. 사진 업로드하고 보여주기

사진데이터는 BLOB로 datastore에 저장됩니다. 마치 테이블의 한 필드에 저장되는 것 처럼 말이죠. BLOB처리도 매우 간단히 처리가 되더군요. 그런데 그 이미지를 보기 위한 핸들러가 필요했습니다. 각 이미지가 들어있는 row에 대해서 key값으로 blob데이터를 불러와서 이미지로 Content-Type를 이미지로 설정해서 뿌려주니 잘 되네요. 이것도 모두 앱엔진 문서화에 포함되어 있습니다.

3. Model 설계

데이터 모델을 서비스에 맞게 디자인하고 테이블을 설계하듯이 파이썬 클래스를 db.Model를 상속받아 만들면 모델이 만들어집니다. 그 모델을 get(), put(), delete()이런 메소드를 사용할 수 있게 됩니다.

4. json으로 출력하기

django.utils에 simplejson모듈을 그냥 가져와 쓰면 되더군요. 오히려 파이썬의 dictionary와 list에 대응하는 {}, [] 표기법이 익숙치가 않아서 조금 햇갈렸습니다만 곧 이해가 되었습니다. 아울러 json의 구조상 reculsion으로 구현해야하는 부분에서 살짝 고민스러웠는데 다른 사람들이 해놓은 패턴을 따라해서 곧 해결했습니다. 그럴듯한 json를 리턴해주는 API도 구현이 끝났습니다.

5. 관리자 페이지

사실 관리자 페이지에서 콘텐츠를 입력하기 때문에 초반부터 작업이 되었습니다만 효과적인 구현이 어려웠습니다. 관련해서 찾아보니 앱엔진의 Model을 기준으로 자동으로 admin페이지를 구성해주는 appengine-admin프로젝트가 있더군요. 그것을 이용하면 어땠을까 아쉬움이 남았습니다.

6. API 구현

이제 아이폰 앱스와 앱엔진 사이의 API를 구현했습니다. json으로 쉽게 만들 수 있어 쉽게 구현했습니다. 이때 Model사이의 join개념을 사용하기 위해서 ReferenceProperty를 사용하여 최종적으로는 tree형태의 자료구조가 json으로 출력되도록 했습니다. 뭔가 무거운 느낌이 들었지만 그냥 잘 작동 되는 것 같아(?) 넘어갔습니다.

7. Memcache 적용

API를 호출하면서 본격적인 테스트에 들어갔는데, 이상하게도 좀 무거운 API를 호출하면 앱엔진 어드민 콘솔에서 로그에 빨간색으로 경고가 떴습니다. cpu사용과 api호출이 과하다는 경고였습니다. 몇 번 사용하지 않았는데도 cpu가 쿼터의 90%에 육박하는 것이었죠. 실 서비스로 간다면 쿼터를 넘어서 서비스가 불가능했겠지요. 결국 같은 내용을 리턴해주는 쿼리를 매번 할 필요없이 특정 시간동안은 memcache에 저장한 다음 그것을 리턴해주는 방식으로 cpu와 api호출 과부하 문제를 해결했지요.

아직 앱 승인전이고 실 서비스가 진행됨에 따라 예기치 못한 문제가 발생할 수 있겠습니다. 그렇게 경험한 뒤에 그 경험을 나눌 것을 약속드립니다. 🙂

글을 마무리 하면서, 앱엔진은 독립 앱스 개발자들에게 날개를 달아주는 서비스라고 생각합니다. 클라우드 세상은 이미 도래했고 서로 나를 이용해달라고 아우성입니다. 앱엔진을 공부하는 동안 AWS(아마존 웹 서비스)에도 급 관심이 생기더군요. 특히 대용량 저장을 위한 S3는 먼저 써보고 싶어질 정도였죠. 앱스 개발자 여러분 클라우드에 도전해보십시오. 막연한 두려움 가질 필요가 없어요. 해보면 별거 없습니다.  주저하고 있다면 저질러보십시오. 이년전에 제가 주저하다가 말아버린 걸 후회하는 전철을 밟지 마시길 당부드립니다.

최피디 드림.

 

태그: , , , , , , ,

아이폰 앱스을 웹을 통하여 배포하는 방법

1. 개요

iOS 4.0부터 웹에 올려져 있는 ipa(iPhone Archive) 파일을 모바일 사파리에서 접근하여 다운로드 및 설치가 가능해졌다. 본 문서는 Build and Archive한 배포본을 share하는 방법을 설명하기 위하여 제작되었다.

2. 프로세스

  • Build and Archive : 빌드해서 아카이브로 저장하기
  • Share: ipa에 signing해서 배포하기
  • Copy ipa and plist to web repository: 만든 ipa와 manifest파일을 웹에 올리기
  • Generate anchor tag: 링크 만들기

2-1. Build and Archive

Xcode에서 타겟을 Device로 놓고 in house 빌드를 위한 인증서를 연결한 다음 Build > Build and Archive를 선택한다. 이 메뉴가 활성화 되려면 Simulator가 아닌 Device로 세팅되어 있어야 한다.

빌드가 끝나도 아무런 변화가 없을 것이다. Window > Organizer 메뉴에 들어가 보면 다음과 같은 변화가 생긴 것을 확인 할 수 있다.

만들어진 빌드에 이름과 코멘트를 작성해서 훗날 다시 봤을 때 어떤 배포본이었는지 확인하기 쉽게 한다.

자 이제 Share… 버튼을 눌러서, 이 배포본을 공유해보자.

2-2. Share

Share… 버튼을 누르면 다음과 같은 팝업 윈도우가 뜬다. 여기서 Identity는 기존에 선택된 것을 그대로 두거나 상황에 맞게 선택한다.

우리는 전사에 웹을 통해 공유할 계획이므로 Distribute for Enterprise… 버튼을 누른다.

URL은 ipa파일이 최종적으로 위치하게 될 URL를 말한다. Title은 다운받을 때에 표시되는 이름을 정하기 위한 필드이다. 나머지는 선택사항이므로 빈공간으로 남겨둬도 무방하다.

OK를 누르고 생성될 파일명을 설정한 다음 Save한다.

그러면 *.ipa과 *.plist 두 개의 파일이 생성되는 것을 볼 수 있다.

다음은 이 파일을 웹의 저장 공간으로 복사하는 작업이 기다리고 있다.

2-3. Copy ipa and plist to web repository

파일을 웹이 접근가능한 곳으로 옮기는 방법은 수백만가지가 되겠지만 어떤 방법을 쓰던 상관없이 특정 폴더로 이동시키면 된다.

현재 CI서버는 Hudson을 사용하고 있으며, 빌드 결과에 대해서 userContent라는 폴더를 통해서 웹 접근을 허용해준다.  따라서, ci서버의 ~/.hudson/userContent/ 아래에 필요에 따라서 폴더를 추가하여 작업하면 되겠다.

예) ~/.hudson/userContent/BLAHBLAH/ 아래에 BLAHBLAH.ipa과BLAHBLAH.plist를 복사한다.

2-4. Generate Anchor tag

index.html 같은 링크를 담을 파일을 만들어서 아래와 같이 링크를 만든다.

<a href=”itms-services://?action=download-manifest&url=http://BLAHBLAH.COM:8080/userContent/BLAHBLAH/BLAHBLAH.plist”>BLAHBLAH</a>

3. 결론

이제 해당 URL를 공유하여 회사내에서 공유할 수 있게 되었다. CI서버에 빌드와 통합하면, 매번 빌드가 수행될 때마다 적절한 경로에서 최신의 배포본을 공유할 수 있다는 점에서 Best Practice가 될 수 있을 것이다.

 
 

태그: , ,