우리를 당황시킨 iOS 8 사진

Kwangbae Lee
A Startup Hustler’s Guide
13 min readSep 19, 2014

--

당황하긴 했지만 따라가주마

9월 17일, iOS 8이 정식 출시되었다.

드랍박스도, 구글도 당했다. 사용자들은 빡쳤다.

심지어 애플 직원들마저 힘들어한다.

도대체 무슨 상황일까?

모두에게 멘붕을 가져온 이번 iOS ‘사진’의 변화에 대해 알아본다.

애플, 너네 좀 심했다

명확히 해두고 시작하자. 이 글은 애플을 비난하려는 의도로 남기는 것은 아니다. 그래도 이 말은 해야겠다 — 애플이 잘못했다.

앱 개발자 입장에서 본 사건 전말은 다음과 같다.

발단: iOS 8 소개되다

2014년 6월 2일 열린 WWDC에서 iOS 8이 처음 소개되었다. 사진 전체를 백업할 수 있는 iCloud Photo Library가 추가되었고, 개발자들을 위한 새로운 프레임워크 PhotoKit도 나왔다. 그리고 Beta가 공개되었다. 앱 개발자들은 이 Beta를 가지고 iOS 8 대응을 준비하기 시작했다.

전개: GM에서 스펙이 바뀌어?

새 OS를 출시하기 전, 대개 Beta 버젼을 개발자들에게 제공하고, 이를 통해 발견한 문제를 수정한 “출시 전 최종 버젼”(=GM)을 발표한다. GM은 출시 버젼과 동일한 스펙을 지닌다. Apple에서 GM은 보통 OS 정식 출시 일주일 전에 발표한다.

그런데, 정식 출시(09/17) 일주일 전(09/10)에 나온 GM에서 갑자기 스펙이 바뀌었다. 그것도 별다른 공지도 없이 말이다. 길었던 Beta 기간동안 문제가 없었는데, 뭔가 달라졌다.

‘사진’에 뭔가 이상이 생겼다!

위기: 우리 이제 어떡하지??

Tidy사진 앨범 앱이다. 그런데 GM으로 업데이트하니, 사진의 대부분이 없어진다. 사용자들이 정성들여 정리해둔 사진들이 휙 사라진다니, 기가 막히는 노릇이다.

이대로 정식 출시를 기다릴 수는 없었다. 시간은 며칠밖에 안 남았다. 빨리 대처해야했다.

절정: iOS 8 정식 출시

9월 17일, 예상대로 GM 그대로의 iOS 8이 출시되었다. 그리고..

모두 당했다. Dropbox, Google+등의 자동 사진 백업 서비스들은 iOS 8에서 정상적으로 동작하지 않아 우왕좌왕하고 있고, 개발자 커뮤니티에서는 불만이 터져나왔다. 기본 사진 앱의 변화로 사용자들도 화가 났다.

우리는 살았다. 오히려 Tidy는 기존보다 더 좋아진 기능으로 iOS 8을 맞이하고, 사용자들에게도 자랑스럽게 소개했다. (우리가 어떻게 대처했는지는 아래에 정리해두었다)

대체 어떤 멘붕이길래

‘카메라 롤’의 죽음

카메라 롤이 의미하던 것은 “이 디바이스에 저장된 모든 사진”이다. 그런데 이제 iOS 8에서는 카메라 롤이 없다. 즉, ‘저장된 모든 사진을 모아둔 공간’이 없어진 것이다.

단순히 ‘사진 앱’에서만 없어진게 아니다. 대부분의 앱들에서 OS의 사진을 불러올 때 이 ‘카메라 롤’ 기준으로 불러오고 있다. Facebook에 사진을 첨부하거나, Dropbox나 Google+에서 자동 백업을 할 때에도 모두 이 기준으로 사진을 불러온다.

그런데 iOS 8 GM에서 이 기준이 사라졌다. 기술적으로 말하자면, 기존 프레임워크의 ALAsset은 더 이상 ‘모든 사진’을 가져오지 않고 엉뚱한 ‘최근 추가된 항목'을 불러오게 된 것이다.

‘모든 사진’ 어디 있니?

