Home Screen Quick Actionsを追加する方法について

## 概要
iPhoneのホーム画面でアプリアイコンを長押しすると、「Appを削除・Appを共有・ホーム画面を編集」というような、選択肢のアラートが出現しますよね。あのアラートのことを **『Home Screen Quick Actions』** という呼ぶらしいです。
![IMG_2291.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2630898/a7a48b59-2a6b-b9bf-7307-5da996ba7e21.png)
そんな、『Home Screen Quick Actions』の利点って、例えば決済関連アプリだとQRコードがすぐに表示されたり、slackだと非通知モードにできたりとアプリによっては様々ですが、とにかくクイックにアクションを起こせて使い方によってはとてつもなく威力を発すると思います。
今回はそんな『Home Screen Quick Actions』について解説します。(アクションアラートをホーム画面のアイコン長押しで表示までは実装できますが、アラート選択後の挙動はまだ実装できていませんので、完成次第追記します。)

### この記事はこんな方におすすめ
- アプリの使いやすさをより向上させたい方
- アプリのUXを向上させたい方
- 他のアプリでも実装されている、ホーム画面でアプリアイコンを長押しすると出てくる「アレ」を実装したい方

## Home Screen Quick Actionsについて
概要でも解説したように、ホーム画面に表示されているアプリアイコンを長押しすると出現する選択肢がいくつか出てくるあのアラートのことです。
参考文献として、アップル公式のリファレンスもさいごに載せているので、そちらも確認しながら実装していただければと思います。
ちなみに関連クラスは、**「UIApplicationShortcutItem・UIApplicationShortcutIcon・UIApplicationShortcutIcon.IconType」** の3つです。


## 実装方法

```AppDelegate.Swift
import UIKit

@main
class AppDelegate: UIResponder, UIApplicationDelegate {
    
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
        addHomeScreenQuickActions（）　// ポイント③
        return true
    }

    　// ポイント②
    func application(_ application: UIApplication,
                             performActionFor shortcutItem: UIApplicationShortcutItem,
                             completionHandler: @escaping (Bool) -> Void) {
        // ここで「shortcutItem」を活用して、ホーム画面で選択されたものに応じた挙動を実装する
    }
}

// MARK: - Private

private extension AppDelegate {
    　// ポイント①
    func addHomeScreenQuickActions() {
        let registerLocate = UIMutableApplicationShortcutItem(type: "registerLocate",
                                                               localizedTitle: "行きたい場所を登録する",
                                                               localizedSubtitle: "",
                                                               icon: UIApplicationShortcutIcon(systemImageName: "mappin.circle.fill"),
                                                               userInfo: nil)
        UIApplication.shared.shortcutItems = [registerLocate]
    }
}

```
###### ポイント①
HomeScreenQuickActionsにアクションを追加するヘルパー関数です。
UIMutableApplicationShortcutItemをインスタンス化する際に、HomeScreenQuickActionで表示したい「文字列」と「アイコン」を指定することができます。
今回の例で言うと、行きたい場所をすぐにサーバーに登録できるようにする実装を想定しています。
そして、インスタンス化された、UIMutableApplicationShortcutItemをUIApplication.shared.shortcutItemsに追加します。

###### ポイント②
Home Screen Quick Actionsがホーム画面で選択された時の挙動を実装をするための関数で、リファレンス曰くInfo.plistの中の情報をいじってUIMutableApplicationShortcutItemのtypeを一意の文字列にして、識別することで実際に選ばれたアクションの処理を実行することができる？みたいです。（もう少し深掘りしてみます。）

###### ポイント③
さいごに、アプリに起動時にアクションを使用できるようにUIApplication.shared.shortcutItemsにアラートを追加してあげます！

上記のように実装することで、以下のようにホーム画面のアイコンをロングプレスすると自前で追加したHomeScreenQuickActionを実装することができます。

**【個人開発アプリで実装中の一枚】**
![IMG_2293.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2630898/64f7d603-b8c0-3d24-3325-3fd0e0c0bd59.png)

何度も言うようですが、選択肢を追加することはできましたが、ここからどのように実装していくべきかはわかっていないので、勉強が必要です...。(笑)

## おまけ
おまけです。他アプリのクイックアクションを見ていていいなと思ったのは、純正アルバムアプリの『1年前』の選択肢です。何だか、エモくないですか。

![IMG_2292.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2630898/4298ebe1-3799-824a-f530-0569f03ccc22.png)

本当に一年前の写真が出てくるので今後多用してしましそうです。

## さいごに
先述の通り、アプリに導入しようとしたのですが、アクションを追加するまでしかできず、とりあえずブランチを分けて実装を中断していますが、今後実装できそうであればまた続きを書くか別の記事を書こうと思います！

## 参考文献
**Add Home Screen Quick Actions(Apple公式リファレンス)** 

https://developer.apple.com/documentation/uikit/menus_and_shortcuts/add_home_screen_quick_actions