会社休むために実装する
Siri shortcuts
Kazuhiro Kamakura
たてたて
自己紹介
• Kazuhiro Kamakura
• プログラミングに限らず何か作るのが好き

8月のMFT(Maker Faire Tokyoも出ます)
• twitter: @yoyokkTT (たてたて)
• ブログ: http://www.tatetate55.com/
目次
• WWDC2018で発表されたSiriの進化
• Siri shortcutsの開発準備
• NSUserActivityとintentについて
• NSUserActivityで実装
• Intentsでの実装
WWDC2018で発表された
Siriの進化
• Siri shortcuts機能が追加

Siriから直接アプリの様々な機能を呼び出すことが可能に

shortcutアプリも追加される



設定のAdd to Siriからフレーズを登録する
• Siri suggestionsの強化

習慣などから基づいてsuggestしてくれるように
• keynote (0:31:40 )
今回作りたいサンプル
• Siriに「疲れた」と言ったら勤怠メールを上長に送るアプ
リをsiri shortcutsで作る

(すでに定型文を作ってメールを送るアプリは作成済)
疲れた
今日休みます
開発前の事前準備
• iOSの設定 → developer の「SHORTCUTS
TESTING」からDisplay Recent ShortcutsとDisplay
Donations on Lock ScreenをON に
• ロック画面に最近見たSafariのページなどが表示されるの
で注意!!!(プライベートモード必須)
これ→
これ→
Siri shortcutsを
作成するための方法は2種類
• NSUserActivity
• Intents
NSUserActivity
• 実装は簡単
• Intentsと比べてシンプルなことしかできない

siriでアプリを起動したりspotlightでアプリを表示したり
実装手順
• info.plistにNSUserActivityTypesを追加
• NSUserActivityを追加
• App Delegateでhandleする処理を追加
Info.plistに
NSUserActivityTypesを追加
<key>NSUserActivityTypes</key>
<array>
<string>com.hoge.siri</string>
</array>
NSUserActivityを用意
NDAのため削除しています
AppDelegateに追加
extension AppDelegate {
func application(_ application: UIApplication, continue userActivity: NSUserActivity,
restorationHandler: @escaping ([Any]?) -> Void) -> Bool {
if userActivity.activityType == "com.kintai.siri" {
// Restore state for userActivity and userInfo
print(“ここが呼ばれる!")
}
return true
}
}
•
設定のショートカットから
追加が可能に
これだけでsiriからアプリを起動できる!
NDAのため削除しています
デモ動画
NDAのため削除しています><
もっと素早く休みたい
ロック画面で
完結したい
そこでIntents
Intents
• ショートカットのフレーズをカスタマイズできる
• ロック画面にインラインで様々な情報を出せる&そのまま
操作可能
Intentsでの追加
• File → New file → SiriKit Intent Definition Fileで追加
(App groupsの追加忘れずに)
• custom Intentsの追加
• IntentHandler で処理の追加
• Viewを変更する(今回はしない)
File → New file → SiriKit
Intent Definition File
NDAのため削除しています><
custom Intentsの追加
• categoryである程度のパターンは用意されている

OrderやSendなど
• Custom Intet Parameters Shortcut Typesを追加
NDAのため削除しています><
IntentHandlerの修正
• handleのところに何かインラインからやりたい処理を

書く
NDAのため削除しています><
Donate intent ver
let intent = SendMailIntent()
let interaction = INInteraction(intent: intent, response: nil)
interaction.donate() { _ in
print("Donated!")
}
カスタムショートカットを
追加
←増えている
NDAのため削除しています><
デモ動画
NDAのため削除しています><
参考
• 動画 Introduction to Siri Shotrtcut

https://developer.apple.com/videos/play/
wwdc2018/211/
• 動画の下にあるResourceにサンプル等のリンク
• iOS10の時に発表されたSiriKitの内容
おすすめサンプル
&
チュートリアル
• NSUservirity

https://medium.com/@TonyMew/tutorial-adding-
ios-12-siri-shortcuts-to-your-app-easy-way-
edb84fcac66e
• Intents

https://medium.com/flawless-app-stories/
wwdc-2018-for-ios-developers-siri-shortcuts-
e8e4a78f0ad7

Siri shortcutlts LT