바뀐 iOS 8 GM에서 기존 프레임워크를 그대로 쓰면 ‘카메라 롤’ 대신 ‘최근 추가된 항목’을 보여주게 된다. ‘최근 추가된 항목’은 iOS 8부터 생긴 사진 앱 기본 앨범으로, 전체 사진 중 최근 30일 내에 추가된 사진만을 모아둔 그룹이다.

이 동작을 하는 class가 ALAsset인데, 대부분의 앱들이 이것을 쓰고 있었다. 때문에 iOS 8에서는 30일 이전에 찍은 사진은 Facebook이나 Instagram에 을 포스팅할 수 없고, Dropbox나 Google+에도 백업되지 않는다. (9/19 지금 이 시점에도 여전히 그렇다.)

더불어, 기본 ‘사진’ 앱에서 카메라 롤과 Photo Stream이 없어진 것에 대한 사용자들의 의문도 쌓이고 있다.

https://twitter.com/lexeca/status/512574502912667648
https://twitter.com/ay_xo/status/512744816484954113

애플은 뭘 하려는 걸까?

애플의 변화된 내용들을 잘 따져보니, 이런 결론에 도달하게 되었다.

“애플은 제품 사용성의 큰 변화를 감수면서까지 클라우드를 향해 가고있다.”

(그리고 그 절차는 대단히 파행적이었다. )

이 목적을 달성하기 위해 접근하는 방법은 기본 사진 앱을 보면 잘 드러난다.

기본 사진 앱의 하단 탭. 왼쪽부터 Photos / Shared / Albums. 이 화면은 Photos 탭이 활성화된 상태이고, 컨텐츠 영역에는 전체 사진 갯수와 업데이트 현황이 나온다.

Photos: 모든 로컬 사진 (X) / 모든 사진 (O)

앞으로 사용자의 모든 사진은 Photos 탭 안에 들어간다. 그리고 그 기준은 디바이스가 아닌 Apple 계정이다. 과거 카메라 롤이 ‘이 디바이스(로컬)에 저장된 모든 사진’이였다면, 이제 Photos는 ‘나의 모든 사진'이 된다.

기준이 디바이스에서 계정으로 바뀌었다는 것: 사용자 사진을 클라우드에 저장하고 어느 기기에서나 같은 사진 라이브러리를 관리하도록 한다는 것이다. Photos에 들어가면 이 아이폰으로 찍은 사진도 있고, 다른 아이패드로 찍은 사진도 같이 있다. — iOS 8부터 제공되는 iCloud Photo Library를 사용한다면 말이다.

Cross-Device로 전체 사진을 보여줄 수 있는 공간이 생겼으니, 디바이스에 한정된 사진 그룹을 보여주는 카메라 롤은 이제 사실 필요가 없어지게 된 것이다. 그래서 애플은 정말 없앴다. 다른 앱에서 카메라 롤 기준으로 사진을 읽는 기준도 없애버렸다. 갑자기 단칼에. #상남자애플

Shared: 주고 받은 사진은 따로

iCloud를 이용해 Apple 사용자 간에 사진을 주고받는 서비스는 iOS 6때부터 있었고, 지금도 있다(iOS 6에서는 Photo Stream, 7 이후에는 iCloud Photo Sharing). 이 사진들은 Photos에 들어가지 않는다. ‘서로 주고 받은 사진’이 ‘내 사진’이라고 보지는 않는 것이다.

Albums: 특정한 목적으로 그룹된 사진들

앨범도 기본적인 구조는 기존과 다르지 않다. 다만 카메라 롤사진 스트림은 없어졌다. 대신 자동 앨범인 ‘최근 추가된 항목’과 ‘최근 삭제된 항목’이 생겼다.

이 부분 때문에 많은 사용자들이 혼란스러워 한다. 짚고 가자면 다음과 같다.

  • 카메라 롤: 없어졌다. (위에도 설명 되었듯) 이제 내 모든 사진은 Photos에서 보면 된다. 거기 다 있다.
  • 사진 스트림: 없어졌다. 말하자면 이것은 과도기적인 것이였다. 이제 iCloud Photo Library로 통합될 것으로 보인다.
  • 최근 추가된 항목: 새로 생겼다. 최근 30일 이내에 추가된 사진은 자동으로 여기서 모아 보여준다. 카메라 롤 아니니까 혼돈 마시라.
  • 최근 삭제된 항목: 새로 생겼다. 최근 30일 이내에 삭제한 사진을 모아둔, ‘휴지통’ 같은 곳이다. 30일이 지난 사진은 자동으로 완전 삭제된다.

