ハイライト
watchOS 7 と iOS 14 ではウォッチフェイスの共有が導入されています。ユーザーは、設定済みの Apple Watch ウォッチフェイスを、時計、iPhone、アプリ、または Web サイトを通じて共有できます。受信者がサードパーティのコンプリケーションを含むウォッチフェイスを追加すると、対応するアプリをインストールするように求められます。
主要内容
Apple Watch アプリのコンプリケーションは文字盤に配置するのに非常に適していますが、これまでは開発者が「設定済み」の文字盤をユーザーに直接渡すことは困難でした。ユーザーは自分で Watch アプリを開き、適切なウォッチフェイスを見つけてスタイルを選択し、アプリのコンプリケーションを正しい位置に配置する必要があります。この道は長すぎるので、多くの人がそれを完了することはできません。
watchOS 7 と iOS 14 では、より短いパスが提供されます。ウォッチフェイスは次のように使用できます。.watchfaceファイル共有。ユーザーは、Apple Watch の文字盤を長押しして「共有」をクリックするか、iPhone の Watch アプリの「共有」ボタンから送信できます。受信者がプレビューを見てクリックすると、ウォッチフェイスを追加するシステム プロセスに入ります (00:12)。
開発者にとっての影響はより直接的です。事前にデザインされた文字盤にコンプリケーションを組み込んで、iOS アプリ、watchOS アプリ、または Web サイトからユーザーに配信できます。ウォッチフェイスにコンプリケーションが含まれている場合、ユーザーはウォッチフェイスを追加するときにアプリをインストールするように求められます。アプリが他の地域で利用できない場合、そのコンプリケーションはウォッチフェイスに表示されません (01:00)。
Session の Coffee Tracker の例では、完全なプロセスを 4 つのステップに分けています。まず、Watch アプリでアプリのコンプリケーションを含むウォッチフェイスを作成します。.watchfaceファイルとプレビュー画像を Xcode バンドルに配置します。アプリにウォッチフェイスを追加するためのインターフェイスを作成します。そして最後に、古い Apple Watch が一部の新しいウォッチフェイスをサポートしていないという問題を解決します (03:51)。
詳細
まず、ユーザーがペアリングされた Apple Watch を持っていることを確認します
(06:49) サンプル アプリは、iPhone に「ウォッチフェイスの追加」エントリを提供します。入り口が現れる前に使用してくださいWatchConnectivityこの iPhone が Apple Watch とペアリングされているかどうかを確認します。
var isPaired: Bool {
if (WCSession.isSupported()) {
let session = WCSession.default
session.delegate = self
session.activate()
return session.isPaired
} else {
return false
}
}
キーポイント:
WCSession.isSupported()まず、現在のデバイスが WatchConnectivity をサポートしているかどうかを確認します。WCSession.defaultシステム セッションを取得し、後でそれを使用してペアリング ステータスを読み取ります。session.delegate = selfそしてsession.activate()セッションを使用可能な状態にします。session.isPairedこの iPhone は Apple Watch とペアリングされているかどうかという 1 つの質問に答えてください。- WatchConnectivity がサポートされていない場合は直接戻ります
falseの場合、インターフェイスにはウォッチフェイスを追加するためのエントリが表示されません。
バンドル内の .watchface ファイルから追加プロセスを開始します。
(08:47) 実際にウォッチフェイスを追加する場合、アプリはインポートする必要がありますClockKitを見つけてください。.watchfaceファイルしてから電話するCLKWatchFaceLibrary().addWatchFace(at:completionHandler:)。
private func addFaceWrapper(withName: String) {
if let watchfaceURL = Bundle.main.url(forResource: withName, withExtension: "watchface") {
CLKWatchFaceLibrary().addWatchFace(at: watchfaceURL, completionHandler: {
(error: Error?) in
if let nsError = error as NSError?, nsError.code == CLKWatchFaceLibrary.ErrorCode.faceNotAvailable.rawValue {
print(nsError)
}
isLoading = false
})
}
}
キーポイント:
Bundle.main.url(forResource:withExtension:)Appバンドルにすでにパッケージ化されているパッケージを読む.watchface書類。CLKWatchFaceLibrary()これは、システムがウォッチフェイスを追加するプロセスを引き継ぐことを可能にするために ClockKit によって提供される入り口です。addWatchFace(at:completionHandler:)ローカル ファイル URL を受信し、ユーザーを Watch アプリの確認画面に移動します。- 完了ハンドラーはエラーを返します。例に焦点を当てる
faceNotAvailable, 一部の文字盤は古い Apple Watch モデルでは動作しないためです。 isLoading = falseインターフェイス上のアクティビティ インジケーターに対応して、追加プロセスが完了すると読み込み状態が停止します。
古い機器の代替面を準備する
(10:33) Coffee Trackerで選択されたModular Compact faceはSeries 3と互換性がありません。処理方法は最初の追加が失敗し、エラーコードがfaceNotAvailable、Series 3 と互換性のある代替ウォッチフェイスを試してください。
private func addFaceWrapper(withName: String, fallbackName: String?) {
if let watchfaceURL = Bundle.main.url(forResource: withName, withExtension: "watchface") {
CLKWatchFaceLibrary().addWatchFace(at: watchfaceURL, completionHandler: {
(error: Error?) in
if let nsError = error as NSError?, nsError.code == CLKWatchFaceLibrary.ErrorCode.faceNotAvailable.rawValue {
if let name = fallbackName {
// We failed, trying with fallbackName.
addFaceWrapper(withName: name, fallbackName: nil)
}
}
isLoading = false
})
}
}
キーポイント:
fallbackName2つ目です.watchfaceこの例では、ファイル名、Modular face がシリーズ 3 互換バージョンとして使用されています。- のみ
faceNotAvailable他のエラーが互換性の問題と間違われないようにフォールバックをトリガーします。 - 再帰的に呼び出すときに渡されます
fallbackName: nil、フォールバックが失敗し続けた後の無限の再試行を避けるため。 - 両方のウォッチフェイス ファイルを事前に Xcode プロジェクトに配置する必要があり、URL は実行時にバンドルから取得できます。
- 互換性リストはヒューマン インターフェイス ガイドラインに基づいており、Session は開発者がダイヤルのサポート範囲に基づいて代替案を準備することを推奨しています。
Web サイト ホスティング ダイヤル ファイル
(12:45) ウォッチフェイスは Web サイトに配置することもできます。ユーザーが iOS Safari でウォッチフェイス ファイルをダウンロードすると、それを Apple Watch に追加するように求められます。
この部分ではサーバー コードは示されていませんが、トランスクリプトには 3 つの実装の詳細が明確に記載されています。まず、サーバーがセッションに表示されるウォッチフェイスの MIME タイプを使用してファイルを提供することが最善です。これは Safari にとって識別しやすいためです。次に、ウォッチフェイスのプレビューは、Web ページ上の公式の「Apple Watch Face を追加」ボタンの上に配置する必要があります。第三に、メインの文字盤がシリーズ 3 と互換性がない場合は、代替ダイヤル、対応するプレビュー、ボタンが Web ページ (12:54) に提供される必要があります。 13:33)。
QRコードやNFCタグの役割も「Webリンクを運ぶ」ことに限定されています。セッションという用語は、ホスティングを意味します。.watchfaceファイルの Web リンクを配置し、ユーザーがリンクをスキャンしてから、Safari の追加プロセスを実行します (13:50)。
重要ポイント
-
アプリ内推奨ウォッチフェイスポータルの作成: 新規ユーザーに最適なウォッチフェイスをバンドルし、iOS アプリの設定ページや主要機能ページにプレビューを表示します。実行する価値がある理由: ユーザーがウォッチフェイスを追加すると、コンプリケーションが表示されます。開始方法: Watch アプリで生成する
.watchfaceファイルとプレビュー、再利用CLKWatchFaceLibrary().addWatchFace追加を開始します。 -
異なるハードウェアに合わせて 2 セットの文字盤を用意: 新しい Apple Watch 用に情報密度の高い文字盤を設計し、Series 3 用に互換性のあるバージョンを用意します。これを行う価値がある理由: ユーザーはそうは思わない
faceNotAvailable失敗した状態でスタックします。開始方法: ヒューマン インターフェイス ガイドラインに従って互換性のあるウォッチフェイスを選択し、完了ハンドラーでフォールバックを処理します。 -
コンプリケーションのデフォルト状態を共有可能な構成にする: 天気、潮汐、フィットネス、またはスケジュール アプリのサンプル エントリを含むウォッチフェイスを準備して、アプリをインストールしていないユーザーも適切なプレビューを表示できるようにします。実行する価値がある理由: トランスクリプトには、ウォッチフェイス ファイルにはサンプル エントリが含まれており、プレビューは空白ではないことが記載されています。開始方法: まず ClockKit コンプリケーションのサンプル データを完成させ、次にコンプリケーションを含むウォッチフェイスをエクスポートします。
-
イベントまたはコンテンツ ページのホスト ウォッチフェイスのダウンロード: Web サイトのイベント ページ、コース ページ、またはブランド ページで利用可能
.watchfaceドキュメント、プレビュー、公式ボタン。価値がある理由: Session は Web サイトのホスティングを明示的にサポートしており、Safari はユーザーにウォッチフェイスの追加を促すことができます。開始方法: 正しい MIME タイプでファイルを提供し、シリーズ 3 と互換性のないウォッチフェイスのバックアップ ダウンロードを含めます。 -
ショートカットとウォッチフェイスのエントリを接続: アプリにすでに watchOS ショートカットがある場合は、一般的な操作をコンプリケーションに組み込み、共有ウォッチフェイスを通じてユーザーに提供します。実行する価値がある理由: ユーザーはダイヤルからステータスを確認し、アクションをすばやく入力できます。開始方法: まず、アプリ インテントと Apple Watch コンプリケーションを完了してから、このセッションのウォッチフェイス共有プロセスを使用して配布します。
関連セッション
- Apple Watch のコンプリケーションを作成する — ClockKit タイムライン、ファミリー、テンプレート、watchOS 7 の複数のコンプリケーションについて説明することは、このセッションでサードパーティのコンプリケーションを理解するための前提条件です。
- SwiftUI でコンプリケーションを構築する — SwiftUI を使用して、共有ウォッチフェイスのビジュアル コンテンツのソースとして使用できるグラフィック コンプリケーションを構築する方法を示します。
- コンプリケーションを最新の状態に保つ — 共有ダイヤルの情報を最新の状態に保つための、タイムラインの更新、バックグラウンド更新、プッシュについて説明します。
- watchOS デザインの最新情報 — アプリ内の「ウォッチフェイスの追加」入口やウォッチ上での直接操作のデザインに適した watchOS アクション デザインについて説明します。
- watchOS でショートカットを使用したクイック インタラクションを作成する - コンプリケーションからショートカット操作をトリガーするパスを補足します。これは、共有ウォッチフェイスで高頻度のアクションを設計するのに適しています。
コメント
GitHub Issues · utterances