끝이 없는 업데이트. 구현하고 싶은 기능은 아직도 많다. 지금 이 순간에도 상황은 변화하고 있기 때문에 언제나 완벽한 어플리케이션은 없다. 그래서 최고와 최적을 향한 업데이트의 길은 끝이 없다. 그렇게 생각하니 사실 조금 질리기도 한다. TED+SUB은 여가시간을 쪼개 만드는 개인적인 취미 활동이기 때문에 결혼 준비에 정신없는 요즘 TO-DO 리스트만 줄기차게 쌓여간다. 너무 쌓여서 넘치기 전에 쉽게 구현할 수 있는 부분들은 미리 좀 해놔야겠다는 생각이 들어 빠르게 1.7 버전을 준비했다.


이번 업데이트를 준비하는 동안 한 가지 문제가 있었다.

이메일을 통해 들어오는 몇몇 피드백에서 iOS5 베타 버전에서 제대로 동작하지 않는다는 소식을 접했다. iOS5는 아직 베타 버전이기 때문에 그러려니 하고 넘어가려 했는데, 왠지 그냥 넘어가면 안될 것 같은 기분이 자꾸 들어서 내 아이폰과 아이패드를 모두 iOS5 베타로 업데이트 했다. iOS4와 iOS5 백업 파일간의 호환이 안되기 때문에 다운그레이드 시키면 그 사이 발생한 차이를 잃게 된다. 요즘 한창 바빠서 메모를 해둔 것도 많고 문자 받아 놓은 것도 많아서 함부로 정보를 잃어서는 안되는 상황이라 다운그레이드가 불가능하다.

앱스토어에 배포하기 위해서는 정식 버전의 개발 툴을 이용해야 하는데 그게 iOS4 까지만 기기를 인식한다. 그렇다보니 iOS5 베타로 업데이트된 내 기기에 직접 올려서 테스트하기가 어려워졌다. 일단 개발툴도 베타 버전으로 업데이트해서 iOS5 베타에서 발생한 문제들을 고쳤다. 이 문제들은 iOS5 SDK의 버그로 인한 것들인데 버그 신고를 하자니 영어가 미숙해서 신고는 하지 않았다. 분명 누군가가 이미 신고해놨으리라... 버그를 우회하는 코드를 작성하는 걸로 마무리.

베타 버전에서의 모든 문제를 잡고나서 다시 개발툴을 정식 버전으로 재설치했다. 이제부터는 개발툴과 기기가 상호 통신을 할 수 없다. 따라서 기기에 올려서 테스트를 할 수 없다. (라고 철썩같이 믿었다) 이 때부터 나는 시뮬레이터와 머리로만 프로그래밍을 했다. 개발툴이 제공하는 시뮬레이터는 꽤 믿음직하고, 오랫동안 다듬어진 코드에 기반하고 있기 때문에 이 정도로도 충분할거라는 판단이 들었기 때문이다. 결론부터 말하자면, 나는 틀렸다. 어떠한 경우라도 기기에 직접 올려서 테스트를 진행했어야 헀다. 더 나은 사용자 경험을 위해 검색 프로세스를 바꿨는데 시뮬레이터 상에서는 좋은 결과를 보여주었지만 실제 기기에서는 그렇지 못했기 때문이다.  

배포용 빌드를 앱스토어에 업로드하고 승인을 기다리는 동안 이를 내 기기에 올릴 수 있는 방법이 떠올랐다. Ad-Hoc 빌드! 개발툴은 기기와 통신할 수 없지만 아이튠스는 통신할 수 있다. Ad-Hoc 빌드는 로그를 실시간으로 확인할 수는 없지만, 어쨌든 빌드한 앱을 기기에 올릴 수 있게 한다. 이 때가 되어서야 비로소 검색 성능의 문제를 확인할 수 있었다. 하지만 이걸 고쳐서 다시 앱스토어에 제출하면 승인 기간이 1주일이나 늘어나기 때문에, 그리고 심각한 문제까지는 아니기 때문에 그냥 두기로 결정했다. (하지만 마음이 아프다)


아이패드 버전에서 Autoplay 옵션 추가

아이폰 버전과는 달리 아이패드 버전에서는 강연 목록과 동영상이 한 화면에 함께 배치된다. 목록에서 강연을 선택하면 바로 강연이 재생되는데 몇몇 사용자들이 '강연을 바로 재생하지 말아주세요' 라고 요청했다. 원하는 강연을 찾는 동안에는 강연 요약 정보만 보고 싶은 사람들이 꽤 있었던 것이다.

