Shortcuts"。「ロックスクリーンから呼び出せる」というところに、プラットフォームの制約の中で取捨選択するしかないいちアプリ開発者としては圧倒的魅力を感じざるを得ません。「何がどこまでできるのか、どう実装するのか」を掴むべく、まずはその最小実装を確認してみました。Shortcuts」とサンプルコード「SoupChef」です。Shortcutsの実装方法としては、以下の2種類があります。Shortcutsの最小実装だけを紹介します。Appleのサンプル「SoupChef」は両方の実装が入っており、それはそれでありがたいのですが、初めて挑む人にはどのコードがどっち用なのか、たとえばIntentsを使わない場合はどれを省けるのかといったことがわかりづらいと思うので、そのあたりを本記事で紐解ければと。Shortcutsの実装は、次の3つの手順で行います。Shortcutsを実現してみます。ショートカットを定義するInfo.plistに次のようにNSUserActivityTypesを定義します。Intents次のようにNSUserActivityを用意します。Shortcutsに関係するポイントとしては、isEligibleForPredictionプロパティにtrueをセットするsuggestedInvocationPhraseプロパティをセットするここにセットしたフレーズがショートカットの音声コマンドをユーザーに録音してもらう画面でサジェストされるこれぐらいです。Shortcutsを行うだけであれば省略可能でした3。検索窓(Spotlight)からのテキストによる検索にも対応させたい場合に必要なのではないでしょうか。作成したNSUserActivityオブジェクトを、ショートカットを提供するUIViewControlllerのuserActivityプロパティ(正確にはUIResponderのプロパティ)にセットします。NSUserActivity.myActivityここでもAppleのサンプルでは次のようにupdateUserActivityState(_)をオーバーライドしてNSUserActivityのaddUserInfoEntries(from:)メソッドでuserInfoのデータを供給する実装が入っていましたが、これもなくても動作しました。userInfo)}ショートカットでアプリが起動する際に、アプリの状態を復元するために必要なデータ(userInfo)がある場合に実装すべきものと思われます。APIs」サンプルを実行してみつつコードを読んでみると非常にわかりやすいです。使うものの2種類が実装してあり、コードがシンプルなのでどのプロパティが何に対応してるのかがわかりやすいです。ショートカットをハンドルするショートカットが呼び出されてアプリが起動する際、UIApplicationDelegateのapplication(_:continue:restorationHandler:)が呼び出されるので、そこで渡されてくるアクティビティ(NSUserActivity)をハンドルします。false}ここではactivityTypeでどのアクティビティかを判定し、あとは愚直にperformSegueで画面Bに遷移させているだけです。Shortcutを登録ロックスクリーンから登録したフレーズで呼び出すこれでアプリが起動し、画面Bまで自動的に遷移しました。アプリはバックグラウンドで生きている必要があるのか?気になったのが、UIViewControllerのuserActivityプロパティに当該NSUserActivityオブジェクトをセットした点です。Controllerがショートカットのdonatorであり、アプリが生きてないと呼び出せないのか?と。Shortcutは動作するか試してみました。