Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul...

176
© 2016 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple. New features and updates expand search capabilities App Frameworks #WWDC16 Session 223 Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc.

Transcript of Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul...

Page 1: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

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

New features and updates expand search capabilities

App Frameworks #WWDC16

Session 223

Making the Most of Search APIs

Vipul Ved Prakash Apple, Inc.John Hörnkvist Apple, Inc.

Page 2: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Spotlight Updates in iOS 10

Notification Center

Page 3: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Note from Max*NEW*

Search from New Lockscreen

NEW

Page 4: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Note from Max*NEW*

Search from New Lockscreen

NEW

Page 5: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Note from Max*NEW*

Search from New Lockscreen

NEW

Page 6: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Note from Max*NEW*

Search from New Lockscreen

NEW

Page 7: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Note from Max*NEW*

Search from New Lockscreen

NEW

Page 8: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Spotlight Updates in iOS 10

Notification CenterSearch on Lock Screen3D Touch

Page 9: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10
Page 10: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10
Page 11: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10
Page 12: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10
Page 13: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10
Page 14: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Spotlight Updates in iOS 10

Notification CenterSearch on Lock Screen3D TouchQuery Suggestions

Page 15: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10
Page 16: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Three technologies for implementing searchSearch APIs Released in iOS 9

Page 17: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Three technologies for implementing searchSearch APIs Released in iOS 9

CoreSpotlight

Any App Content

Page 18: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Three technologies for implementing searchSearch APIs Released in iOS 9

Viewed App Content

NSUserActivityCoreSpotlight

Any App Content

Page 19: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Three technologies for implementing searchSearch APIs Released in iOS 9

Viewed App Content

NSUserActivity

App Content on Web

Universal LinksCoreSpotlight

Any App Content

Page 20: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Apps using Search APIs

50,000+

Page 21: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10
Page 22: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10
Page 23: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10
Page 24: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10
Page 25: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10
Page 26: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10
Page 27: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10
Page 28: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10
Page 29: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10
Page 30: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Content Your Users Want to Get Back To

Order confirmationsUpcoming eventsTicketsReservationsDeliveries

Page 31: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10
Page 32: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10
Page 33: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10
Page 34: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10
Page 35: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Enhance Native Spotlight Content

Page 36: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Enhance Native Spotlight Content

Instant answersContactsStocks

SportsLocationsWeather

Web searchAppsCalculations

MusicTV Movies

Page 37: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10
Page 38: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10
Page 39: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10
Page 40: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

New in iOS 10What’s New NEW

Page 41: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

New in iOS 10What’s New

Search in AppCoreSpotlight Search API Differential PrivacyVisual Preview in Web Markup Tool

NEW

Page 42: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

647 x 1150

NEW

Page 43: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

647 x 1150

Users can continue their Search in the App

NEW

Page 44: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

647 x 1150

NEW

Page 45: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

New in iOS 10What’s New

Search in AppCoreSpotlight Search API Differential PrivacyVisual Preview in Web Markup Tool

NEW

Page 46: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

New in iOS 10What’s New

Search in AppCoreSpotlight Search API Differential PrivacyVisual Preview in Web Markup Tool

NEW

Page 47: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

New in iOS 10What’s New

Search in AppCoreSpotlight Search API Differential PrivacyVisual Preview in Web Markup Tool

NEW

Page 48: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

New in iOS 10What’s New

Search in AppCoreSpotlight Search API Differential PrivacyVisual Preview in Web Markup Tool

NEW

Page 49: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Making the most of your contentAdopting Search APIs

John Hörnkvist Apple, Inc.

Page 50: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Steps and best practicesAdopting Search APIs

Indexing contentRich presentationLaunching into your appCoreSpotlight Search APIOptimize for ranking

Page 51: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Any App Content

CoreSpotlight

Page 52: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Viewed App Content Any App Content

CoreSpotlight NSUserActivity

Page 53: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Viewed App Content App Content on WebAny App Content

CoreSpotlight NSUserActivity Universal Links

Page 54: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

CoreSpotlight

NSUserActivity Universal Links

Page 55: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10
Page 56: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Steps and best practicesAdopting Search APIs

Indexing contentRich presentationLaunching into your appCoreSpotlight Search APIOptimize for ranking

Page 57: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Viewed App Content App Content on WebAny App Content

CoreSpotlight NSUserActivity Universal Links

Page 58: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Index all that your app has to offerIndexing with CoreSpotlight

API for on-device indexing on iOSYou decide what you want to add to the indexDocuments, game levels, images, jump-off points, and more

Page 59: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Basic operationsCoreSpotlight Refresher

Adding items to the index let attrs : CSSearchableItemAttributeSet =

CSSearchableItemAttributeSet(itemContentType: kUTTypeItem as String)

attrs.displayName = “Hello world!”

