ハイライト
iOS 17 では、デジタル通話シナリオにおける App Clip サイズの上限が 50MB に増加し、デフォルトの App Clip Links 設定不要の通話リンクが追加され、あらゆるアプリが Safari を経由せずに App Clip を直接呼び出せるようになります。
主な内容
App Clip は、ユーザーが完全版 App をダウンロードしなくても中核機能を体験できる仕組みです。iOS 17 では、App Clip の構築と配布のハードルが 3 つの面から下がりました。
サイズ上限: デジタル起動は 50MB、物理起動は 15MB
(00:59)App Clip は即時起動を保つために小さいサイズである必要があります。ただし利用シーンによってネットワーク条件は大きく異なります。NFC タグや QR コードは屋外のモバイル通信で使われることが多く、Messages のリンクや Safari ページは Wi-Fi 環境で開かれることがよくあります。
iOS 17 では、2 種類の起動方法ごとにサイズ制限が分かれています。
| 起動方法 | サイズ制限 | 適した場面 |
|---|---|---|
| 物理起動(NFC、QR コード、App Clip Code) | 15MB | 屋外、移動中 |
| デジタル起動(Messages、Safari、Spotlight) | 50MB | Wi-Fi、屋内 |
| iOS 15 以前 | 10MB | 古いシステムとの互換 |
(01:53)50MB あれば、より多くのリソースを含められます。これまでサイズを抑えるために実行時に素材をダウンロードしていた場合でも、App Clip に直接同梱して初回体験をより完成度の高いものにできます。ゲームの体験版、オンライン注文、コンテンツのプレビューなどの場面で効果があります。
Default App Clip Links: 設定不要の起動リンク
(02:19) 以前は、URL を通じて App Clip を呼び出すには、Apple App Site Association ファイルと関連メタデータを独自の Web サイトでホストする必要がありました。これは、Web サイトを持っていない開発者、または Web サイトの構成を維持したくない開発者にとっては負担です。
iOS 16.4 以降では、App Store Connect が Default App Clip Link を自動生成します。
https://appclip.apple.com/id?p=com.example.app.Clip
(03:40)リンクにはクエリパラメータを追加できます。ゲーム体験版の App Clip なら ?character=wizard で初期ロールを指定でき、フード注文 App Clip なら ?restaurant=123 でレストランを指定できます。
App Clip 起動後にパラメータを解析します。
import SwiftUI
struct ContentView: View {
@State var parameters: [URLQueryItem] = []
var body: some View {
VStack {
ForEach(parameters, id: \.name) { item in
Text("\(item.name): \(item.value ?? "")")
}
}
.onContinueUserActivity(NSUserActivityTypeBrowsingWeb) { userActivity in
guard let inputURL = userActivity.webpageURL else { return }
let components = NSURLComponents(
url: inputURL,
resolvingAgainstBaseURL: true
)
guard let queryItems = components?.queryItems else { return }
self.parameters = queryItems
}
}
}
キーポイント:
onContinueUserActivityは App Clip 起動時のNSUserActivityを受け取るwebpageURLにはクエリパラメータを含む完全な起動 URL が入るNSURLComponentsによるパラメータ解析は通常の Universal Link と同じ
任意の App から App Clip を起動する
(04:20)iOS 17 より前は、App 内から App Clip を起動するには Safari または Safari View Controller を経由する必要がありました。現在は直接起動できます。
方法 1: リンク プレゼンテーションのリッチ テキスト プレビュー
import LinkPresentation
let provider = LPMetadataProvider()
let url = URL(string: "https://appclip.apple.com/id?p=com.example.app.Clip")!
provider.startFetchingMetadata(for: url) { metadata, error in
guard let metadata = metadata else { return }
DispatchQueue.main.async {
let lpView = LPLinkView(metadata: metadata)
// ビュー階層に追加すると、ユーザーのタップで App Clip を起動できる
}
}
キーポイント:
LPMetadataProviderはリンクメタデータを非同期に取得するLPLinkViewはアイコンとタイトル付きのリッチテキストカードを描画する- ユーザーがカードをタップすると、Safari を経由せずに App Clip を直接起動できる
方法 2: 直接呼び出す (デフォルトのアプリ クリップ リンク)
SwiftUI:
var body: some View {
let appClipURL = URL(
string: "https://appclip.apple.com/id?p=com.example.naturelab.backyardbirds.Clip"
)!
Link("Backyard Birds", destination: appClipURL)
}
UIKit:
func launchAppClip() {
let appClipURL = URL(
string: "https://appclip.apple.com/id?p=com.example.naturelab.backyardbirds.Clip"
)!
UIApplication.shared.open(appClipURL)
}
キーポイント:
- Default App Clip Link は
Linkまたはopen(_:)で直接起動できる - 起動後、システムが App Clip カードを表示し、ユーザーの確認後に入る
- 同じ開発者に限定されず、どのアプリでも任意のアプリ クリップを呼び出すことができます
詳細
サイズ制限の実際の影響
(01:10)物理起動が 15MB のままなのは、ユーザーが移動中でネットワーク条件が不安定なことが多いためです。一方、デジタル起動が 50MB に拡大されたことで、より豊かな体験を提供できます。
- ゲーム体験版: 完整なステージ素材、キャラクターモデル、効果音を含められる
- オンライン注文: メニューの写真やレストランの環境の写真を含めることができます
- コンテンツプレビュー: 動画クリップや高解像度の画像セットを含められる
(02:04)対象ユーザーに iOS 15 ユーザーが含まれる場合は、引き続き 10MB 制限を守る必要があります。条件付きコンパイルや実行時検出で分岐できます。
Default App Clip Link の生成と使用
(03:13)Default App Clip Link は App Store Connect で App Clip を公開すると自動生成され、形式は固定です。
https://appclip.apple.com/id?p={BundleIdentifier}
Bundle Identifier は App Clip target の完全な bundle ID で、通常は .Clip で終わります。
パラメータ渡しの例:
https://appclip.apple.com/id?p=com.example.game.Clip&level=demo&character=knight
App Clip 内での解析:
.onContinueUserActivity(NSUserActivityTypeBrowsingWeb) { activity in
guard let url = activity.webpageURL,
let components = URLComponents(url: url, resolvingAgainstBaseURL: true),
let items = components.queryItems else { return }
let level = items.first(where: { $0.name == "level" })?.value
let character = items.first(where: { $0.name == "character" })?.value
// パラメータに基づいて初期画面を構成
}
App をまたいだ起動シーン
(04:33)講演者は Notes App で、メモに Backyard Birds の App Clip リンクを置き、タップすると App Clip カードが直接表示される様子をデモしました。この流れに Safari は不要です。
実際の利用シーン:
- ソーシャル App でレストランの App Clip を共有し、友人がタップして直接注文する
- ナビゲーション App から駐車場の App Clip を起動し、そのまま支払いを完了する
- メール App から会議用 App Clip を起動し、ビデオ会議に直接参加する
重要ポイント
1. 完全版 App 向けにゲーム体験版 App Clip を構築する
- 何をするか: 50MB のサイズ上限を活用し、ゲームの最初のステージやチュートリアルを App Clip としてパッケージ化する
- 取り組む価値: ユーザーは数百 MB の完全版ゲームをダウンロードせずに中核の遊びを体験でき、従来型広告より高い転換率を期待できる
- 始め方: Xcode でプロジェクトに App Clip target を追加し、ステージ素材と中核ロジックを共有して Default App Clip Link で配布する
2. コンテンツ共有に App Clip を埋め込む
- 何をするか: ユーザーがあなたの App からコンテンツを共有するとき、関連する App Clip の Default Link を添える
- 取り組む価値: 受け取った側はリンクをタップするだけで関連機能を体験でき、完全版 App の事前ダウンロードが不要になる
- 始め方:
?itemID=123のようなパラメータ付き Default App Clip Link を生成し、LPLinkViewでリッチテキストプレビューを表示する
3. オフライン現場での素早いサービス
- 何をするか: レストラン、駐車場、ジムなどで NFC タグや QR コードから 15MB 以内の軽量 App Clip を起動する
- 取り組む価値: ユーザーはスマートフォンをタグに近づけるだけで注文、支払い、チェックインを完了でき、App のダウンロードや Web ページの表示が不要になる
- 始め方: App Clip を 15MB 以内に抑え、物理起動体験を構成し、App Store Connect で App Clip Code を生成する
4. App をまたいだエコシステム内の即時サービス
- 内容: App Clip を他のアプリから直接呼び出して、エコシステム内のサービス ノードにできるようにします。
- 取り組む価値: iOS 17 では任意の App から任意の App Clip を起動できるため、App をまたぐサービスネットワークを構築する機会になる
- 始め方: 簡潔な Default App Clip Link パラメータ規約を設計し、起動方法を文書化して、連携先が統合しやすくする
関連セッション
- Meet StoreKit for SwiftUI — App Clip 内の App 内課金実装
- Safari と WebKit の新機能 — Safari での App Clip の起動と表示
- Design App Clips — App Clips のユーザー体験設計ガイド
- アプリの意図に応える — App Clip を補完する、アプリの機能をシステムに公開する別の方法
コメント
GitHub Issues · utterances