Introducing CloudKit. A how-to guide for icloud for your Apps. Frameworks #WWDC14. Session 208 Olivier Bonnet CloudKit Client Software
|
|
- Ruth Little
- 5 years ago
- Views:
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
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 informationWhat 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 informationUsing 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 informationWhat 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 informationIntroducing 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 informationAccessibility 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 informationAccessibility 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 informationWhat 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 informationIntroducing 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 informationStanford 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 informationWhat 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 informationIntroducing 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 informationStanford 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 informationSeamless 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 informationios 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 informationWhat 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 informationWhat'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 informationCreating 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 informationData 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 informationCross 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 informationMonetize 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 informationGetting 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 informationUsing 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 informationWhat 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 informationITP 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 informationUsing 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 informationNew 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 informationDeveloping 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 informationGame 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 informationStanford 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 informationWatchKit 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 informationAgenda. 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 informationAddress 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 informationWhat 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 informationThread 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 informationIntroducing 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 informationAdvanced 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 informationWhat 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 informationitunes 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 informationXcode 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 informationManaged 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 informationCreating 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 informationCore 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 informationWhat 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 informationKevin 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 informationWhat 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 informationMultitasking 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 informationVision 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 informationWhat'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 informationApple 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 informationYour 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 informationMedia 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 informationImplementing 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 informationIntroduction 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 informationDeveloping 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 informationNSObject. - (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 informationEnhancing 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 informationData 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 informationIntroducing 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 informationCreating 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 informationObjective-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 informationLocalizing 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 informationios: 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 informationMastering 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 informationDesigning 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 informationGetting 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 informationContent 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 informationTungsten 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 informationData 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 informationDeveloping 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 informationDeveloping 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 informationATTACHMENT 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 informationCentralized 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 informationVMware 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 informationVMware 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 informationWorking 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 informationContents. 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 informationQuick 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 informationWhat 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 informationMastering 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 informationNetworking 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 informationData 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 informationView 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 informationDeveloping 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 informationImproving 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 informationios 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 informationFinding 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 informationAdapting 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 informationDesign 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 informationCocoa 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 informationMobile 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 informationAdopting 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 informationStoryboards 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 informationGetting 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 informationAutomatic 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 informationITP 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 informationWhat 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 informationCreate 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 informationVMware 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 informationBuilding 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