ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
軽量かつ高速なApp Clipの構築
App Clipによって、Appの一部分を即座に見つけてダウンロードし、タスクやトランザクションを完了することができます。モダンな機能とエレガントなデザインが際立つコンパクトなApp Clipを作るのに役立つヒントやベストプラクティスを確認しましょう。また、信頼性と安全性の高いApp Clipを構築する方法について確認し、物理的なApp Clipコードをスキャンした場合であっても、Webサイトを閲覧した場合であっても、常にお客様が体験にアクセスできるようにしましょう。また、世界に向けてリリースする前にApp Clipをテストするための具体的な戦略についても説明します。
リソース
関連ビデオ
WWDC22
WWDC21
WWDC20
WWDC19
WWDC18
-
ダウンロード
♪ ♪ やあ ようこそ App Clip のエンジニア ブライアンです 軽量かつ高速なApp Clipを 構築するためのヒントや テクニックを皆さんに紹介 するのが待ちきれません さあ 始めましょう App Clipは Appの 機能に素早くアクセスし 体験できる 素晴らしい方法です App Clipは Appの 小さな一部分です 必要な時 すぐに 見つけて ダウンロードが可能です
App ClipはOSに 深く統合されています Safariやメッセージ だけでなく 現実の世界 でも起動が可能で App ClipコードやQRコード NFCタグのタップによって 呼び出すことができます App Clipはマップや Siriからの提案にも表示されます このセッションは 皆さんに素晴らしい 体験を提供するための ベストプラクティスや トラブルシューティング のヒントが満載です App Clipを制限サイズ内 に収める方法を紹介します
App Clipが Webページに 表示されなかったり コードをスキャンしても App Clipカードが表示されなかったり
新しい機能を採用することで 生じる複雑さを考慮しながら コードベースの品質を維持 するためのヒントを 探しているのかも しれません
App Clip特有の どのような機能を 活用できるのか 興味があるでしょう ゼロから構築する場合でも 既存のAppに App Clipターゲットを 追加する場合でも 開発者が日常的に直面する 現実的な問題を説明し より良いApp Clipと Appを構築するため 実行可能な ネクストステップを 紹介します ユーザーが モバイルネットワークの 良好なエリアに いてもダウンロード 速度には ばらつきがでます
App Clipを 必要な時に 瞬時に提供できるよう App Clipの 最大サイズには 制限があります
そのため 開発者は コンテンツのサイズを 最適化することが重要です オンデマンドで提供できる ほどコンパクトかどうかは 開発の初期段階はもちろん 開発途中でも頻繁に確認できます
ソフトウェア開発において プロファイリングと 最適化を繰り返し行うことは 皆さんは ご存知でしょう
これからXcodeを使って サイズレポートを生成し デバイスの種類ごとに IPAをエクスポートする プロセスを ご紹介します
続いて App Clipの サイズを小さくするための 基本的な 最適化と 高度な最適化の 方法を説明します 目標は Appの提出時に App Clipがサイズ制限を超え 驚かないように することです 楽しい例を まとめてみました これはFruta サンプルのバージョンで いくつかの問題を 抱えているため サイズ制限を 超えてしまいました 皆さんのAppは もっと複雑で たくさんの機能が あると思いますので 私の例を出発点として 検討してみてください まずは Xcodeを起動し サイズレポートの生成と IPAファイルの エクスポートの手順を 確認し これらの問題を 解決する方法を 一緒に学んで いきましょう
最初に フルAppの スキームを選択します
続いてProductメニューから Archiveを選択します
これにより 指定した設定を使って プロジェクトが作られます
オーガナイザが開いたら Distrubute Appをクリックし Developmentを選択します
App Clipを選択します
App Thinningドロップダウンから All compatible device variants を選択 Rebuild from Bitcode がチェックされているのを確認
アーカイブの準備が完了したら Exportをクリック
次にエクスポート先を 選択します
Finderの Exportフォルダを開き
App Thinning Size- Report.txt.を開きます
デバイスごとに セクションがあります
各セクションの 最後から2行目に そのバリアントの 圧縮されていない サイズが表示されます そこに注目します サイズは2つのこと を意味しています 1つ サイズ制限を超えていること 2つ App Thinningの効果が 見られないこと すべてのバリアントがほぼ 同じサイズだからです
サイズレポートを閉じて その理由をもう少し 掘り下げてみましょう
Appsサブフォルダを開きます IPA拡張子を持つバリアントの 1つを.zipに変更して 確定します ダブルクリックで解凍します Payloadフォルダを開き Control+クリックで パッケージ内容を表示します
よく見てみましょう 画像は個別の バンドルリソースのようです これらをアセットカタログに 入れれば スペースを 節約できるかもしれません
インストール可能な製品に ここには属さない documentation zipと READMEファイルがあり
ここにはフレームワークが 使われています それもスペースを取って いるんでしょうね
ローカライズフォルダが いくつかありますが これらのファイルは チェックしないと 大きくなってしまいます
コンパイルされた実行 ファイルは小さいのですが より小さくする方法が あるかもしれません 少しずつでも役に立ちます 続けて 問題を解決する ために何ができるのか 考えてみましょう サイズレポートを作成し IPAに目を通すプロセスは App Clipのサイズを 小さくするための 多くのステップを 明らかにしてくれたので とても役に 立ちました まずは基本的な手順 から始めて その後 より高度なテクニックへ 進めます ビルド設定を再確認し アセットカタログを 使用する 利点を調査し 最終的な製品に 必要のない ファイルを 除外します 次に コードと設定を確認し サイズを縮小するため リファクタリングを行います 覚えておいてください ここで説明する最適化は AppとApp Clipの 両方に適用されるので どちらの製品にも ご活用ください それぞれのテーマについて 詳しく見ていきましょう App Clipパッケージ内 のコンパイルされたコードの 部分はApp Clipのサイズへの 最大要因ではありません アセットであることは確かなので 後ほど紹介します ただし小さなことでも役に立ちます Xcodeは デフォルトで 最小・最速の最適化設定 を使ってビルドします それが私のプロジェクトで 設定されているか 再確認してみましょう フルAppがアクティブな スキームとして設定されて いることを確認しOption+クリック でスキームの設定を表示 アーカイブビルドは リリースに設定されて いるはずですが どこかの時点で変更して 戻し忘れてしまったようです ビルドの設定も 少し試し リリースの最適化レベルを デフォルトよりも 下げました これを元に戻して 小さなバイナリサイズと 高速なランタイム実行の 最適な組み合わせを 使うようにしましょう 殆どが 私の場合のように イメージ オーディオ ビデオ などのアセットが 最も 多くのスペースを占めます これらのアセットがApp Clipの サイズに与える影響を 減らすための最も 重要なステップは アセットカタログを 使用することですが これには2つ理由があります 1つは アセットカタログに 追加したメディアが Xcodeのビルドプロセスの 一部として自動的に 最適化されること そして2つ目は AppやApp Clipを ダウンロードする際に そのダウンロードした製品は デバイスに適したアセット のみで小さく作られるのです これはApp Thinning とも呼ばれています ぜひ活用したい ものです
私のプロジェクトでは これらの画像を アセットカタログに 入れるべきでした 実際にもっとうまくやれます 2つ目のアセット カタログを作成し AppとApp Clipの間で 共有されている画像を すべてこのカタログに 移動させます
両方のカタログを 並べてみましょう
アイコンと色を 共有カタログに移します
そして 食材やスムージーの 画像をを共有カタログ に登録します
レシピ画像はApp本体 でのみ 必要なので 非共有のカタログに入れて App Clipのサイズに カウントされない ようにします アセットライブラリに コピーした画像は 必ず削除しておきます
そして最後にターゲット‐ メンバーシップエディタを 使って、App Clipから 非共有のアセットカタログ を除外してみます アセットカタログについて 詳しく知りたい場合は Appのストレージを最適化する と Appのアセットを 最適化するをご覧ください
先ほどファイルシステム上の IPAを点検しましたが READMEファイルや ドキュメントの 入ったZIPなど いくつか属さない ものがありました Xcodeのターゲット‐ メンバーシップエディタで これらのファイルを全ての ビルド製品から除外します App Clipターゲット には 実行されるタスクに 必要なコードのみを 含めるように してください
App Clipに貢献している 全てのソースファイルの 概要を把握するには ビルドフェーズを 見るのが 便利です 不要と思われるもの があれば ソースリストから削除して 再ビルドします Frutaのレシピと リワード機能は フルAppには必要ですが App Clipには必要が ないので これらの ファイルを削除しましょう コンパイラに 手伝わせることもできます ビルドエラー出た場合 そのファイルが必要か 除去すべきものがあるか またはApp Clip ターゲットから条件付き でコンパイルすべき コードがあるかも しれません 時間が経つにつれ ローカライズされた 文字列ファイルは 重複や未使用の 文字列で膨張します
文字列ファイルを 点検し 不要なものを削除します アセットカタログの 場合と同様に 専用の文字列ファイルを 作成できるので フルAppの ローカライズされた 文字列が App Clipに含まれないようします
App Clipを提出できる 状態にするために 今日から実行できる 基本的な最適化について 説明しました
さて この反復プロセスの 一環として 再度測定を行い サイズレポートを見て まだ必要なところに 到達していない とします 大丈夫です いくつかの高度な最適化 戦略を 検討してみては いかがでしょうか
初めに 外部依存関係 を評価し そのサイズを 考慮します App ClipはAppの 一口サイズのバージョン なので App Clipの機能に 必要なものだけを リンクさせることを 覚えておいてください SmoothieAccount Loginフレームワークが App Clipのサイズを大きく していたのを覚えていますか ほとんどの場合 OSに組み込まれた Appleの フレームワークが 目的を達成する ために役立ちます
これらの組み込み フレームワークの使用は 無料で AppとApp Clipを 軽量化・高速化できます つまり ダウンロードが 速くなり 起動も速くなり 顧客が高速に タスクを完了 できるのです
Appleでサインイン を使うとApple IDで 簡単にサービスに サインインできます 決済については 開発者にとっても 顧客にとっても Apple Payは速くて簡単です ネットワーク上の 通信には NSURLSessionを使います 3Dグラフィックスには RealityKitやMetalを活用します より詳細な 認証フローについては ASWebAuthentication Sessionをご覧ください App Clipのサイズを 制限するのは ほとんどの場合 コードではなくアセットです 多くの場合 その アセットは画像です 基本的な手順は 全ての 画像をアセットカタログに 移し ビルトイン の最適化と App Thinningを活用しました 時には それだけでは 不十分で 画像のサイズを 小さくするため さらなる 措置が必要です ソース画像を保存する際に 使用するフォーマットと オプションはサイズと品質の 両方に大きな影響を与えます では どうすれば最適な 選択ができるでしょうか 一般的に PNG画像は JPEG画像よりも多くの 容量を消費します そのため 透過性のような 特定の機能が必要な場合は PNGを使用して ください
また JPEGの非可逆圧縮 では許容できないほどの 品質の低下を招く場合 にもPNGを使用します これらの例には 高頻度の特徴 鮮明なエッジ 明確な ハイライトが含まれています PNGの可逆圧縮は これらの特徴を JPEGよりもはるかに よく保持します
そして PNGについて 補足ですが 写真以外の素材には PNG8をご検討ください
右の画像はPNG8で 保存することで 大幅に ファイルサイズを 削減しました 書き出した画像を 並べて比較し 最適化されているか どうか確認します 色深度を減らすことで 大幅にスペースを節約 できますが 量子化アーチファクトが 発生しない特定の画像に のみ適しています
写真素材の場合 容量を確保する必要が ある時は JPEGを使用し 少し非可逆圧縮に傾けます 画像を保存する際に コンテンツ制作ツールの デフォルトを受け入れる 必要はありません 私の場合は画質を 落とすことなく ファイルサイズを大幅に 縮小できました
様々な最適化の下で 画質を維持するために プロジェクトで使用できる かもしれない ちょっとした コツをご紹介します 一時的にパイナップル の代わりに より高い圧縮率 として保存された マンゴーを使用しました これにより 実際のAppで 簡単なA/B比較を行い 変更により 品質が 低下していないことを 確認できます
ビデオの場合 HEVCなど 最新規格でエンコードします
一般的な原則として AACやMP3コーデックで 音を圧縮し ビットレートを 下げて試してみてください とても高いビットレートは 必要ない場合が多く 低いビットレートの クリップでも 品質の低下は 感じられません インターフェイス- コントロール ロゴ アイコンなどの 特定の種類の画像は SVGフォーマットで表現 することで 大幅な スペースが節約できます SVGはベクター形式なので サイズにかかわらず 見栄えよく表示されます
私達はSVGフォーマットを とても気に入っていて SF Symbolsをサポート するために選びました 2,000以上の 設定可能な シンボルがあります 豊富なウェイトと スケールが用意されており テキストラベルに自動的に 揃えられた形で表示され ダイナミックタイプが サポートされています
ここでは プロジェックトで SF Symbolsを 使うためのコードを ご紹介します このコードスニペットは ラベルとシンボル画像の両方 に同じテキストスタイルを 適用する方法を示します ベースライン制約により ラベルとシンボル画像が 完全に揃えられます アセットカタログに 複数のバリエーションの イメージを含める代わりに 1つのベースイメージを含め ランタイムに必要な バリエーションを構築します これがどのように 実践されているか Frutaのサンプル をご覧ください オレンジの食材を 表現するために それぞれの画像を使わずに 1つは この コレクションビュー もう一つは縦書きテキストの フルイメージ表示 3つ目は 成分カードの背景です
この1つの画像が 3つの異なる用途の 基として機能します 結果として 実行時にバリエーションを 構築することで大幅な スペースの節約が可能です 最後に 他のすべての ステップを完了しても クリップのサイズ制限を 超えるアセットがある場合 コンテンツデリバリ ネットワークから それらのアセットを 遅延読み込みしてください
例えば 許容できる画質で 解像度が低い プレースホルダーアセットを App Clipと一緒に出荷し ローンチ後に新しい Async image APIを 使用し これらのアセットを 徐々に置き換えます
詳しくは SwiftUIの 新機能 をご覧ください ヒント:ネットワーク リンクコンディショナーを 使って さまざまな 帯域幅のシナリオで App Clipをテストし 顧客が作業を 完了するまで 遅延が発生していない ことが確認できます これらの高度な 最適化で 最初のトピックは 終了します Appのサイズを 小さくするテクニックは 開発者向けのドキュメントに 詳しく説明されています
App Clipを本番環境に リリースしても Safariで Webサイトを見たときに 期待通りに表示が されていないとします また QRコードをスキャン したら App Clipカードが 表示されず Safariに 誘導されたかもしれません
一般的に これらの問題は いくつかの異なる バケットに分類されます App Clip体験の登録と 関連ドメインの設定です ここでは 用語を簡単に復習し 問題を解決するための 手順を説明します App Store Connectでは 2種類の App Clip体験が追加できます App Clipはデフォルトの App Clip体験が必要です デフォルトの App Clip体験では Safariで自分のウェブページ から起動した場合や 誰かが メッセージでウェブページへ のリンクを送信した時に App Clipカードに表示される メタデータを指定します QRスキャン NFC App Clipコードなどの 物理的な呼び出しを 活用するためには 必ず高度なApp Clip体験の 追加が必要です
この登録がデバイスに 反映されるまでに 時間がかかるため App Store Connectで 行った変更はすぐに 利用はできません App Clip体験の 登録の詳細は App Store Connect の新機能 と App Clipを設定しリンクする のセッションをご覧ください App Clipのための UIを表示する前に OSは呼び出しドメインが App Clipsと検証可能な 形で関連付けられて いるかを確認します つまり Safariで表示 されるURLやQRコードに エンコードされたURLは エンタイトルメントや AASAファイルを介して AppやApp Clipと セキュアな関連付けが必要です これが正しく設定 されていないと App Clipは表示されません このセキュアな関連付けの 確立についての詳細は ユニバーサルリンク の新機能と App Clipを設定し リンクする をご確認ください
すべての設定を 終えて Safariを確認すると App Clipカードが このようにインラインで 表示されているとします
しかし 残念ながら Webページの表示のみで 他には何も表れません 何が問題で どのようなトラブル解決法 があるのでしょうか
まず メタタグの シンタックスを確認し このテンプレートのように なっているかを確認します 黄色いプレースホルダーを フルAppのApple IDと App ClipのbundleIDで それぞれ 置き換えます
メタタグが正しく 構築されているか 確認するため 私が使って いるテクニックを紹介します SafariでWebページ に移動し Webインスペクタを開き head要素を拡大して ソースをよく見てみましょう 次に ノード属性をチェック して メタタグが正しく 解析され App Clipの bundleIDがXcodeや App Store Connectで 表示されるものと 全く同じであること を確認します フォワーディングや リダイレクトはドメイン認証 の妨げになっていませんか ドメイン検証の仕組みを使用する 限り example.com は www.example.com と 同じとは見なされません ここで重要なことは コンテンツを提供する ドメイン つまり リダイレクトチェーンの 最後にあるドメインは AASAファイルを提供する ドメインでなければならず 関連ドメインの エンタイトルメントに 含まれている必要があります
また Safariはプライベート ブラウズが有効な場合 App ClipカードやSmart Appバナーを表示しません それでも動かない場合は AASAがASCポータルの 検証に合格している ことを確認してください
swcutilコマンド ラインツールを使って 期待される場所にある WebサイトからAASA ファイルを取得できます これはApp Store Connect が行う操作と 非常によく似ています この機能を利用して App Store Connectが ファイルを取得できない エラーがないか確認できます JSON出力を確認して applicationIDの代わりに bundleIDが指定され ていないか確認してください
詳しくは App Store Connectの 新機能と ユニバーサルリンクの 新機能のセッション をご覧ください App Clipコード QRコード NFCタグなど 物理的な呼び出しについては 以下の体験が期待できます
完全な設定となっていない場合 カメラにてApp Clipカードが 表示される代わりに Webページが Safariで 提供されます
このようなことが起こるのは 多くの場合 物理的な コードにエンコードされて いるURLに対して 高度なApp Clip体験が 設定されていないためです QRコードのURLがWeb サイトのURLと同じで Safariでは完全に表示 されるようになっても 物理的なコードで動作させる ため App Store Connectで 高度なApp Clip体験の 設定が必要です Safariの起動に関する トラブル解決法で使用した スライドを覚えていますか ウェブトラフィックでは ドメインの検証前に全ての リダイレクトが行われます 物理的なコードに対する ドメイン検証の処理方法 には微妙な しかし重要な 違いがあることに気付いて 欲しいと思います 例えば QRコードの URLに独自のドメインを 使い プラットフォーム間で 一貫性を持たせるために ために それをウェブサイトに 転送していたとします Webから直接アクセス する顧客には すでに そのドメインからAASA ファイルを提供しています さて ここで微妙な 違いが出てきます コードスキャンのために正確 なドメインをApp Clipの エンタイトルメントに追加し このドメインからも AASAファイルを 提供する必要がります 理由は 物理的なコードを スキャンしているユーザーに 素早くフィードバック するためです また 一般的に リダイレクトの連鎖になる ネットワークリクエスト の実行を避けています 高度なApp Clip体験や サイトアソシエーションの 変更は デバイスへの 反映に時間がかかります
スキャンしたURLが 高度なApp Clip体験 として追加されている ことを確認しても App Clipカードが表示 されない場合は 開発者設定で App Clip体験のキャッシュを クリアしてみてください 次のトピックに移ります このプロジェクトでは さらに複雑な作業を 行い 利点として よりモダンで プラットフォームに沿った 体験が可能になりました ここでは これまでに 達成してきた品質を 維持しつつ 新たな 機能を導入するための ステップを ご紹介します
基本的な レストランAppの 機能を示した図を 見てみましょう この例では お客様はレストランの メニューを見始めます 次に ハンバーガーや カクテルをカスタマイズ した後 会計を済ませます その後 注文状況や 受け取りのオプションを 確認します
ここで2つの機能を追加し レストランの体験を 向上させます:QRコードを 使いテーブルで会計 カスタマイズしたバーガー をリンクで友人に送り 友人も注文できるようにする
これらの機能はどちらも チェックアウトステップへの 直接アクセスに依存して いるため 大幅な 再設計が必要となります 要望されている機能は App Clipにとって 素晴らしい機会ですが それを現在の デザインに組み込む となると 非常に 複雑な作業が必要です Appの柔軟性を高めるには どのような工夫が必要ですか
まずは フラット化された モジュール式の機能を作り Appの各コンポーネントが 独立し 直接起動 できるようにすることを お勧めします このアプローチはApp- Clipがどのように呼び 出され どのような状態で 提供されるかの基本となる ディープリンクに適します 例えばURLにエンコード できるメニューの一覧を提供し チェックアウトモジュールが 直接起動するよう設計します ビジュアルコードに 埋め込まれたURLとして 注文を表示することで お客様はテーブルで 会計ができる ようになります 料理がURLにエンコード できるようになると このパラダイムを利用して お客様が注文した 料理と同じものを 友達と共有し 彼らも同じものが買える よう促すことができます
App Clipを採用 すれば 間接的なコストを ほとんどかけずに まだAppを ダウンロードしていない お客様にオンデマンドで この機能を提供し リーチを 拡大することができます 今回はオーバーヘッドを 最小限に抑えながら 機能を引き出すための Appの デザインについて これまでとは少し違った 考え方をご紹介しました それでは App Clipを 提供する際に必要な 定型的なコードを 最小限にする方法を 見てみましょう Appのコードでは ライフサイクルイベントに 応答するため通常 Appの起動時や バックグラウンドからの再開 時に呼び出される これらの メソッドを使用します
App Clipを採用すると 全く同じライフサイクルの 別のセットが追加されます App Clip の ライフサイクルメソッドに UserActivityから URLを抽出し そのURLを 使って 何らかの状態を 導き出し いくつかのUIを 表示するコードを置きたく なるかもしれません
コンセプトは妥当ですが その前に Appと App Clipの起動を処理 するコードが共有される ように リファクタリング することをお勧めします これによりApp Clipと フルAppの間の 別々の起動経路で 同様の機能を 維持しようとする 一連のバグや頭痛の 種がなくなります
UserActivityを パラメータとして受け取る respondToのようなメソッド の作成を検討してください このメソッドは関連する すべての ライフ- サイクルメソッドから直接 呼び出すことで Appや App Clipのメインエントリ‐ ポイントとして使用します
AppとApp Clipの 両方に共通するコード を実行することで オーバーヘッドを 大幅に削減できます お客様がテーブルで 会計をしやすいように URLからレストランの メニューを抽出することで UserActivityに 対応しているのかも しれません すべてのコードは 共有されているので 一度変更するだけで AppとApp Clipの両方で 効果を得ることができます 品質を維持しながら プロジェクトに 最新の機能を 採用するには テストを抜きにしては 語れません App Clipに特有の テクニックが2つあるので 覚えて欲しい 思います
開発を繰り返すために Xcodeでビルドして 実行する際に _XCAppClipURL 環境変数に任意の呼び出し URLを設定してください App Clipを実行すると ここで設定したURLが 顧客のデバイス上と 同じように App Clipに 渡されます
製品版デバイスに近いOSで 開発中のApp Clipを 表示するには 開発者設定に移動して ローカルエクスペリエンス を作成します
App Clipを提出する前に 顧客がデバイスで App Clipをどのように 使用するかを知るため この機能を試す 必要があります そうしないと カメラで コードをスキャンするなど App Clipを起動させる 多くの方法をテストする 素晴らしい機会を失います また Safariの新しい App Clipカードの体験 のように 製品版に先駆けて シードビルドで新機能を 試すのにも 最適な方法です
私は App Clipsをテスト するためローカルエクス- ペリエンスがどれほど 素晴らしいか紹介しました 詳しくは 今年の App Clipの新機能 について をご覧ください テストについての 詳しい説明は Testing Your App Clip’s Launch Experience という開発者向け ドキュメントをご覧ください 最後に すべての開発者が 活用すべきApp Clip 特有の機能があります
App Clipが導入されたとき 2つの合理化された 許可項目がApp Clipの ためだけに利用可能 になりました これらの項目は エフェメラルな通知や 位置確認と呼ばれています App Clipカードを 利用して お客様に 事前承認を 提供できます エフェメラルな通知は App Clipが最後に 起動してから24時間 通知を送ることができます また 位置確認では 顧客の正確な位置を 特定せずに 顧客が想定した エリア内にいること を確認できます これは 誤って違う ガソリンスタンドで 支払いをしたり 違う町のFrutaショップ でスムージーを注文する という事故を防ぎます
開発者は Info.plistで この機能を選択します 実際より必要以上を 要求するアラートで 体験が起動するのを 妨げることなく これらのユニークな パーミッションにアクセス できるようになります
位置情報の確認は NFCタグや App Clipコード QRコードなどの物理的な 起動時にのみ 利用できます 顧客は 現在のセッション またはすべてのリクエスト について 位置情報の確認を 拒否することができます
これらの状態を適切に 処理するために confirmAcquired からのエラーを確認し 発生した事象に 役立つガイダンスと より良い条件で取引を 再開できるような オプションを 提供してください Xcodeのプロファイルと署名 についての簡単な説明です ほとんどの方は プロジェクト設定の Signing and Capabilities セクションで 署名の自動管理を有効にして いるので非常に良いことです
署名を手動で管理 している場合は 必ず最新のプロファイルを 取得してください 顧客がApp Clipから フルAppに アップグレードした場合 すぐに得られるメリットは データがより早く 移行されることです これは 常に取り組んでいる お客様への 数多くの メリットの一つです 最新のプロファイルを持つ ことで AppとApp Clipが これらの良さを利用する 必要な機能を持っている ことが保証されます
軽量かつ高速な App Clipを構築する ため いくつかの素晴らしい テクニックを学びました そろそろ締めくくりです 基本から応用までさまざまな App Clipのサイズを小さく して オンデマンドで迅速に 配信する手法を紹介しました App Clipが期待通りの 場所と方法で起動 されていることを確認する 方法を紹介しました プロジェクトをディープ リンクに対応させるために App Clipとユニバーサル リンクの採用を紹介しました そして App Clipならではの 合理化された機能 を取り上げました 今日 Xcodeを起動して Appをより軽く より速くするために これらのヒントを ご利用ください 私の同僚であるヨンジュン の今年のApp Clipsの新機能 に関するセッション もぜひ ご覧ください。 ありがとう 素晴らしい WWDCをお過ごしください [明るい音楽]
-
-
14:18 - SF Symbol and Text
label.text = "Hello" // TextStyle for label and image let textStyle = UIFont.TextStyle.largeTitle // Use the same TextStyle for label and image label.font = .preferredFont(forTextStyle: textStyle) let config = UIImage.SymbolConfiguration(textStyle: textStyle) imageView.image = UIImage(systemName: "pencil.and.outline", withConfiguration: config) // Align baseline of text and symbol image imageView.firstBaselineAnchor.constraint(equalTo: label.firstBaselineAnchor).isActive = true
-
18:08 - Meta Tag
<meta name="apple-itunes-app" content="app-id=myAppStoreID, app-clip-bundle-id=appClipBundleID, app-clip-display=card">
-
27:41 - Location Confirmation
if let activationPayload = userActivity?.appClipActivationPayload { activationPayload.confirmAcquired(in: region) { inRegion, error in if let error = error as? APActivationPayloadError { if error.code == APActivationPayloadError.disallowed { // User denied permission // Or invocation was not from visual code or NFC } else if error.code == APActivationPayloadError.doesNotMatch { // Activation payload is not the most recent // Catch in testing. Handle as above. } } else if error == nil { // Platform was able to determine location // OK to check inRegion } } }
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。