138
© 2016 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple. App Frameworks #WWDC16 Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering Scott Andrus SiriKit Engineering

225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

  • Upload
    others

  • View
    5

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

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

App Frameworks #WWDC16

Session 225

Extending Your Apps with SiriKit

Vineet Khosla SiriKit EngineeringDiana Huang SiriKit EngineeringScott Andrus SiriKit Engineering

Page 2: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Adding SiriKit

Intents Extension AppIntents UI Extension

Page 3: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Adding SiriKit

Intents Extension AppIntents UI Extension

Confirm HandleResolve

Page 4: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Agenda

Preparing to adopt SiriKit

Page 5: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Agenda

Preparing to adopt SiriKitAdding your first Intents extension

Page 6: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Agenda

Preparing to adopt SiriKitAdding your first Intents extensionProviding a user interface in Siri

Page 7: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

UnicornChat

Page 8: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Preparing to Adopt SiriKit

Page 9: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Preparing to Adopt SiriKit

Page 10: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Preparing to Adopt SiriKit

Embedded frameworks

Page 11: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Preparing to Adopt SiriKit

Embedded frameworksUnit tests

Page 12: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Preparing to Adopt SiriKit

Embedded frameworksUnit testsArchitecting your extensions

Page 13: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Embedded frameworksPreparing to Adopt SiriKit

Page 14: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Embedded frameworksPreparing to Adopt SiriKit

Networking

Page 15: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Embedded frameworksPreparing to Adopt SiriKit

NetworkingData model

Page 16: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Embedded frameworksPreparing to Adopt SiriKit

NetworkingData modelDecision-making logic

Page 17: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Embedded frameworksPreparing to Adopt SiriKit

NetworkingData modelDecision-making logicUser interfaces

Page 18: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Embedded frameworksPreparing to Adopt SiriKit

NetworkingData modelDecision-making logicUser interfaces

Page 19: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Embedded frameworksPreparing to Adopt SiriKit

App Extension Best Practices WWDC 2015

NetworkingData modelDecision-making logicUser interfaces

Page 20: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Unit testsPreparing to Adopt SiriKit

Page 21: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Unit testsPreparing to Adopt SiriKit

Mock intents

Page 22: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Unit testsPreparing to Adopt SiriKit

Mock intentsMake sure your app responds appropriately

Page 23: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Architecting your extensionsPreparing to Adopt SiriKit

SendMessageIntent

StartAudioCallIntent

StartVideoCallIntent

Page 24: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Architecting your extensionsPreparing to Adopt SiriKit

SendMessageIntent

StartAudioCallIntent

StartVideoCallIntent

Page 25: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Architecting your extensionsPreparing to Adopt SiriKit

SendMessageIntent

StartAudioCallIntent

StartVideoCallIntent

Page 26: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Architecting your extensionsPreparing to Adopt SiriKit

SendMessageIntent

StartAudioCallIntent

StartVideoCallIntent

Page 27: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Adding Your First Intents Extension

Diana Huang SiriKit Engineering

Page 28: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Getting Started

Page 29: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Getting Started

Add extension target

Page 30: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Getting Started

Add extension targetConfigure Info.plist

Page 31: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Getting Started

Add extension targetConfigure Info.plistModify principal class

Page 32: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Adding an extension target Intents Extension

Page 33: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Adding an extension target Intents Extension

Page 34: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Adding an extension target Intents Extension

Page 35: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Info.plistIntents Extension

Page 36: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Info.plistIntents Extension

Info.plist

IntentsSupported IntentsRestrictedWhileLocked

NSExtension

NSExtensionAttributes

Page 37: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Info.plistIntents Extension

Info.plist

IntentsSupported IntentsRestrictedWhileLocked

NSExtension

NSExtensionAttributes

IntentsSupported

Page 38: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Info.plistIntents Extension

Info.plist

IntentsSupported IntentsRestrictedWhileLocked

NSExtension

NSExtensionAttributes

IntentsRestrictedWhileLocked

Page 39: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Principal classIntents Extension

Page 40: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Principal classIntents Extension

Subclass of INExtension

Page 41: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Principal classIntents Extension

Subclass of INExtensionINIntentHandlerProviding

Page 42: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Principal classIntents Extension

Subclass of INExtensionINIntentHandlerProviding• handlerForIntent

Page 43: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Principal classIntents Extension

