はじめての App Clip 【概要編】

## App Clip とは？

App Clip は iOS14 から利用できる機能で、特定のアプリケーションの一部の機能をミニアプリとしてダウンロード・利用できる仕組みです。これによりユーザはアプリの一部の体験を数秒で使えるようになり、必要ならアプリ全体をダウンロードすることも可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292456/5b544fb7-4e42-0b0f-d7a5-d79ff40cfd10.png)



## App Clip の起動方法

App Clip の起動方法には主に5種類あり、それぞれ説明していきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292456/fc2bb694-dcf6-662d-e363-0bbc8de892df.png)


https://developer.apple.com/documentation/app_clips/developing_a_great_app_clip



### NFC Tag + Visual Code

URL が記録されている NFC タグを読み込みこむか、Visual Code と呼ばれるコードをカメラなどでスキャンすることで App Clip をすぐに起動させることができます。こちらの新しい `App Clip Codes` に関しては今年の後半に利用可能になるそうです 👀

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292456/65c97fb2-d9a0-4b99-2bec-bb3bc5e49b71.png)


### Siri

Siri から端末の位置情報に応じたサジェストをタップすることで起動させることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292456/ef568839-feec-3cc9-7b6c-ca1c47eee2d0.png)


### Safari

Web サイトのスマートアップバナーをタップすることで、起動させることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292456/a5820232-9e5c-0640-cf86-985c0fb6cbfe.png)


### Message

メッセージアプリで共有しているリンクをタップすることで起動させることができます。

### Maps

App Clip を位置情報と関連付けることで、マップアプリでサジェストされ App Clip を起動させることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292456/0cb7506d-e709-6547-2edd-0279ca2653c4.png)




## 設計のベストプラクティス


### 重要な機能に焦点を当てる

App Clips は素早いインタラクションにフォーカスしているので、目の前のタスクを実行するのに必要な機能だけに制限させる。

### マーケティング目的でのみ使用しない

App Clips はユーザがタスクを実行することに価値を提供しているので、サービスや製品を宣伝したりする手段として App Clip に広告を表示したりしない。

### シンプルなユーザインターフェースにする

TabBar や NavigationBar などといった複雑なアプリ設計にはせず、最低限必要な画面・コンポーネントで UI を構築する。

### 起動時、タスクの実行に関連性の高い部分を表示する

タスクの実行に不要な手順はできるだけ省き、タスクの実行に最低限必要なステップのみ表示する。

### すぐに実行できるようにする

起動時間をユーザにまたせる必要がないので、できるだけ素早く利用できるするためにアセットなどを含めておく。

### App Clip サイズを小さくする

起動までの時間を短縮させるためにバイナリのサイズは**10 MB以下**である必要がある。また、即時性を損なうような追加のダウンロードなどはしない。

### App Clip を共有可能にする

App Clip を特定のポイントへ共有する機能を提供することで、ユーザは Message アプリなどで App Clip を他のユーザにシェアすることができる。

### 支払いを簡単にする

支払い情報の入力は長くてミスが起こりやすいので、Apple Pay をサポートして素早く決済できるようにする。

### App Clip を利用する前にアカウントの作成を要求しない

アカウントの作成は時間と労力が必要なタスクなので、なるべく App Clip ではサインインが必要ないように設計をする。また、どうしてもサインインが必要な場合は、`Sign in with Apple` を使用してより簡単に素早くユーザをサインインさせる。

### アプリで使い慣れた体験を提供する

ユーザがアプリ全体をインストールすると、デバイス上の App Clip が置き換えられるため、なるべく App と App Clip をシームレスに使用できるように設計する。例えば、App Clip でサインインしたユーザを App でもサインイン状態にするなど。


## App Clip の開発

### 利用可能な Framework

App Clip は `SwiftUI`と`UIKit` が利用でき、アプリ全体で利用可能な Framework にアクセスすることもできます。ただし、App Clip で下記の Framework を利用することはできません。これらの Framework にアクセスした場合は、コンパイルエラーにはなりませんが、Framework であるプロパティなどにアクセスした場合などに意図した値が返ってこない可能性があります.

- CallKit
- CareKit
- CloudKit
- HealthKit
- HomeKit
- ResearchKit
- SensorKit
- Speech

### プライバシー保護

App Clip はユーザのプライバシーを保護するために下記のような機能が制限されています。

#### アクセス不可

- Apple Music 及び Media
- 連絡先、ファイル、メッセージ、リマインダー、写真などのアプリからのデータ
- Motion と Fitness データ

#### 機能制限

- [SKAdNetwork](https://developer.apple.com/documentation/storekit/skadnetwork) が提供する機能
- [App Tracking Transparency](https://developer.apple.com/documentation/apptrackingtransparency) でユーザを追跡するための承認リクエスト
- UIDevice の [name](https://developer.apple.com/documentation/uikit/uidevice/1620015-name) と [identifierForVendor](https://developer.apple.com/documentation/uikit/uidevice/1620059-identifierforvendor) は空文字が返される
- 継続的な位置情報へのアクセス要求
   - 次の日の午前4時にアクセス設定がリセットされるが、使用中の場合は例外的に承認を要求する場合がある
- URLSession による Background Networking
- Background モードで有効になる機能
- App Clip が使用されていない時の Bluetooth 接続