•build better apps with cloudkit dashboard · helping you build better apps all stages of app’s...

102
#WWDC17 © 2017 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple. Dave Browning, CloudKit Build Better Apps with CloudKit Dashboard Session 226 App Frameworks

Upload: others

Post on 25-Aug-2020

9 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

#WWDC17

© 2017 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple.

Dave Browning, CloudKit

•Build Better Apps with CloudKit Dashboard • Session 226

App Frameworks

Page 2: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Helping You Build Better Apps

Page 3: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Helping You Build Better Apps

All stages of app’s lifecycle

Page 4: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Helping You Build Better Apps

All stages of app’s lifecycle

Experiment with entire API

Page 5: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Helping You Build Better Apps

All stages of app’s lifecycle

Experiment with entire API

Visibility into all events

Page 6: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Helping You Build Better Apps

All stages of app’s lifecycle

Experiment with entire API

Visibility into all events

Understand aggregate behavior

Page 7: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Quick Conceptual Refresher

Page 8: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Quick Conceptual Refresher

Record

Record

Record

Page 9: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Quick Conceptual Refresher

Zone: Todos

Record

Record

Record

Page 10: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Database: Private

1 per user

Quick Conceptual Refresher

Zone: Todos

Record

Record

Record

Page 11: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Database: Private

1 per user

Quick Conceptual Refresher

Zone: Todos

Record

Record

Record

Page 12: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Database: Private

1 per user

Quick Conceptual Refresher

Zone: Todos

Record

Record

Record

Shared

1 per user

Page 13: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Database: Private

1 per user

Quick Conceptual Refresher

Zone: Todos

Record

Record

Record

Public

1

Shared

1 per user

Page 14: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Environment: Development Schema

Database: Private

1 per user

Quick Conceptual Refresher

Zone: Todos

Record

Record

Record

Public

1

Shared

1 per user

Page 15: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Environment: ProductionEnvironment: Development Schema

Database: Private

1 per user

Quick Conceptual Refresher

Zone: Todos

Record

Record

Record

Public

1

Shared

1 per user

Page 16: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Environment: ProductionEnvironment: Development Schema

Database: Private

1 per user

Quick Conceptual Refresher

Zone: Todos

Record

Record

Record

Public

1

Shared

1 per user

Page 17: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Container: iCloud.com.wwdc17.todos

Environment: ProductionEnvironment: Development Schema

Database: Private

1 per user

Quick Conceptual Refresher

Zone: Todos

Record

Record

Record

Public

1

Shared

1 per user

Page 18: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Example Todo List App Data model

Page 19: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Example Todo List App Data model

List

Page 20: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Example Todo List App Data model

List

Item Item …

Page 21: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Example Todo List App Data model

List

Item Item …

parent reference

Page 22: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Example Todo List App Data model

List

Item Item …

parent reference

Share

root record

Page 23: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Example Todo List App Data model

List

Item Item …

parent reference

What’s New with CloudKit WWDC16

Share

root record

Page 24: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Example Todo List App Fetch changes APIs

Page 25: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Example Todo List App Fetch changes APIs

CKDatabaseSubscription (private database) CKDatabaseSubscription (shared database)

Page 26: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Example Todo List App Fetch changes APIs

CKDatabaseSubscription (private database) CKDatabaseSubscription (shared database)

Upon push and app launch: 1. CKFetchDatabaseChangesOperation 2. CKFetchRecordZoneChangesOperation

Page 27: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Example Todo List App Fetch changes APIs

CKDatabaseSubscription (private database) CKDatabaseSubscription (shared database)

Upon push and app launch: 1. CKFetchDatabaseChangesOperation 2. CKFetchRecordZoneChangesOperation

CloudKit Best Practices WWDC16

Maintaining a Local Cache of CloudKit Records

Page 28: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

•Demo •Fetching changes in CloudKit Dashboard

Page 29: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events
Page 30: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

HTTP POST /database/1/iCloud.com.wwdc17.todos/development/private/records/modify