let item = CSSearchableItem(uniqueIdentifier:"hello", domainIdentifier:

"Greetings", attributeSet: attrs)

CSSearchableIndex.defaultIndex().indexSearchableItems([item],

completionHandler: handler)

Page 60: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Basic operationsCoreSpotlight Refresher

Adding items to the index let attrs : CSSearchableItemAttributeSet =

CSSearchableItemAttributeSet(itemContentType: kUTTypeItem as String)

attrs.displayName = “Hello world!”

let item = CSSearchableItem(uniqueIdentifier:"hello", domainIdentifier:

"Greetings", attributeSet: attrs)

CSSearchableIndex.defaultIndex().indexSearchableItems([item],

completionHandler: handler)

Page 61: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Basic operationsCoreSpotlight Refresher

Adding items to the index let attrs : CSSearchableItemAttributeSet =

CSSearchableItemAttributeSet(itemContentType: kUTTypeItem as String)

attrs.displayName = “Hello world!”

let item = CSSearchableItem(uniqueIdentifier:"hello", domainIdentifier:

"Greetings", attributeSet: attrs)

CSSearchableIndex.defaultIndex().indexSearchableItems([item],

completionHandler: handler)

Page 62: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Basic operationsCoreSpotlight Refresher

Adding items to the index let attrs : CSSearchableItemAttributeSet =

CSSearchableItemAttributeSet(itemContentType: kUTTypeItem as String)

attrs.displayName = “Hello world!”

let item = CSSearchableItem(uniqueIdentifier:"hello", domainIdentifier:

"Greetings", attributeSet: attrs)

CSSearchableIndex.defaultIndex().indexSearchableItems([item],

completionHandler: handler)

Page 63: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Basic operationsCoreSpotlight Refresher

Adding items to the index let attrs : CSSearchableItemAttributeSet =

CSSearchableItemAttributeSet(itemContentType: kUTTypeItem as String)

attrs.displayName = “Hello world!”

let item = CSSearchableItem(uniqueIdentifier:"hello", domainIdentifier:

"Greetings", attributeSet: attrs)

CSSearchableIndex.defaultIndex().indexSearchableItems([item],

completionHandler: handler)

Page 64: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Deleting items from the index

CSSearchableIndex.defaultIndex().deleteSearchableItems(withIdentifiers:["hello"],

completionHandler: handler)

CSSearchableIndex.defaultIndex().deleteSearchableItems(withDomainIdentifiers:

["Greetings"], completionHandler: handler)

CSSearchableIndex.defaultIndex().deleteAllSearchableItems(completionHandler:handler)

Basic operationsCoreSpotlight Refresher

Page 65: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Deleting items from the index

CSSearchableIndex.defaultIndex().deleteSearchableItems(withIdentifiers:["hello"],

completionHandler: handler)

CSSearchableIndex.defaultIndex().deleteSearchableItems(withDomainIdentifiers:

["Greetings"], completionHandler: handler)

CSSearchableIndex.defaultIndex().deleteAllSearchableItems(completionHandler:handler)

Basic operationsCoreSpotlight Refresher

Page 66: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Deleting items from the index

CSSearchableIndex.defaultIndex().deleteSearchableItems(withIdentifiers:["hello"],

completionHandler: handler)

CSSearchableIndex.defaultIndex().deleteSearchableItems(withDomainIdentifiers:

["Greetings"], completionHandler: handler)

CSSearchableIndex.defaultIndex().deleteAllSearchableItems(completionHandler:handler)

Basic operationsCoreSpotlight Refresher

Page 67: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Deleting items from the index

CSSearchableIndex.defaultIndex().deleteSearchableItems(withIdentifiers:["hello"],

completionHandler: handler)

CSSearchableIndex.defaultIndex().deleteSearchableItems(withDomainIdentifiers:

["Greetings"], completionHandler: handler)

CSSearchableIndex.defaultIndex().deleteAllSearchableItems(completionHandler:handler)

Basic operationsCoreSpotlight Refresher

Page 68: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Best practicesIndexing with CoreSpotlight

Registering as an index delegateUse client state API for asynchronous indexingPerformance considerationsCreating a CoreSpotlight extension

Page 69: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Indexing with CoreSpotlightRegister as an index delegate

Spotlight will reach out to initiate indexing

CSSearchableIndex.defaultSearchableIndex().indexDelegate = self

Page 70: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Indexing with CoreSpotlight

Register as an index delegate

Spotlight will reach out to initiate indexing

func searchableIndex(_: CSSearchableIndex,

reindexAllSearchableItemsWithAcknowledgementHandler acknowledgementHandler: () -> Void) {

// Reindex everything, then call handler

acknowledgementHandler();

}

func searchableIndex(_: CSSearchableIndex,

reindexSearchableItemsWithIdentifiers identifiers: [String],

acknowledgementHandler: () -> Void) {

// Reindex items for the identifiers, then call handler

acknowledgementHandler()

}

