RSS

월간 보관물: 12월 2011

테이블 뷰에 네트워크 요청을 붙여보자

들어가며

UITableViewController 만큼이나 사랑받는 UI가 없을겁니다. 많은 정보를 가볍게 보여 주는 놀라운 UI이지요. 테이블 뷰에 data source에 해당되는 NSArray형의 모델의 내용을 cellForRowIndexPath에서 구현해주는 것이 일반적입니다.

 

해결하고자 한 문제

그런데, 이 모델을 채워넣는 방식이 로컬의 자료가 아닌 원격의 서버를 통해서 데이터를 가져오는 경우라면, 소위말하는 (open) API를 통해서 JSON이나 XML 형태의 데이터를 http 프로토콜로 넘겨받는 패턴입니다.

이런 패턴을 “Online Data source UITableViewController Pattern” 이라고 정의 해봤습니다.

 

구현 방법

이런 패턴을 구현하기 위해서 저는 UITableViewController의 category를 만들었습니다.

@interface UITableViewController (NSURLConnection) <ApiProtocol>

– (void) requestWithURL:(NSURL*) url;

@end

requestWithURL 메소드를 통해서 특정 API를 요청하게 되고 그 결과를 NSURLConnection으로 받아옵니다.

받아온 data를 JSON Serialization으로 NSDictionary나 NSArray형으로 리턴되도록 만든 예제입니다.

github를 통해 다운 받으면 iOS 5용 프로젝트가 나옵니다. 실행시켜보면 뉴욕타임즈의 베스트셀러 API를 요청하고 그 결과값을 JSON으로 받아 테이블 뷰에 그려주는 단순한 앱이 실행됩니다.

실행화면 스크린샷입니다.

다운로드

주의! 소스코드에 포함된 NYTimes API키는 테스트 용도로만 사용해주세요. 감사합니다.

Advertisements
 
댓글 남기기

게시자: 켬 2011년 12월 22일 in iOS개발, OpenAPI

 

태그: ,

Path 1.x to 2.x to the Next

앱스를 바라보는 관점은 백인백색이겠지만, 비슷한 SNS앱을 개발하는 앱스 개발자의 관점으로 Path 2.0를 리뷰해보려고 합니다.

Path의 부모

‘뉘집 자식이길래’ 이렇게 괜찮은 게 나왔을까? 찾아봤더니 두 명의 공동창업자가 있더군요. 하나는 디지털 콘텐츠계의 역사적인 음악 공유 서비스 Napster의 공동창업자 Shawn Fanning 이었고, 다른 한 명은 Facebook에서 Facebook Connect를 만들었던 Dave Morin 입니다. 작년에 Facebook의 남자 매니저와 구글의 여자 매니저사이의 연애이야기로 인터넷에 많은 사람들에게 염장질 했던 바로 그 Dave입니다. 둘 다 생계형 개발자들은 아닙니다. 이미 큰 성공을 해봤던 사람들이지요. 이 두명의 개발자가 함께 했다는 것만으로도 Path는 주목받기 시작했습니다.

Path의 초기 컨셉

흔히 Path를 폐쇄형 사진 공유로 알고 있지만, 그것은 작년 11월 말에 Path를 대외적으로 내놓은 것이었고, 사실은 그 이전에 이미 지인 목록 서비스(?)로 개발되고 있었다는 겁니다. 그 내용을 취재해서 써놓은 기사에 의하면 ‘센프란시스코의 최고의 커피점들’, ‘나쁜 회사들’ 이런 목록을 보여주고 공유하는 그런 컨셉이었다는 것입니다. 사업 초기에는 컨셉이 바뀌는 건 자연스러운거죠.

여하튼, 출시 시점에 Path 1.0은 다른 SNS와 달리 사적인(private) 사진 공유 서비스를 주장했습니다. 새로운 소셜 네트워크의 길(path)를 만든 서비스라면서 차별화 전략을 펼쳤습니다.

2010년 11월 출시 당시 포브스지에서 “아이폰에 Instagram과 Facebook을 결합한 다음 499,999,950 명의 친구를 뺀 서비스”가 바로 Path라고 설명했습니다. 당시의 Facebook유저숫자를 5억명으로 가정하고 FB이 5억명이 접근할 수 있는 서비스라면 자신들은 50명의 ‘진실된 친구’들을 사귈 수 있다고 이야기하고 있습니다.