Apps: 이제 ‘모든 사진’ 기준으로 가져가세요

ALAsset이 왜 갑자기 ‘최근 추가된 항목’으로 접근하는 것으로 바뀐지는 잘 모르겠지만, 앞으로 다른 앱에서 사진을 보여줄 때에도 ‘모든 로컬 사진’이 아닌 ‘모든 사진’ 기준으로 가져가라는 것은 분명하다.

이 이슈를 대응하면서 iOS Photos framework을 담당하는 애플 담당자와 직접 이야기를 나눌 수 있었는데, 그의 대답은 단순했다.

“내가 많이 말해줄 수는 없는데, 현재로서는 PhotoKit을 쓰는게 최선이야.

ALAsset은 문제가 많아.”

(그럼 PhotoKit을 잘 만들던가 -_-; )

우리는 어떻게 했냐구?

Tidy는 단순히 사진을 첨부하는게 아니라 전체 사진을 관리하는 앱이기에 문제는 더 심각했다. 며칠 안에 대처하지 않으면 우리 사용자들의 추억이 없어지게되는 상황. 주말동안 잠 못자고 헐레벌떡댔던 과정을 조금 공유해본다.

1. 앱에서 보여줘야할 사진의 범위를 규정했다

Tidy는 ‘내사진을 앨범으로 정리하는’ 앱이다. 그래서 Tidy에서 불러들일 사진의 범위를 정하는 것은 중요하다.

우리는 iOS 8의 변화의 개념을 이해한 후 이 범위를 새로 규정했고, 이는 다음과 같다. 사용자의 “내 사진"이라는 범위는 아래의 조건이 필요했다.

  • 로컬과 클라우드의 구분이 없어진 “전체 사진” 기준으로 불러오되,
  • “주고 받은 사진”인 iCloud Photo Sharing은 제외하고,
  • 로컬과 클라우드가 구분된 개념으로 만들어진 My Photo Stream은 제외하는 것.

이런 새로운 기준을 적용하지 않는다면, Tidy 역시 Dropbox나 Google+처럼 ‘최근 추가된 항목’만 보이게 되거나, Instagram이나 VSCO처럼 특정 사진이 두 개씩 보이게 될 것이 뻔했다.

2. PhotoKit으로 사진 분석 로직을 뜯어고쳤다

위 개념을 코드로 구현했다. 짧은 시간동안 빡센 노가다를 통해 알게된 방법들이다.

2–1. “전체 사진"을 불러오기

이건 간단하다. 기존 프레임워크의 ALAssets을 버리고 PhotoKit의 PHAsset으로 사진을 가져오면 되니까. 근데 그렇게 하면 iCloud Sharing으로 주고받은 사진도 들어오고, Photo Stream까지 불러오게 되어 같은 사진을 중복해서 표현하게 된다.

이제 이걸 발라내는게 진짜 노하우.

2–2. “전체 사진" 중에 iCloud Photo Sharing 제외하기

iCloud Photo Sharing은 iCloud 스토리지를 이용해 Apple 사용자끼리 공유한 사진들이다. 우리의 기준대로라면 이 사진들은 온전한 ‘내 사진'은 아니기에, 전체 사진에서 제외해야했다. 여기에 사용된 소스코드는 다음과 같다.

https://gist.github.com/kwangbae/69d06c96a82701eebddd

2–3. “전체 사진" 중에 Photo Stream 제외하기

Photo Stream은 iCloud Photo Library가 나오기 이전에 쓰인 자동 백업 방식이다.

PHAsset을 사용하면 Photo Stream 사진도 함께 불러들여진다. 그런데 문제는, Photo Stream으로 백업된 사진이 원본과 따로 들어온다는 것이다. 즉, 같은 사진인데도 두 개로 잡혀서 클론이 되어 보여지는 것이다.

*이를 제외하는 방법을 찾기는 쉽지 않았는데, 그래도 구현했다. 이 글에서 코드를 공개하지는 않겠으나, 만약 궁금한 분이 있다면 메일로 연락주시길.

결과는..

iOS Photos의 전체 사진 =Tidy의 전체 사진