Implement CSSearchableIndexDelegate protocol

Page 71: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Indexing with CoreSpotlight

Register as an index delegate

Spotlight will reach out to initiate indexing

func searchableIndex(_: CSSearchableIndex,

reindexAllSearchableItemsWithAcknowledgementHandler acknowledgementHandler: () -> Void) {

// Reindex everything, then call handler

acknowledgementHandler();

}

func searchableIndex(_: CSSearchableIndex,

reindexSearchableItemsWithIdentifiers identifiers: [String],

acknowledgementHandler: () -> Void) {

// Reindex items for the identifiers, then call handler

acknowledgementHandler()

}

Implement CSSearchableIndexDelegate protocol

Page 72: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Indexing with CoreSpotlight

Register as an index delegate

Spotlight will reach out to initiate indexing

func searchableIndex(_: CSSearchableIndex,

reindexAllSearchableItemsWithAcknowledgementHandler acknowledgementHandler: () -> Void) {

// Reindex everything, then call handler

acknowledgementHandler();

}

func searchableIndex(_: CSSearchableIndex,

reindexSearchableItemsWithIdentifiers identifiers: [String],

acknowledgementHandler: () -> Void) {

// Reindex items for the identifiers, then call handler

acknowledgementHandler()

}

Implement CSSearchableIndexDelegate protocol

Page 73: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Indexing with CoreSpotlight

Register as an index delegate

Spotlight will reach out to initiate indexing

func searchableIndex(_: CSSearchableIndex,

reindexAllSearchableItemsWithAcknowledgementHandler acknowledgementHandler: () -> Void) {

// Reindex everything, then call handler

acknowledgementHandler();

}

func searchableIndex(_: CSSearchableIndex,

reindexSearchableItemsWithIdentifiers identifiers: [String],

acknowledgementHandler: () -> Void) {

// Reindex items for the identifiers, then call handler

acknowledgementHandler()

}

Implement CSSearchableIndexDelegate protocol

Page 74: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Using client state for asynchronous updatesIndexing with CoreSpotlight

Allows you to keep your datastore and Spotlight in sync, without blockingAn opaque token stored in Spotlight’s indexUsed with journals or database annotations

Page 75: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Setting client stateIndexing with CoreSpotlight

Index state uses a named index instanceCreate multiple instances if you have more than one data source

Page 76: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Setting client stateIndexing with CoreSpotlight

Index state uses a named index instanceCreate multiple instances if you have more than one data source

let index = CSSearchableIndex(name: "myname")

index.beginBatch()

index.indexSearchableItems(items, completionHandler: nil);

let stateString = String(offset + items.count)

index.endBatch(withClientState: stateString.data(using:NSUTF8StringEncoding)!,

completionHandler: handler)

Page 77: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Setting client stateIndexing with CoreSpotlight

Index state uses a named index instanceCreate multiple instances if you have more than one data source

let index = CSSearchableIndex(name: "myname")

index.beginBatch()

index.indexSearchableItems(items, completionHandler: nil);

let stateString = String(offset + items.count)

index.endBatch(withClientState: stateString.data(using:NSUTF8StringEncoding)!,

completionHandler: handler)

Page 78: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Setting client stateIndexing with CoreSpotlight

Index state uses a named index instanceCreate multiple instances if you have more than one data source

let index = CSSearchableIndex(name: "myname")

index.beginBatch()

index.indexSearchableItems(items, completionHandler: nil);

let stateString = String(offset + items.count)

index.endBatch(withClientState: stateString.data(using:NSUTF8StringEncoding)!,

completionHandler: handler)

Page 79: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Setting client stateIndexing with CoreSpotlight

Index state uses a named index instanceCreate multiple instances if you have more than one data source

let index = CSSearchableIndex(name: "myname")

index.beginBatch()

index.indexSearchableItems(items, completionHandler: nil);

let stateString = String(offset + items.count)

index.endBatch(withClientState: stateString.data(using:NSUTF8StringEncoding)!,

completionHandler: handler)

Page 80: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Setting client stateIndexing with CoreSpotlight

Index state uses a named index instanceCreate multiple instances if you have more than one data source

let index = CSSearchableIndex(name: "myname")

index.beginBatch()

index.indexSearchableItems(items, completionHandler: nil);

let stateString = String(offset + items.count)

index.endBatch(withClientState: stateString.data(using:NSUTF8StringEncoding)!,

completionHandler: handler)

Page 81: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Setting client stateIndexing with CoreSpotlight

Index state uses a named index instanceCreate multiple instances if you have more than one data source

let index = CSSearchableIndex(name: "myname")

index.beginBatch()

index.indexSearchableItems(items, completionHandler: nil);

let stateString = String(offset + items.count)

index.endBatch(withClientState: stateString.data(using:NSUTF8StringEncoding)!,

completionHandler: handler)

