SlideShare a Scribd company logo
1 of 63
Download to read offline
iCloud 튜토리얼
스마트앱 개발자 포럼 2013. 6
창원대학교 박동규
iCloud
• iOS 또는 Mac장비들 간의 자료를 동기화시키는 애플
사의 서비스
• iCloud는 사용자의 문서나 그림등을 저장하는 중심
서버의 집합
• No matter where you go, there you are
• 문서를 읽고, 쓰고, 수정하기 위해 클라우드 서버와 상
호작용하는 간단한 어플리케이션
• 출처 : Raywenderlich.com,Apple WWDC 자료등
Apple iCloud 논쟁
• http://liveandventure.com/2012/11/22/
icloud/
• 내가 iCloud를 안쓰는 이유
• http://alphawolf.tistory.com/306
• 내가 iCloud를 쓰는 이유
Apple iCloud 논쟁
Apple iCloud 논쟁
• 핵심은 애플의 강점인 UI/UX 부분이 네트워
크 서비스쪽에서도 발휘될 수 있을 것인가?
• 애플기기들에서만 동작하는 iCloud 서비스가
PC 이용자층을 공략할 수 있을것인가?
• gmail, 에버노트, Dropbox, 구글 드라이버 서
비스등 경쟁 서비스와 어떤 장점을 발휘할 것
인가?
iCloud 구현상의 문제
• 불일치 해결
• iCloud의 문서 A를 iPad에서 수정하고 동시에
Mac에서 다른 페이지를 수정했다.
• 이를 다른 iPad에서 열면 어떤 버젼의 문서 A을 읽
어야 하는가?
• 백그라운드 관리
• 동기화 기능을 항상 백그라운드로 실행시켜야 한
다
iCloud 구현상의 문제
• 네트워크 문제
• 계속 전송되는 방대한 문서는 문제를 발생
시킬 수 있다
• 문서를 덩어리로 쪼개는 방식으르 문제를
해결함
• P2P 솔루션 방식으로 동작, 디바이스간 직접
이동도 가능함
iCloud
자료 공유의 필요성
iCloud Storage
• 앱을 위한 iCloud 샌드박스를 제공함
• 샌드박스에 저장된 자료와 파일을 업로드 할 수 있음
• key-value 데이터방식으로 업로드 가능함
• 실시간방식은 아니지만 지속적으로 작동함
• 백그라운드 관리를 통해 문서가 최신상태가 되도록 함.
• 네트워크 비용 감소
• 문서를 덩어리로 쪼개고(chunk) 변경이 감지되면 변경
된 부분만을 클라우드로 업로드(네트워크비용 최소화)
iCloud Storage
• 디바이스 사이에 자료를 이동시킴
• 파일의 변화를 알려줌(notify)
• 충돌이 발생할 경우 자동으로 해결
How does it work?
How does it work?
iCloud 메타데이터
• 메타데이터는 iCloud로 push(디바이스->클라우드 저장
소)됨
• iCloud는 새 파일을 pull함
• 디바이스는 필요할 경우 파일을 pull(클라우드->디바이
스)시킴
• OS는 데이터를 아토믹 단위로 pull할 수 있음
• 앱은 아직 로컬저장소에 있지 않은 파일을 알 수 있음
• 파일이 있으나 데이터가 도착하지 않았을 경우
iCloud 인프라
• New Maiden, NC data
center
• 5억불의 투자
• iCloud를 통한 데이터 접
근
Apple data center
Beginning iCloud
• 간단한 문서 공유 프로그램
• 아이클라우드를 사용하기 위해서는 개발자 계정이 필요함
• 게임센터와는 달리 개발자 포털에서 직접 활성화시켜
야 함
• 게임센터는 itunesconnect에서 활성화가 가능함
• 시뮬레이터에서 테스트할 수 없음
• 장비에서도 iCloud 활성화, 도큐먼트 켜기 실행후 테스
트
iCloud 앱 아이디 생성
• iOS Provisioning Portal -> Certificates,
Identifiers & Profiles -> identifiers -> App ID
앱 아이디 설정
앱 아이디 설정에서 iCloud를 활성화시킨다
앱 아이디
• com.apple.myAppID 와 같은 방식으로 앱을
다른 앱과 구별하는 식별자
• 앱마다 유니크해야 함
• 다른 앱이 동일한 앱 아이디를 사용하면 안
됨
앱 프로파일 생성
• Provisioning Profiles -> Development ->
Add
개발자용 Provisioning Profile을 생성한다
프로파일 저장
Xcode Project for iCloud
Bundle ID가 App ID 생성시
만든 식별자와 일치 해야함
프로젝트 설정
프로젝트 설정
• Entitlements file
• info.plist 파일과 같은 property 목록 정보
• entitlement는 iCloud 데이터 저장소 사용을 가능하
게 한다.
• 보안허가에 관한 내용 참조
• iCloud Key-Value Store
• iCloud 내의 key-value 저장값을 가리키는 유일한
식별자
Entitlement
• iCloud entitlements let you enable the use of iCloud data storage for
your iOS or OS X app.You set iCloud entitlement values on a target-by-
target basis in your Xcode project.
• Push notifications let your app alert the user even when your iOS or OS
X app is not executing.You set push notification entitlement values as
part of configuring your development and distribution provisioning
profiles.
• App Sandbox entitlements let you enable the security feature called
sandboxing for your OS X app. (In iOS, all apps are sandboxed
automatically, so these sandboxing entitlements do not apply.)By carefully
enabling only the resource access that you need, you minimize the
potential for damage if malicious code successfully exploits your app.You
set App Sandbox entitlement values on a target-by-target basis in your
Xcode project.
프로젝트 설정
• iCloud Containers
• 클라우드에서 어플리케이션을 읽고 쓸 수 있는 디
렉토리
• 다른 어플리케이션에 의해 관리될 수 있는 사용자
컨테이너
• Keychain Access Group
• 키체인 데이터를 공유하는 어플리케이션에서 필요
한 키들
아이클라우드 활성화
• 사용자가 iCloud를 활성화시켰는가 검사하는
모듈
• AppDelegate.m의 - (BOOL)application:
didFinishLaunchingWithOptions: 메소드 수정
프로젝트 설정
• URLForUbiquityContainerIdentifier
• iCloud에 접근하기 위한 식별자가 필요하다
• nil 파라메터는 프로젝트 설정의 첫 번째 컨테이너가 반환된다
(현재 하나 뿐임)
• 실제 기기에서 테스트 할것
• 성공할 경우 다음과 같은 메시지가 나타남(아이클라우드용 저
장소)
• iCloud access at file://localhost/private/var/mobile/Library/
Mobile%20Documents/
8SUWC89YUK~com~profpark~iCloudTest/
테스트
Lab 1
• iCloud 앱을 위한 프로비저닝 프로파일을 만
들고 single view application을 만들어서
iCloud 기능을 테스트한다
• 시뮬레이터에서는 안됨, 디바이스에서 테스트
• 소스 : 페북 그룹
Lab 2
• iCloud를 이용한 간단한 문서관리 프로그램
• Raywenderich 블로그의 튜토리얼 자료
iCloud API
• UIDocument
• iCloud 문서작업을 위한 클래스
• NSFileManager, NSFilePresenter등의 복잡한 파
일처리 클래스의 역할을 대체함
• 자기자신과 실제 데이터사이의 미들웨어로 동작함
• 문서 콘텐츠를 포장(wrapping)하는 기능을 통해
iCloud와 연결
iCloud API
• UIDocument
• 다큐먼트의 데이터를 관리하기 위한 추상 베이스 클래스
• 백그라운드 큐에 비동기 방식으로 데이터를 읽고 쓸 수 있
음
• 읽기, 쓰기 연산이 이루어지는 동안에도 어플리케이션은
멈추거나 버벅거리지 않음
• 클라우드 서비스와 결합되어 자동으로 문서를 읽고 쓰는
작업을 코디네이트함
• 데이터의 안전한 저장을 보장
iCloud API
• UIDocument
• M-V-C 디자인 패턴 모델에서 UIDocument 객체
는 모델 객체 또는 모델-컨트롤러 객체에 해당함
• 도큐먼트 기반 어플리케이션은 반드시 그 도큐먼
트를 위해서는 UIDocument를 서브클래스하여
야 한다.
• UIDocument 아키텍쳐내의 주요속성으로 파일
URL이 있다.
iCloud API
• iCloud에 저장된 문서 열기
• 백그라운드 큐에 read 메시지를 유발하게 됨
• 그 시간동안 앱은 블러킹되지 않기 때문에 UI와 같은 작업을 수행할
수 있다
• 파일 읽기가 끝나면 읽기 동작에 의해 반환된 데이터는 자유롭게 로
딩할 수 있다.
• loadFromContents:ofType:error:메소드를 오버라이딩하는 방법이
있다.
UIDocuments
• 노트앱을 위한 코드
UIDocuments
• 파일을 오픈하면 두 개의 콜백을 받는다
• 데이터 읽기가 끝났을때 UIDocument 서브 클래스
안에서 받는다
• 열기 동작이 완전히 끝났을 때 받는다
• 쓰기동작도 비슷한데 이중 큐를 이용함
• 파일을 열때 NSData 인스턴스를 파싱해야 함
• 파일을 쓸 경우 다큐먼트 데이터를 NSData 형식으
로 변한시켜야 함(백그라운드 큐를 이용)
도큐먼트 저장하기
• UIDocument에 있는 수동저장, 자동저장 메소
드
• 수동으로 저장할 때 사용하는 메소드
• completion 핸들러가 저장이 완료된 후에
호출된다
UIDocument 서브클래싱
• Note라는 UIDocument 하위 클래스를 통해
노트 어플을 만들어보자
• loadFromContents: ofType: error: 와
contentsForType: error: 메소드를 만들자
• 이 메소드는 애플리케이션이 파일 시스템으
로부터 데이터를 읽으려 할 경우 호출됨
UIDocument subclassing
iCloud File 열기
• AppDelegate수정
loadDocument
• Query 객체를 통해 메타데이터 추출
• 메타데이터의 스코프는
NSMetadataQueryUbiquitousDocumentsScope
• NSPredicate
• 페치 또는 메모리상의 필터링을 위한 검색시 제약을 주기
위해서
• Query의 파라메터로 Predicate을 준다
•
NSPredicate
• 인메모리의 내용이나 페치할 내용에 대하여
constraint(제약사항)을 정의하는 클래스이다
• 단순 비교, 검색, 논리연산등과 같은 관계를
정의한다
• 메타데이터에 있는 콘텐츠를 가져올때 일정한
조건을 부여하여 가져오도록 한다
• 효과적인 조건제어를 위해서 사용한다
NSPredicate
• 다양한 질의를 통해서 메모리상의 내용을 페치하는 것
이 가능하다
• iCloud 컨테이너내의 문서객체를 페치할때 조건문으로
적당하다
메타데이터
• 파일명, 크기, 수정된 내용, 날짜, 수정된 디바이스등
의 정보들은 클라우드로 전송되고 이 전송된 정보
를 이용하여 다른 디바이스에 전송될지를 결정함
• 디바이스의 상태를 보고 전송여부를 결정한다
• 아이폰/아이패드등 디바이스의 밧데리 상태에
따라 전송여부를 결정
• 이를 통해 밧데리 최적화를 수행
loadDocument 메소드
query complete
query
• 질의를 실행한 후 멈추지 않을 경우, 어플리케
이션을 종료할때 까지 질의가 실행된다
• 클라우드 환경에서는 이러한 일이 자주 일
어난다
• 질의 결과를 처리하는 동안 발생
• disableUpdate와 stopQuery를 호출하여
중지시킴
query
NSMetadataItem
• NSMetadataQuery는 NSMetadataItem 배열
을 wrap시킨 것으로 결과를 포함하고 있음
• key-value를 저장
• 각 파일에 대해 그 정보를 살펴보는 용도로 사
용
• 사전에 정의된 키를 가짐
NSMetadataItem 키
• NSMetadataItemURLKey
• NSMetadataItemFSNameKey
• NSMetadataItemDisplayNameKey
• NSMetadataItemIsUbiquitousKey
• NSMetadataUbiquitousItemHasUnresolvedConflictsKey
• NSMetadataUbiquitousItemIsDownloadedKey
• NSMetadataUbiquitousItemIsDownloadingKey
• NSMetadataUbiquitousItemIsUploadedKey
• NSMetadataUbiquitousItemIsUploadingKey
• NSMetadataUbiquitousItemPercentDownloadedKey
• NSMetadataUbiquitousItemPercentUploadedKey
iCloud에 저장하기
• 로컬 iCloud 디렉토리를 추출
• 그 디렉토리내에 다큐먼트 인스턴스 초기화
• saveToURL 메소드 호출
• 저장에 성공하면
openWithCompletionHandler를 호출함
iCloud에 저장하기
여기까지 한 일
• iCloud를 사용하기 위한 Provisioning Profile을 받
고, 여러가지 셋업을 한 후
• UIDocument를 상속받은 Note객체를 만들고
• AppDelegate에서 Query 객체를 통해 메타데이터
추출한다음에 Predicate을 이용해서 검색시의 제약
도 주고
• Query를 처리하는 메소드를 알아보고
• Metadata 키를 활용하는 방법도 알아보았다
사용자 인터페이스 설정
사용자 인터페이스
• iPad 용 사용자 인터페이스 만들기
테스트
• iOS 기기 2대에 앱을 실행시키고 한 앱에서
임의의 텍스트를 입력한다.
• 두 기기가 동기화되는 것을 확인한다.
테스트
부록: NSData
• NSData와 수정이 가능한 클래스인
NSMutableData는 데이터 오브젝터, 바이트
버퍼를 위한 객체지향 래퍼를 제공한다
• 데이터 오브젝트는 Foundation 객체의 행위
를 책임지는 단순한 할당 버퍼로서의 역할을
한다.
UIDocument에서 제공하는 편리한 기능
• 충돌 다루기 및 에러 핸들링
• 앞서 다룬 문제와 같이 A라는 문서를 디바이스1, 디
바이스2에서 동시에 수정할 경우의 처리방법
• 두 버전을 보여주고 선택할 수 있다
• 두 버전을 머지하여 변경함
• 가장 최근 버전을 선택한다
• 등과 같은 방법을 선택할 수 있다
• 에러 핸들기 기법도 제공함
기타
• 클라우드 서비스에서는 예상치 못한 복잡한
상황들이 발생할 수 있다.
• 로컬 저장소에 저장하는 방법(Programming)
에 비해서 매우 복잡할 수 밖에 없는 이유가
여기에 있다.
기타
• http://ivis.cwnu.ac.kr/tc/dongupak
• https://www.facebook.com/groups/
smartphone.forum/
참조문헌
• Raywenderich 블로그
• http://www.raywenderlich.com/ko/25498/ios-5%EC
%97%90%EC%84%9C-%EC%95%84%EC%9D%B4%ED
%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%EC%8B
%9C%EC%9E%91%ED%95%98%EA%B8%B0-%ED%8C%8C
%ED%8A%B8-1
• http://liveandventure.com/2012/11/22/icloud/
• 내가 iCloud를 안쓰는 이유
• http://alphawolf.tistory.com/306
• 내가 iCloud를 쓰는 이유