Subclass of INExtensionINIntentHandlerProviding• handlerForIntent• handler class must conform to specific intent handling protocol

Page 44: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

DemoCreating my first Intents extension

Page 45: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

ResolveResolve, Confirm, Handle

Page 46: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

ResolveResolve, Confirm, Handle

Validate and clarify parameters

Page 47: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

ResolveResolve, Confirm, Handle

Validate and clarify parametersImplement it if you might need Siri to help ask users

Page 48: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

ResolveResolve, Confirm, Handle

Page 49: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

ResolveResolve, Confirm, Handle

recipients

Page 50: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

ResolveResolve, Confirm, Handle

Contact search recipients

Page 51: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

ResolveResolve, Confirm, Handle

Contact search• Exactly one match

recipients

Page 52: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

ResolveResolve, Confirm, Handle

Contact search• Exactly one match• Two or more matches

recipients

Page 53: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

ResolveResolve, Confirm, Handle

Contact search• Exactly one match• Two or more matches• No match

recipients

Page 54: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

ResolveResolve, Confirm, Handle

Contact search• Exactly one match• Two or more matches• No match

recipientsResolve

Page 55: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

ResolveResolve, Confirm, Handle

recipientsResolve

Page 56: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

ResolveResolve, Confirm, Handle

Contact search recipientsResolve

Page 57: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

ResolveResolve, Confirm, Handle

Contact search recipientsResolve content

Page 58: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

ResolveResolve, Confirm, Handle

Contact searchNeed a value to proceed

recipientsResolve content

Page 59: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

ConfirmResolve, Confirm, Handle

recipientsResolve content

Page 60: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

ConfirmResolve, Confirm, Handle

Confirm

recipientsResolve content

Page 61: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

ConfirmResolve, Confirm, Handle

Dry run• Tell Siri how it went

Confirm

recipientsResolve content

Page 62: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

ConfirmResolve, Confirm, Handle

Dry run• Tell Siri how it went

Confirm authenticated?

recipientsResolve content

Page 63: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

HandleResolve, Confirm, Handle

Just handle it!• Again, tell Siri how it went

Confirm authenticated?

Handle

recipientsResolve content

Page 64: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

DemoFilling in my app logic

Page 65: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Resume state in your appNSUserActivity

Page 66: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Resume state in your appNSUserActivity

Siri creates one by default

Page 67: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Resume state in your appNSUserActivity

Siri creates one by default• ActivityType is intent class name

Page 68: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Resume state in your appNSUserActivity

Siri creates one by default• ActivityType is intent class name

You can provide one to pass custom data

Page 69: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Resume state in your appNSUserActivity

Siri creates one by default• ActivityType is intent class name

You can provide one to pass custom dataINInteraction

Page 70: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

DemoProviding my own NSUserActivity

Page 71: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

User-Specific Vocabulary

Page 72: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

User-Specific Vocabulary

Phrases unique to your app and user

Page 73: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

User-Specific Vocabulary

Phrases unique to your app and user• e.g. contact names

Page 74: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

User-Specific Vocabulary

Phrases unique to your app and user• e.g. contact names

Help Siri understand what users mean

Page 75: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

User-Specific Vocabulary

Phrases unique to your app and user• e.g. contact names

Help Siri understand what users meanINVocabulary API call from main app

Page 76: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

User-Specific Vocabulary

Phrases unique to your app and user• e.g. contact names

Help Siri understand what users meanINVocabulary API call from main app• NOT your extension

Page 77: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

// User-Specific Vocabulary - UnicornChat

class UCAddressBookManager {

// This method is called whenever there is a contact change

func updateSiriKnowledgeOfContacts() {

// provide the updated list of favorites' unicorn names to Siri

var unicornNames = OrderedSet(array: self.sortedFavoriteUnicornNames)

INVocabulary.shared().setVocabularyStrings(unicornNames, of:

INVocabularyStringType.contactName)

}

}

Page 78: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

// User-Specific Vocabulary - UnicornChat

class UCAddressBookManager {

// This method is called whenever there is a contact change

func updateSiriKnowledgeOfContacts() {

// provide the updated list of favorites' unicorn names to Siri

var unicornNames = OrderedSet(array: self.sortedFavoriteUnicornNames)

INVocabulary.shared().setVocabularyStrings(unicornNames, of:

INVocabularyStringType.contactName)

}

}

Page 79: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