왼쪽은 iOS 기본 사진 앱의 “Photos” / 오른쪽은 Tidy 내 사진 갯수 카운트. 왼쪽 화면을 먼저 스크린캡쳐하느라 Tidy에서 봤을 때에 +1 되었다.

Tidy에서 다루는 사진의 범위는 “내 전체 사진"이 되었고, 이 기준은 iOS 기본 사진 앱의 Photos 항목에 표시되는 사진과 같다. 의도한대로 됐다. 아싸. (애초에 이 기준으로 사진을 불러들일 수 있는 class는 왜 만들어두지 않았는지, 도무지 이해할 수 없지만..)

iTunes 동기화 사진은 사용자들이 항상 요청해오던 기능이었고, iCloud 사진은 어떻게 해야할지 막막한 상황이였다. 결론적으로, 이번에 그 문제를 모두 해결하고, 기쁘게 그 내용을 사용자들에게 알렸다.

뿐만 아니라, 기존 Camera Roll 기준으로는 해결할 수 없었던 iTunes 동기화 사진들cloud에 저장된 사진들까지도 Tidy로 가져올 수 있게 되었다.

전화위복!

앞으로 iOS 사진은?

로컬/클라우드 구분은 없다. 자동 최적화만이 있을 뿐

위에서 알 수 있듯, iOS의 이번 움직임은 로컬과 클라우드의 구분을 없애는 방향이다. 클라우드를 사용하게 되면, 사진이 어디에 저장되어있는지는 신경 안 쓰게 해주겠다는 것이다.

클라우드 기반으로, 로컬 용량은 iOS가 알아서 최적화해주는 방향으로 가지 않을까? ‘이 기기로 찍은 사진’이라고 해도 ‘이 기기에 저장되어야할’ 필요는 없다. 어차피 Photos 들어가면 다 있으니까.

사진 스트림은 사라질듯

앞서 언급했듯, 사진 스트림은 Apple이 클라우드 서비스로 가기 위한 과도기적인 단계의 서비스였다. 앞으로 iCloud로 계정의 모든 사진을 통합하는데, 이 파편은 필요가 없을 것이다. (다만 하위 버젼 지원을 위해 남아있을 뿐)

iOS를 닮은 데스크탑 용 Photos가 온다

데스크탑에서 iPhoto와 Aperture가 사라질 것이라는 점은 이미 잘 알려진 내용이다. (iOS iPhoto도 지원을 중단) 이 둘을 합쳐 데스크탑 용 Photos를 만들고 있다고 하는데, 예상컨대 iOS의 구조와 동일하거나 비슷할 것이다. — 아마도 Photos에서 모든 사진을 열람할 수 있겠지.

마무리

개발자들에게

하루 빨리 ALAsset을 버리고 PhotoKit을 수용하길 권한다. 그리고 ‘앱으로 가져와야할 사진’의 범위에 대해서는 잘 생각해서 적용하는게 좋을 것이다. 애플이 앞으로 PhotoKit을 어떻게 개선할지는 모를 일이니, 그 때 그 때 변화를 잘 감지하는 것도 중요할 것.

우리 Team TIDY는 이번에 반성을 많이 했다. 왜 이제서야 뒤늦게 이런 대응을 해야했는지에 대해서. (그런데 드랍박스랑 구글도 이 모양이니..) 새로운 플랫폼과 API가 나오면 항상 한 보 앞을 보고 대비해야겠다.

우리에게 조언이나 을 주고싶다면, 언제든 환영이다. Tidy에 대한 내용도 포함해서. 연락을 기다린다.

iOS 사용자들에게

지금의 변화가 탐탁치 않은 것을 충분히 이해한다. 카메라 롤을 그리워하는 사람은 당신 혼자가 아니다. 그래도 너무 놀랄 필요는 없다. 개념만 이해하면 오히려 사용하기 쉬워진 면도 있고, 애플이 당신의 사진을 지워버린 것도 아니다. 새 변화를 이해하는데에 이 글이 부족했다면, 이런, 저런, 요런 곳에서 더 참고하시기를.

새로운 iOS 사진 앱이 맘에 들지 않을 수도 있다. 그렇다면 Tidy를 사용해보는 것도 하나의 옵션이다. 당신의 모든 사진을 멋진 앨범으로 정리할 수 있다. (사용하다가 궁금한게 있다면, 최고의 팀이 상시대기중이다.)

--

--