iCloud Design Guide 마지막 챕터 번역입니다.
애플 공식 문서 원본: Testing and Debugging (Key-Value and Document Storage)
철저한 테스트와 디버깅이 완료될때까지 앱을 완성된게 아니겠지만 iCloud를 채택할 때 이런 단계는 더욱 즁요할 것이다: 당신앱이 정상적으로 처리해야할 사용자 수 시나리오가 더 많다. 사용자는 여러 기기에서 서로다른 버전의 앱을 가지고 있거나 하나 이상의 기기에서 당신앱을 동시에 조작할 있다. 큰 파일이 iCloud에 업로드되는 중에 사용자가 비행기모드를 켤 수 있다. 드문 경우이지만 사용자가 아이클라우드에서 로그아웃하거나 다른 계정으로 변경할 수도 있다.
이번 챕터에서는 당신앱을 테스트하고 디버깅할때 iCloud에 대해 생각해보도록 이끌 것이다.
당신의 디바이스에 iCloud가 설정이 되었는지 확인 할 것
뭔가 예상대로 작동되지 않는다면 사전준비가 제대로 되었는지 학인 할 것:
- 당신의 테스트기기가 iCloud를 위해 올바르게 프로비저닝 되었는지 확인 할 것. 당신의 디바이스 프리비저닝 프로파일과 Apple ID가 반드시 iCloud에 대해 올바르게 구성되어야한다. App Distribution Guide의 App Distribution Quick Start와 Adding iCloud Support를 회고해볼것.
- iCloud 권한 요청이 올바른지 확인 할 것. Xcode 프로젝트에서 적절한 자격요청없이는 앱은 iCloud 컨테이너나 key-value 스토리지에 접근할 수 없다. Request Access to iCloud Using Xcode Capabilities에서 해당정보를 주의깊게 검토해볼 것.앱의 iCloud 컨테이너에 접근할 때 정식 자격 값(.entitlements 파일의 키와 값확인)을 부여했는지 확인할 것.
지연시간을 고려할 것
테스트 할 때 한 기기에서 다른 기기로의 즉각적인 변경사항 전달은 기대하지 말아야한다.
iCloud 서버에 파일이 생성되었는지를 코드로 확인하려면 파일 URL의 NSURLUbiquitousItemIsUploadedKey 키의 값을 확인해서 할 수 있다. 그렇게 하려면 NSURL의 메써드 getResourceValue:forKey:error:.를 호출하라. 해당파일이 성공적으로 업로드되었다면 이 키의 Boolean NSNumber 값은 true를 갖는다.
마찬가지로, 어떤 iCloud 파일이 로컬에 있는지 코드로 확인할 수 있다. NSURL 메써드 getResourceValue:forKey:error:를 호출해서 파일 URL의 NSURLUbiquitousItemIsDownloadedKey 키 값을 확인하라.
두 경우 모두 ‘iCloud 문서 사용에 대한 앱의 책임‘에 설명된 것처럼 당신앱의 NSMetadataQuery 객체에서 파일 URL을 가져온다.
앱의 네트워크 트래픽을 모니터링 할 것
앱을 테스트하는 동안 과도한 양의 네트워크 트래픽이 발생하는지 확인하며 네트워크 활동에 주시하자. iOS에서는 Instruments 분석울의 Network Activity instrument를 사용하라. Mac에서는 OS X의 기본 앱 ‘네트워크 유틸리티’를 사용하면 된다.
당신앱의 네트워크 트래픽이 과도해 보인다면 앱 설계를 최적화해보자. 예를 들어서 ‘네트워크 전송 효율을 위한 설계‘에 설명된대로 점증적인 증분(incremental) 업로드와 다운로드를 보다 잘 지원할 수 있도록 문서 파일 패키지를 디자인 할 수 있을 것이다.
Instruments로 앱 프로파일링에 대한 자세한 정보는 Instruments User Guide를 참고해보자.
문서충돌을 테스트하기위해서 두 개의 디바이스를 사용할 것
실제로 iCloud 지원앱을 사용하면서 여러버전의 문서사이에서 발생할 수 있는 다양한 충돌 시나리오가 있을 수 있다. 그런 피할 수 없는 사실을 넘어서, ‘지속되는 문서 상태정보 설계‘에 설명 된 것처럼, 앱의 로직 문제로 인해 불필요한 충돌이 발생 할 수 있다.
아래 항목은 실제 충돌을 시뮬레이션하기 위한 몇가지 아이디어이다. 이런 테스트를 준비하려면 하나의 iCloud 계정에 연결할 두 대의 장치를 구성하라. 이와같은 시나리오와 당신앱에서 일어날 수 있을만한 다른 것들을 처리하도록 앱을 구현하라.
하나의 오프라인 디바이스(기기)와 문서 버전 충돌 테스트
- 디바이스 1에서, 당신앱을 사용해서 새로운 문서를 만들고 연다음 디바이스 2에서 해당 문서를 연다. 해당문서는 이제 양쪽 디바이스에서 열려있다.
- 디바이스 1에서 비행기모드를 켜고 해당 문서를 편집한다.
- 디바이스 2(여전히 온라인인 것)에서도 해당 문서를 편집한다.
- 디바이스 1에서 비행기모드를 끈다.(온라인)
- 각각의 디바이스에서 계획된대로 충돌해결이 동작하는지 확인한다.
두개의 오프라인 디바이스로 문서 버전 충돌 테스트
- 디바이스 1에서 새로운 문서를 생성하고 연다. 그런다음 해당문서를 디바이스 2에서 연다. 이제 양쪽 디바이스 모두에서 해당문서가 열려있는 상태이다.
- 두 디바이스 모두 비행기모드를 켜서 오프라인으로 만들고 해당문서를 양쪽 문서에서 편집한다. 양쪽 디바이스에서 동시에, 혹은 서로 다른 시간에 변경사항을 완료해 봄으로써 이 절차를 다양하게 적용해본다.양쪽 디바이스 모두에서 비행기모드를 꺼서 온라인으로 만든다. 이 단계역시도 두 디바이스 모두 같은시간에 혹은 서로 다른 시간에 비행기모드를 꺼서 다양한게 적용해본다.
- 각각의 디바이스에서 버전 충돌 해결이 계획한대로 동작하는지 확인한다.
문서 포맷의 하위, 상위버전 호환성 테스트
- 디바이스 1에 가장 오래된 버전의 앱을 설치하고, 디바이스 2에는 최신버전을 설치한다.
- 양쪽 디바이스에서 문서를 하나씩 생성한다. 각각의 문서가 양쪽 디바이스에서 나타나도록 충분한 시간을 보낸다.
- 각 디바이스에서, 다른 디바이스에서 만들어진 문서를 연다. 또는 당신이 열기를 지원하지 않는 ‘버전불일치’일 경우 계획한대로 동작하는지 확인한다. 문제가 있는 지 확인한다.
문서관리 테스트
- iCloud에 문서를 저장한 다음 해당 문서를 두개의 기기에서 연다.
- 디바이스 1에서 해당 문서의 이름을 수정한다.(또는 선택적으로는 삭제).
- 디바이스 2에서 의도대로 동작하는지 확인한다.
개발과정에서 iCloud Data가 일치하지 않게되면 새롭게 시작할 것
앱으 개발하는 동안에 앱의 iCloud 컨테이너의 데이터가 일치하지 않게 될 수 있다. 이런 일이 발생하면 앱 동작 또한 잘못 되게 된다. 이전에 동작했던 코드가 이제 동작하지 않는다면 처음부터 새롭게 시작하기 위해서 iCloud 컨테이너를 비워 볼 것
iOS기기나 Mac을 사용해서 앱의 iCloud 컨테이너를 비울 수 있다.
iOS 디바이스를 사용해서 앱의 iCloud 컨테이너 비우기
- 당신앱의 인스턴스를 포함하고 있는 모든 기기에서 해당 인스턴스(앱)를 삭제한다.
- iOS의 ‘설정’앱에서 iCloud > Storage & backup > Manage Storage(저장 공간 관리) 항목으로 이동한다.
- Documents & Data 그룹에 당신앱이 나타나지 않는 다면 Show All을 누른다.
- Manage Storage 스크린에서 당신앱의 이름을 선택한다.
- 당신앱의 저장소 정보보기 스크린에서 Edit >Deleate All을 누른다. 확인창이 나타나면 Delete All을 선택한다.
위 단계를 완료하고 난뒤, iCloud 컨테이너의 콘텐츠가 iCloud 계정에 연결된 모든 기기에서 삭제되길 기다린다. 만일 해당 컨테이너가 많은 용량의 데이터를 담고 있다면 이 동작은 더 오래걸린다. Mac에서는 Finder를 사용해서 해당 iCloud 컨테이너가 비워졌는지 확인 할 수 있다. Mac에서 해당 컨테이너로의 경로는 아래와 같다:
~/Library/Mobile Documents/앱번들ID
그런다음 각각의 디바이스에 앱을 다시 설치한다.
Mac을 사용해서 당신앱의 iCloud 컨테이너 비우기
- 당신앱의 인스턴스가 설치된 모든 디바이스에서 해당 인스턴스를 삭제한다.
- OS X의 ‘시스템 환경설정’에서 iCloud 설정을 열고 Manage(관리…)를 클릭한다.
- Manage Storage(저장 공간 관리) 대화상자가 나타나면 해당 리스트에서 당신앱을 찾아 클릭한다.
- Delete All(문서 및 데이터 삭제)을 클릭한다. 확인창이 나타나면 Delete(삭제)를 클릭한다. 그런다음 Done(완료)를 클릭한다.
위 단계를 완료하고 난뒤, 해당 컨테이너의 내용이 iCloud 계정에 연결된 모든 기기에서 삭제될 때까지 시간을 보낸다. 만일 해당 컨테이너에 들어있던 데이터의 용량이 크다면 이 작업은 더 오래걸린다. Mac에서는 Finder를 사용해서 해당 iCloud 컨테이너가 비워졌는지 확인 할 수 있다. Mac에서 해당 컨테이너로의 경로는 아래와 같다:
~/Library/Mobile Documents/앱번들ID
그런다음 각각의 디바이스에 앱을 다시 설치한다.
iCloud를 지원하는 당신앱의 OS X 버전을 제공하면서 완전히 새롭게 시작하길 원한다면 당신앱이 설치된 모든 Mac에서 당신앱의 App Sandbox 컨테이너의 내용물 또한 삭제할 것. 이 작업은 더이상 일치하지 않게된 ‘앱에만 한정된 데이터’ 또한 삭제할 수 있게 해준다. Mac에서 App Sandbox 컨테이너에 대한 경로는 다음과 같다:
~/Library/Containers/앱번들이름
iCloud Design Guide 번역 끝.