// User-Specific Vocabulary - UnicornChat

class UCAddressBookManager {

// This method is called whenever there is a contact change

func updateSiriKnowledgeOfContacts() {

// provide the updated list of favorites' unicorn names to Siri

var unicornNames = OrderedSet(array: self.sortedFavoriteUnicornNames)

INVocabulary.shared().setVocabularyStrings(unicornNames, of:

INVocabularyStringType.contactName)

}

}

Page 80: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

// User-Specific Vocabulary - UnicornChat

class UCAddressBookManager {

// This method is called whenever there is a contact change

func updateSiriKnowledgeOfContacts() {

// provide the updated list of favorites' unicorn names to Siri

DispatchQueue(label: "UCSiriVocabulary").asynchronously(execute: { () -> Void in

var unicornNames = OrderedSet(array: self.sortedFavoriteUnicornNames)

INVocabulary.shared().setVocabularyStrings(unicornNames, of:

INVocabularyStringType.contactName)

})

}

}

Page 81: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

// User-Specific Vocabulary - UnicornChat

class UCAddressBookManager {

// This method is called whenever there is a contact change

func updateSiriKnowledgeOfContacts() {

// provide the updated list of favorites' unicorn names to Siri

DispatchQueue(label: "UCSiriVocabulary").asynchronously(execute: { () -> Void in

var unicornNames = OrderedSet(array: self.sortedFavoriteUnicornNames)

INVocabulary.shared().setVocabularyStrings(unicornNames, of:

INVocabularyStringType.contactName)

})

}

}

Page 82: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

// User-Specific Vocabulary - UnicornChat

class UCAddressBookManager {

// This method is called whenever there is a contact change

func updateSiriKnowledgeOfContacts() {

// provide the updated list of favorites' unicorn names to Siri

DispatchQueue(label: "UCSiriVocabulary").asynchronously(execute: { () -> Void in

var unicornNames = OrderedSet(array: self.sortedFavoriteUnicornNames)

INVocabulary.shared().setVocabularyStrings(unicornNames, of:

INVocabularyStringType.contactName)

})

}

}

Page 83: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering
Page 84: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Providing a User Interface with SiriKit

Scott Andrus SiriKit Engineering

Page 85: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

UI Extensions Increase Your App’s Impact

Page 86: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

UI Extensions Increase Your App’s Impact

Your view alongside Siri

Page 87: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

UI Extensions Increase Your App’s Impact

Your view alongside SiriExperiences unique to your application

Page 88: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

UI Extensions Increase Your App’s Impact

Your view alongside SiriExperiences unique to your applicationUser-specific customization

Page 89: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

UI Extensions Increase Your App’s Impact

Your view alongside SiriExperiences unique to your applicationUser-specific customizationInformation Siri might not otherwise show

Page 90: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

UI Extensions Increase Your App’s Impact

Your view alongside SiriExperiences unique to your applicationUser-specific customizationInformation Siri might not otherwise show

Page 91: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

How to get startedAdd UI Extension Target to Xcode

Page 92: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Add Intents UI Extension target

How to get startedAdd UI Extension Target to Xcode

Page 93: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Add Intents UI Extension targetEmbed in application

How to get startedAdd UI Extension Target to Xcode

Page 94: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Info.plist

NSExtension

NSExtensionAttributes

Info.plistIntents UI Extension

IntentsSupported

Page 95: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Info.plist

NSExtension

NSExtensionAttributes

Info.plistIntents UI Extension

IntentsSupported

Page 96: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Siri

Page 97: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Siri

configure(with interaction:...)

Page 98: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

UI extension

Siri

configure(with interaction:...)

Page 99: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

UI extension

Siri UIViewController : INUIHostedViewControlling

configure(with interaction:...)

Page 100: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

UI extensionINInteractionSiri UIViewController :

INUIHostedViewControllingconfigure(with interaction:...)

Page 101: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

INIntentHandlingStatus

INIntentResponse

INIntent

Breaking it downINInteraction

INInteraction

Page 102: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

INIntentHandlingStatus

INIntentResponse

INIntent

Breaking it downINInteraction

The handled (or to-be-handled) INIntent

INInteraction

Page 103: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

INIntentHandlingStatus

INIntentResponse

INIntent

Breaking it downINInteraction

The handled (or to-be-handled) INIntentThe provided INIntentResponse

INInteraction

Page 104: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