Page 82: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Checking client stateIndexing with CoreSpotlight

Fetch client state on launchResume interrupted indexing

Page 83: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

// ** Call on launch to fetch index state and start indexing if needed.

func indexIfNeeded(){

// ** Create a named index instance.

let index = CSSearchableIndex(name: "myname")

// ** Asynchronously fetch our last client state.

index.fetchLastClientState(completionHandler: { (data, error) in

if (error != nil) {

// deal with the error.

} else if (data != expectedData) {

// Index state wasn’t what we expected. Bring CoreSpotlight up to date.

self.doIndex(index, data)

}

})

}

Page 84: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

// ** Call on launch to fetch index state and start indexing if needed.

func indexIfNeeded(){

// ** Create a named index instance.

let index = CSSearchableIndex(name: "myname")

// ** Asynchronously fetch our last client state.

index.fetchLastClientState(completionHandler: { (data, error) in

if (error != nil) {

// deal with the error.

} else if (data != expectedData) {

// Index state wasn’t what we expected. Bring CoreSpotlight up to date.

self.doIndex(index, data)

}

})

}

Page 85: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

// ** Call on launch to fetch index state and start indexing if needed.

func indexIfNeeded(){

// ** Create a named index instance.

let index = CSSearchableIndex(name: "myname")

// ** Asynchronously fetch our last client state.

index.fetchLastClientState(completionHandler: { (data, error) in

if (error != nil) {

// deal with the error.

} else if (data != expectedData) {

// Index state wasn’t what we expected. Bring CoreSpotlight up to date.

self.doIndex(index, data)

}

})

}

Page 86: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

// ** Call on launch to fetch index state and start indexing if needed.

func indexIfNeeded(){

// ** Create a named index instance.

let index = CSSearchableIndex(name: "myname")

// ** Asynchronously fetch our last client state.

index.fetchLastClientState(completionHandler: { (data, error) in

if (error != nil) {

// deal with the error.

} else if (data != expectedData) {

// Index state wasn’t what we expected. Bring CoreSpotlight up to date.

self.doIndex(index, data)

}

})

}

Page 87: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Performance considerationsIndexing with CoreSpotlight

Minimize overhead, optimize storage and database accessUse batching, size batches for memory overheadDon’t block the main threadIndex on a background thread

Page 88: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Catching up in the backgroundCoreSpotlight Extension

The extension can index when your app isn’t runningRecover after restore from backup

Page 89: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Catching up in the backgroundCoreSpotlight Extension

The extension can index when your app isn’t runningRecover after restore from backup

func searchableIndex(_: CSSearchableIndex,

reindexAllSearchableItemsWithAcknowledgementHandler acknowledgementHandler: () -> Void) {

// Reindex everything, then call handler

acknowledgementHandler();

}

func searchableIndex(_: CSSearchableIndex,

reindexSearchableItemsWithIdentifiers identifiers: [String],

acknowledgementHandler: () -> Void) {

// Reindex items for the identifiers, then call handler

acknowledgementHandler()

}

Page 90: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Catching up in the backgroundCoreSpotlight Extension

The extension can index when your app isn’t runningRecover after restore from backup

App Extension Best Practices WWDC 2015

Page 91: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Keeping Content Up to Date

Set expiration dates on items that have a natural life span• CoreSpotlight will call your app to validate expiring item

Use Background Fetch to poll for new contentUse Silent Remote Notifications for push

Page 92: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Keeping Content Up to Date

Set expiration dates on items that have a natural life span• CoreSpotlight will call your app to validate expiring item

Use Background Fetch to poll for new contentUse Silent Remote Notifications for push

What’s New with Multitasking WWDC 2013

Page 93: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Viewed App Content App Content on WebAny App Content

CoreSpotlight NSUserActivity Universal Links

Page 94: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10
Page 95: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10
Page 96: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

When to Submit NSUserActivities?

Adopting Handoff on iOS and OS X WWDC 2014

Page 97: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

NSUserActivityIndexing with NSUserActivity

Designate activities as searchableAdd metadata for search and display

Page 98: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

NSUserActivityIndexing with NSUserActivity

Designate activities as searchableAdd metadata for search and display