나는 옵션을 하나 추가하기로 결정했다. Autoplay가 바로 그것! 초기 설정은 YES, 그러나 사용자가 직접 NO로 바꾸면 강연을 선택해도 바로 재생하지 않도록 했다. 



발표자 정보의 비동기 수신

강연 목록에서 특정 강연을 선택하면 다음과 같은 일이 벌어진다. 1
) 대기화면을 띄우고 설정 언어로 된 자막을 다운로드한다. 2) 동시에 강연 링크로부터 요약 정보를 추출한다. 3) 저화질/고화질 동영상 링크를 추출한다. 4) 발표자 세부 정보가 담긴 링크를 추출한다. 5) 해당 링크로부터 발표자의 상세 정보와 이미지 링크를 추출한다. 6) 자막을 제외한 모든 준비가 끝나면 대기화면을 감춘다. 7) 자막의 다운로드가 끝나면 동영상을 읽어 재생한다.

나는 5번 과정을 별도로 진행하게 해서 대기 시간을 조금이나마 단축시키려고 노력했다. 발표자 상세 정보를 제외한 나머지 정보는 모두 하나의 웹페이지 내에서 추출할 수 있기 때문이다. 중첩된 비동기 오퍼레이션이 처음엔 다소 혼란스러웠지만, 워낙 iOS SDK가 이 쪽으로 탁월해서 금방 익숙해질 수 있었다.

와이파이가 연결된 환경에서는 이 차이를 쉽게 느끼기는 어렵다. TED+SUB에서 강연을 재생하기 위해서는 와이파이가 필수이므로 굳이 이렇게까지 할 필요가 있을까 싶지만, 한 번 눈에 거슬린 건 계속해서 거슬리기 때문에 이 참에 수정해버렸다. 일반 사용자들은 잘 느끼지 못하겠지만 적어도 내게 개선된 버전은 백만배쯤 더 빠르게 동작하는 것처럼 보인다. (아주 만족스럽다는 이야기)


TED 이미지 개선

TED+SUB의 대기화면에 사용되는 TED 이미지는 공식 홈페이지에 있는걸 그대로 긁어온 것인데, 이미지 크기가 작아 그다지 이쁘지 않았다. 라이센스 문제가 있어서 함부로 고치지 못하고 고민하고 있던 찰나에 TEDxJamsil에서 디자이너로 계신 차무상님께서 큼지막한 고해상도 이미지를 제공해주셨다. 너무너무 고맙습니다!


음소거 알림은 더 이상 없습니다.

이전 버전까지는 음소거 모드인 경우 동영상 재생 시 소리가 나지 않았다. 많은 사람들이 음소거 모드를 확인하지 않고 앱의 문제라 지적해서 일단 경고창을 띄우게 해 놨는데 문제는 음소거 모드를 인식하는 알고리즘이 제대로 동작하지 않는다는 것. 적어도 내가 갖고 있는 기기에서는 잘 동작하는 것처럼 보였지만, 실제로는 그렇지 않은 듯 했다. 

음소거 모드에서 소리를 재생하지 않는건 이상한걸까? 

꽤 오랫동안 나는 '음소거 모드에선 당연히 소리가 나면 안되지' 라고 생각했다. 그런데 '이 앱을 언제, 어떻게 사용하고 있을까?' 를 곰곰히 생각해보니 그게 아니더라. 그리고 비슷한 유저 시나리오를 갖고 있는 유투브 앱도 음소거 모드에 관계 없이 소리를 재생하고 있었다.

오랜 고집이 드디어 꺽였다. 이제부터는 음소거 모드에서도 강연을 재생하면 스피커로 소리가 난다. 


검색 프로세스의 변경

TED 공식 웹사이트에서의 검색 기능이 만족스럽지 않아서 TED+SUB은 내부에 자체 DB를 생성하고 관리한다. 사용자가 검색어를 입력하면 1) 영어와 선택한 언어의 강연 목록을 읽어와 내부 DB를 갱신하고, 2) 내부 DB에 질의해 검색 결과를 사용자에게 보여준다. 여기서 1의 과정이 꽤 오래 걸리기 때문에 사용자가 검색 결과를 보기까지 시간이 오래 걸린다. 

이를 개선하기 위해 검색 프로세스를 다음과 같이 변경했다. 1) 내부 DB에 질의해 검색 결과를 사용자에게 보여준다. 이 때 마지막 항목은 '더 보기' 버튼이다. 2) 사용자가 '더 보기' 버튼을 선택하면 영어와 선택한 언어의 강연 목록을 읽어와 내부 DB를 갱신하고, 3) 내부 DB에 질의해 검색 결과를 사용자에게 보여준다. 이 때 '더 보기' 버튼은 보여주지 않는다.

