[iOS] 애플에서 제공하는 서비스 상태 페이지

작년에 해킹 크게 당했을 때 만들어진 페이지 같은데, 서비스 별로 현재 동작중인지 확인할 수 있는 페이지가 있었다.

테스트중에 기능이 잘 동작 안할때 급하게 확인하기 좋을 것 같다.

status

 

서비스 별 상태 페이지

https://www.apple.com/support/systemstatus/

 

개발 사이트 상태 페이지 

https://developer.apple.com/system-status/?utm_campaign=iOS_Dev_Weekly_Issue_104&utm_medium=email&utm_source=iOS%2BDev%2BWeekly

[iOS] WWDC 노트 – Advanced CloudKit

CloudKit 은 iCloud 서버에 접근하는 API 킷으로, 비동기적으로 동작한다 (모든 API가 콜백을 가지고 있다.)

CloudKit에 Operation 종류가 꽤 되는 모양인데, 아래 그림을 참조 삼아서 Operation을 선택해서 쓰면 될 것 같다.

1

NSOperation Tips


CloudKit을 설명하기 전에 NSOperation 팁을 좀 소개했었는데,

1. Dependencies를 이용하라는 내용

   Queue들 사이에서도 Dependency가 동작 한다.

2. Completion block

   Cloud kit은 fetchRecordsCompletionBlock으로 돌아온다.

3. Operation 큐는 우선순위가 있다.

2

 

Public DB VS Private DB


CloudeKit의 데이터베이스는 Public 과 Private 이 있는데, Private은 사용자들마다 할당이 되어있다.

3

4

Zone은 default와 custom zone이 있다. public date는 trade off가 있으니 잘 고려해서 쓰면 된다.

 

Delta Downloads


Delta Downloads는  offline 캐시 지원한다는 개념 같다.

Change token이 ios기기에 있는데, 최근에 다운로드 받은 시점을 기록 한다. 만약 맥에서 local 데이터가 바뀌면 custom zone에 기록되고 토큰을 체크해서 ios 기기에 보낸다.

5

이걸 지원하려면

1.로컬에서 바뀐걸 트래킹 하고 바뀐걸 서버에 보낸다. (resolve conflicts 정책도 필요)

2.서버에서 바뀐걸 fetch 한다. ( CKFetchRecordChangesOperation을 이용)

3.fetch 후 서버에 change token을 저장한다.

CKRecords


CloudKit은 로컬에서 바뀐걸 트래킹 하고 정말 바뀐 경우에만 보낸다.

업데이트 된 내용을 저장할 때 키를 이용하는 모양이다 (Save Policies – 3개)

6

3가지 키의 다른점은 서버를 락을 시킬것인지 아닌지, data를 얼마나 바꾸냐의 차이다.

saveAllKeys하면 데이터가 바뀌었든 아니든 상관없이 데이터를 전부 바꾼다

7

 

Handle Conflicts


로컬 데이터가 바뀌었는데 저장이 실패하면 CKErrorServerRecordChanged를 저장한다.

Error의 userInfo가 머지하는걸 도와줄거다.

8

Updates


Update 할때는 보통 CKRecordSaveIfServerUnchanged 타입을 사용할 거다.

Update할 때 서버가 unlocked된 저장을 하는 상황은 아래 경우를 예로 들 수 있다.

1.경쟁이 많은 (자주 바뀌는 내용을 뜻하는 것 같다.) 업데이트일 경우

2.로컬 데이터를 강제로 서버로 업데이트 할 경우 (사용자가 선택)

CKRecords는 서버의 모든 내용을 포함할 필요가 없다.

desiredKeys property가 필요한 부분에 대한 정보를 가지고 있을거라고 약속된 듯 한데, 그걸 이용하면 일부만 업데이트 시킬 수 있다.

Push Notification


푸쉬는 기기로 전달이 되었다는 것을 보장 못한다.

서버가 air plane 모드면 푸쉬를 저장하긴 하는데 가장 최신 마지막만 저장한다.

9

위 그림을 참고하면 Zone update를 할 때, APS 서버는 zone 업데이트를 저장한다. 하지만 이전의 subcription내용은 없어진다.

Notification Collection


