Introducing CloudKit. A how-to guide for icloud for your Apps. Frameworks #WWDC14. Session 208 Olivier Bonnet CloudKit Client Software

Size: px
Start display at page:

Download "Introducing CloudKit. A how-to guide for icloud for your Apps. Frameworks #WWDC14. Session 208 Olivier Bonnet CloudKit Client Software"

Transcription

1 Frameworks #WWDC14 Introducing CloudKit A how-to guide for icloud for your Apps Session 208 Olivier Bonnet CloudKit Client Software 2014 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple.

2 Introduction? Mystery icloud Drive icloud Photo Library icloud CoreData

3 Introduction CloudKit icloud Drive icloud Photo Library icloud CoreData

4 Overview

5 Overview What is CloudKit

6 Overview What is CloudKit Enabling CloudKit in your application

7 Overview What is CloudKit Enabling CloudKit in your application Introduction to the API

8 Overview What is CloudKit Enabling CloudKit in your application Introduction to the API User Accounts

9 Overview What is CloudKit Enabling CloudKit in your application Introduction to the API User Accounts When to use CloudKit

10 What is CloudKit?

11 What is CloudKit? Access to icloud servers

12 What is CloudKit? Access to icloud servers Supported on OS X and ios

13 What is CloudKit? Access to icloud servers Supported on OS X and ios Uses icloud accounts

14 What is CloudKit? Access to icloud servers Supported on OS X and ios Uses icloud accounts Public and private databases

15 What is CloudKit? Access to icloud servers Supported on OS X and ios Uses icloud accounts Public and private databases Structured and bulk data

16 What is CloudKit? Access to icloud servers Supported on OS X and ios Uses icloud accounts Public and private databases Structured and bulk data Transport, not local persistence

17 Enabling CloudKit in Your Application

18 Enabling CloudKit in Your Application Navigate to your application s Capabilities pane

19 Enabling CloudKit in Your Application Enable icloud

20 Enabling CloudKit in Your Application Enable CloudKit

21 Introducing CloudKit API! Paul Seligman CloudKit Client Software

22 Fundamental CloudKit Objects

23 Fundamental CloudKit Objects

24 Fundamental CloudKit Objects Containers

25 Fundamental CloudKit Objects Containers Databases

26 Fundamental CloudKit Objects Containers Databases Records

27 Fundamental CloudKit Objects Containers Databases Records Record Zones

28 Fundamental CloudKit Objects Containers Databases Records Record Zones Record Identifiers

29 Fundamental CloudKit Objects Containers Databases Records Record Zones Record Identifiers References

30 Fundamental CloudKit Objects Containers Databases Records Record Zones Record Identifiers References Assets

31 Fundamental CloudKit Objects Containers Databases Records Record Zones Record Identifiers References Assets

32 Containers

33 Containers

34 Containers

35 Containers CKContainer

36 Containers CKContainer One container per app

37 Containers CKContainer One container per app Data segregation

38 Containers CKContainer One container per app Data segregation User encapsulation

39 Containers CKContainer One container per app Data segregation User encapsulation Managed by the developer

40 Containers CKContainer One container per app Data segregation User encapsulation Managed by the developer Managed via WWDR portal

41 Containers CKContainer One container per app Data segregation User encapsulation Managed by the developer Managed via WWDR portal Unique across all developers

42 Containers CKContainer One container per app Data segregation User encapsulation Managed by the developer Managed via WWDR portal Unique across all developers Can be shared between apps

43 Fundamental CloudKit Objects Containers Databases Records Record Zones Record Identifiers References Assets

44 Databases

45 Databases CloudKit Container Public Database Private Private Private Private Private Private Private Private Private

46 Databases CloudKit Container Public Database Private Database

47 Databases

48 Databases CKDatabase

49 Databases CKDatabase Every app has access to two databases

50 Databases CKDatabase Every app has access to two databases Public Database

51 Databases CKDatabase Every app has access to two databases Public Database Private Database

52 Databases CKDatabase Every app has access to two databases Public Database Private Database CKDatabase *publicdatabase = [[CKContainer defaultcontainer] publicclouddatabase];! CKDatabase *privatedatabase = [[CKContainer defaultcontainer] privateclouddatabase];

53 Databases Public Database Private Database

54 Databases Public Database Private Database Data Type Shared Data Current User s Data

55 Databases Public Database Private Database Data Type Shared Data Current User s Data Account Required for Writing Required

56 Databases Public Database Private Database Data Type Shared Data Current User s Data Account Required for Writing Required Quota Developer User

57 Databases Public Database Private Database Data Type Shared Data Current User s Data Account Required for Writing Required Quota Developer User Default Permissions World Readable User Readable

58 Databases Public Database Private Database Data Type Shared Data Current User s Data Account Required for Writing Required Quota Developer User Default Permissions World Readable User Readable Editing Permissions icloud Dashboard Roles N/A

59 Fundamental CloudKit Objects Containers Databases Records Record Zones Record Identifiers References Assets

60 Records CloudKit Container Public Database Private Database

61 Records Public Database Record Record Record Record Record Record

62 Records

63 Records CKRecord

64 Records CKRecord Structured Data

65 Records CKRecord Structured Data Wraps key/value pairs

66 Records CKRecord Structured Data Wraps key/value pairs Record Type

67 Records CKRecord Structured Data Wraps key/value pairs Record Type Just-in-time schema

68 Records CKRecord Structured Data Wraps key/value pairs Record Type Just-in-time schema Metadata

69 Records Record Values

70 Records Record Values NSString NSNumber NSData NSDate

71 Records Record Values NSString NSNumber NSData NSDate CLLocation

72 Records Record Values NSString NSNumber NSData NSDate CLLocation CKReference CKAsset

73 Records Record Values NSString NSNumber NSData NSDate CLLocation CKReference CKAsset Arrays of the above

74 Records

75 CKRecord : NSObject <NSSecureCoding, NSCopying>

76 CKRecord : NSObject <NSSecureCoding, NSCopying> - (instancetype)initwithrecordtype:(nsstring *)recordtype;

77 CKRecord : NSObject <NSSecureCoding, NSCopying> - (instancetype)initwithrecordtype:(nsstring *)recordtype; - (id)objectforkey:(nsstring *)key; - (void)setobject:(id <CKRecordValue>)object forkey:(nsstring *)key;

78 CKRecord : NSObject <NSSecureCoding, NSCopying> - (instancetype)initwithrecordtype:(nsstring *)recordtype; - (id)objectforkey:(nsstring *)key; - (void)setobject:(id <CKRecordValue>)object forkey:(nsstring *)key; - (id)objectforkeyedsubscript:(nsstring *)key; - (void)setobject:(id <CKRecordValue>)object forkeyedsubscript:(nsstring *)key;

79 CKRecord : NSObject <NSSecureCoding, NSCopying> - (instancetype)initwithrecordtype:(nsstring *)recordtype; - (id)objectforkey:(nsstring *)key; - (void)setobject:(id <CKRecordValue>)object forkey:(nsstring *)key; - (id)objectforkeyedsubscript:(nsstring *)key; - (void)setobject:(id <CKRecordValue>)object forkeyedsubscript:(nsstring *)key; - (NSArray /* NSString */ *)allkeys;

80 Records

81 Records CKRecord *party = [[CKRecord alloc] initwithrecordtype:@ Party ];

82 Records CKRecord *party = [[CKRecord alloc] initwithrecordtype:@ Party ]; // setting values [party setobject:@"post Presentation Beers" forkey:@"summary"];! NSDate *startdate = [NSDate datewithtimeintervalsincenow:30.0 * 60.0]; party[@"start"] = startdate;

83 Records CKRecord *party = [[CKRecord alloc] initwithrecordtype:@ Party ]; // setting values [party setobject:@"post Presentation Beers" forkey:@"summary"];! NSDate *startdate = [NSDate datewithtimeintervalsincenow:30.0 * 60.0]; party[@"start"] = startdate; // accessing values NSString *summary = [party objectforkey:@"summary"];! NSDate *startdate = party[@"start"];

84 Fundamental CloudKit Objects Containers Databases Records Record Zones Record Identifiers References Assets

85 Record Zones Database Record

86 Record Zones Database Record Zone Record

87 Record Zones Database Record Zone Record Record Record Record Record Record Record

88 Record Zones Database Default Zone Custom Zone Record Record Record Record Record Record Record Record Record Record Record Record

89 Fundamental CloudKit Objects Containers Databases Records Record Zones Record Identifiers References Assets

90 Record Identifiers

91 Record CKRecordID : NSObject <NSSecureCoding, (nonatomic, readonly, strong) NSString (nonatomic, readonly, strong) CKRecordZoneID

92 Record CKRecordID : NSObject <NSSecureCoding, (nonatomic, readonly, strong) NSString (nonatomic, readonly, strong) CKRecordZoneID Created by the client

93 Record CKRecordID : NSObject <NSSecureCoding, (nonatomic, readonly, strong) NSString (nonatomic, readonly, strong) CKRecordZoneID Created by the client Fully normalized: they represent the location of the record

94 Record CKRecordID : NSObject <NSSecureCoding, (nonatomic, readonly, strong) NSString (nonatomic, readonly, strong) CKRecordZoneID Created by the client Fully normalized: they represent the location of the record External data set foreign key

95 Record Identifiers

96 Record Identifiers CKRecord *party = [[CKRecord alloc] initwithrecordtype:@ Party ];

97 Record Identifiers CKRecord *party = [[CKRecord alloc] initwithrecordtype:@ Party CKRecord : NSObject <NSSecureCoding, NSCopying>... - (instancetype)initwithrecordtype:(nsstring *)recordtype; - (instancetype)initwithrecordtype:(nsstring *)recordtype recordid:(ckrecordid

98 Record Identifiers CKRecord *party = [[CKRecord alloc] initwithrecordtype:@ Party CKRecord : NSObject <NSSecureCoding, NSCopying>... - (instancetype)initwithrecordtype:(nsstring *)recordtype; - (instancetype)initwithrecordtype:(nsstring *)recordtype recordid:(ckrecordid CKRecordID *wellknownid = [[CKRecordID alloc] initwithrecordname:@"wellknownparty"]; CKRecord *party = [[CKRecord alloc] initwithrecordtype:@"party" recordid:wellknownid];

99 Fundamental CloudKit Objects Containers Databases Records Record Zones Record Identifiers References Assets

100 References Public Database Party Clown Party Clown Clown

101 References Public Database Party Clown Party Clown Clown

102 References

103 References CKReference

104 References CKReference Server Understands Relationship

105 References CKReference Server Understands Relationship Cascade Deletes

106 References CKReference Server Understands Relationship Cascade Deletes Dangling Pointers

107 References CKReference Server Understands Relationship Cascade Deletes Dangling Pointers Back References

108 References

109 References CKRecord *clown = [[CKRecord alloc] initwithrecordtype:@ Clown ];

110 References CKRecord *clown = [[CKRecord alloc] initwithrecordtype:@ Clown ]; CKRecord *party = [[CKRecord alloc] initwithrecordtype:@ Party ]; CKReference *partyreference = [[CKReference alloc] initwithrecord:party action:ckreferenceactionnone]; clown[@"party"] = partyreference;

111 References CKRecord *clown = [[CKRecord alloc] initwithrecordtype:@ Clown ]; CKRecord *party = [[CKRecord alloc] initwithrecordtype:@ Party ]; CKReference *partyreference = [[CKReference alloc] initwithrecord:party action:ckreferenceactionnone]; clown[@"party"] = partyreference; CKRecordID *wellknownid = [[CKRecordID alloc] initwithrecordname:@"wellknownparty"]; CKReference *wellknownreference = [[CKReference alloc] initwithrecordid:wellknownid action:ckreferenceactionnone]; clown[@"party"] = wellknownreference;

112 Fundamental CloudKit Objects Containers Databases Records Record Zones Record Identifiers References Assets

113 Assets Public Database Record Record Record Record Record Record

114 Assets Container Public Database Record Post Presentation Record Get Together

115 Assets Container Public Database Bulk Storage Record Post Record Presentation Get Together

116 Assets Container Public Database Bulk Storage Record PPGT Record CKRecord CKAsset

117 Assets Container Public Database Bulk Storage Record Record PPGT

118 Assets

119 Assets CKAsset

120 Assets CKAsset Large, unstructured data

121 Assets CKAsset Large, unstructured data Files on disk

122 Assets CKAsset Large, unstructured data Files on disk Owned by CKRecords

123 Assets CKAsset Large, unstructured data Files on disk Owned by CKRecords Garbage collected

124 Assets CKAsset Large, unstructured data Files on disk Owned by CKRecords Garbage collected Efficient uploads and downloads

125 Assets

126 Assets! NSURL *screenplayurl = [NSURL fileurlwithpath:@... ]; CKAsset *screenplay = [[CKAsset alloc] initwithfileurl:screenplayurl];

127 Assets NSURL *screenplayurl = [NSURL fileurlwithpath:@... ];! CKAsset *screenplay = [[CKAsset alloc] initwithfileurl:screenplayurl]; CKRecord *party = [[CKRecord alloc] initwithrecordtype:@ Party ]; party[@"screenplay"] = screenplay;

128 Fundamental CloudKit Objects Containers Databases Records Record Zones Record Identifiers References Assets

129 CloudKit's Convenience API

130 Convenience API

131 Convenience API Saving a record

132 Convenience API Saving a record Fetching a record

133 Convenience API Saving a record Fetching a record Saving modified record

134 Convenience API Saving a record Fetching a record Saving modified record

135 Saving a Record

136 Saving a Record CKRecordID *wellknownid = [[CKRecordID alloc] initwithrecordname:@"wellknownparty"]; CKRecord *party = [[CKRecord alloc] initwithrecordtype:@"party" recordid:wellknownid];

137 Saving a Record CKRecordID *wellknownid = [[CKRecordID alloc] initwithrecordname:@"wellknownparty"]; CKRecord *party = [[CKRecord alloc] initwithrecordtype:@"party" recordid:wellknownid]; CKDatabase *publicdatabase = [[CKContainer defaultcontainer] publicclouddatabase];

138 Saving a Record CKRecordID *wellknownid = [[CKRecordID alloc] initwithrecordname:@"wellknownparty"]; CKRecord *party = [[CKRecord alloc] initwithrecordtype:@"party" recordid:wellknownid]; CKDatabase *publicdatabase = [[CKContainer defaultcontainer] publicclouddatabase];! [publicdatabase saverecord:party completionhandler:^(ckrecord *savedparty, NSError *error) { }]; // appropriate error handling when (error!= nil)

139 Convenience API Saving a record Fetching a record Saving modified record

140 Fetching a Record

141 Fetching a Record CKContainer *defaultcontainer =[CKContainer defaultcontainer]; CKDatabase *publicdatabase = [defaultcontainer publicclouddatabase];

142 Fetching a Record CKContainer *defaultcontainer =[CKContainer defaultcontainer]; CKDatabase *publicdatabase = [defaultcontainer publicclouddatabase]; CKRecordID *wellknownid = [[CKRecordID alloc] initwithrecordname:@"wellknownparty"];

143 Fetching a Record CKContainer *defaultcontainer =[CKContainer defaultcontainer]; CKDatabase *publicdatabase = [defaultcontainer publicclouddatabase]; CKRecordID *wellknownid = [[CKRecordID alloc] initwithrecordname:@"wellknownparty"]; [publicdatabase fetchrecordwithid:wellknownid completionhandler:^(ckrecord *fetchedparty, NSError *error) {! }]; // truly marvelous error handling when (error!= nil)

144 Convenience API Saving a record Fetching a record Saving modified record

145 Saving Modified Record

146 Saving Modified Record CKDatabase *publicdatabase =...; CKRecordID *wellknownid =...; [publicdatabase fetchrecordwithid:wellknownid completionhandler:^(ckrecord *fetchedparty, NSError *error) { if (error) {... } else {

147 Saving Modified Record CKDatabase *publicdatabase =...; CKRecordID *wellknownid =...; [publicdatabase fetchrecordwithid:wellknownid completionhandler:^(ckrecord *fetchedparty, NSError *error) { if (error) {... } else { NSDate *enddate = fetchedparty[@"end"]; fetchedparty[@"end"] = [enddate datebyaddingtimeinterval:30.0 * 60.0];

148 Saving Modified Record CKDatabase *publicdatabase =...; CKRecordID *wellknownid =...; [publicdatabase fetchrecordwithid:wellknownid completionhandler:^(ckrecord *fetchedparty, NSError *error) { if (error) {... } else { NSDate *enddate = fetchedparty[@"end"]; fetchedparty[@"end"] = [enddate datebyaddingtimeinterval:30.0 * 60.0]; [publicdatabase saverecord:fetchedparty completionhandler:^(ckrecord *savedparty, NSError *saveerror) {! }]; } }]; // error handling to make your mother proud when (error!= nil)

149 Convenience API Saving a record Fetching a record Saving modified record

150 Big Data, Tiny Phone

151 Big Data, Tiny Phone

152 Big Data, Tiny Phone Keep your large data in the cloud

153 Big Data, Tiny Phone Keep your large data in the cloud Client views slice of that data

154 Big Data, Tiny Phone Keep your large data in the cloud Client views slice of that data Client view can change

155 Big Data, Tiny Phone Keep your large data in the cloud Client views slice of that data Client view can change Clients use queries to focus their viewpoint

156 Queries

157 Queries CKQuery

158 Queries CKQuery Combine a RecordType, a NSPredicate, and NSSortDescriptors

159 Queries CKQuery Combine a RecordType, a NSPredicate, and NSSortDescriptors CloudKit supports a subset of NSPredicate

160 Queries Predicates

161 Queries Predicates [NSPredicate = partyname];

162 Queries Predicates [NSPredicate = partyname]; [NSPredicate = dynamickey, value];

163 Queries Predicates [NSPredicate = partyname]; [NSPredicate = dynamickey, value]; [NSPredicate > [NSDate date]];

164 Queries Predicates [NSPredicate = partyname]; [NSPredicate = dynamickey, value]; [NSPredicate > [NSDate date]]; CLLocation *location = [[CLLocation alloc] initwithlatitude: longitude: ]; [NSPredicate predicatewithformat:@"distancetolocation:fromlocation:(location, %@) < 100", location];

165 Queries Predicates [NSPredicate = partyname]; [NSPredicate = dynamickey, value]; [NSPredicate > [NSDate date]]; CLLocation *location = [[CLLocation alloc] initwithlatitude: longitude: ]; [NSPredicate predicatewithformat:@"distancetolocation:fromlocation:(location, %@) < 100", location]; [NSPredicate predicatewithformat:@"all tokenize(%@, 'Cdl') IN session"];

166 Queries Predicates [NSPredicate = partyname]; [NSPredicate = dynamickey, value]; [NSPredicate > [NSDate date]]; CLLocation *location = [[CLLocation alloc] initwithlatitude: longitude: ]; [NSPredicate predicatewithformat:@"distancetolocation:fromlocation:(location, %@) < 100", location]; [NSPredicate predicatewithformat:@"all tokenize(%@, 'Cdl') IN session"]; [NSPredicate predicatewithformat:@"name = %@ AND startdate > %@", partyname, [NSDate date]];

167 Queries Creating NSPredicate *predicate = [NSPredicate > %@", [NSDate date]];! CKQuery *query = [[CKQuery alloc] initwithrecordtype:@"party" predicate:predicate];

168 Queries Performing

169 Queries Performing CKQuery *query =...;! [[publicdatabase performquery:query inzonewithid:nil completionhandler:^(nsarray *results, NSError *error) {

170 Queries Performing CKQuery *query =...;! [[publicdatabase performquery:query inzonewithid:nil completionhandler:^(nsarray *results, NSError *error) {! }]; // astounding error handling when (error!= nil) if (!error) { NSLog(@"Fetch %ld results", (long)[results count]); for (CKRecord *record in results) { NSLog(@"Found matching party %@", record); } }

171 Big Data, Tiny Phone

172 Big Data, Tiny Phone Queries are polls

173 Big Data, Tiny Phone Queries are polls Great for slicing through large server data

174 Big Data, Tiny Phone Queries are polls Great for slicing through large server data Bad for large, mostly static data set

175 Big Data, Tiny Phone Queries are polls Great for slicing through large server data Bad for large, mostly static data set Battery life

176 Big Data, Tiny Phone Queries are polls Great for slicing through large server data Bad for large, mostly static data set Battery life Networking traffic

177 Big Data, Tiny Phone Queries are polls Great for slicing through large server data Bad for large, mostly static data set Battery life Networking traffic User experience

178 Big Data, Tiny Phone Queries are polls Great for slicing through large server data Bad for large, mostly static data set Battery life Networking traffic User experience What you want is the server running your query

179 Big Data, Tiny Phone Queries are polls Great for slicing through large server data Bad for large, mostly static data set Battery life Networking traffic User experience What you want is the server running your query... in the background

180 Big Data, Tiny Phone Queries are polls Great for slicing through large server data Bad for large, mostly static data set Battery life Networking traffic User experience What you want is the server running your query... in the background... after every record save

181 Big Data, Tiny Phone Queries are polls Great for slicing through large server data Bad for large, mostly static data set Battery life Networking traffic User experience What you want is the server running your query... in the background... after every record save... and you want push

182 Subscriptions

183 Subscriptions CKSubscription

184 Subscriptions CKSubscription Combine a RecordType, a NSPredicate, and Push

185 Subscriptions CKSubscription Combine a RecordType, a NSPredicate, and Push Push via Apple Push Service

186 Subscriptions CKSubscription Combine a RecordType, a NSPredicate, and Push Push via Apple Push Service Augmented payload

187 Subscriptions New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!"

188 Subscriptions New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!"

189 Subscriptions New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!"

190 Subscriptions New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" Party Tonight E31970FB

191 Subscriptions New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" Party Tonight E31970FB

192 Subscriptions New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" Party Tonight E31970FB

193 Subscriptions New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" Party Tonight E31970FB

194 Subscriptions New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" Party Tonight E31970FB

195 Subscriptions New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" Party Tonight E31970FB

196 Subscriptions New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" Party Time! Party Tonight E31970FB

197 Subscriptions New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" Party Time! E31970FB Party Tonight

198 Subscriptions New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" New parties In the future Alert with "Party Time!" Party Tonight Party Time! E31970FB

199 Subscriptions Creating

200 Subscriptions Creating NSPredicate *predicate = [NSPredicate > %@", [NSDate date]];

201 Subscriptions Creating NSPredicate *predicate = [NSPredicate > %@", [NSDate date]]; CKSubscription *subscription = [[CKSubscription alloc] initwithrecordtype:@"party" predicate:predicate options:cksubscriptionoptionsfiresonrecordcreation];

202 Subscriptions Creating NSPredicate *predicate = [NSPredicate > %@", [NSDate date]]; CKSubscription *subscription = [[CKSubscription alloc] initwithrecordtype:@"party" predicate:predicate options:cksubscriptionoptionsfiresonrecordcreation]; CKNotificationInfo *notificationinfo = [CKNotificationInfo new]; notificationinfo.alertlocalizationkey notificationinfo.soundname notificationinfo.shouldbadge = YES;

203 Subscriptions Creating NSPredicate *predicate = [NSPredicate > %@", [NSDate date]]; CKSubscription *subscription = [[CKSubscription alloc] initwithrecordtype:@"party" predicate:predicate options:cksubscriptionoptionsfiresonrecordcreation]; CKNotificationInfo *notificationinfo = [CKNotificationInfo new]; notificationinfo.alertlocalizationkey notificationinfo.soundname notificationinfo.shouldbadge = YES; subscription.notificationinfo = notificationinfo;

204 Subscriptions Saving CKSubscription *subscription =...;! [[publicdatabase savesubscription:subscription completionhandler:^(cksubscription *subscription, NSError *error) {! }]; // labor-of-love error handling when (error!= nil)

205 Subscriptions Handling push

206 Subscriptions Handling AppDelegate! - (void)application:(uiapplication *)application didreceiveremotenotification:(nsdictionary *)userinfo {

207 Subscriptions Handling AppDelegate! - (void)application:(uiapplication *)application didreceiveremotenotification:(nsdictionary *)userinfo { CKNotification *cloudkitnotification = [CKNotification notificationfromremotenotificationdictionary:userinfo];

208 Subscriptions Handling AppDelegate! - (void)application:(uiapplication *)application didreceiveremotenotification:(nsdictionary *)userinfo { CKNotification *cloudkitnotification = [CKNotification notificationfromremotenotificationdictionary:userinfo]; NSString *alertbody = cloudkitnotification.alertbody;

209 Subscriptions Handling AppDelegate! - (void)application:(uiapplication *)application didreceiveremotenotification:(nsdictionary *)userinfo { CKNotification *cloudkitnotification = [CKNotification notificationfromremotenotificationdictionary:userinfo]; NSString *alertbody = cloudkitnotification.alertbody; } if (cloudkitnotification.notificationtype == CKNotificationTypeQuery) { CKQueryNotification *querynotification = cloudkitnotification; CKRecordID *recordid = [querynotification recordid]; }

210 CloudKit User Accounts

211 CloudKit User Accounts

212 CloudKit User Accounts Identity

213 CloudKit User Accounts Identity Metadata

214 CloudKit User Accounts Identity Metadata Privacy

215 CloudKit User Accounts Identity Metadata Privacy Discovery

216 CloudKit User Accounts Identity Metadata Privacy Discovery

217 User Identity Container Private Private Private Private Private Private Private Private Private

218 User Identity Container Private Private Private Private Private Private Private Private Private

219 User Identity Container Private Private Private Private Private Private Private Private Private

220 User Identity Container Private Private Private Private Private Private

221 User Identity Container Private Private Private Private Private

222 User Identity Container 9ECDC8B9 Private Private Private Private Private

223 User Identity Container Private Private Private 9ECDC8B9 Private Private

224 User Identity Container Private Private 9ECDC8B9 Private Private Private

225 User Identity 43183BD6 Container Private Private 9ECDC8B9 Private Private Private 50AD23DA

226 User Identity

227 User Identity User Record ID

228 User Identity User Record ID Stable identifier for this user

229 User Identity User Record ID Stable identifier for this user Scoped to the container

230 User Identity User Record ID Stable identifier for this user Scoped to the container Independent API

231 User Identity [[CKContainer defaultcontainer] fetchuserrecordidwithcompletionhandler: ^(CKRecordID *userrecordid, NSError *error) {! }]; // ostentatious error handling when (error!= nil)

232 CloudKit User Accounts Identity Metadata Privacy Discovery

233 User Metadata Container Private Private 9ECDC8B9 Private Private Private

234 User Metadata Container Public Database Private Database 9ECDC8B9 User 9ECDC8B9 User 54C16AB7 User User User 9ECDC8B9 4B20C8B2 843AE1DC

235 User Metadata Container Public Database Private Database 9ECDC8B9 User 9ECDC8B9 User 54C16AB7 User User User 9ECDC8B9 4B20C8B2 843AE1DC

236 User Metadata User Record Container Public Database Private Database 9ECDC8B9 User 9ECDC8B9 User 54C16AB7 User User User 9ECDC8B9 4B20C8B2 843AE1DC

237 User Metadata User Record One per database Container Public Database Private Database 9ECDC8B9 User 9ECDC8B9 User 54C16AB7 User User User 9ECDC8B9 4B20C8B2 843AE1DC

238 User Metadata User Record One per database Container World readable in public database Public Database Private Database 9ECDC8B9 User 9ECDC8B9 User 54C16AB7 User User User 9ECDC8B9 4B20C8B2 843AE1DC

239 User Metadata User Record One per database Container World readable in public database Public Database Private Database Treated like ordinary record 9ECDC8B9 User 9ECDC8B9 User 54C16AB7 User User User 9ECDC8B9 4B20C8B2 843AE1DC

240 User Metadata User Record One per database Container World readable in public database Public Database Private Database Treated like ordinary record CKRecordTypeUserRecord 9ECDC8B9 User 9ECDC8B9 User User 54C16AB7 User User 9ECDC8B9 4B20C8B2 843AE1DC

241 User Metadata User Record One per database Container World readable in public database Public Database Private Database Treated like ordinary record CKRecordTypeUserRecord 9ECDC8B9 User 9ECDC8B9 User User 54C16AB7 User User 9ECDC8B9 mostly 4B20C8B2 843AE1DC

242 User Metadata User Record One per database Container World readable in public database Public Database Private Database Treated like ordinary record CKRecordTypeUserRecord 9ECDC8B9 User 9ECDC8B9 User User 54C16AB7 User User 9ECDC8B9 mostly 4B20C8B2 843AE1DC Reserved by system

243 User Metadata User Record One per database Container World readable in public database Public Database Private Database Treated like ordinary record CKRecordTypeUserRecord 9ECDC8B9 User 9ECDC8B9 User User 54C16AB7 User User 9ECDC8B9 mostly 4B20C8B2 843AE1DC Reserved by system Cannot be queried

244 User Metadata CKContainer *defaultcontainer =[CKContainer defaultcontainer]; CKDatabase *publicdatabase = [defaultcontainer publicclouddatabase];! [defaultcontainer fetchuserrecordidwithcompletionhandler: ^(CKRecordID *userrecordid, NSError *error) { if (error) {... } else {

245 User Metadata CKContainer *defaultcontainer =[CKContainer defaultcontainer]; CKDatabase *publicdatabase = [defaultcontainer publicclouddatabase];! [defaultcontainer fetchuserrecordidwithcompletionhandler: ^(CKRecordID *userrecordid, NSError *error) { if (error) {... } else { [publicdatabase fetchrecordwithid:userrecordid completionhandler:^(ckrecord *userrecord, NSError *error) {

246 User Metadata CKContainer *defaultcontainer =[CKContainer defaultcontainer]; CKDatabase *publicdatabase = [defaultcontainer publicclouddatabase];! [defaultcontainer fetchuserrecordidwithcompletionhandler: ^(CKRecordID *userrecordid, NSError *error) { if (error) {... } else { [publicdatabase fetchrecordwithid:userrecordid completionhandler:^(ckrecord *userrecord, NSError *error) { }]; } }]; if (error) {... } else { NSString *partyname = userrecord[@"partyname"]; NSLog(@"Fetched record for %@:%@", partyname, userrecord); }

247 CloudKit User Accounts Identity Metadata Privacy Discovery

248 User Privacy

249 User Privacy No disclosure by default

250 User Privacy No disclosure by default Disclosure requested by application

251 User Privacy No disclosure by default Disclosure requested by application

252 CloudKit User Accounts Identity Metadata Privacy Discovery

253 User Discovery

254 User Discovery Record ID 54C16AB7 Client CloudKit

255 User Discovery Record ID Client CloudKit 54C16AB7

256 User Discovery Record ID Client 54C16AB7 CloudKit

257 User Discovery Record ID Client CloudKit

258 User Discovery Record ID Client CloudKit

259 User Discovery Record ID Client CloudKit

260 User Discovery Record ID Client CloudKit

261 User Discovery Record ID Client CloudKit

262 User Discovery address Client CloudKit

263 User Discovery address Client CloudKit

264 User Discovery address Client CloudKit

265 User Discovery address Client CloudKit

266 User Discovery address Client CloudKit

267 User Discovery address Client CloudKit

268 User Discovery address Client CloudKit

269 User Discovery address Client CloudKit

270 User Discovery Entire address book Whole Address Book Client CloudKit

271 User Discovery Entire address book Client CloudKit Whole Address Book

272 User Discovery Entire address book Client CloudKit

273 User Discovery Entire address book Client CloudKit

274 User Discovery Entire address book Client CloudKit

275 User Discovery Entire address book Client CloudKit

276 User Discovery Entire address book Client CloudKit

277 User Discovery Entire address book Client CloudKit

278 User Discovery Input User RecordID address Entire address book

279 User Discovery Input User RecordID address Entire address book Output

280 User Discovery Input User RecordID address Entire address book Output User RecordID

281 User Discovery Input User RecordID address Entire address book Output User RecordID First and last names

282 User Discovery Input User RecordID address Entire address book Output User RecordID First and last names Personally identifying information

283 User Discovery Input User RecordID address Entire address book Output User RecordID First and last names Personally identifying information Requires opt-in

284 User Discovery CKContainer *defaultcontainer = [CKContainer defaultcontainer];

285 User Discovery CKContainer *defaultcontainer = [CKContainer defaultcontainer]; [defaultcontainer discoverallcontactuserinfoswithcompletionhandler: ^(NSArray *userinfos, NSError *error) {

286 User Discovery CKContainer *defaultcontainer = [CKContainer defaultcontainer]; [defaultcontainer discoverallcontactuserinfoswithcompletionhandler: ^(NSArray *userinfos, NSError *error) { }]; if (error) {... } else { for (CKDiscoveredUserInfo *userinfo in userinfos) { NSLog(@"%@: %@ %@", userinfo.userrecordid, userinfo.firstname, userinfo.lastname); } }

287 CloudKit User Accounts Identity Metadata Privacy Discovery

288 When to Use CloudKit

289 When to Use CloudKit icloud Key Value Store icloud Drive icloud Core Data CloudKit

290 When to Use CloudKit icloud Key Value Store Asynchronously kept up to date Data limit constraints Great for application preferences icloud Drive icloud Core Data CloudKit

291 When to Use CloudKit icloud Key Value Store icloud Drive Simple API Full offline cache on OS X Unstructured Tied to the filesystem Great for document centric apps icloud Core Data CloudKit

292 When to Use CloudKit icloud Key Value Store icloud Drive icloud Core Data Data replicated to all devices Data is single-user Great for keeping private, structured data in sync CloudKit

293 When to Use CloudKit icloud Key Value Store icloud Drive icloud Core Data CloudKit Public data Structured and bulk data Large data set Use icloud accounts Client directed data transfer

294 Summary

295 Summary Access to icloud servers

296 Summary Access to icloud servers Public and private data

297 Summary Access to icloud servers Public and private data Structured and bulk data

298 Summary Access to icloud servers Public and private data Structured and bulk data Leverage icloud accounts

299 Summary Access to icloud servers Public and private data Structured and bulk data Leverage icloud accounts Apple is building on it

300 Summary Access to icloud servers Public and private data Structured and bulk data Leverage icloud accounts Apple is building on it We're excited to see what you're going to build on this

301 More Information Dave DeLong App Frameworks Evangelist CloudKit Framework Reference Apple Developer Forums

302 Related Sessions Advanced CloudKit Mission Thursday 3:15PM

303 Labs CloudKit Lab Services Lab A Tuesday 4:30PM CloudKit Lab Frameworks Lab B Wednesday 12:45PM CloudKit Lab Frameworks Lab A Friday 11:30AM

304

CloudKit Tips And Tricks

CloudKit Tips And Tricks System Frameworks #WWDC15 CloudKit Tips And Tricks Session 715 Nihar Sharma CloudKit Engineer 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission

More information

What s New in CloudKit

What s New in CloudKit System Frameworks #WWDC15 What s New in CloudKit Session 704 Olivier Bonnet icloud Client Eric Krugler icloud Server 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted

More information

Using and Extending the Xcode Source Editor

Using and Extending the Xcode Source Editor Developer Tools #WWDC16 Using and Extending the Xcode Source Editor Session 414 Mike Swingler Xcode Infrastructure and Editors Chris Hanson Xcode Infrastructure and Editors 2016 Apple Inc. All rights reserved.

More information

What s New in Core Data?

What s New in Core Data? Session App Frameworks #WWDC17 What s New in Core? Persisting since 2004 210 Melissa Turner, Core Engineer Rishi Verma, Core Engineer 2017 Apple Inc. All rights reserved. Redistribution or public display

More information

Introducing the Photos Frameworks

Introducing the Photos Frameworks Media #WWDC14 Introducing the Photos Frameworks Session 511 Adam Swift ios Photos Frameworks 2014 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission

More information

Accessibility on ios. Developing for everyone. Frameworks #WWDC14. Session 210 Clare Kasemset ios Accessibility

Accessibility on ios. Developing for everyone. Frameworks #WWDC14. Session 210 Clare Kasemset ios Accessibility Frameworks #WWDC14 Accessibility on ios Developing for everyone Session 210 Clare Kasemset ios Accessibility 2014 Apple Inc. All rights reserved. Redistribution or public display not permitted without

More information

Accessibility on OS X

Accessibility on OS X Frameworks #WWDC14 Accessibility on OS X New Accessibility API Session 207 Patti Hoa Accessibility Engineer! Chris Dolan Accessibility Engineer 2014 Apple Inc. All rights reserved. Redistribution or public

More information

What s New in Core Location

What s New in Core Location Core OS What s New in Core Location Session 706 Stephen Rhee Engineering Manager 2014 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple.

More information

Introducing the Modern WebKit API

Introducing the Modern WebKit API Frameworks #WWDC14 Introducing the Modern WebKit API Session 206 Anders Carlsson Safari and WebKit Engineer 2014 Apple Inc. All rights reserved. Redistribution or public display not permitted without written

More information

Stanford CS193p. Developing Applications for ios. Fall Stanford CS193p. Fall 2011

Stanford CS193p. Developing Applications for ios. Fall Stanford CS193p. Fall 2011 Developing Applications for ios Today Core Data and Documents This is how you store something serious in ios Easy entreé into icloud NSNotificationCenter The little radio station we talked about in the

More information

What s New in HomeKit

What s New in HomeKit App Frameworks #WWDC15 What s New in HomeKit Session 210 Anush Nadathur HomeKit Engineer Naveen Kommareddi HomeKit Engineer 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted

More information

Introducing the Contacts Framework

Introducing the Contacts Framework App Frameworks #WWDC15 Introducing the Contacts Framework For OS X, ios, and watchos Session 223 Bruce Stadnyk ios Contacts Engineer Dave Dribin OS X Contacts Engineer Julien Robert ios Contacts Engineer

More information

Stanford CS193p. Developing Applications for ios. Fall Stanford CS193p. Fall 2011

Stanford CS193p. Developing Applications for ios. Fall Stanford CS193p. Fall 2011 Developing Applications for ios Today icloud Sharing documents among a user s devices Fundamentally: nothing more than a URL of a shared directory However, since it is over the network, there are lots

More information

Seamless Linking to Your App

Seamless Linking to Your App App Frameworks #WWDC15 Seamless Linking to Your App Session 509 Conrad Shultz Safari and WebKit Software Engineer Jonathan Grynspan Core Services Software Engineer 2015 Apple Inc. All rights reserved.

More information

ios Core Data Example Application

ios Core Data Example Application ios Core Data Example Application The Core Data framework provides an abstract, object oriented interface to database storage within ios applications. This does not require extensive knowledge of database

More information

What s New in Notifications

What s New in Notifications System Frameworks #WWDC15 What s New in Notifications Session 720 Michele Campeotto ios Notifications Gokul Thirumalai Apple Push Notification Service 2015 Apple Inc. All rights reserved. Redistribution

More information

What's New in Core Spotlight

What's New in Core Spotlight Session System Frameworks #WWDC17 What's New in Core Spotlight Search on macos and ios 231 John Hörnkvist, Spotlight Lyn Fong, Spotlight 2017 Apple Inc. All rights reserved. Redistribution or public display

More information

Creating Extensions for ios and OS X, Part Two

Creating Extensions for ios and OS X, Part Two Frameworks #WWDC14 Creating Extensions for ios and OS X, Part Two Architecture Session 217 Damien Sorresso Overloaded Operator 2014 Apple Inc. All rights reserved. Redistribution or public display not

More information

Data Delivery with Drag and Drop

Data Delivery with Drag and Drop Session App Frameworks #WWDC17 Data Delivery with Drag and Drop 227 Dave Rahardja, UIKit Tanu Singhal, UIKit 2017 Apple Inc. All rights reserved. Redistribution or public display not permitted without

More information

Cross Platform Nearby Networking

Cross Platform Nearby Networking Core OS #WWDC14 Cross Platform Nearby Networking Session 709 Demijan Klinc Software Engineer 2014 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission

More information

Monetize and Promote Your App with iad

Monetize and Promote Your App with iad Media #WWDC15 Monetize and Promote Your App with iad From design to launch Session 503 Carol Teng Shashank Phadke 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted without

More information

Getting the Most Out of HealthKit

Getting the Most Out of HealthKit App Frameworks #WWDC16 Getting the Most Out of HealthKit What s new and best practices Session 209 Matthew Salesi ios Software Engineer Joefrey Kibuule ios Software Engineer 2016 Apple Inc. All rights

More information

Using Grouped Notifications

Using Grouped Notifications #WWDC18 Using Grouped Notifications Session 711 Michele Campeotto, ios User Notifications 2018 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission

More information

What s New in Xcode App Signing

What s New in Xcode App Signing Developer Tools #WWDC16 What s New in Xcode App Signing Developing and distributing Session 401 Joshua Pennington Tools Engineering Manager Itai Rom Tools Engineer 2016 Apple Inc. All rights reserved.

More information

ITP 342 Advanced Mobile App Dev. Core Data

ITP 342 Advanced Mobile App Dev. Core Data ITP 342 Advanced Mobile App Dev Core Data Persistent Data NSUser Defaults Typically used to save app preferences Property List (plist) in Documents Directory Data is in a dictionary or an array Coders

More information

Using HTML5 Offline Storage. Brady Eidson Safari and WebKit Engineer

Using HTML5 Offline Storage. Brady Eidson Safari and WebKit Engineer Using HTML5 Offline Storage Brady Eidson Safari and WebKit Engineer 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 So what can I do without the cloud? 22 What You ll Learn Make apps accessible offline

More information

New Ways to Work with Workouts

New Ways to Work with Workouts Session #WWDC18 New Ways to Work with Workouts 707 Niharika Bedekar, Fitness Software Engineer Karim Benhmida, Health Software Engineer 2018 Apple Inc. All rights reserved. Redistribution or public display

More information

Developing Applications for ios

Developing Applications for ios Developing Applications for ios Lecture 10: and Categories Radu Ionescu raducu.ionescu@gmail.com Faculty of Mathematics and Computer Science University of Bucharest Content and Documents This is how you

More information

Game Center Techniques, Part 1

Game Center Techniques, Part 1 Game Center Techniques, Part 1 Get Your Game On Gabriel Belinsky Senior Software Engineer 2 Game Center Friends Leaderboards Achievements Multiplayer gaming 3 What You ll Learn Game Center API basics Authenticate

More information

Stanford CS193p. Developing Applications for iphone 4, ipod Touch, & ipad Fall Stanford CS193p Fall 2010

Stanford CS193p. Developing Applications for iphone 4, ipod Touch, & ipad Fall Stanford CS193p Fall 2010 Developing Applications for iphone 4, ipod Touch, & ipad Today More Core Data What does the code for the custom NSManagedObject subclasses generated by Xcode look like? Querying for (fetching) objects

More information

WatchKit In-Depth, Part 2

WatchKit In-Depth, Part 2 App Frameworks #WWDC15 WatchKit In-Depth, Part 2 Session 208 Nathan de Vries watchos Engineer Chloe Chang watchos Engineer 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted

More information

Agenda. Core Data! Next Week! Storing your Model permanently in an object-oriented database.! Multitasking! Advanced Segueing! Map Kit?

Agenda. Core Data! Next Week! Storing your Model permanently in an object-oriented database.! Multitasking! Advanced Segueing! Map Kit? ios Mobile Design Agenda Core Data! Storing your Model permanently in an object-oriented database.! Next Week! Multitasking! Advanced Segueing! Map Kit? Core Data Database! Sometimes you need to store

More information

Address Book for iphone

Address Book for iphone Address Book for iphone The people s framework Alexandre Aybes iphone Software Engineer 2 3 Address Book for iphone The people s framework Alexandre Aybes iphone Software Engineer 4 What We Will Cover

More information

What s New in Foundation for Swift Session 207

What s New in Foundation for Swift Session 207 App Frameworks #WWDC16 What s New in Foundation for Swift Session 207 Tony Parker Foundation, Apple Michael LeHew Foundation, Apple 2016 Apple Inc. All rights reserved. Redistribution or public display

More information

Thread Sanitizer and Static Analysis

Thread Sanitizer and Static Analysis Developer Tools #WWDC16 Thread Sanitizer and Static Analysis Help with finding bugs in your code Session 412 Anna Zaks Manager, Program Analysis Team Devin Coughlin Engineer, Program Analysis Team 2016

More information

Introducing MusicKit. Media #WWDC17. Tim Parthemore, MusicKit Services Joel Lopes Da Silva, ios Music

Introducing MusicKit. Media #WWDC17. Tim Parthemore, MusicKit Services Joel Lopes Da Silva, ios Music Session Media #WWDC17 Introducing MusicKit 502 Tim Parthemore, MusicKit Services Joel Lopes Da Silva, ios Music 2017 Apple Inc. All rights reserved. Redistribution or public display not permitted without

More information

Advanced Memory Analysis with Instruments. Daniel Delwood Performance Tools Engineer

Advanced Memory Analysis with Instruments. Daniel Delwood Performance Tools Engineer Advanced Memory Analysis with Instruments Daniel Delwood Performance Tools Engineer 2 Memory Analysis What s the issue? Memory is critical to performance Limited resource Especially on iphone OS 3 4 Memory

More information

What s New in NSCollectionView Session 225

What s New in NSCollectionView Session 225 App Frameworks #WWDC15 What s New in NSCollectionView Session 225 Troy Stephens Application Frameworks Engineer 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted without

More information

itunes Connect Development to distribution #WWDC15 Distribution Session 304

itunes Connect Development to distribution #WWDC15 Distribution Session 304 Distribution #WWDC15 itunes Connect Development to distribution Session 304 Paul Turner Senior Engineering Operations Manager, itunes Digital Supply Chain 2015 Apple Inc. All rights reserved. Redistribution

More information

Xcode 6 and ios 8 What s New for Software Developers

Xcode 6 and ios 8 What s New for Software Developers Xcode 6 and ios 8 What s New for Software Developers August 2014 Norman McEntire! norman.mcentire@servin.com Slides and Video of this presentation will be posted on Tuesday Aug 26 here: http://servin.com!1

More information

Managed Object Model schema Persistent Store Coordinator connection Managed Object Context scratch pad

Managed Object Model schema Persistent Store Coordinator connection Managed Object Context scratch pad CoreData Tutorial What is CoreData? CoreData Stack Managed Object Model: You can think of this as the database schema. It is a class that contains definitions for each of the objects (also called Entities

More information

Creating Great App Previews

Creating Great App Previews Services #WWDC14 Creating Great App Previews Session 304 Paul Turner Sr. Operations Manager itunes Digital Supply Chain Engineering 2014 Apple Inc. All rights reserved. Redistribution or public display

More information

Core Data Best Practices

Core Data Best Practices #WWDC18 Core Data Best Practices Session 224 Scott Perry, Engineer Nick Gillett, Engineer 2018 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission

More information

What s New in ARKit 2

What s New in ARKit 2 Session #WWDC18 What s New in ARKit 2 602 Arsalan Malik, ARKit Engineer Reinhard Klapfer, ARKit Engineer 2018 Apple Inc. All rights reserved. Redistribution or public display not permitted without written

More information

Kevin van Vechten Core OS

Kevin van Vechten Core OS Kevin van Vechten Core OS 2 3 Bill Bumgarner 4 (lambda (a) (add a d)) 10 timesrepeat:[pen turn:d; draw] z.each { val puts(val + d.to_s)} repeat(10, ^{ putc('0'+ d); }); 5 6 7 8 ^ 9 [myset objectspassingtest:

More information

What s New in tvos #WWDC16. App Frameworks. Session 206. Hans Kim tvos Engineer

What s New in tvos #WWDC16. App Frameworks. Session 206. Hans Kim tvos Engineer App Frameworks #WWDC16 What s New in tvos Session 206 Hans Kim tvos Engineer 2016 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple. Welcome

More information

Multitasking Support on the ios Platform

Multitasking Support on the ios Platform Multitasking Support on the ios Platform Priya Rajagopal Invicara (www.invicara.com) @rajagp Multitasking on ios? Multitasking allows apps to perform certain tasks in the background while you're using

More information

Vision Framework. Building on Core ML. Media #WWDC17. Brett Keating, Apple Manager Frank Doepke, He who wires things together

Vision Framework. Building on Core ML. Media #WWDC17. Brett Keating, Apple Manager Frank Doepke, He who wires things together Session Media #WWDC17 Vision Framework Building on Core ML 506 Brett Keating, Apple Manager Frank Doepke, He who wires things together 2017 Apple Inc. All rights reserved. Redistribution or public display

More information

What's New in Foundation Networking

What's New in Foundation Networking Core OS #WWDC14 What's New in Foundation Networking Session 707 Steve Algernon Senior Wrangler 2014 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission

More information

Apple Watch Design Tips and Tricks

Apple Watch Design Tips and Tricks Design #WWDC15 Apple Watch Design Tips and Tricks Session 805 Mike Stern User Experience Evangelist Rachel Roth User Experience Evangelist 2015 Apple Inc. All rights reserved. Redistribution or public

More information

Your Apps and the Future of macos Security

Your Apps and the Future of macos Security #WWDC18 Your Apps and the Future of macos Security Pierre-Olivier Martel, Security Engineering Manager Kelly Yancey, OS Security Garrett Jacobson, Trusted Execution 2018 Apple Inc. All rights reserved.

More information

Media and Gaming Accessibility

Media and Gaming Accessibility Session System Frameworks #WWDC17 Media and Gaming Accessibility 217 Greg Hughes, Software Engineering Manager Charlotte Hill, Software Engineer 2017 Apple Inc. All rights reserved. Redistribution or public

More information

Implementing UI Designs in Interface Builder

Implementing UI Designs in Interface Builder Developer Tools #WWDC15 Implementing UI Designs in Interface Builder Session 407 Kevin Cathey Interface Builder Engineer Tony Ricciardi Interface Builder Engineer 2015 Apple Inc. All rights reserved. Redistribution

More information

Introduction to Siri Shortcuts

Introduction to Siri Shortcuts #WWDC8 Introduction to Siri Shortcuts Session 2 Ari Weinstein, Siri Willem Mattelaer, Siri 208 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission

More information

Developing Enterprise Cloud Solutions with Azure

Developing Enterprise Cloud Solutions with Azure Developing Enterprise Cloud Solutions with Azure Java Focused 5 Day Course AUDIENCE FORMAT Developers and Software Architects Instructor-led with hands-on labs LEVEL 300 COURSE DESCRIPTION This course

More information

NSObject. - (NSString *)description Provides us with a string description of the object

NSObject. - (NSString *)description Provides us with a string description of the object FoundationFramework NSObject - (NSString *)description Provides us with a string description of the object NSString - (NSString *)stringbyappendingstring:(nsstring *)string Creates a new string by adding

More information

Enhancing your apps for the next dimension of touch

Enhancing your apps for the next dimension of touch App Frameworks #WWDC16 A Peek at 3D Touch Enhancing your apps for the next dimension of touch Session 228 Tyler Fox UIKit Frameworks Engineer Peter Hajas UIKit Frameworks Engineer 2016 Apple Inc. All rights

More information

Data Storage. Dr. Sarah Abraham

Data Storage. Dr. Sarah Abraham Data Storage Dr. Sarah Abraham University of Texas at Austin CS329e Fall 2016 Model Layer of MVC Contains the data to be displayed Data can be: Stored on device Pulled down from a server Data displayed

More information

Introducing On Demand Resources

Introducing On Demand Resources App Frameworks #WWDC15 Introducing On Demand Resources An element of App Thinning Session 214 Steve Lewallen Frameworks Engineering Tony Parker Cocoa Frameworks 2015 Apple Inc. All rights reserved. Redistribution

More information

Creating Complications with ClockKit Session 209

Creating Complications with ClockKit Session 209 App Frameworks #WWDC15 Creating Complications with ClockKit Session 209 Eliza Block watchos Engineer Paul Salzman watchos Engineer 2015 Apple Inc. All rights reserved. Redistribution or public display

More information

Objective-C and COCOA Applications

Objective-C and COCOA Applications Objective-C and COCOA Applications Fall, 2012 Prof. Massimiliano "Max" Pala pala@nyu.edu Overview X-Code IDE Basics Objective-C Classes Methods Invocations Important Types Memory Management Protocols Exceptions

More information

Localizing with Xcode 6

Localizing with Xcode 6 Tools #WWDC14 Localizing with Xcode 6 Best practices and new workflows Session 412 Zoltan Foley-Fisher Xcode Software Engineer! Chris Hanson Xcode Software Engineer 2014 Apple Inc. All rights reserved.

More information

ios: Objective-C Primer

ios: Objective-C Primer ios: Objective-C Primer Jp LaFond Jp.LaFond+e76@gmail.com TF, CS76 Announcements n-puzzle feedback this week (if not already returned) ios Setup project released Android Student Choice project due Tonight

More information

Mastering Drag and Drop

Mastering Drag and Drop Session App Frameworks #WWDC17 Mastering Drag and Drop 213 Tom Adriaenssen, UIKit Wenson Hsieh, WebKit Robb Böhnke, UIKit 2017 Apple Inc. All rights reserved. Redistribution or public display not permitted

More information

Designing for Apple Watch

Designing for Apple Watch Design #WWDC15 Designing for Apple Watch Session 802 Mike Stern User Experience Evangelist 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission

More information

Getting Started with CareKit

Getting Started with CareKit App Frameworks #WWDC16 Getting Started with CareKit Session 237 Umer Khan Software Engineer 2016 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission

More information

Content Protection for HTTP Live Streaming

Content Protection for HTTP Live Streaming Media #WWDC15 Content Protection for HTTP Live Streaming Session 502 Roger Pantos HTTP Live Streaming Engineer 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted without

More information

Tungsten Security Whitepaper

Tungsten Security Whitepaper Tungsten Labs UG (haftungsbeschränkt) Email: contact@tungsten-labs.com Web: http://tungsten-labs.com Monbijouplatz 5, 10178 Berlin Tungsten Security Whitepaper Berlin, May 2018 Version 1 Contents Introduction

More information

Data Management

Data Management Core Data Utility Tutorial Data Management 2010-09-19 Apple Inc. 2005, 2010 Apple Inc. All rights reserved. exclusion may not apply to you. This warranty gives you specific legal rights, and you may also

More information

Developing Microsoft Azure Solutions (70-532) Syllabus

Developing Microsoft Azure Solutions (70-532) Syllabus Developing Microsoft Azure Solutions (70-532) Syllabus Cloud Computing Introduction What is Cloud Computing Cloud Characteristics Cloud Computing Service Models Deployment Models in Cloud Computing Advantages

More information

Developing Microsoft Azure Solutions (70-532) Syllabus

Developing Microsoft Azure Solutions (70-532) Syllabus Developing Microsoft Azure Solutions (70-532) Syllabus Cloud Computing Introduction What is Cloud Computing Cloud Characteristics Cloud Computing Service Models Deployment Models in Cloud Computing Advantages

More information

ATTACHMENT MANAGEMENT USING AZURE BLOB STORAGE

ATTACHMENT MANAGEMENT USING AZURE BLOB STORAGE MICROSOFT LABS FEBRUARY 28, 2018 ATTACHMENT MANAGEMENT USING AZURE BLOB STORAGE A Solution to help optimize Dynamics 365 CRM storage by automatically saving file attachments to Azure Blob Storage Contents

More information

Centralized Access of User Data Channel with Push Notification

Centralized Access of User Data Channel with Push Notification Centralized Access of User Data Channel with Push Notification #1 #2 #3 #4 Abhishek PriyadarshiP P, Ritu KaramchandaniP P, Nikhil GuptaP P, Arsalan GundrooP P, Department of computer Engineering, D.Y.

More information

VMware AirWatch Integration with Apple School Manager Integrate with Apple's School Manager to automatically enroll devices and manage classes

VMware AirWatch Integration with Apple School Manager Integrate with Apple's School Manager to automatically enroll devices and manage classes VMware AirWatch Integration with Apple School Manager Integrate with Apple's School Manager to automatically enroll devices and manage classes Workspace ONE UEM v9.6 Have documentation feedback? Submit

More information

VMware Workspace ONE UEM Integration with Apple School Manager

VMware Workspace ONE UEM Integration with Apple School Manager VMware Workspace ONE UEM Integration with Apple School Manager VMware Workspace ONE UEM Integration with Apple School Manager VMware Workspace ONE UEM 1811 You can find the most up-to-date technical documentation

More information

Working with Metal Overview

Working with Metal Overview Graphics and Games #WWDC14 Working with Metal Overview Session 603 Jeremy Sandmel GPU Software 2014 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission

More information

Contents. iphone Training. Industry Trainers. Classroom Training Online Training ON-DEMAND Training. Read what you need

Contents. iphone Training. Industry Trainers. Classroom Training Online Training ON-DEMAND Training. Read what you need iphone Training Contents About iphone Training Our ios training classes can help you get off to a running start in iphone, ipod and ipad app development. Learn from expert Objective-C developers with years

More information

Quick Interaction Techniques for watchos

Quick Interaction Techniques for watchos App Frameworks #WWDC16 Quick Interaction Techniques for watchos Session 211 Tom Witkin watchos Engineer Miguel Sanchez watchos Engineer 2016 Apple Inc. All rights reserved. Redistribution or public display

More information

What s New in Device Configuration, Deployment, and Management

What s New in Device Configuration, Deployment, and Management Session Distribution #WWDC17 What s New in Device Configuration, Deployment, and Management 304 Todd Fernandez, Senior Manager, Device Management and Server 2017 Apple Inc. All rights reserved. Redistribution

More information

Mastering Xcode for iphone OS Development Part 1. Todd Fernandez Sr. Manager, IDEs

Mastering Xcode for iphone OS Development Part 1. Todd Fernandez Sr. Manager, IDEs Mastering Xcode for iphone OS Development Part 1 Todd Fernandez Sr. Manager, IDEs 2 3 Customer Reviews Write a Review Current Version (1) All Versions (24) Gorgeous and Addictive Report a Concern by Play

More information

Networking with NSURLSession

Networking with NSURLSession System Frameworks #WWDC15 Networking with NSURLSession Session 711 Luke Case Software Engineer Andreas Garkuscha Software Engineer Dan Vinegrad Software Engineer 2015 Apple Inc. All rights reserved. Redistribution

More information

Data IAP 2010 iphonedev.csail.mit.edu edward benson / Thursday, January 14, 2010

Data IAP 2010 iphonedev.csail.mit.edu edward benson / Thursday, January 14, 2010 Data IAP 2010 iphonedev.csail.mit.edu edward benson / eob@csail.mit.edu Today Property Lists User Defaults Settings Panels CoreData Property Lists Today Add persistence. plist 1. Using Property Lists in

More information

View Controller Advancements for ios8

View Controller Advancements for ios8 Frameworks #WWDC14 View Controller Advancements for ios8 Session 214 Bruce D. Nilo Manager, UIKit Fundamentals 2014 Apple Inc. All rights reserved. Redistribution or public display not permitted without

More information

Developing Microsoft Azure Solutions (70-532) Syllabus

Developing Microsoft Azure Solutions (70-532) Syllabus Developing Microsoft Azure Solutions (70-532) Syllabus Cloud Computing Introduction What is Cloud Computing Cloud Characteristics Cloud Computing Service Models Deployment Models in Cloud Computing Advantages

More information

Improving your Existing Apps with Swift

Improving your Existing Apps with Swift Developer Tools #WWDC15 Improving your Existing Apps with Swift Getting Swifty with It Session 403 Woody L. in the Sea of Swift 2015 Apple Inc. All rights reserved. Redistribution or public display not

More information

ios Accessibility Developing for everyone Session 201 Ian Fisch ios Accessibility

ios Accessibility Developing for everyone Session 201 Ian Fisch ios Accessibility App Frameworks #WWDC15 ios Accessibility Developing for everyone Session 201 Ian Fisch ios Accessibility 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted without written

More information

Finding Bugs Using Xcode Runtime Tools

Finding Bugs Using Xcode Runtime Tools Session Developer Tools #WWDC17 Finding Bugs Using Xcode Runtime Tools 406 Kuba Mracek, Program Analysis Engineer Vedant Kumar, Compiler Engineer 2017 Apple Inc. All rights reserved. Redistribution or

More information

Adapting to the New UI of OS X Yosemite

Adapting to the New UI of OS X Yosemite Frameworks #WWDC14 Adapting to the New UI of OS X Yosemite Session 209 Mike Stern User Experience Evangelist! Rachel Goldeen Cocoa Software Engineer! Patrick Heynen Cocoa Engineering Manager 2014 Apple

More information

Design Considerations for Real-time Arterial Performance Measurement Systems Using Transit Bus Probes

Design Considerations for Real-time Arterial Performance Measurement Systems Using Transit Bus Probes Design Considerations for Real-time Arterial Performance Measurement Systems Using Transit Bus Probes Abraham Emmanuel & David Zavattero Chicago Department of Transportation Project Goals Estimate traffic

More information

Cocoa Development Tips

Cocoa Development Tips Session App Frameworks #WWDC17 Cocoa Development Tips Twenty-nine things you may not know about Cocoa 236 Rachel Goldeen, Cocoa Engineer Vincent Hittson, Cocoa Engineer 2017 Apple Inc. All rights reserved.

More information

Mobile Application Development

Mobile Application Development Mobile Application Development Lecture 12 Introduction to ObjectiveC 2013/2014 Parma Università degli Studi di Parma Lecture Summary ObjectiveC language basics Classes and objects Methods Instance variables

More information

Adopting Advanced Features of the New UI

Adopting Advanced Features of the New UI Frameworks #WWDC14 Adopting Advanced Features of the New UI Session 220 Chris Dreessen AppKit Software Engineer! Corbin Dunn AppKit Software Engineer 2014 Apple Inc. All rights reserved. Redistribution

More information

Storyboards and Controllers on OS X

Storyboards and Controllers on OS X Frameworks #WWDC14 Storyboards and Controllers on OS X Contain yourself Session 212 Mike Swingler Interface Builder Engineer Raleigh Ledet AppKit Engineer 2014 Apple Inc. All rights reserved. Redistribution

More information

Getting the Most out of Playgrounds in Xcode

Getting the Most out of Playgrounds in Xcode #WWDC18 Getting the Most out of Playgrounds in Xcode Session 402 Tibet Rooney-Rabdau, Xcode Engineer Alex Brown, Core OS Engineer TJ Usiyan, Xcode Engineer 2018 Apple Inc. All rights reserved. Redistribution

More information

Automatic Strong Passwords and Security Code AutoFill

Automatic Strong Passwords and Security Code AutoFill Session #WWDC18 Automatic Strong Passwords and Security Code AutoFill 204 Chelsea Pugh, ios Engineer Reza Abbasian, ios Engineer Harris Papadopoulos, ios Engineer 2018 Apple Inc. All rights reserved. Redistribution

More information

ITP 342 Advanced Mobile App Dev. Memory

ITP 342 Advanced Mobile App Dev. Memory ITP 342 Advanced Mobile App Dev Memory Memory Management Objective-C provides two methods of application memory management. 1. In the method described in this guide, referred to as manual retain-release

More information

What s New in MapKit. App Frameworks #WWDC17. Fredrik Olsson

What s New in MapKit. App Frameworks #WWDC17. Fredrik Olsson Session App Frameworks #WWDC17 What s New in MapKit 237 Fredrik Olsson 2017 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple. MKMapView.mapType.standard

More information

Create an App that will drop PushPins onto a map based on addresses that the user inputs.

Create an App that will drop PushPins onto a map based on addresses that the user inputs. Overview Create an App that will drop PushPins onto a map based on addresses that the user inputs. Part 1: Introduction to MKMapKit Part 2: Introduction to PushPins Part 3: Use Google s API to lookup an

More information

VMware AirWatch Integration with Apple School Manager Integrate with Apple's School Manager to automatically enroll devices and manage classes

VMware AirWatch Integration with Apple School Manager Integrate with Apple's School Manager to automatically enroll devices and manage classes VMware AirWatch Integration with Apple School Manager Integrate with Apple's School Manager to automatically enroll devices and manage classes AirWatch v9.3 Have documentation feedback? Submit a Documentation

More information

Building Better Apps with Value Types in Swift Session 414

Building Better Apps with Value Types in Swift Session 414 Developer Tools #WWDC15 Building Better Apps with Value Types in Swift Session 414 Doug Gregor Language Lawyer Bill Dudney Arranger of Bits 2015 Apple Inc. All rights reserved. Redistribution or public

More information