{ "operations": [ { "operationType": "update", "record": { "recordName": “C5304752-9819-48F3-B837…”, "recordType": “List”, …

Page 31: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

HTTP POST /database/1/iCloud.com.wwdc17.todos/development/private/records/modify

{ "operations": [ { "operationType": "update", "record": { "recordName": “C5304752-9819-48F3-B837…”, "recordType": “List”, …

let operation = CKModifyRecordsOperation( recordsToSave: [record], recordIDsToDelete: [] )

operation.modifyRecordsCompletionBlock = { (savedRecords, deletedRecordIDs, error) in … }

privateDB.add(operation)

Page 32: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events
Page 33: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

HTTP POST /database/1/iCloud.com.wwdc17.todos/Development/private/records/changes

{ "zoneID": { "zoneName": "Todos", "ownerRecordName": "_6c07d121939728c5c22a18487fb57b01" }, "syncToken": "AQAAAAAAAAAXf/////////+hzFL5eSRI0YcbNPNBUdxY", "resultsLimit": 200 }

Page 34: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

HTTP POST /database/1/iCloud.com.wwdc17.todos/Development/private/records/changes

{ "zoneID": { "zoneName": "Todos", "ownerRecordName": "_6c07d121939728c5c22a18487fb57b01" }, "syncToken": "AQAAAAAAAAAXf/////////+hzFL5eSRI0YcbNPNBUdxY", "resultsLimit": 200 }

let operation = CKFetchRecordZoneChangesOperation( recordZoneIDs: zoneIDs, optionsByRecordZoneID: optionsByRecordZoneID )

operation.recordChangedBlock = {…} operation.recordWithIDWasDeletedBlock = {…} operation.recordZoneChangeTokensUpdatedBlock = {…} operation.recordZoneFetchCompletionBlock = {…} operation.fetchRecordZoneChangesCompletionBlock = {…}

privateDB.add(operation)

Page 35: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

•Demo •Subscriptions & Push in CloudKit Dashboard

Page 36: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Log Event

Page 37: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Log Event Time

Page 38: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

iOS macOS tvOS watchOS web

Log Event Platform

Page 39: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

user record ID + name, if team member

Log Event User

Page 40: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

database push sharing

Log Event Type

Page 41: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Log Event Operation ID

Page 42: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Log Event Operation Group Name

Page 43: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Log Event Details

Page 44: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

record modify database changes zone changes record fetch …

Log Event Type of operation

Page 45: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

private public shared

Log Event Database

Page 46: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Log Event Zone

Page 47: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

does not include Internet latency

Log Event Server latency

Page 48: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Log Event Request size

Page 49: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Log Event Response size

Page 50: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

not a new iPhone 😉

Log Event Hardware

Page 51: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Log Event Operation group details

Page 52: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

A CKOperation may lead to multiple requests

Log Event Request ID

Page 53: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Log Event Errors

Page 54: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Log Event Type of error

Page 55: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Operation GroupsNEW

Page 56: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Initialization Operation Group

Operation GroupsNEW

Page 57: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Initialization Operation Group

Operation Groups

CKModifyZoneOperation

NEW

Page 58: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Initialization Operation Group

Operation Groups

CKModifyZoneOperation

CKModifySubscriptionsOperation

NEW

Page 59: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Initialization Operation Group

Operation Groups

CKModifyZoneOperation

CKModifySubscriptionsOperation

CKFetchDatabaseChangesOperation

NEW

Page 60: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Initialization Operation Group

Operation Groups

CKModifyZoneOperation

CKModifySubscriptionsOperation

CKFetchDatabaseChangesOperation

CKFetchDatabaseChangesOperation

. . .

NEW

Page 61: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Operation GroupsNEW

Page 62: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Operation Groups

AutomatedBackup ManualBackup Restore

NEW

Page 63: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Operation Groups

AutomatedBackup ManualBackup Restore

SettingUpLibrary ThumbnailsDownload FetchingMovieStream

NEW

Page 64: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Operation Groups

AutomatedBackup ManualBackup Restore

SettingUpLibrary ThumbnailsDownload FetchingMovieStream

Sync down (initial) Sync down (push triggered) Download (user initiated)

NEW

Page 65: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

open class CKOperationGroup : NSObject, NSSecureCoding {

open var operationGroupID: String { get }

@NSCopying open var defaultConfiguration: CKOperationConfiguration?

open var name: String? open var quantity: Int

open var expectedSendSize: CKOperationGroupTransferSize open var expectedReceiveSize: CKOperationGroupTransferSize

}

open class CKOperation : Operation { open var group: CKOperationGroup? }

Page 66: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

open class CKOperationGroup : NSObject, NSSecureCoding {

open var operationGroupID: String { get }

@NSCopying open var defaultConfiguration: CKOperationConfiguration?

open var name: String? open var quantity: Int

open var expectedSendSize: CKOperationGroupTransferSize open var expectedReceiveSize: CKOperationGroupTransferSize

}

open class CKOperation : Operation { open var group: CKOperationGroup? }

Page 67: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

open class CKOperationGroup : NSObject, NSSecureCoding {

open var operationGroupID: String { get }

@NSCopying open var defaultConfiguration: CKOperationConfiguration?

open var name: String? open var quantity: Int

open var expectedSendSize: CKOperationGroupTransferSize open var expectedReceiveSize: CKOperationGroupTransferSize

}

open class CKOperation : Operation { open var group: CKOperationGroup? }

Page 68: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

open class CKOperationGroup : NSObject, NSSecureCoding {

open var operationGroupID: String { get }

@NSCopying open var defaultConfiguration: CKOperationConfiguration?

open var name: String? open var quantity: Int

open var expectedSendSize: CKOperationGroupTransferSize open var expectedReceiveSize: CKOperationGroupTransferSize

}

open class CKOperation : Operation { open var group: CKOperationGroup? }

Page 69: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

open class CKOperationGroup : NSObject, NSSecureCoding {

open var operationGroupID: String { get }

@NSCopying open var defaultConfiguration: CKOperationConfiguration?

open var name: String? open var quantity: Int

open var expectedSendSize: CKOperationGroupTransferSize open var expectedReceiveSize: CKOperationGroupTransferSize

}

open class CKOperation : Operation { open var group: CKOperationGroup? }

Page 70: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

open class CKOperationGroup : NSObject, NSSecureCoding {

open var operationGroupID: String { get }

@NSCopying open var defaultConfiguration: CKOperationConfiguration?

open var name: String? open var quantity: Int

open var expectedSendSize: CKOperationGroupTransferSize open var expectedReceiveSize: CKOperationGroupTransferSize

}

open class CKOperation : Operation { open var group: CKOperationGroup? }

Page 71: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

open class CKOperationGroup : NSObject, NSSecureCoding {

open var operationGroupID: String { get }

@NSCopying open var defaultConfiguration: CKOperationConfiguration?

open var name: String? open var quantity: Int

open var expectedSendSize: CKOperationGroupTransferSize open var expectedReceiveSize: CKOperationGroupTransferSize

}

open class CKOperation : Operation { open var group: CKOperationGroup? }

Page 72: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

open class CKOperationGroup : NSObject, NSSecureCoding {

open var operationGroupID: String { get }

@NSCopying open var defaultConfiguration: CKOperationConfiguration?

open var name: String? open var quantity: Int

open var expectedSendSize: CKOperationGroupTransferSize open var expectedReceiveSize: CKOperationGroupTransferSize

}

open class CKOperation : Operation { open var group: CKOperationGroup? }

public enum CKOperationGroupTransferSize : Int {

case unknown case kilobytes case megabytes case tensOfMegabytes …}

Page 73: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

open class CKOperationGroup : NSObject, NSSecureCoding {

open var operationGroupID: String { get }

@NSCopying open var defaultConfiguration: CKOperationConfiguration?

open var name: String? open var quantity: Int

open var expectedSendSize: CKOperationGroupTransferSize open var expectedReceiveSize: CKOperationGroupTransferSize

}

open class CKOperation : Operation { open var group: CKOperationGroup? }

Page 74: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

open class CKOperationGroup : NSObject, NSSecureCoding {

open var operationGroupID: String { get }

@NSCopying open var defaultConfiguration: CKOperationConfiguration?

open var name: String? open var quantity: Int

open var expectedSendSize: CKOperationGroupTransferSize open var expectedReceiveSize: CKOperationGroupTransferSize

}

open class CKOperation : Operation { open var group: CKOperationGroup? }

Page 75: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

open class CKOperationConfiguration : NSObject {

open var container: CKContainer?

open var qualityOfService: QualityOfService open var allowsCellularAccess: Bool open var isLongLived: Bool

open var timeoutIntervalForRequest: TimeInterval open var timeoutIntervalForResource: TimeInterval

}

Page 76: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

open class CKOperationConfiguration : NSObject {

open var container: CKContainer?

open var qualityOfService: QualityOfService open var allowsCellularAccess: Bool open var isLongLived: Bool

open var timeoutIntervalForRequest: TimeInterval open var timeoutIntervalForResource: TimeInterval

}

Page 77: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

CKOperationConfiguration

Page 78: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

CKOperation

CKOperationConfiguration

Page 79: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

CKOperationGroup

CKOperation

CKOperationConfiguration

Page 80: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

CKOperation

CKOperation

CKOperationCKOperationGroup

CKOperation

CKOperationConfiguration

Page 81: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Log Event Operation group

Page 82: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Log Event Operation group → Operation

Page 83: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Log Event Operation group → Operation → Request

Page 84: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Privacy

Page 85: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Privacy

Your iCloud account Everyone else’s account

Page 86: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Privacy

Your iCloud account Everyone else’s account

private & shared data private & shared data

Page 87: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Privacy

Your iCloud account Everyone else’s account

private & shared data private & shared data

public data public data

Page 88: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Privacy

Your iCloud account Everyone else’s account

private & shared data private & shared data

public data public data

log events log events

Page 89: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Privacy

Your iCloud account Everyone else’s account

private & shared data private & shared data

Log events do not include data

public data public data

log events log events

Page 90: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Sharing

Page 91: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Sharing

List

Item Item …

parent reference

Share

root record

Page 92: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

•Demo •Sharing in CloudKit Dashboard

Page 93: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Telemetry Monitoring for changes

Page 94: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Telemetry Detecting errors

New CKError documentation

Page 95: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Telemetry Verifying pushes

Page 96: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Summary

Page 97: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Summary

New CloudKit Dashboard

Page 98: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Summary

New CloudKit Dashboard

New CKOperationGroup API

Page 99: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Summary

New CloudKit Dashboard

New CKOperationGroup API

Send us your feedback!

Page 100: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

More Informationhttps://developer.apple.com/wwdc17/226

[email protected]

Page 101: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events

Labs

CloudKit & iCloud Lab Technology Lab I Tue 4:10PM-6:00PM

CloudKit & iCloud Lab Technology Lab C Thur 11:00AM-1:00PM

Page 102: •Build Better Apps with CloudKit Dashboard · Helping You Build Better Apps All stages of app’s lifecycle Experiment with entire API Visibility into all events