More Related Content

Similar to iCloud 튜토리얼(2013.6 스마트앱개발자포럼 발표)

모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트Dae Kim
 
Packer, Terraform, Vault를 이용해 만드는 
재현 가능한 게임 인프라
Packer, Terraform, Vault를 이용해 만드는 
재현 가능한 게임 인프라Packer, Terraform, Vault를 이용해 만드는 
재현 가능한 게임 인프라
Packer, Terraform, Vault를 이용해 만드는 
재현 가능한 게임 인프라MinKyu Kim
 
React native development
React native developmentReact native development
React native developmentSangSun Park
 
20240325 TuistNight 모듈로 나누면 알아두면 좋을 3가지 팁
20240325 TuistNight 모듈로 나누면 알아두면 좋을 3가지 팁20240325 TuistNight 모듈로 나누면 알아두면 좋을 3가지 팁
20240325 TuistNight 모듈로 나누면 알아두면 좋을 3가지 팁정민 안
 
[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유
[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유
[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유iFunFactory Inc.
 
클라우드 춘추전국시대 서버 개발자 생존기
클라우드 춘추전국시대 서버 개발자 생존기클라우드 춘추전국시대 서버 개발자 생존기
클라우드 춘추전국시대 서버 개발자 생존기iFunFactory Inc.
 
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍Chris Ohk
 
웹 IDE 비교
웹 IDE 비교웹 IDE 비교
웹 IDE 비교Junyoung Lee
 
이제 문서는 DocC로 만들때가 되지 않았나요?
이제 문서는 DocC로 만들때가  되지 않았나요?이제 문서는 DocC로 만들때가  되지 않았나요?
이제 문서는 DocC로 만들때가 되지 않았나요?hyunho Lee
 
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container DayAmazon Web Services Korea
 
Windows azure를 활용한 cloud 개발 사례
Windows azure를 활용한 cloud 개발 사례Windows azure를 활용한 cloud 개발 사례
Windows azure를 활용한 cloud 개발 사례정현 남
 
효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017
효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017
효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017Amazon Web Services Korea
 
생산성을 높여주는 iOS 개발 방법들.pdf
생산성을 높여주는 iOS 개발 방법들.pdf생산성을 높여주는 iOS 개발 방법들.pdf
생산성을 높여주는 iOS 개발 방법들.pdfssuserb942d2
 
SOSCON 2017 - Backend.AI
SOSCON 2017 - Backend.AISOSCON 2017 - Backend.AI
SOSCON 2017 - Backend.AIJoongi Kim
 
『빠르게 훑어보는 구글 클라우드 플랫폼』 - 맛보기
『빠르게 훑어보는 구글 클라우드 플랫폼』 - 맛보기『빠르게 훑어보는 구글 클라우드 플랫폼』 - 맛보기
『빠르게 훑어보는 구글 클라우드 플랫폼』 - 맛보기복연 이
 
[123] electron 김성훈
[123] electron 김성훈[123] electron 김성훈
[123] electron 김성훈NAVER D2
 
2017 Pycon KR - Django/AWS 를 이용한 쇼핑몰 서비스 구축
2017 Pycon KR - Django/AWS 를 이용한 쇼핑몰 서비스 구축2017 Pycon KR - Django/AWS 를 이용한 쇼핑몰 서비스 구축
2017 Pycon KR - Django/AWS 를 이용한 쇼핑몰 서비스 구축Youngil Cho
 
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDYWHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDYHyun-woo Park
 

Similar to iCloud 튜토리얼(2013.6 스마트앱개발자포럼 발표) (20)

모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
모바일 게임과 앱을 위한 오픈소스 게임서버 엔진 프로젝트 CloudBread 프로젝트
 
Packer, Terraform, Vault를 이용해 만드는 
재현 가능한 게임 인프라
Packer, Terraform, Vault를 이용해 만드는 
재현 가능한 게임 인프라Packer, Terraform, Vault를 이용해 만드는 
재현 가능한 게임 인프라
Packer, Terraform, Vault를 이용해 만드는 
재현 가능한 게임 인프라
 
React native development
React native developmentReact native development
React native development
 
20240325 TuistNight 모듈로 나누면 알아두면 좋을 3가지 팁
20240325 TuistNight 모듈로 나누면 알아두면 좋을 3가지 팁20240325 TuistNight 모듈로 나누면 알아두면 좋을 3가지 팁
20240325 TuistNight 모듈로 나누면 알아두면 좋을 3가지 팁
 
[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유
[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유
[아이펀팩토리] 2018 데브데이 서버위더스 _02 분산 환경을 위한 ORM 개발 경험 공유
 
클라우드 춘추전국시대 서버 개발자 생존기
클라우드 춘추전국시대 서버 개발자 생존기클라우드 춘추전국시대 서버 개발자 생존기
클라우드 춘추전국시대 서버 개발자 생존기
 
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
인프콘 2022 - Rust 크로스 플랫폼 프로그래밍
 
웹 IDE 비교
웹 IDE 비교웹 IDE 비교
웹 IDE 비교
 
이제 문서는 DocC로 만들때가 되지 않았나요?
이제 문서는 DocC로 만들때가  되지 않았나요?이제 문서는 DocC로 만들때가  되지 않았나요?
이제 문서는 DocC로 만들때가 되지 않았나요?
 
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
도커 컨테이너 활용 사례 Codigm - 남 유석 개발팀장 :: AWS Container Day
 
Windows azure를 활용한 cloud 개발 사례
Windows azure를 활용한 cloud 개발 사례Windows azure를 활용한 cloud 개발 사례
Windows azure를 활용한 cloud 개발 사례
 
효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017
효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017
효과적인 데브옵스를 위한 AWS 개발 도구 활용하기 - AWS Summit Seoul 2017
 
생산성을 높여주는 iOS 개발 방법들.pdf
생산성을 높여주는 iOS 개발 방법들.pdf생산성을 높여주는 iOS 개발 방법들.pdf
생산성을 높여주는 iOS 개발 방법들.pdf
 
7. html5 api
7. html5 api7. html5 api
7. html5 api
 
SOSCON 2017 - Backend.AI
SOSCON 2017 - Backend.AISOSCON 2017 - Backend.AI
SOSCON 2017 - Backend.AI
 
『빠르게 훑어보는 구글 클라우드 플랫폼』 - 맛보기
『빠르게 훑어보는 구글 클라우드 플랫폼』 - 맛보기『빠르게 훑어보는 구글 클라우드 플랫폼』 - 맛보기
『빠르게 훑어보는 구글 클라우드 플랫폼』 - 맛보기
 
Portfolio
PortfolioPortfolio
Portfolio
 
[123] electron 김성훈
[123] electron 김성훈[123] electron 김성훈
[123] electron 김성훈
 
2017 Pycon KR - Django/AWS 를 이용한 쇼핑몰 서비스 구축
2017 Pycon KR - Django/AWS 를 이용한 쇼핑몰 서비스 구축2017 Pycon KR - Django/AWS 를 이용한 쇼핑몰 서비스 구축
2017 Pycon KR - Django/AWS 를 이용한 쇼핑몰 서비스 구축
 
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDYWHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY
WHAT / WHY / HOW WE’RE ENGINEERING AT SMARTSTUDY
 

More from Changwon National University

생성인공지능둘러보기.pdf
생성인공지능둘러보기.pdf생성인공지능둘러보기.pdf
생성인공지능둘러보기.pdfChangwon National University
 
알아두면 편리한 macOS 에디터 단축키와 기능
알아두면 편리한 macOS 에디터  단축키와 기능알아두면 편리한 macOS 에디터  단축키와 기능
알아두면 편리한 macOS 에디터 단축키와 기능Changwon National University
 
키보드 기호의 이름 알아보기(한국어, 영어)
키보드 기호의 이름 알아보기(한국어, 영어)키보드 기호의 이름 알아보기(한국어, 영어)
키보드 기호의 이름 알아보기(한국어, 영어)Changwon National University
 
AI 로봇 아티스트의 비밀(창원대학교 정보통신공학과 특강)
AI 로봇 아티스트의 비밀(창원대학교 정보통신공학과 특강)AI 로봇 아티스트의 비밀(창원대학교 정보통신공학과 특강)
AI 로봇 아티스트의 비밀(창원대학교 정보통신공학과 특강)Changwon National University
 
18 2 파이썬표준라이브러리
18 2 파이썬표준라이브러리18 2 파이썬표준라이브러리
18 2 파이썬표준라이브러리Changwon National University
 
15 2 클래스정의와self
15 2 클래스정의와self15 2 클래스정의와self
15 2 클래스정의와selfChangwon National University
 

More from Changwon National University (20)

생성인공지능둘러보기.pdf
생성인공지능둘러보기.pdf생성인공지능둘러보기.pdf
생성인공지능둘러보기.pdf
 
2011 app center Changwon National Univ.
2011 app center Changwon National Univ.2011 app center Changwon National Univ.
2011 app center Changwon National Univ.
 
인공지능의 파도가 온다
인공지능의 파도가 온다인공지능의 파도가 온다
인공지능의 파도가 온다
 
Mobile Healthcare Application
Mobile Healthcare ApplicationMobile Healthcare Application
Mobile Healthcare Application
 
바다 즐기기
바다 즐기기바다 즐기기
바다 즐기기
 
알아두면 편리한 macOS 에디터 단축키와 기능
알아두면 편리한 macOS 에디터  단축키와 기능알아두면 편리한 macOS 에디터  단축키와 기능
알아두면 편리한 macOS 에디터 단축키와 기능
 
키보드 기호의 이름 알아보기(한국어, 영어)
키보드 기호의 이름 알아보기(한국어, 영어)키보드 기호의 이름 알아보기(한국어, 영어)
키보드 기호의 이름 알아보기(한국어, 영어)
 
AI 로봇 아티스트의 비밀(창원대학교 정보통신공학과 특강)
AI 로봇 아티스트의 비밀(창원대학교 정보통신공학과 특강)AI 로봇 아티스트의 비밀(창원대학교 정보통신공학과 특강)
AI 로봇 아티스트의 비밀(창원대학교 정보통신공학과 특강)
 
20 2 강의를 마치며
20 2 강의를 마치며20 2 강의를 마치며
20 2 강의를 마치며
 
20 1 코딩스타일
20 1 코딩스타일20 1 코딩스타일
20 1 코딩스타일
 
18 2 파이썬표준라이브러리
18 2 파이썬표준라이브러리18 2 파이썬표준라이브러리
18 2 파이썬표준라이브러리
 
18 1 파이썬패키지
18 1 파이썬패키지18 1 파이썬패키지
18 1 파이썬패키지
 
17 2 필터함수와 맵함수
17 2 필터함수와 맵함수17 2 필터함수와 맵함수
17 2 필터함수와 맵함수
 
17 1 람다함수
17 1 람다함수17 1 람다함수
17 1 람다함수
 
16 1 상속과super()
16 1 상속과super()16 1 상속과super()
16 1 상속과super()
 
15 2 클래스정의와self
15 2 클래스정의와self15 2 클래스정의와self
15 2 클래스정의와self
 
14 4 슬라이싱
14 4 슬라이싱14 4 슬라이싱
14 4 슬라이싱
 
14 2 iterator
14 2 iterator14 2 iterator
14 2 iterator
 
14 3 리스트함수
14 3 리스트함수14 3 리스트함수
14 3 리스트함수
 
14 1 리스트의 메소드
14 1 리스트의 메소드14 1 리스트의 메소드
14 1 리스트의 메소드
 

iCloud 튜토리얼(2013.6 스마트앱개발자포럼 발표)

  • 1. iCloud 튜토리얼 스마트앱 개발자 포럼 2013. 6 창원대학교 박동규
  • 2. iCloud • iOS 또는 Mac장비들 간의 자료를 동기화시키는 애플 사의 서비스 • iCloud는 사용자의 문서나 그림등을 저장하는 중심 서버의 집합 • No matter where you go, there you are • 문서를 읽고, 쓰고, 수정하기 위해 클라우드 서버와 상 호작용하는 간단한 어플리케이션 • 출처 : Raywenderlich.com,Apple WWDC 자료등
  • 3. Apple iCloud 논쟁 • http://liveandventure.com/2012/11/22/ icloud/ • 내가 iCloud를 안쓰는 이유 • http://alphawolf.tistory.com/306 • 내가 iCloud를 쓰는 이유
  • 5. Apple iCloud 논쟁 • 핵심은 애플의 강점인 UI/UX 부분이 네트워 크 서비스쪽에서도 발휘될 수 있을 것인가? • 애플기기들에서만 동작하는 iCloud 서비스가 PC 이용자층을 공략할 수 있을것인가? • gmail, 에버노트, Dropbox, 구글 드라이버 서 비스등 경쟁 서비스와 어떤 장점을 발휘할 것 인가?
  • 6. iCloud 구현상의 문제 • 불일치 해결 • iCloud의 문서 A를 iPad에서 수정하고 동시에 Mac에서 다른 페이지를 수정했다. • 이를 다른 iPad에서 열면 어떤 버젼의 문서 A을 읽 어야 하는가? • 백그라운드 관리 • 동기화 기능을 항상 백그라운드로 실행시켜야 한 다
  • 7. iCloud 구현상의 문제 • 네트워크 문제 • 계속 전송되는 방대한 문서는 문제를 발생 시킬 수 있다 • 문서를 덩어리로 쪼개는 방식으르 문제를 해결함 • P2P 솔루션 방식으로 동작, 디바이스간 직접 이동도 가능함
  • 10. iCloud Storage • 앱을 위한 iCloud 샌드박스를 제공함 • 샌드박스에 저장된 자료와 파일을 업로드 할 수 있음 • key-value 데이터방식으로 업로드 가능함 • 실시간방식은 아니지만 지속적으로 작동함 • 백그라운드 관리를 통해 문서가 최신상태가 되도록 함. • 네트워크 비용 감소 • 문서를 덩어리로 쪼개고(chunk) 변경이 감지되면 변경 된 부분만을 클라우드로 업로드(네트워크비용 최소화)
  • 11. iCloud Storage • 디바이스 사이에 자료를 이동시킴 • 파일의 변화를 알려줌(notify) • 충돌이 발생할 경우 자동으로 해결
  • 12. How does it work?
  • 13. How does it work?
  • 14. iCloud 메타데이터 • 메타데이터는 iCloud로 push(디바이스->클라우드 저장 소)됨 • iCloud는 새 파일을 pull함 • 디바이스는 필요할 경우 파일을 pull(클라우드->디바이 스)시킴 • OS는 데이터를 아토믹 단위로 pull할 수 있음 • 앱은 아직 로컬저장소에 있지 않은 파일을 알 수 있음 • 파일이 있으나 데이터가 도착하지 않았을 경우
  • 15. iCloud 인프라 • New Maiden, NC data center • 5억불의 투자 • iCloud를 통한 데이터 접 근 Apple data center
  • 16. Beginning iCloud • 간단한 문서 공유 프로그램 • 아이클라우드를 사용하기 위해서는 개발자 계정이 필요함 • 게임센터와는 달리 개발자 포털에서 직접 활성화시켜 야 함 • 게임센터는 itunesconnect에서 활성화가 가능함 • 시뮬레이터에서 테스트할 수 없음 • 장비에서도 iCloud 활성화, 도큐먼트 켜기 실행후 테스 트
  • 17. iCloud 앱 아이디 생성 • iOS Provisioning Portal -> Certificates, Identifiers & Profiles -> identifiers -> App ID
  • 18. 앱 아이디 설정 앱 아이디 설정에서 iCloud를 활성화시킨다
  • 19. 앱 아이디 • com.apple.myAppID 와 같은 방식으로 앱을 다른 앱과 구별하는 식별자 • 앱마다 유니크해야 함 • 다른 앱이 동일한 앱 아이디를 사용하면 안 됨
  • 20. 앱 프로파일 생성 • Provisioning Profiles -> Development -> Add 개발자용 Provisioning Profile을 생성한다
  • 22. Xcode Project for iCloud Bundle ID가 App ID 생성시 만든 식별자와 일치 해야함
  • 24. 프로젝트 설정 • Entitlements file • info.plist 파일과 같은 property 목록 정보 • entitlement는 iCloud 데이터 저장소 사용을 가능하 게 한다. • 보안허가에 관한 내용 참조 • iCloud Key-Value Store • iCloud 내의 key-value 저장값을 가리키는 유일한 식별자
  • 25. Entitlement • iCloud entitlements let you enable the use of iCloud data storage for your iOS or OS X app.You set iCloud entitlement values on a target-by- target basis in your Xcode project. • Push notifications let your app alert the user even when your iOS or OS X app is not executing.You set push notification entitlement values as part of configuring your development and distribution provisioning profiles. • App Sandbox entitlements let you enable the security feature called sandboxing for your OS X app. (In iOS, all apps are sandboxed automatically, so these sandboxing entitlements do not apply.)By carefully enabling only the resource access that you need, you minimize the potential for damage if malicious code successfully exploits your app.You set App Sandbox entitlement values on a target-by-target basis in your Xcode project.
  • 26. 프로젝트 설정 • iCloud Containers • 클라우드에서 어플리케이션을 읽고 쓸 수 있는 디 렉토리 • 다른 어플리케이션에 의해 관리될 수 있는 사용자 컨테이너 • Keychain Access Group • 키체인 데이터를 공유하는 어플리케이션에서 필요 한 키들
  • 27. 아이클라우드 활성화 • 사용자가 iCloud를 활성화시켰는가 검사하는 모듈 • AppDelegate.m의 - (BOOL)application: didFinishLaunchingWithOptions: 메소드 수정
  • 28. 프로젝트 설정 • URLForUbiquityContainerIdentifier • iCloud에 접근하기 위한 식별자가 필요하다 • nil 파라메터는 프로젝트 설정의 첫 번째 컨테이너가 반환된다 (현재 하나 뿐임) • 실제 기기에서 테스트 할것 • 성공할 경우 다음과 같은 메시지가 나타남(아이클라우드용 저 장소) • iCloud access at file://localhost/private/var/mobile/Library/ Mobile%20Documents/ 8SUWC89YUK~com~profpark~iCloudTest/
  • 30. Lab 1 • iCloud 앱을 위한 프로비저닝 프로파일을 만 들고 single view application을 만들어서 iCloud 기능을 테스트한다 • 시뮬레이터에서는 안됨, 디바이스에서 테스트 • 소스 : 페북 그룹
  • 31. Lab 2 • iCloud를 이용한 간단한 문서관리 프로그램 • Raywenderich 블로그의 튜토리얼 자료
  • 32. iCloud API • UIDocument • iCloud 문서작업을 위한 클래스 • NSFileManager, NSFilePresenter등의 복잡한 파 일처리 클래스의 역할을 대체함 • 자기자신과 실제 데이터사이의 미들웨어로 동작함 • 문서 콘텐츠를 포장(wrapping)하는 기능을 통해 iCloud와 연결
  • 33. iCloud API • UIDocument • 다큐먼트의 데이터를 관리하기 위한 추상 베이스 클래스 • 백그라운드 큐에 비동기 방식으로 데이터를 읽고 쓸 수 있 음 • 읽기, 쓰기 연산이 이루어지는 동안에도 어플리케이션은 멈추거나 버벅거리지 않음 • 클라우드 서비스와 결합되어 자동으로 문서를 읽고 쓰는 작업을 코디네이트함 • 데이터의 안전한 저장을 보장
  • 34. iCloud API • UIDocument • M-V-C 디자인 패턴 모델에서 UIDocument 객체 는 모델 객체 또는 모델-컨트롤러 객체에 해당함 • 도큐먼트 기반 어플리케이션은 반드시 그 도큐먼 트를 위해서는 UIDocument를 서브클래스하여 야 한다. • UIDocument 아키텍쳐내의 주요속성으로 파일 URL이 있다.
  • 35. iCloud API • iCloud에 저장된 문서 열기 • 백그라운드 큐에 read 메시지를 유발하게 됨 • 그 시간동안 앱은 블러킹되지 않기 때문에 UI와 같은 작업을 수행할 수 있다 • 파일 읽기가 끝나면 읽기 동작에 의해 반환된 데이터는 자유롭게 로 딩할 수 있다. • loadFromContents:ofType:error:메소드를 오버라이딩하는 방법이 있다.
  • 37. UIDocuments • 파일을 오픈하면 두 개의 콜백을 받는다 • 데이터 읽기가 끝났을때 UIDocument 서브 클래스 안에서 받는다 • 열기 동작이 완전히 끝났을 때 받는다 • 쓰기동작도 비슷한데 이중 큐를 이용함 • 파일을 열때 NSData 인스턴스를 파싱해야 함 • 파일을 쓸 경우 다큐먼트 데이터를 NSData 형식으 로 변한시켜야 함(백그라운드 큐를 이용)
  • 38. 도큐먼트 저장하기 • UIDocument에 있는 수동저장, 자동저장 메소 드 • 수동으로 저장할 때 사용하는 메소드 • completion 핸들러가 저장이 완료된 후에 호출된다
  • 39. UIDocument 서브클래싱 • Note라는 UIDocument 하위 클래스를 통해 노트 어플을 만들어보자 • loadFromContents: ofType: error: 와 contentsForType: error: 메소드를 만들자 • 이 메소드는 애플리케이션이 파일 시스템으 로부터 데이터를 읽으려 할 경우 호출됨
  • 41. iCloud File 열기 • AppDelegate수정
  • 42. loadDocument • Query 객체를 통해 메타데이터 추출 • 메타데이터의 스코프는 NSMetadataQueryUbiquitousDocumentsScope • NSPredicate • 페치 또는 메모리상의 필터링을 위한 검색시 제약을 주기 위해서 • Query의 파라메터로 Predicate을 준다 •
  • 43. NSPredicate • 인메모리의 내용이나 페치할 내용에 대하여 constraint(제약사항)을 정의하는 클래스이다 • 단순 비교, 검색, 논리연산등과 같은 관계를 정의한다 • 메타데이터에 있는 콘텐츠를 가져올때 일정한 조건을 부여하여 가져오도록 한다 • 효과적인 조건제어를 위해서 사용한다
  • 44. NSPredicate • 다양한 질의를 통해서 메모리상의 내용을 페치하는 것 이 가능하다 • iCloud 컨테이너내의 문서객체를 페치할때 조건문으로 적당하다
  • 45. 메타데이터 • 파일명, 크기, 수정된 내용, 날짜, 수정된 디바이스등 의 정보들은 클라우드로 전송되고 이 전송된 정보 를 이용하여 다른 디바이스에 전송될지를 결정함 • 디바이스의 상태를 보고 전송여부를 결정한다 • 아이폰/아이패드등 디바이스의 밧데리 상태에 따라 전송여부를 결정 • 이를 통해 밧데리 최적화를 수행
  • 48. query • 질의를 실행한 후 멈추지 않을 경우, 어플리케 이션을 종료할때 까지 질의가 실행된다 • 클라우드 환경에서는 이러한 일이 자주 일 어난다 • 질의 결과를 처리하는 동안 발생 • disableUpdate와 stopQuery를 호출하여 중지시킴
  • 49. query
  • 50. NSMetadataItem • NSMetadataQuery는 NSMetadataItem 배열 을 wrap시킨 것으로 결과를 포함하고 있음 • key-value를 저장 • 각 파일에 대해 그 정보를 살펴보는 용도로 사 용 • 사전에 정의된 키를 가짐
  • 51. NSMetadataItem 키 • NSMetadataItemURLKey • NSMetadataItemFSNameKey • NSMetadataItemDisplayNameKey • NSMetadataItemIsUbiquitousKey • NSMetadataUbiquitousItemHasUnresolvedConflictsKey • NSMetadataUbiquitousItemIsDownloadedKey • NSMetadataUbiquitousItemIsDownloadingKey • NSMetadataUbiquitousItemIsUploadedKey • NSMetadataUbiquitousItemIsUploadingKey • NSMetadataUbiquitousItemPercentDownloadedKey • NSMetadataUbiquitousItemPercentUploadedKey
  • 52. iCloud에 저장하기 • 로컬 iCloud 디렉토리를 추출 • 그 디렉토리내에 다큐먼트 인스턴스 초기화 • saveToURL 메소드 호출 • 저장에 성공하면 openWithCompletionHandler를 호출함
  • 54. 여기까지 한 일 • iCloud를 사용하기 위한 Provisioning Profile을 받 고, 여러가지 셋업을 한 후 • UIDocument를 상속받은 Note객체를 만들고 • AppDelegate에서 Query 객체를 통해 메타데이터 추출한다음에 Predicate을 이용해서 검색시의 제약 도 주고 • Query를 처리하는 메소드를 알아보고 • Metadata 키를 활용하는 방법도 알아보았다
  • 56. 사용자 인터페이스 • iPad 용 사용자 인터페이스 만들기
  • 57. 테스트 • iOS 기기 2대에 앱을 실행시키고 한 앱에서 임의의 텍스트를 입력한다. • 두 기기가 동기화되는 것을 확인한다.
  • 59. 부록: NSData • NSData와 수정이 가능한 클래스인 NSMutableData는 데이터 오브젝터, 바이트 버퍼를 위한 객체지향 래퍼를 제공한다 • 데이터 오브젝트는 Foundation 객체의 행위 를 책임지는 단순한 할당 버퍼로서의 역할을 한다.
  • 60. UIDocument에서 제공하는 편리한 기능 • 충돌 다루기 및 에러 핸들링 • 앞서 다룬 문제와 같이 A라는 문서를 디바이스1, 디 바이스2에서 동시에 수정할 경우의 처리방법 • 두 버전을 보여주고 선택할 수 있다 • 두 버전을 머지하여 변경함 • 가장 최근 버전을 선택한다 • 등과 같은 방법을 선택할 수 있다 • 에러 핸들기 기법도 제공함
  • 61. 기타 • 클라우드 서비스에서는 예상치 못한 복잡한 상황들이 발생할 수 있다. • 로컬 저장소에 저장하는 방법(Programming) 에 비해서 매우 복잡할 수 밖에 없는 이유가 여기에 있다.
  • 63. 참조문헌 • Raywenderich 블로그 • http://www.raywenderlich.com/ko/25498/ios-5%EC %97%90%EC%84%9C-%EC%95%84%EC%9D%B4%ED %81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%EC%8B %9C%EC%9E%91%ED%95%98%EA%B8%B0-%ED%8C%8C %ED%8A%B8-1 • http://liveandventure.com/2012/11/22/icloud/ • 내가 iCloud를 안쓰는 이유 • http://alphawolf.tistory.com/306 • 내가 iCloud를 쓰는 이유