위의 상황을 Cloud를 이용해서 Notification Collection에  zone update랑 subcription내용 다 저장해서 해결할 수 있다.

12

그리고 어느 메시지를 받았는지 시점을 Notification Collection에 기록을 한다.

우리가 신경써야 할 부분은 notification center 을 계속 주시하라는 것

에어 플레인 상태 말고도 네트워크가안좋던 여러 이유로 못받을 수 있다.

Public과 Private 데이터의  차이


10

일단 counting 할 때 차이가 있는데, Public 데이터는 앱 단위로, Private은 사용자 계정 단위로 Counting을 한다.

그리고 Public 데이터는 제한이 있다. 남용해서 사용자가 피해를 입지 않기를 원하기 때문에 그런 제한을 뒀다고 한다.

11

CloudKit은 records를 캐쉬를 하지 않는다.

 

참고 : https://developer.apple.com/videos/wwdc/2014/

[iOS] WWDC 노트 – Adopting Handoff on iOS and OS X

Hand off는 이번에 발표한 새 기능인데, PC랑 iOS기기 사이에 파일같은 데이터를 주고 받을 수 있게 된 기능으로 오매불망 기다리고 있었던 기능이다 :$

Hand off를 사용할 수 있는 환경이 되면, 밑의 그림처럼 왼쪽 밑에 표시가 나타난다.

1

혹은 홈버튼 두번눌렀을 때도 표시가 나타난다.

2

PC의 경우 메일아이콘 보면 오른쪽 밑에 표시가 있다.

3

NSUserActivity

NSUserActivity는 Handoff를 위한 객체로, 맥이랑 ios에서 같은 object를 쓴다.
이 객체 패키지를 보내면 알아서 기기에서 받아주고 보내고 한다.
그리고 네이티브 앱과 웹사이트 사이에도 이 객체를 주고 받을 수 있다. 웹사이트 보다가 좋은거 발견하면 기기로 휙 보낼수 있당

이제 NSDocument, UIDocument 같은 애들이 UserActivity를 가지고 있게 된다.

5

becomeCurrent 라는 delegate 메소드가 불리면 (스스로 부를수도 있지만 그럴 필요는 없다) 주변 기기에 알린다. 그럼 기기 밑에 handoff 표시가 뜬다.

6

근데 UIDocument는 자동으로 becomeCurrent를 부르지 않는다고 한다.

7

invalidate는 일할 것이 끝났다는 뜻. (기기들에 hand off표시가 사라지고 윈도우를 닫고 할거다.)
NSUserActivity는 userInfo Dictionary를 가지고 있다. userInfo 는 매번 비워진다고 한다.

userInfo는 아래같이 쓸 수 있다.

8

UserInfo에 대부분 넣을수 있는데 FileUrl은 좀 문제를 야기할수 있다고 해서, UserInfo는 최소의 정보를 담도록 하는게 좋다.(상태 같은거)

9

위는 정보 가져오는 예시 코드

같은 developer이 만든 앱끼리 activity를 교환 가능하다.

결국 팀 아이디가 같아야 한다는 건데, UIPaseBoard와 비슷한 경우라고 보면 될 거 같다.
참고 : https://byunsooblog.wordpress.com/2013/10/12/ios-uipasteboard-%EC%9D%B4%EC%8A%88-ios7/

앱들끼리 같은 actvity 타입일 필요가 없다. 밑에 예시를 보면 os x랑 ios랑 다른 타입이다.

10

케이스에 따라 delegate 메소드가 꽤 있는데, 불리는 타이밍은 시스템이 activity가 필요할때 부르는 메소드, 다른 기기에서 activity가 이어서 진행된다던가 할때 등이 있다고 한다.

웹페이지도 hand off 지원

web page url을 채우면 이어서 보여주는 듯 하다. (기기 -> 맥의 웹페이지 가능)

맥의 웹페이지 -> ios기기로 보여주려면 info.plist에서 도메인을 채우면 된다.

11

그리고 delegate 메소드를 구현하면 된다.

12

Continuation Streams

그리고 막판에 소개한 내용인데, 맥이랑 기기랑 이어서 보여주는 걸 스트리밍으로 지원할수 있다고 한다.

참고 :https://developer.apple.com/videos/wwdc/2014/