INIntentHandlingStatus

INIntentResponse

INIntent

Breaking it downINInteraction

The handled (or to-be-handled) INIntentThe provided INIntentResponseINIntentHandlingStatus INInteraction

Page 105: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Implementing Your View Controller

Page 106: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Implementing Your View Controller

Principal class

Page 107: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Implementing Your View Controller

Principal classSubclass of UIViewController

Page 108: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Implementing Your View Controller

Principal classSubclass of UIViewControllerConfigure with interaction

Page 109: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Implementing Your View Controller

Principal classSubclass of UIViewControllerConfigure with interactionProvided view context

Page 110: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Implementing Your View Controller

Principal classSubclass of UIViewControllerConfigure with interactionProvided view context

Page 111: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Implementing Your View Controller

Principal classSubclass of UIViewControllerConfigure with interactionProvided view context

Page 112: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Implementing Your View Controller

Principal classSubclass of UIViewControllerConfigure with interactionProvided view contextDesired size in the completion

Page 113: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

DemoBuilding a SiriKit UI extension

Page 114: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering
Page 115: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Siri Gives You Override Control

Page 116: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Siri Gives You Override Control

Implement INUIHostedViewSiriProviding

Page 117: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Siri Gives You Override Control

Implement INUIHostedViewSiriProvidingProperties for displaying messages and maps

Page 118: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Siri Gives You Override Control

Implement INUIHostedViewSiriProvidingProperties for displaying messages and mapsOpt-in to displaying a particular interface

Page 119: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Siri Gives You Override Control

Implement INUIHostedViewSiriProvidingProperties for displaying messages and mapsOpt-in to displaying a particular interfaceSiri will accommodate your view’s content

Page 120: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

}

func configure(with interaction: INInteraction!, context: INUIHostedViewContext,

completion: ((CGSize) -> Void)!) {

// Configure your view

completion(self.extensionContext!.hostedViewMaximumAllowedSize)

}

class IntentViewController: UIViewController, INUIHostedViewControlling,

Page 121: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

INUIHostedViewSiriProviding {

var displaysMessage: Bool {

return true

}

}

func configure(with interaction: INInteraction!, context: INUIHostedViewContext,

completion: ((CGSize) -> Void)!) {

// Configure your view

completion(self.extensionContext!.hostedViewMaximumAllowedSize)

}

class IntentViewController: UIViewController, INUIHostedViewControlling,

Page 122: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

INUIHostedViewSiriProviding {

var displaysMessage: Bool {

return true

}

}

func configure(with interaction: INInteraction!, context: INUIHostedViewContext,

completion: ((CGSize) -> Void)!) {

// Configure your view

completion(self.extensionContext!.hostedViewMaximumAllowedSize)

}

class IntentViewController: UIViewController, INUIHostedViewControlling,

Page 123: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

INUIHostedViewSiriProviding {

var displaysMessage: Bool {

return true

}

}

func configure(with interaction: INInteraction!, context: INUIHostedViewContext,

completion: ((CGSize) -> Void)!) {

// Configure your view

completion(self.extensionContext!.hostedViewMaximumAllowedSize)

}

class IntentViewController: UIViewController, INUIHostedViewControlling,

Page 124: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

DemoTelling Siri about our interface

Page 125: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering
Page 126: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering
Page 127: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Considerations

Page 128: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Considerations

Be memory conscious

Page 129: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Considerations

Be memory consciousMinimum and maximum view sizes

Page 130: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Considerations

Be memory consciousMinimum and maximum view sizesFlexible and adaptive layout patterns

Page 131: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Summary

Page 132: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Summary

Prepare to adopt SiriKit

Page 133: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Summary

Prepare to adopt SiriKitAdd your first Intents extension

Page 134: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Summary

Prepare to adopt SiriKitAdd your first Intents extensionProvide a user interface in Siri

Page 135: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

More Information

https://developer.apple.com/wwdc16/225

Page 136: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Related Sessions

Introducing SiriKit Presidio Wednesday 5:00PM

App Extension Best Practices WWDC 2015

Page 137: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering

Labs

SiriKit Lab Frameworks Lab C Thursday 3:00PM

SiriKit Lab Frameworks Lab B Friday 9:00AM

Page 138: 225 Extending Your Apps with SiriKit 05 FINAL · 2016-07-08 · Session 225 Extending Your Apps with SiriKit Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering