iOSショートカットアプリを作って鍵をNFCで素早く開ける

スマートロックをもっとスマートに解錠したい。

玄関の前まで帰ってきたときに

```
携帯を取り出す → （マスクを外す） → 顔認証を解除 → アプリを探す → アプリを開く → 鍵を開ける
```

というプロセスを踏む必要があるのですが、「アプリを探す → アプリを開く」の２工程をNFCタグを使って削減するアプリを作ります。

特にこのマスク環境下では１工程でも減らしたい。


スマートロックにはGPSで近づくと自動で鍵を開ける設定などもあるのですが、常にGPSをチェックするため電池を激しく消耗し、チェック間隔より手動で開けた方が早いことも多く、
そもそも内廊下のマンションでは電波なんて届かないので使えません。


公式アプリではiOSショートカットに対応していないので、自分で対応するアプリを作り、
そこから公式アプリへリダイレクトさせてしまいます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7132/b8e30d06-d269-d6de-e9c5-5959e3c27edd.gif" width="300">


## NFCタグ
[10枚 NFCステッカー NTAG 213 NFCタグ/ 25 mm（1インチ）黒 円形](https://amzn.to/3aBjQxF)
[<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7132/c4aa6f79-2373-c717-cfb0-3cec08f1aa9c.png" width="300">](https://amzn.to/3aBjQxF)

シールタイプで黒の目立たないものを選びました。
これを玄関部分に貼り付けるのですが、大抵の玄関の扉は金属製だと思うのですが、金属に貼り付けると反応が鈍くなるので注意!
私はインターホンの近くの壁部分に貼り付けました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7132/efdfa476-bee4-fb01-9f62-3dc3a263ec87.jpeg" width="300">

一応、マンションの玄関や廊下部分ですが普通は共用部という扱いですのでご注意ください。


## iOSアプリ作成
特にView部分は必要ないのですがSwift UIで作っています。

### 別アプリを開く

まず公式アプリへリダイレクトさせるアプリを作成していきます。
私の場合[bitlock](https://amzn.to/2Ku1kwq)を使用しているため`lunchBitlock`というアプリ名にしました。
画面を表示した瞬間に公式アプリを開くようにしています。

```swift
import SwiftUI

@main
struct lunchBitlockApp: App {
    @Environment(\.scenePhase) private var scenePhase

    var body: some Scene {
        WindowGroup {
            ContentView()
                .onAppear {
                    lunchApp()
                }
                .onChange(of: scenePhase) { _ in
                    lunchApp()
                }
        }
    }
    
    func lunchApp() -> Void {
        if let url = URL(string: "app.jp.co.bitkey.bitlock:") {
            UIApplication.shared.open(url)
        }
    }
}
```

アプリ個別のURLスキームは公開されていないため調べるのが難しいのですが、
Androidアプリも同名を使っていることが多いので、Google PlayストアのURLに書かれているパッケージ名から推察できたりします。


### ショートカット対応させる
iOSショートカットXcodeのメニューから

```
File → New → File → SiriKit Intent Definition File
```

でショートカット対応させるためのファイルを作成します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7132/08490d32-e13e-1c76-a7ff-f8130d458faa.png">


作ったIntent DefinitionファイルにCustom Intentsを追加します。
特に設定は不要ですが、わかりやすいようにタイトルを設定しておきましょう。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7132/9a2516db-b40f-ca87-b9c7-ff06840db54a.png">

このファイルを追加するだけでiOSショートカットへの対応は完了です。
ショートカットアプリのアクション部分にアプリが表示されるようになります。


## オートメーション設定
ショートカットアプリのオートメーション設定から新しく追加します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7132/ad137d76-b995-b224-f21b-f835ed36e200.png" width="300">

「いつ」に反応させたいNFCタグを登録し、「行う（アクション）」に作ったアプリを登録するとこんな感じのオートメーションができあがります。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7132/2d6fe9e2-f411-2958-dc85-5cabea80459e.png" width="300">


この状態でNFCタグにiPhoneをかざすと自動でアプリが開かれるようになって便利。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/7132/b8e30d06-d269-d6de-e9c5-5959e3c27edd.gif" width="300">



## おわり
疲れてヘトヘトになって帰ってきたときに「アプリを探す」という工程が面倒だったり、別アプリを開いてるときにサクッとアプリが切り替えられるので割と便利です。

私の場合自宅WiFiに接続したときにこのアプリを開くオートメーションも登録しています。
たまにこっちの方が早く反応することもありますが、WiFi切り替え時などに誤爆します。

***公式さん対応してください。。。***