이렇게하면 필요할 때만 내부 DB를 갱신하기 때문에 검색 시간을 극적으로 단축시킬 수 있다. 게다가 TED의 컨텐츠는 조금씩 천천히 업데이트되기 때문에 이렇게 바꾼 프로세스가 훨씬 더 적합하다는 생각이 들었다.

여기까지는 아주 훌륭했으나...

실제 기기에 올려보고 나서야 시뮬레이터로는 미처 확인하지 못한 문제를 발견했다. 내부 DB에 질의하고 그 결과를 받아오기까지 생각보다 오랜 시간이 걸린다는 것. 순식간일거라 기대했는데 의외로 오래 걸리더라. 이런 줄 모르고 이 과정을 비동기 오퍼레이션으로 구현하지 않아서 검색 결과를 화면에 보여주기까지 UI 업데이트가 지연된다. 쉽게 말해 사용자가 아무런 입력도 할 수 없는 '경직된 상태' 가 되어버린다. 이것은 아주 나쁜 사용자 경험을 제공한다.

다음 버전에서 반드시 수정할 예정이고, 가급적 빠른 시일내에 다음 버전을 제출할 생각이다.


페이스북 공유 기능의 개선

공유 기능을 위해 사용하고 있는 ShareKit. 다 좋은데 오래된 페이스북 API를 이용하고 있다. 요즘 페이스북으로 링크를 공유하면 (요즘이라고 하기도 뭣하다. 꽤 오래 전부터 가능했다) 링크를 대표하는 이미지와 제목, 캡션이 보여지는데 예전 API를 이용하면 오직 링크의 제목만 나타난다. 

고쳐야지- 고쳐야지- 마음만 먹고 있다가 드디어 고쳤다. 최신의 페이스북 SDK를 내려받아 ShareKit 코드를 수정했다. 이제 아래처럼 TED+SUB에서 강연을 페이스북으로 멋지게 공유할 수 있다!



여담

iOS4, 그리고 현재의 DB 스키마를 유지하는 상태에서 할 수 있는 일은 거의 다 한 것 같다. 앞으로 구현하게 될 기능 중 일부는 iOS5의 최신 API를 이용해야 하고, 또 일부는 내부 DB의 스키마를 변경해야 한다. 구현하려는 기능을 대략 나열하면 다음과 같다.

  • AirPlay를 이용해 애플 TV로 강연을 시청할 때 자막을 함께 보여주기 (미러링 이상의 사용자 경험 제공)
  • 아이폰/아이패드간 북마크 싱크
  • 동영상 시청 중 자막 언어 바꾸기
  • 다운로드 시 한 개 이상의 자막을 함께 다운로드 하기
  • 이미 본 강연을 감추기/보이기
  • 강연 첫 부분 (TED 로고) 넘기기
  • 20 메가 이하의 강연을 3G 네트워크로 시청하기

이 중 얼마나 실제로 구현할지는 아직 확실하지 않지만 꾸준히 업데이트 하는 동안 다 구현되지 않을까 싶다.

오래도록 TED+SUB의 업데이트에 매달리는 동안, 앱의 수익성에 대한 고민이 생겼다. 분명히 TED+SUB으로는 라이센스 문제로 수익을 낼 수 없다. 수익이 제로면 다음해 개발자 등록에 차질이 생기기 때문에 빨리 수익을 낼 수 있는 앱을 개발해야 한다. 

유일하게 수익을 내고 있는 ProMan은 업데이트를 너무 안하고 있다보니 TED+SUB이랑 비교되서 마음이 아프다. 다 같은 자식인데 한 놈만 이뻐해주고 있으니 말이다; 언제 실행할지는 모르겠지만, 그래도 조만간 ProMan을 아이패드 겸용으로 만들 생각이다. 처음부터 이 생각을 안했던 건 아니다. 하지만 아이폰과 아이패드 둘 사이의 데이터 싱크 문제를 해결할 방법을 찾지 못해서 어쩔 수 없이 미루고 있었다. 하지만 iOS5부터 iCloud를 통해 기기간 데이터 싱크가 가능해지기 때문에 이제야 아이패드 버전을 고려할 수 있게 되었다. 이제 슬슬 iOS5도 마지막 베타를 향해 달리고 있으므로 힘차게 고고싱이다!
 

 
신고

CATEGORIES