저장소, 웹뷰도 없는 tvOS가 앱의 미래일까?

“TV의 미래는 앱이다.” 이는 팀 쿡이 2015년 9월 9일에 애플 키노트에서 발표한 자극적인 표현이었습니다. 이 글은 TV의 미래를 위한 애플의 미래를 담아냈습니다. TV를 수동적으로 보는 것은 대신에 앱을 통해 더 동적인 경험을 하게 될 것 입니다. 팀 쿡의 비전이었던 만큼, 결국 그 성공은 개발자들이 궁극적으로 애플의 tvOS 플랫폼과 함께 무엇을 할 수 있는지에 정의될 것 입니다.

애플이 TV의 미래를 앱으로 보는 동안, tvOS는 또한 우리에게 앱의 미래를 보여주는 것을 의미할까요?

우리가 진행하는 많은 기술 이야기들을 소개하고, 새로운 플랫폼에서 우리의 라이브러리의 호환성을 테스트 하며, 개발의 미래의 흥미롭거나 진지한 그림을 그리며 많은 한계와 단점에 대해서 이야기를 할 것입니다.

지속적인 로컬 저장소가 없다.

첫 번째로 우리와 가장 관련이 있는 점은 tvOS는 지속적인 로컬 저장소를 제공하지 않는 것입니다. 상대적으로 이 디바이스가 작은 저장소의 크기인 점을 감안해 이해할 수는 있습니다: 32GB 또는 64GB. iPhone 보다 훨씬 작은 것은 아니지만 1080p 화질의 HD 영화는 4~6GB 정도이기 때문에 그것을 위해 많은 공간을 확보하는 것은 의미가 있습니다. 그럼에도 불구하고, 로컬 저장소의 부족은 앱 제작자가 앱의 상태를 저장하는데 CloudKit이나 다른 클라우드 서비스를 사용해야 한다는 것을 의미합니다.

물론 공급자로서 우리는 걱정이 될 수 있지만, 사실은 우리가 인-메모리 모드를 제공하기 때문에 Realm은 이 환경에서도 도움이 될 수 있습니다. 이 모드는 여전히 내부 잠금을 조정하기 위해 약간의 디스크 접근이 필요합니다. 이 에러의 원인은 문서 디렉토리에서 Realm을 열려고 할 때 바로 충돌합니다.

open() failed: No such file or directory

이런 개발 뉴스를 더 만나보세요

파일 시스템을 우리가 문서 폴더를 사용할 수 없다는 것을 알게 되었고, 대신에 NSCachesDirectory 와 NSTemporaryDirectory 으로만 기록을 할 수 있었습니다. 그 결과 tvOS는 문서 디렉토리에서 표준으로 사용하는 것 대신에 캐시 디렉토리를 사용하여 Realm을 빌드했습니다.

200MB로 앱 크기를 제한

tvOS는 앱 크기를 200MB를 제한하여, 상당수의 앱에 영향을 줄 것입니다. 특히 게임은 고정된 자원을 포함해 1GB를 넘을 수도 있습니다. 애플은 App Thinning 과 On-Demand Resources을 제공하여 문제를 해결했지만, 이는 여전히 다른 그들의 플렛폼의 제약에서 극명하게 벗어난 것입니다.

Mach 메시지가 없습니다.

Mach messages는 프로세스 간의 메시지를 전달하는 low-level 커널 기술입니다. 내부적으로 Realm은 암호를 위해 우리의 내장된 기술을 사용합니다. tvOS SDK, mach.h 헤더 파일를 탐색하여 WatchOS와 비슷하게 사용할 수 없는 mach 메시지를 보내고 받는 함수들을 보여줍니다.

__WATCHOS_PROHIBITED __TVOS_PROHIBITED
extern void         mach_msg_destroy(mach_msg_header_t *);

__WATCHOS_PROHIBITED __TVOS_PROHIBITED
extern mach_msg_return_t    mach_msg_receive(mach_msg_header_t *);

__WATCHOS_PROHIBITED __TVOS_PROHIBITED
extern mach_msg_return_t    mach_msg_send(mach_msg_header_t *);

이는 iOS과 OSX처럼 멀티태스킹이 tvOS에 가능하지 않기 때문에 타당해 보입니다. 그 결과 우리는 tvOS에 Realm의 암호화를 사용 못하게 했습니다.

네임드 파이프가 없다.

mach 메시지와 비슷하게, 네임드 파이프는 프로세스간의 통신의 형태입니다. Realm은 Cocoa에 여러 프로세스 사이의 Realm 파일의 원활한 공유를 위해 프로세스간 알림 지원을 추가했습니다. 이는 iOS 앱과 워치의 확장은 메인 앱에서 사용된 것과 동일한 Realm 파일을 공유하는 것과 사용하고 있는 것을 Realm 브라우저에서 파일을 디버깅 할 수 있습니다. notification은 쓰기 트렌젝션이 발생 할 때 notification이 Realm에 업데이트가 되었는지를 알려주는 다른 프로세스에 전송할 수 있도록 네임드 파이프를 통해 전달합니다.

