Swift Siriショートカット実装、動作
参考
Qiita「[iOS 12]Siri Shortcutsの最小実装 – NSUserActivity編」
PEAKS「iOS 12 Programming」
概要
Single View Appプロジェクト、Siriショートカット追加
実装
Info.plist
NSUserActivityTypes追加
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSUserActivityTypes</key>
<array>
<string>jp.cloudsquare.ios.ExampleSiriShortcut.siri</string>
</array>
:
省略
:
</dict>
</plist>
ViewController.swift
import追加
import UIKit import Intents
NSUserActivity登録
override func viewDidLoad() {
super.viewDidLoad()
super.userActivity = NSUserActivity.userActivity
print("viewDidLoad")
}
NSUserActivity生成
extension NSUserActivity {
public static let myActivityType = "jp.cloudsquare.ios.ExampleSiriShortcut.siri"
public static var userActivity: NSUserActivity {
let userActivity = NSUserActivity(activityType: myActivityType)
userActivity.isEligibleForSearch = true
userActivity.isEligibleForPrediction = true
userActivity.title = "Example Siri Shortcut"
userActivity.suggestedInvocationPhrase = "Test"
return userActivity
}
}
AppDelegate.swift
ショートカットからの呼び出し先:UIApplicationDelegateのapplication(_:continue:restorationHandler:)
trueを返せば画面が呼び出される
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
if userActivity.activityType == NSUserActivity.myActivityType {
print("application(_:continue:restorationHandler:)")
return true
}
return false
}
動作
ショートカット登録
呼び出し
Siriを呼び出し、登録したフレーズを発声
画面が起動されます
呼び出しに関して
Siriショートカットからの呼び出し時、ViewControllerのviewDidLoad等は呼ばれない。
application(_:continue:restorationHandler:)以降に表示されていない。