Path의 50명 제한? 어떤 의미?

폐쇄적이고 개인적인(private) 네트워크 연결의 최대치는 150명이라고 옥스포드 진화 심리학자 Robin Dunbar가 말한 것에 근거하고 있습니다. 인간 두뇌가 특정시간내에 인지할 수 있는 최대치 150명 중에 가장 가까운 사람 5명, 주기적으로 연락하고 지내는 사람은 20명이고 넓은 의미에서 개인 네트워크라고 할 수 있는 숫자는 50명으로 정했다고 합니다. 즉 실제 내가 알고, 믿을 만한 사람들의 네트워크 숫자를 50으로 잡은 것이죠.

Path의 성장과 함께 이 숫자도 최대치라는 150명으로 늘어났기 때문에 50명이 어떤 큰 의미를 갖는 다기 보다. 서비스 초반에 서비스 성격을 규정하기 위한 ‘스토리 텔링’ 차원에서 넣은 언어유희에 가깝다고 보여집니다. 하지만 이 50명이란 숫자에 담긴 private networking이 Path를 다른 서비스와 다르게 만든 요소라고 볼 수 있습니다.

진화하는 서비스 컨셉

SNS 이용자들의 숫자도 늘고, 아울러 다양한 서비스의 출몰이 계속되고 있는 춘추전국시대입니다. 변화없이는 살아남을 수 없는 전쟁터입니다. Path 1.x로 약 1년간 서비스하면서 다양한 시도를 과감하게 계속했습니다. 이들의 개발자 blog를 보면서 어떤 시도들을 했는지 알 수 있었습니다.

  • 2010. 11. 14 – 친구와 가족끼리 사진을 공유할 수 있는 Path 시작 (아이폰만)
  • 2010. 11. 17 – 앱스토어 등록
  • 2010. 12. 2 – 친구, 프로필 기능 업데이트
  • 2010. 12. 10 – Facebook과 연동
  • 2010. 12. 10 – 친구 찾기, 사진에 댓글기능, 전체화면 사진보기 기능, 새로운 웹 인터페이스
  • 2010. 12. 22 – 10초 짜리 비디오도 공유 가능
  • 2011. 1. 16 – 스마일리 5종 추가 (말콤 드레드웰의 블링크에서 따옴)
  • 2011. 2. 1 – 2백만 포스트! 투자자 그룹 추가(KPCB, Index Venture), 이메일로 공유 추가
  • 2011. 2. 7 – 채팅 기능 추가 (댓글기능의 확장)
  • 2011. 2. 17 – 비디오를 웹에서도 볼 수 있음 (html5지원 브라우저에서만)
  • 2011. 3. 11 – 렌즈 필터(부분 유료화), Facebook의 FriendRank 적용
  • 2011. 4. 15 – 날씨 기능 추가. 사진을 공유하면 해당 지역과 시간으로 날씨 표시. 일본어 지원
  • 2011. 5. 23 – Stack기능 제공. 프로필에서 people, places, things 태깅된 것들을 모아서 내 관심도에 따라 정렬해서 보여주는 기능
  • 2011. 6. 7 – 실험정신으로 Twitter 로그인 기반의 With서비스 론칭
  • 2011. 6. 30 – 안드로이드용 Path 출시
  • 2011. 8. 18 – 10개 국어 서비스
  • 2011. 11. 29 – Path 2.0 “Smart Journal” 출시. 서비스 컨셉을 완전히 바꿈.

같은 SNS개발자가 봐도 숨막히게 달려왔네요. 이처럼 마음껏 자신의 아이디어와 코드를 던져넣을 수 있게 된 배경을 생각해보면, 이들의 “창업가 정신(entrepreneurship)”에 주목하지 않을 수 없습니다. 잘나가던 Facebook의 팀장자리를 던져버리고 ‘세상이 깜짝 놀랄 서비스를 만들어 보겠노라’는 호연지기! 이런 정신을 가진 수많은 스타트업을 분석하고 투자하고 함께 회사를 만들어가는 벤처캐피털(VC)환경이 참 부럽습니다. 😉

Path 2.0 – Smart Journal로 다시 태어나다

드디어, Path가 약 5개월의 침묵을 깨고, 2011년 11월 말, 2.0으로 전격 업데이트 된 이후로 사람들에게 큰 충격을 주고 있습니다. 왜냐면 일단 그 UI가 확 바뀌었고, 서비스 컨셉도 변화하여 개인의 일상을 기록하는 일기(Journal) 성격이 강해졌습니다. 또한 자동화(Smart!)된 것을 볼 수 있습니다.

그럼 어떤 기능들이 있길래 Smart Journal인가 하나씩 살펴보겠습니다.

Go to Sleep / I’m Awake

이 기능이 smart journal이란 큰 꿈에 대한 작은 시작이 될 것 같습니다. 표면적 기능은 간단합니다. 잠자기 전에 ‘잔다’하고 일어난 뒤에 ‘깼다’ 선포하는 것이죠. 그러면 자연스럽게 잠든 동안 알림 메시지는 꺼지게 됩니다. 재미난 부분은 잠자는 시간에 대해서 Path가 평가를 내립니다. 한두시간 자고 일어나면 ‘니 얼굴에 베게자국 났어!’라며 놀립니다. 5시간 정도 자면 ‘커피한잔(혹은 12잔?)마시면 쌩생하게 보일꺼야’ 같은 식으로 소소한 재미을 줍니다. 이런 형태로 자신이 자고 깨는 것을 기록하는 SNS는 여지껏 못 본 형태입니다.

Arrived in Seoul

위치를 심각하게 이동하면, 비행기 표시가 뜨면서 해당 도시로 도착했음을 스스로 자동으로 기록하고 지인들에게 알립니다. 내 가족과 친지들은 내가 새로운 도시에 갔을 때 알고 싶어할 것이라는 폐쇄적 개인 네트워크에 어울리는 기능이죠. 이 때도 재미 요소가 있습니다. 도착한 도시의 현재 시각과 날씨와 온도를 표시해줍니다. 예전(1.x)엔 사진을 올릴 때 마다 그 사진이 찍힌 지역의 날씨를 보여줬었는데 2.x에서는 잠에서 깨어날 때와 어느 지역에 도착할 때만 보여주도록 바뀌었습니다.

Music

현재 내가 듣고 있는 음악과 그 때의 기분을 공유할 수 있게 해줍니다. Twitter나 Facebook에도 3rd party app으로 제공되는 기능이지만, Twitter처럼 완전히 오픈된 공간에 내가 듣는 노래를 알리는 게 민망합니다. Facebook도 나를 모르는 사람들이 더 많은 공간이기에 비슷하지요. 하지만 내 가족들과 친한 친구들에게는 해도 어색하지 않습니다. 공유된 음악은 iTunes와 연결되어서 친구가 듣고 있는 음악을 샘플로 들어보고 구매까지 할 수 있게 됩니다. 안드로이드 앱에서도 iTunes에서 검색하고 공유까지만 가능합니다. 구매는 못하구요. 음악구매가 현재 Path에 들어있는 수익모델 두가지 중 하나입니다. 나머지 하나는 사진의 프리미엄 필터에요.

Places

내가 현재 있는 장소에 check in 할 수 있습니다. 장소에 대한 감상을 노트하고 누구와 함께 있는지도 기록할 수 있습니다. POI정보는 따로 가져오지 않고 유저가 생성한 것들을 이용하는 것 같습니다. Foursquare나 아임IN처럼 특정 POI에 Checkin하는 것에 의미를 부여하거나, 비즈니스에 이용하려는 시도는 없습니다. 오히려 내가 어느 도시에 어느 지역(도시)에 있는 것에 더 관심을 갖습니다. 그 도시에 내 친구들이 누가 활발히 활동하는 지, 혹은 내가 모르는 사람들이라도 이 도시에서 활동하는 사람들의 랭킹을 보는 정도입니다.

Photo / Video

