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:)以降に表示されていない。