원래 Realm은 이에 대한 지원을 제공하지 않았습니다. 그리서 tvOS에 Realm이 작동되기 위해 우리는 간단하게 동일한 프로세스 내에서 알림을 제공하는 original code로 되돌아갑니다.

Pasteboard API가 없다.

mach 메시지와 네임드 파이프 상황을 보았을 때 이건 그렇게 놀라운 일은 아닙니다. Pasteboard는 iOS와 OSX에 복사 붙여 넣기 기능을 활성화, 프로세스 간 통신의 가장 높은 수준입니다. hood, pasteboard는 프로세스 간에 데이터를 전달하는 mach 메시지를 사용하는데 이것이 없는 tvOS는 복사/붙혀넣기를 지원하지 않습니다.

Web View가 없다.

이것은 아마도 개발자가 처리해야 하는 어려운 제한 중 하나입니다. 웹 뷰는 iOS 앱에 많은 곳에 사용됩니다. iOS보다 더 많은 플랫폼을 지원하는 앱 제작자나 중요하지 않은 구성 요소는 개발을 단순화 하기 위해 웹 뷰를 통해 표시 할 수 있습니다. 또한, 웹뷰는 앱이 출시된 후 업데이트를 할 수 있습니다. 그래서 이것은 테스트 기능과 유연성을 제공합니다. 마지막으로 이것은 일반적으로 웹 브라우징 할 수 없는 것을 의미합니다. 예를 들어, OAuth를 가진 써드파티 인증을 지원하는 앱은 자신의 로그인 플로우는 tvOS에 대한 구체적인 재설계를 해야합니다.

애플은 TVML의 형태로 자신의 대안을 제공합니다. 이는 개발자가 앱의 뷰를 정의한 XML의 형태입니다. 자바스크립트 API를 통해 전체 클라이언트와 서버를 만들수 있는 TVJS와 함께 결합할 수 있습니다. 이는 개발자가 배포한 후 앱의 내용을 조정할 수 있지만 기존 웹뷰를 재구축을 해야하는 것을 의미합니다.

내장된 PiP가 없다.

RealmTV 앱을 구축할 때, 프레젠테이션 발표자의 비디오에 사용된 슬라이드를 표기하고 싶어하는 우리는 문제가 발생했습니다. iOS 9가 PiP에 대한 아이패드에 지원을 추가한 것을 고려해 볼 때 우리는 tvOS에 또한 내장되는 것을 가정했습니다. 하지만, 새로운 PiP는 iOS와 오직 아이패드에서만 제한됩니다. 그 결과, 우리는 PiP 솔류션을 만들기 위해 AVPlayerViewController의 뷰 계층 구조를 조정하게 되었습니다.

시청자는 애플 TV 리모컨에 긴 프레스를 통해 3가지의 다른 PiP 모드를 통해 주기를 이룹니다. 우리는 현재 버전에 만족하는 동안 우리는 PiP에 대한 지원이 추후 tvOS에 추가 되기를 바랍니다.

커스텀 비디오 플레이어가 없습니다.

PiP의 부족에 따라, 우리는 AVKit에서 커스텀을 제공하기 위한 확장을 하지 않은 내장된 비디오 플레이어에 실망했습니다. 물론 AVFoundation에 drop down 할 수 있고, 당신만의 비디오 플레이어를 만들 수 있습니다. 하지만, 당신은 오디오 설정을 조정하기 위해서 drop down 상단 네비게이션 바와 같은 애플 TV의 고유 기능을 지원하는 문제로 발생할 수 있습니다. 애플 TV의 주요 목적은 미디어를 소비하는 것임을 감안할 때 애플이 개발자가 커스텀하고 사용자에게 새로운 경험을 창조하기 위해 이러한 것은 사용할 수 있어야 합니다.

ReplayKit이 없습니다.

tvOS SDK에서 PiP 부족과 마찬가지로 우리는 ReplayKit을 사용할 수 없는 것을 보고 놀랐습니다. 이 프레임워크는 게이머를 대상으로 하고 있으며, 플레이어가 온라인으로 다른 플레이어와 함께 게임 플레이 후 자신의 게임 비디오를 녹화 하고 공유할 수 있습니다. 애플 TV는 미디어 소비 디바이스로 추진되고 있을 뿐만 아니라 게이밍을 제공하기 때문에 개발자가 통합하기 위한 이 프레임워크를 사용할 수 없는 것이 이상하다고 생각됩니다. 한가지 추측은 하드웨어가 실제 게임의 렌더링을 1080p 화질로 게임 플레이를 기록하고 처리하기에 충분하게 강력하지 않다는 것입니다.

사진에 접근하지 못합니다.

iOS에서 당신은 UIKit UIImagePickerController class을 통해서 사진 선택하여 볼수 있었습니다. 또는 iOS 8에서 Photos framework. 이 두 개는 tvOS에서 사용할 수 없습니다. 이는 앱에서 사용자의 사진을 사용할 수 없다는 것입니다. 이 장치가 iCloud에 저장된 사진을 볼 수 있게 지원한다는 것은 이상한 것 같습니다.

일정/주소록/iMessage 사용을 못합니다.

주소록/연락처 및 EventKit 프레임워크는 사용을 할 수 없습니다. 그래서 앱은 아이클라우드에 저장된 데이터를 사용할 수 없습니다. 또한 MessagesUI 프레임워크는 iMessage를 보내는 기능 제한하여 사용할 수 없게 했습니다. 새로운 애플 TV 리모컨에 시리를 포함한 것을 보면 이는 잃어버린 기회처럼 보인다.

Multipeer 연결을 하지 못합니다.

마지막으로 Multipeer Connectivity framework는 tvOS에서 사용할 수 없습니다. 이 프레임워크는 Wi-Fi 접속, p2p 무선 인터넷, 블루투스를 통해 iOS 장치를 식별하고 이어서 장치간의 데이터 전송을 관리 담당합니다. 멀티 플레이어 게임의 경우 이 프레임워크는 정말 빛납니다. 그리고 tvOS가 화면 분할을 통해 게임을 할 수 있다는 것을 의미하며, 아이클라우드나 다른 서비스를 통해 사용자의 iPhone/iPad/iPod의 데이터를 동기화 할 수 있을 것입니다.

그래서 이것은 모든 tvOS와 iOS에 어떤 의미가 있을까요?

앱 개발 관점에서 tvOS는 새로운 영역을 개척하지 않는 것 같습니다. watchOS는 그들이 할 수 있는 것은 매우 제한 되어 있기 때문에 플래폼에 개발자들을 유치하기 위해 노력하고 있습니다. tvOS는 안좋은 위치에 있는 것 같지는 않습니다. 하지만, 이러한 제한은 개발자들에게 새로운 장애물을 만들려고 하고 있습니다.

웹뷰의 빠짐은 특히 OAuth 유행에 주어진 꽤 과감해 보입니다. TVML / TVJS 로 네이티브 개발에 흥미로운 출발을 하고, 다소 웹뷰의 빠짐의 균형을 맞추는 한편, 자체 포맷은 기존의 웹 컨텐츠를 개발팀이 다시 작성하라는 강요하는 것 같습니다. 웹뷰 지원을 중단한 것은 애플의 장기적인 위치를 보여주는 것일지도 모르겠지만, 그들이 플래시를 지원하는 것과 닮았습니다. iOS 9는 사파리에서 컨텐츠를 차단하는 것을 가지고 왔다. 그래서 애플이 네이티브 앱으로 더 개발하라는 시도로 나타날 수 있다.

하지만, 다른 제한들은 첫번째 제품에 나타나는 보다 더 임시적인 제한인 것 처럼 생각됩니다. 비디오 플레이어 커스텀과 Multipeer 연결의 빠짐이 미래 버전에서는 개선의 가능성이 있어보입니다.

그러나 전반적으로 당신은 잠재적 규모의 기회에 대해 균형을 잡아야합니다. 미국의 경우 보통 사람은 하루 TV를 2.8시간 정도 소비를 합니다. 이것은 실제로 미국에서의 스마트폰에 [보통 사람들이 앱에서 하루 1.3시간 소비(http://www.nielsen.com/us/en/insights/news/2015/so-many-apps-so-much-more-time-for-entertainment.html)]하는 것 보다 더 많습니다. 그 관점에서 본다면 tvOS는 iOS 경험보다 개발자를 위한 더 큰 새로운 기회를 열어 가고 있습니다.


우리는 플랫폼이 가는 곳을 보고 흥분하고, 여러분이 tvOS 앱에서 Realm을 사용하는데 관심이 있다면 이 PR를 보세요. (우리가 공식 릴리즈를 할 수 있을 때 까지) 그리고 Realm 앱이 앱스토어에 릴리즈 되면 관심을 가져주세요. ;)

번역 : Yongbin Cha

컨텐츠에 대하여

이 컨텐츠는 저자의 허가 하에 이곳에서 공유합니다.


Adam Fish

Adam is the Director of Product at Realm, where he manages the product development for currently supported mobile platforms and upcoming new products. He has a strong background in entrepreneurship and software development, having previously co-founded Roobiq, a mobile-first sales productivity app used by sales teams worldwide.

4 design patterns for a RESTless mobile integration »

close