초반부터 계속해서 다듬어진 사진과 동영상 기능입니다. 사진은 다양한 무료/유료 필터를 제공하며 전체화면으로 볼 수 있습니다. 사진을 더블탭이나 핀치줌인하면 전체화면으로 보였다가 다시 더블탭하면 줄어드는 자연스러운 애니메이션은 보는 사람에게 재미를 줍니다. 동영상은 45초 분량까지 지원합니다. (초기에는 10초 제한이었지만, 서비스가 성장하면서 늘어나고 있습니다.)

정리하면, 개인적이고 사적인 가족과 지인중심의 네트워크이니, 나의 어떤 행동에 대해서 나무랄 사람이 없어 그만큼 편안한 마음으로 SNS를 즐길 수 있게됩니다. 이런 상황은 자동화된 어떤 행동에 대해서도 허용할 수 있게 됩니다. 가령 내가 이동한 지역에 도착하고 Path를 열었는데 자동으로 ‘내 허락도 없이, 감히(!)’  내 장소를 노출해도 괜찮아 지는 것입니다. Path 2.0에서 개인화가 자동화를 강화하는 플러스 요인이 되었습니다.

지극히 사적인 네트워크라는 특징을 발전시켜 Facebook, Twitter, Foursquare, Instagram과 다른 색다른 가치를 만들어 내고 있습니다.

Path의 미래?

TechCrunch에서 분석한 기사를 보면,  UI가 화려하고 매력적인 점과 사진공유를 넘어서 개인의 일상을 공유하는 앱들중에 최고의 기능을 가졌다는 것을 장점으로 봤고, 반면에 지인이 없는 외톨이에겐 부담스러운 서비스가 될 수 있다는 점과 너무 많은 컨텍스트를 넣으려 했기 때문에 전용앱(Instagram, Foursquare, Twitter 등)과 경쟁이 쉽지 않다며 단점을 평했습니다.

하지만 필자는 화려하고 매력적인 UI 뒤에 감춰진 길(path)이 살짝 보입니다. 아직은 초기 단계이지만 Path 2.0 Smart Journal이 성공한다면, 가족과 지인들과 단순히 생의 순간을 공유하는 가치를 넘어서 Path가 개인의 life style을 관찰하고 거기에 걸맞는 부가가치를 제공할 수 있는 ‘가상의 비서’같은 역할을 하는 서비스로 발전할 것 같습니다. 이런 맥락에서 Path는 좀 엉뚱하게도 Siri와 경쟁해야 할 지도 모르겠습니다. 🙂

실리콘 벨리 Tech계의 스타들을 부모로 두고 자금력 풍부한 스폰서까지(VC)를 얻은 Path! 앞으로 어떻게 성장할지 기대가 됩니다.

 
댓글 남기기

게시자: 켬 2011년 12월 15일 in Uncategorized

 

UILabel과 sizeWithFont 사용시 Bold체를 주의하라!

별 생각 없이 코딩했었던 UILabel과 그 크기 결정을 위한 sizeWithFont 속에 간과하기 쉬운 시스템 Bold에 대한 함정이 있었다.

사례

UILabel를 System default에 bold체로 18포인트로 설정해놓고, numberOfLines는 2로 Wordwrap으로 linebreaking설정했다. 그리고 특정 문자열 예를 들면 “kth303호”를 넣었다. 이 문자열의 멤버변수인 – (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size 로 UILabel의 frame의 크기를 결정했다.  이때 폰트는 [UIFont systemFontWithSize:18.0f]를 사용했다.

이렇게 하니 글씨가 보이지 않는 것이다. 음… 뭘까? 10분 정도 고민했다. 결국 알아낸 것이 Bold로 써진 문자열이 그냥 system font로 18포인트로 가정하고 만든 frame을 벗어나게 되었고 wordwrap line break되면서 아래로 한 줄 내려간 것이다.

1차 시도

그럼 어떻게 할까 고민하다 [UIFont fontWithName:@”helvetica bold” withSize:18.0f] 이런 식으로 변경해봤지만 같은 결론 같았다.

2차 시도

결국 system default bold가 존재한다는 걸 알았고 [UIFont boldSystemFontOfSize:18] 을 써서 사이즈에 맞춰 출력할 수 있었다.

결론은 제목과 같다.

“UILabel과 sizeWithFont 사용시 Bold체를 주의하라! “

끝.

 
댓글 남기기

게시자: 켬 2011년 12월 12일 in iOS개발