let userActivity = NSUserActivity(activityType: “myActivityType");

userActivity.eligibleForSearch = true

userActivity.title = "title"

let attributes = CSSearchableItemAttributeSet(itemContentType: "public.item")

attributes.displayName = …

userActivity.contentAttributeSet = attributes

Page 99: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

NSUserActivityIndexing with NSUserActivity

Designate activities as searchableAdd metadata for search and display

let userActivity = NSUserActivity(activityType: “myActivityType");

userActivity.eligibleForSearch = true

userActivity.title = "title"

let attributes = CSSearchableItemAttributeSet(itemContentType: "public.item")

attributes.displayName = …

userActivity.contentAttributeSet = attributes

Page 100: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

NSUserActivityIndexing with NSUserActivity

Designate activities as searchableAdd metadata for search and display

let userActivity = NSUserActivity(activityType: “myActivityType");

userActivity.eligibleForSearch = true

userActivity.title = "title"

let attributes = CSSearchableItemAttributeSet(itemContentType: "public.item")

attributes.displayName = …

userActivity.contentAttributeSet = attributes

Page 101: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10
Page 102: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Tying them togetherNSUserActivity and CSSearchableItem

NSUserActivity reflects what the user didCSSearchableItem reflects what your app hasrelatedUniqueIdentifier ties them together

Page 103: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Tying them togetherNSUserActivity and CSSearchableItem

NSUserActivity reflects what the user didCSSearchableItem reflects what your app hasrelatedUniqueIdentifier ties them together

let userActivity = NSUserActivity(activityType: "myActivityType");

let attributes = CSSearchableItemAttributeSet(itemContentType: "public.item")

attributes.displayName = “Private content!”

attributes.relatedUniqueIdentifier = “myIdentifier"

userActivity.contentAttributeSet = attributes

Page 104: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Tying them togetherNSUserActivity and CSSearchableItem

NSUserActivity reflects what the user didCSSearchableItem reflects what your app hasrelatedUniqueIdentifier ties them together

let userActivity = NSUserActivity(activityType: "myActivityType");

let attributes = CSSearchableItemAttributeSet(itemContentType: "public.item")

attributes.displayName = “Private content!”

attributes.relatedUniqueIdentifier = “myIdentifier"

userActivity.contentAttributeSet = attributes

Page 105: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Tying them weaklyNSUserActivity and CSSearchableItem

New in iOS 10: weakRelatedUniqueIdentifier • relatedUniqueIdentifier binds strongly• weakRelatedUniqueIdentifier binds weakly

A weakly bound NSUserActivity can exist without a matching CSSearchableItemNot suitable for user controlled content

NEW

Page 106: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Tying them weaklyNSUserActivity and CSSearchableItem

New in iOS 10: weakRelatedUniqueIdentifier • relatedUniqueIdentifier binds strongly• weakRelatedUniqueIdentifier binds weakly

A weakly bound NSUserActivity can exist without a matching CSSearchableItemNot suitable for user controlled content

let userActivity = NSUserActivity(activityType: "myActivityType");

let attributes = CSSearchableItemAttributeSet(itemContentType: "public.item")

attributes.displayName = "Poutine"

attributes.weakRelatedUniqueIdentifier = “myIdentifier"

userActivity.contentAttributeSet = attributes

NEW

Page 107: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Tying them weaklyNSUserActivity and CSSearchableItem

New in iOS 10: weakRelatedUniqueIdentifier • relatedUniqueIdentifier binds strongly• weakRelatedUniqueIdentifier binds weakly

A weakly bound NSUserActivity can exist without a matching CSSearchableItemNot suitable for user controlled content

let userActivity = NSUserActivity(activityType: "myActivityType");

let attributes = CSSearchableItemAttributeSet(itemContentType: "public.item")

attributes.displayName = "Poutine"

attributes.weakRelatedUniqueIdentifier = “myIdentifier"

userActivity.contentAttributeSet = attributes

NEW

Page 108: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

domainIdentifier for NSUserActivityNSUserActivity Deletion

New in iOS 10: Use domainIdentifier with NSUserActivity Part of CSSearchableItemAttributeSetDelete user activities in bulk by domainIdentifier

NEW

Page 109: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

domainIdentifier for NSUserActivityNSUserActivity Deletion

New in iOS 10: Use domainIdentifier with NSUserActivity Part of CSSearchableItemAttributeSetDelete user activities in bulk by domainIdentifier

let userActivity = NSUserActivity(activityType: "myActivityType");

let attributes = CSSearchableItemAttributeSet(itemContentType: "public.item")

attributes.domainIdentifier = "account1"

userActivity.contentAttributeSet = attributes

NEW

Page 110: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

domainIdentifier for NSUserActivityNSUserActivity Deletion

New in iOS 10: Use domainIdentifier with NSUserActivity Part of CSSearchableItemAttributeSetDelete user activities in bulk by domainIdentifier

let ci = CSSearchableIndex.defaultSearchableIndex();

ci.deleteSearchableItems(withDomainIdentifiers:["account1"]) { error in

// ..

}

NEW

Page 111: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Viewed App Content App Content on WebAny App Content

CoreSpotlight NSUserActivity Universal Links

Page 112: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Content available on the web and in app Indexing Universal Links

Index public content, including large indexesReach new users—results shown even if users do not have your appResults shown in Spotlight and Safari

Page 113: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

StepsIndexing Universal Links

1. Allow Indexing Allow Applebot, include domain in iTunes Connect

2. Deep Linking Support Universal Links and Smart App Banners

3. Markup Markup website with schema.org and Open Graph

4. Restoring Update app to properly open deep links

5. Test Test URLs with App Search API Validation Tool

Page 114: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

StepsIndexing Universal Links

1. Allow Indexing Allow Applebot, include domain in iTunes Connect

2. Deep Linking Support Universal Links and Smart App Banners

3. Markup Markup website with schema.org and Open Graph

4. Restoring Update app to properly open deep links

5. Test Test URLs with App Search API Validation Tool

Introducing Search APIs WWDC 2015

Support Universal Links—iOS Developer Library

Page 115: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Supported SchemasIndexing Universal Links

AggregateRatingInteractionCountOffersPriceRangeOrganizationRecipeSearchActionImageObject

Page 116: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Visual Preview in API Validation Tool

https://search.developer.apple.com

NEW

Page 117: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

https://search.developer.apple.com

Visual Preview in API Validation Tool NEW

Page 118: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Visual Preview in API Validation Tool NEW

Page 119: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Title

MarkupDescription

Visual Preview in API Validation Tool NEW

Page 120: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Tying Them All Together

CoreSpotlight

NSUserActivity Universal Links

Page 121: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Tying Them All Together

CoreSpotlight

NSUserActivity Universal Links

NSUserActivity .contentAttributeSet .relatedUniqueIdentifier = CSSearchableItem. uniqueIdentifier

Page 122: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Tying Them All Together

CoreSpotlight

NSUserActivity Universal Links

CSSearchableItem.contentURL = Web page URL

NSUserActivity .contentAttributeSet .relatedUniqueIdentifier = CSSearchableItem. uniqueIdentifier

Page 123: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Tying Them All Together

CoreSpotlight

NSUserActivity Universal Links

NSUserActivity.webpageURL = Web Page URL

CSSearchableItem.contentURL = Web page URL

NSUserActivity .contentAttributeSet .relatedUniqueIdentifier = CSSearchableItem. uniqueIdentifier

Page 124: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Steps and best practicesAdopting Search APIs

Indexing contentRich presentationLaunching into your appCoreSpotlight Search APIOptimize for ranking

Page 125: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Creating a Great Visual ExperienceProvide descriptive title, description, and compelling thumbnail Set the right contentType for your contentUse attributes to fill out the UI

Element CoreSpotlight Web MarkupThumbnail thumbnailURL og:image

Title title og:title

Description contentDescription og:description

Metadatarating, ratingDescriptioncompletionDate, dueDate, startDate,endDate, allDay, fileSize, pageCount

aggregateRating, InteractionCount,Offers, PriceRange, Organization,Recipe, SearchAction, ImageObject

Page 126: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

attributes.titleattributes.contentDescription

attributes.thumbnailURL

Page 127: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

og: imageog: descriptionog: title

Page 128: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

attributes.titleattributes.contentDescriptionattributes.ratingattributes.ratingDescription

attributes.thumbnailURL

Page 129: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

og: image

aggregateRating.reviewCountaggregateRating.ratingValueog: descriptionog: title

Page 130: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Creating a Great User Experience

Make it easy to get your content• Set attributes the user can understand• Keyword stuffing confuses the user and leads to poor ranking

Enable quick actions, like directions and callingLaunch straight to content, without interstitials or multi-step builds

Page 131: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

647 x 1150

Page 132: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

647 x 1150

attributes.latitude attributes.longitude attributes.supportsNavigation

attributes.supportsPhoneCall attributes.phoneNumbers

Page 133: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

647 x 1150

PostalAddress

telephone

Page 134: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Steps and best practicesAdopting Search APIs

Indexing contentRich presentationLaunching into your appCoreSpotlight Search APIOptimize for ranking

Page 135: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Restoring with NSUserActivityUsed for CoreSpotlight and NSUserActivity

Page 136: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Restoring with NSUserActivityUsed for CoreSpotlight and NSUserActivityfunc application(application: UIApplication, continueUserActivity uA: NSUserActivity, restorationHandler: ([AnyObject]?) -> Void) -> Bool { if uA.activityType == CSSearchableItemActionType { if let i = uA.userInfo?[CSSearchableItemActivityIdentifier] as? String { // Show the found item!

}

return true } return false }

Page 137: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Restoring Universal LinksUniversal Link support in your app delegate

Page 138: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Restoring Universal LinksUniversal Link support in your app delegatefunc application(application: UIApplication, continueUserActivity uA: NSUserActivity, restorationHandler: ([AnyObject]?) -> Void) -> Bool { if uA.activityType == NSUserActivityTypeBrowsingWeb { if let url = uA.webPageURL { if let components = NSURLComponents(url: uA.webPageURL, resolvingAgainstBaseURL: true) { let path = components.path, let query = components.query { // Show the found item! } } } return true } return false }

Page 139: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Continue Search in App

Search in App brings users back to your appSimple adoptionLeverage your customized search interfaceWidely adopted in system apps

NEW

Page 140: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

647 x 1150

NEW

Page 141: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

647 x 1150

Users can continue their Search in the App

NEW

Page 142: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

647 x 1150

NEW

Page 143: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Declare that your app supports Search ContinuationAdd a CoreSpotlightContinuation key in your Info.plistImplement user activity support

Enabling Search Continuation NEW

Page 144: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Declare that your app supports Search ContinuationAdd a CoreSpotlightContinuation key in your Info.plistImplement user activity support

Enabling Search Continuation

func application(application: UIApplication, continueUserActivity userActivity:

NSUserActivity, restorationHandler: ([AnyObject]?) -> Void) -> Bool {

if userActivity.activityType == CSQueryContinuationActionType {

if let searchQuery = userActivity.userInfo?[CSSearchQueryString] as? String {

// Invoke your search UI!

}

return true

}

return false

}

NEW

Page 145: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Steps and best practicesAdopting Search APIs

Indexing contentRich presentationLaunching into your appCoreSpotlight Search APIOptimize for ranking

Page 146: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Introducing CoreSpotlight Search API

Search your Spotlight indexSame search that powers Spotlight, Mail, Notes, and moreOne index—great for power and performanceCombine with your own network search for responsiveness and completeness

NEW

Page 147: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

647 x 1150

Page 148: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

CoreSpotlight Search API

API for your application to query it’s own data in the Spotlight indexFast and scalableSimple, easy to use APIPowerful query syntax

playCount > 1 && (composer == “beethoven”cwd || composer=“mozart”cwd) &&

InRange(tempo, 40, 80)

* = “bob*”cwd && textContent=“project updates”cwdt

NEW

Page 149: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

CoreSpotlight Search API

API for your application to query it’s own data in the Spotlight indexFast and scalableSimple, easy to use APIPowerful query syntax

playCount > 1 && (composer == “beethoven”cwd || composer=“mozart”cwd) &&

InRange(tempo, 40, 80)

* = “bob*”cwd && textContent=“project updates”cwdt

NEW

Page 150: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Query Syntax* == “johnny appleseed”

Feature Token ExampleEquality == keywords==“search”

Not Equal != keywords!=“search”

Greater than >, >= pageCount > 10

Less than <, <= pageCount < 10

Range search InRange InRange(pageCount, 5, 10)

AND && fileSize > 100 && pageCount > 10

OR || fileSize > 100 || pageCount > 10

NOT ! !(fileSize > 100 || pageCount > 10)

Field wildcard * * == “search”

Field or content wildcard ** ** == “search”

NEW

Page 151: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

String Matching* == “johnny appleseed”cwdt

Feature Flag

Case insensitive ‘c’

Diacritics insensitive ‘d’

Word matching ‘w’

Tokenized ’t'

NEW

Page 152: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

func search(userQuery : String) {

query.cancel();

let escapedString = userQuery.replacingOccurrences(of: "\\", with: “\\\\")

.replacingOccurrences(of: "\"", with: "\\\"")

let queryString = "**=\"" + escapedString + "\"cwdt"

query = CSSearchQuery(queryString: queryString, attributes: ["displayName"])

query.foundItemsHandler = {

(items : [CSSearchableItem]) -> Void in

/* process received items */

}

query.completionHandler = { (err) -> Void in

/* finish processing */

self.updateDisplay()

}

query.start()

}

NEW

Page 153: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

func search(userQuery : String) {

query.cancel();

let escapedString = userQuery.replacingOccurrences(of: "\\", with: “\\\\")

.replacingOccurrences(of: "\"", with: "\\\"")

let queryString = "**=\"" + escapedString + "\"cwdt"

query = CSSearchQuery(queryString: queryString, attributes: ["displayName"])

query.foundItemsHandler = {

(items : [CSSearchableItem]) -> Void in

/* process received items */

}

query.completionHandler = { (err) -> Void in

/* finish processing */

self.updateDisplay()

}

query.start()

}

NEW

Page 154: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

func search(userQuery : String) {

query.cancel();

let escapedString = userQuery.replacingOccurrences(of: "\\", with: “\\\\")

.replacingOccurrences(of: "\"", with: "\\\"")

let queryString = "**=\"" + escapedString + "\"cwdt"

query = CSSearchQuery(queryString: queryString, attributes: ["displayName"])

query.foundItemsHandler = {

(items : [CSSearchableItem]) -> Void in

/* process received items */

}

query.completionHandler = { (err) -> Void in

/* finish processing */

self.updateDisplay()

}

query.start()

}

NEW

Page 155: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

func search(userQuery : String) {

query.cancel();

let escapedString = userQuery.replacingOccurrences(of: "\\", with: “\\\\")

.replacingOccurrences(of: "\"", with: "\\\"")

let queryString = "**=\"" + escapedString + "\"cwdt"

query = CSSearchQuery(queryString: queryString, attributes: ["displayName"])

query.foundItemsHandler = {

(items : [CSSearchableItem]) -> Void in

/* process received items */

}

query.completionHandler = { (err) -> Void in

/* finish processing */

self.updateDisplay()

}

query.start()

}

NEW

Page 156: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

func search(userQuery : String) {

query.cancel();

let escapedString = userQuery.replacingOccurrences(of: "\\", with: “\\\\")

.replacingOccurrences(of: "\"", with: "\\\"")

let queryString = "**=\"" + escapedString + "\"cwdt"

query = CSSearchQuery(queryString: queryString, attributes: ["displayName"])

query.foundItemsHandler = {

(items : [CSSearchableItem]) -> Void in

/* process received items */

}

query.completionHandler = { (err) -> Void in

/* finish processing */

self.updateDisplay()

}

query.start()

}

NEW

Page 157: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

func search(userQuery : String) {

query.cancel();

let escapedString = userQuery.replacingOccurrences(of: "\\", with: “\\\\")

.replacingOccurrences(of: "\"", with: "\\\"")

let queryString = "**=\"" + escapedString + "\"cwdt"

query = CSSearchQuery(queryString: queryString, attributes: ["displayName"])

query.foundItemsHandler = {

(items : [CSSearchableItem]) -> Void in

/* process received items */

}

query.completionHandler = { (err) -> Void in

/* finish processing */

self.updateDisplay()

}

query.start()

}

NEW

Page 158: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

func search(userQuery : String) {

query.cancel();

let escapedString = userQuery.replacingOccurrences(of: "\\", with: “\\\\")

.replacingOccurrences(of: "\"", with: "\\\"")

let queryString = "**=\"" + escapedString + "\"cwdt"

query = CSSearchQuery(queryString: queryString, attributes: ["displayName"])

query.foundItemsHandler = {

(items : [CSSearchableItem]) -> Void in

/* process received items */

}

query.completionHandler = { (err) -> Void in

/* finish processing */

self.updateDisplay()

}

query.start()

}

NEW

Page 159: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

New Core Spotlight Search APIDemo

Page 160: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Steps and best practicesAdopting Search APIs

Indexing contentRich presentationLaunching into your appCoreSpotlight Search APIOptimizing for ranking

Page 161: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Optimizing for Ranking

Vipul Ved Prakash Apple, Inc.

Page 162: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Insight into Spotlight’s ranking algorithmRanking

Page 163: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Insight into Spotlight’s ranking algorithmRanking

Engagement Ratio Content Popularity Other Factors

Page 164: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Historical app performanceEngagement Ratio

Device Side Per Query Global

Page 165: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

View and Link CountsContent Popularity

URL Reputation NSUserActivity Universal Link Popularity

Page 166: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Universal Link Popularity NEW

Page 167: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Universal Link Popularity NEW

Yosemite National Park 0 0 1 0 0 0 0

Page 168: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Universal Link Popularity NEW

Yosemite

Yellowstone

Zion

Bryce Canyon

Great Basin

Haleakala

Frequency

Yosemite National Park

0 0 0 1 0 0 0 0

0 0 1 0 0 0 01 0 10 0 0 0

Page 169: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Universal Link Popularity NEW

Yosemite

Yellowstone

Zion

Bryce Canyon

Great Basin

Haleakala

Frequency

Yosemite National Park

0

Yellowstone National Park 0 0 1 0 0 0 0

0 0 1 0 0 1 0

1

0 0 1 0 0 0 0

0 0 1 0 0 0 01 0 10 0 0 0

Page 170: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Elements of SuccessBest Practices for Ranking

Follow CoreSpotlight best practicesIndex Universal Links Link NSUserActivities to Universal Links and CoreSpotlight items Provide relevant content and rich presentation Implement continue Search in App

Page 171: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Conclusion

Page 172: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Key Take-Aways

Spotlight is universal search on iOS Customers expect well functioning apps to be searchable If you have not implemented Search APIs, update todayNew features for deeper search and increased engagement

Page 173: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Related Sessions

Engineering Privacy for Your Users Pacific Heights Wednesday 4:00PM

Introducing SiriKit Presidio Wednesday 5:00PM

Increase Usage of Your App With Proactive Suggestions Mission Friday 1:40PM

Page 174: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

Labs

App Search and Spotlight Lab Frameworks Lab A Thursday 12:00PM

Page 175: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10

More Information

https://developer.apple.com/wwdc16/223https://search.developer.apple.com

Page 176: Making the Most of Search APIs - Apple Inc. · 2016-07-08 · Making the Most of Search APIs Vipul Ved Prakash Apple, Inc. John Hörnkvist Apple, Inc. Spotlight Updates in iOS 10