ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
独立したWatch Appを開発する
watchOS 6ではAppを完全に独立させることができ、Apple Watch専用のAppを開発できるほか、Apple Watch用のApp Storeも用意されるため、watchOSのユーザー体験がまったく新しいレベルに引き上げられます。このセッションでは、多くのiOSフレームワークとテクノロジーの力をwatchOSで活用することで、Apple Watchで完全に独立した体験を作り出す方法を紹介します。
リソース
関連ビデオ
WWDC19
-
ダウンロード
(音楽)
(拍手) watchOSのエンジニア ニール・デサイです 本日はIndependent Watch Appsの 作成方法を説明します
Apple Watchだけで外出できる喜びを 多くの人が享受しています 操作の迅速性と自由度が ユーザに愛されているのです Apple Watchだけを身に着け 運動できたり 電話にも出られます
そしてApple Watchは 大切な人や情報やAppと つながる手助けをしてくれるのです
このようにApple Watchの 自由度を享受している時ユーザは iPhoneをオプションと考えています
我々はユーザの期待に応える Watch Appを求めています そのためのIndependent Watch Apps という新コンセプトを紹介します iPhone Appは 任意のエクスペリエンスとなります
すでに多くのAppは ある程度 独立しています Outcastは Apple Watchから全てが 操作可能なPodcast Appのいい例です CARROT Weatherもその一例で 私はいつもApple Watchだけで操作しています また 海外旅行の際の通貨換算には Elkを使っています これらのiPhone Appもありますが iPhone Appはオプションなんです 今回初めて― iOS AppなしでApple Watch Appが 提供できるようになりました (拍手) どうも (拍手) Appを独立させるため今年 多くの新機能を導入します 例えば プッシュ通知をデバイスに 直接送信できるようにしたり サインオンをさらに簡単にするなどの 多くの機能です まずは これらのアプリケーションの インストール方法について話します
watchOS 5までは Watch Appが iOS Appに組み込まれているため 両方がiPhoneに ダウンロードされていました そしてiPhoneがWatch AppをApple Watchに インストールするタスクを担っていました
iOS 13とwatchOS 6では これを完全に変更します App StoreのServerはインストールする必要があるものを 適切な場所にインストールするようになります そしてこれは現在App Storeにある 全てのアプリケーションに適用されます
そのため iOS Appには Watch Appが含まれなくなり iOS Appのダウンロード制限の 対象にはなりません そして… どうも (拍手) これは App StoreのServer上にある 全てのAppのビットコードを再コンパイルして iOS AppをWatch Appから切り離すことで 可能になります これは各デバイスでそれぞれのApp (iPhoneではiPhone AppをWatchはWatch App)を ダウンロードするという意味です
デバイスへ直接インストールすることが できるようになったことで Watch Appのアセットとバリアントの 軽減が可能になりました ユーザがSeries 4のデバイスを 持っている場合― このサイズに合う適切なバリアントと アーキテクチャのみをインストールできます このロジックは アセットにも適用されます アセットカタログに 特定のデバイス用の特定のアセットを設定した場合は そのアセットだけをそのデバイスに インストールできます つまり ダウンロードと Watch Appのバイナリのサイズが はるかに縮小されるのです Swiftを使用している場合ですが Swift 5とABIの安定性により Swift dylibは Appには含まれません ダウンロードは さらに縮小されます 次に ユーザはどのようにAppを 取得するか説明します
Appは継続して iOS App Storeで見られますが watchOS 6の新機能として Apple Watch向けApp Storeを紹介します それは主要なセクションを完備した フル機能のApp Storeです 詳細なプロダクトページや検索 特集やエディターのおすすめも完備しています Appの購入もApple Watch上でできます 本当にすばらしいと思います それでは 新しいWatch App Storeの Appの種類とそれらの動作について説明します
現在のApp Store内にあるものは全て 依存アプリケーションと呼ばれています Watch Appはシステムにより iPhone Appに依存しているとみなされるからです
例えば Watch App Storeから 依存アプリケーションを取得すると システムは iPhoneへ iPhone Appのダウンロードを開始します iPhone Appがインストールされるまで watchOS Appの起動はブロックされます システムがWatch Appは iPhone Appに 依存していると みなすからです
しかし依存Appと違い 独立したWatch Appは 起動するためにiPhone Appを インストールする必要がありません
つまり Watch Appは 独立してインストールされます ユーザが両方のAppを インストールしている場合 iPhone Appをアンインストールしても Watch Appは残り続けます
自分のAppへの影響を 不安に思っている方は iOS Appを伴う独立したwatchOS Appは 古いOSと完全な互換性があるので安心してください この新しい… (拍手) どうも (拍手) 新しいWatch専用のアプリケーションは watchOS 6以降でサポートされています
企業内ででAppを配信する場合も Xcodeが 種々のバリアントを作成し iPhoneとWatch Appを分離します Xcodeでのフローを確認すると 生成されるマニフェストplistの中に 新しいプラットフォームの IDキーが追加されて どこへ何をインストールするかを システムに指示します
これで 独立したWatch Appの 重要性が分かりました では Watch Appを独立させる 方法を説明します
既存のAppを独立Appにするのが どれほど簡単かお見せします
これがXcodeです 現在この Watch Appは依存型です すでにこのAppを 独立させる作業は完了しています
このアプリケーションを ビルドして実行すると iPhoneとWatchのシミュレータは 通常のデバッグのフローと同じです
これでWatch Appが起動し すぐにデバッグ処理も開始できます このAppを独立させるよう システムに伝えましょう ではデバッグを停止して
WatchKit Extensionの Target EditorのDeployment Targetの下に “Supports Running Without iOS App Installation” という新しいチェックボックスがあります そこにチェックを入れ ビルドして実行します チェックを入れることにより 独立したとシステムが認識します 少し早かったので、 もう1ついいものをお見せしましょう
このアプリケーションは 独立させたので― iPhoneシミュレータを 閉じても大丈夫です 今度はWatchシミュレータに対してだけ ビルドして実行します すると デバッグは はるかに高速になります (拍手) どうも (拍手) それでは 独立したWatch Appを 今回初めて構築してみます まず このプロジェクトを閉じて 新しいアプリケーションを作るため “File”にある“Project”に進みます
watchOSの下に“Watch App”と “iOS App with Watch App”があります 今は WatchだけのAppの作成なので
“App”のほうを選択します
そしてSwiftUIを使います これはすごく好評ですね “Include Complication”にも チェックを入れます これをデスクトップに保存します
ビルドして実行してみます 先ほど話した独立したAppと同様に iPhoneシミュレータは不要です Watchだけのアプリケーションをビルドし Watchシミュレータで直接実行しています 上出来です
(拍手) ありがとう (拍手) 既存のAppを 独立した― Watch Appに移行する方法を 説明しました Watch専用の アプリケーションを構築して― シミュレータの改善についても 話しました シミュレータエクスペリエンス と同様の趣旨で― デバッグについて説明しましょう watchOS 6シミュレータのデバッグは 10倍も高速になりました (拍手) どうも (拍手) デバイスのデバッグは2倍の速さです 信頼性を高めるために 今年は多くの努力を重ねました
デバッグはiPhoneを介して行われますが ちょっとしたヒントをお教えします iPhoneとWatchがWi-Fiに接続されていれば システムはより速いルートを選択し 高速でデバッグできます
Appを独立させる方法の さまざまな側面について説明します
主要な点は3つです 認証やプライベートユーザデータから 直接ユーザのデータを取得する方法 デバイスに情報をプッシュする方法 そして Connectivityの取り扱いと 自身のアプリケーションデータの 収集です まずは認証について話します
認証を扱う主要な方法はサインインと サインアップです watchOS 6ではWatch上で直接 サインアップ認証を構築できます WKAlertAction APIを使用して 利用規約をサポートできます 他の全プラットフォームと同様に watchOSは Appleでサインイン をサポートします
次に カスタムパスワードを使った サインインの構築方法を説明します まずは Appleでサインイン から 始めます
これはユーザから認証を得るための 簡単で安全でプライベートな方法です ユーザはフォームの記入や 新規の パスワードを考える必要はありません Eメールアドレスを選ぶだけで サインインを続けられます
各アカウントには2ファクタ認証が 組み込まれており ユーザはEメールによる 確認の必要がありません 全てのデバイスで サインインできます 他の種類のデバイスに向けた JavaScript SDKもあります
Appleでサインイン を使うには 必ずwatchOSでも利用可能になった― AuthenticationServices フレームワークを使ってください
構築したい特定のUIがある場合は "AuthorizationAppleIDButton"を アプリケーション内に 組み込むことができます ユーザがボタンをタップすると IDアクションを受け取り AuthenticationServices フレームワークを使用して 適切なシステムUIを表示します
Appleでサインイン に関する 他のセッションも参考にしてください
WatchKit ExtensionのXcodeプロジェクトで Appleでサインイン を有効にするには 新しいCapabilityを追加して― Appleでサインイン のエンタイトルメントを 有効にするだけです これで簡単にスタートできます
現在はカスタムパスワードで サインインしているかもしれませんが 今年は新しくwatchOSに TextFieldを導入します SwiftUIかWatchKit内から TextFieldを組み込めます
このようなUIを構築して ユーザ名とパスワードを尋ねます プレースホルダテキストを使用して ユーザに特定の入力内容を指示します
特定のフィールドに適切な textContentTypeを設定した場合 システムのテキスト入力コントローラが起動し 適切なテキストタイプに変わります
このフローでは ユーザが ユーザネームをタップします するとテキスト入力コントローラが 立ち上がります ユーザは 音声か指書き入力の どちらかを選択できますが 今回 コンティニュイティ キーボードという 選択肢が加わりました ユーザがこれをタップすると― Apple WatchはiOSかiPad OSの デバイス上でテキスト入力を求めます 同じiCloudアカウントに ログインしている場合は iPhoneやiPadで通知を受け取ります tvOSでTextFieldを使用した経験が ある方は 見覚えがあるでしょう
ユーザがタップするだけで 簡単にiOSキーボードでの 入力が可能になります 先ほど紹介したtextContentTypeが 自動入力の提案をします ユーザはiCloudキーチェーン または 好みのパスワードマネージャから 自動入力の候補を選択できます
システムがPassword AutoFillの候補を 適切に挙げる事を確認してください そのためには 必ず正しい textContentTypeを設定して Associated DomainをWatchKit Extensionに追加してください Associated DomainはWebサイトと Appの連携に最適です ユーザのiCloudキーチェーンに存在する 可能性があるクレデンシャルを iOSキーボードのトップに表示するよう システムに認識させます
ユーザが自動入力の候補を 選択すると システムはユーザ名とパスワードを 同時に自動入力するよう尽力します
パスワードを使うサインインでは ワンタイムコードが必要な場合があり 正しいtextContentTypeを 設定すると iMessageかテキストメッセージを介せば ワンタイムコードは自動入力されます 入力コントローラが自動入力の 候補を表示するので ユーザは容易に選択でき 認証を続行することができます (拍手) TextFieldはSwiftUIか WatchKitから使うと説明しましたが Associated Domainを設定して適切な 自動入力の候補を表示するよう注意して コンティニュイティキーボードで フローをテストし 必要であればワンタイムコードの サポートを構築してください
プライベートユーザ情報が 必要な場合もあります これは異なるフレームワークを介して ユーザに情報を求めます watchOSではすでに カレンダーや連絡先 モーションやロケーションなどを Apple Watch上で 直接サポートをしています watchOS 6では Apple Watch上で直接ヘルスアクセスを 与えるサポートをします (拍手) ありがとう (拍手) ユーザは 要求された全てのデータか 特定のタイプのデータか アクセスの範囲を 選択して許可することができます
これが独立したAppでの ユーザデータの取り扱い方法です 情報をデバイスにプッシュする 方法を説明します 最善の方法は プッシュ通知を介して行うことです watchOS 6により 初めて独立型の プッシュターゲットになりました (拍手) これは ユーザに可視の通知と バックグラウンドの通知を 直接Apple Watchに 送れるということです これはUserNotification フレームワークに基づいており 全てのAppleのデバイスに共通の 基盤を使用しています
デベロッパのServerはAPNsリクエストヘッダと ペイロードを直接APNsに送ります APNsとは“Apple Push Notification Service”です そしてAPNsは そのペイロードを 適切なデバイスに送ります watchOSのペイロードは 他の全てのプラットフォームと同じです APNsリクエストヘッダには 新しいキーが1つあります それは それは apns-push-typeですです
これは 全てのAppleプラットフォームと OSでサポートされています
そのキーをalertまたは backgroundに設定可能です 私の考えですが ユーザに通知を見てもらうためには alertのプッシュタイプが 最適です 新しいコンテンツが利用可能になった場合等に ユーザのデバイス内の バックグラウンドで Appを立ち上げたい時は backgroundのプッシュタイプを 使用するといいでしょう
レジストレーションのために WatchKitのトークンを取得します 過去にリリースされた 転送通知と同様に アラート通知は WatchKitとUserNotificationsを使って 以前と同じ方法で Watch Appに送信されます バックグラウンド通知は WKExtensionDelegateに送信されます Notification Service Extensionの watchOSでのサポートも始まったので 暗号化されたペイロードもデバイス上で 復号してユーザに表示できます
Xcodeプロジェクトで プッシュ通知を有効にする方法です Target EditorでWatchKit Extensionを選択し 新しいCapabilityを追加して― “Push Notifications”の エンタイトルメントを有効にします バックグラウンド通知のサポートには “Background Modes”を有効にして “Remote notification”に チェックを入れてください
次は コードの説明です これはExtensionDelegateの applicationDidFinishLaunchingです 通知を登録する際には まずユーザに許可を求めます UNUserNotificationCenterで 承認リクエストを出します ユーザがアクセスを許可すると WKExtension.sharedの registerForRemoteNotificationsを 呼び出すことができます
その後― didRegisterForRemoteNotifications の呼び出しを実装している場合 デバイスのトークンを取得し 通知を Server用のプロバイダに転送します 万が一 失敗した場合の、 didFailToRegisterForRemoteNotificationsも実装します
バックグラウンド通知の場合は didReceiveRemoteNotificationに fetchCompletionHandlerと WKBackgroundFetchResultを表示します これを受信するとバックグラウンド通知の 処理が可能になり 適切なBackgroundFetchResultを使って CompletionHandlerを呼び出します
もう一度言いますが 新しいAPNsのリクエストヘッダの apns-push-typeキーはwatchOSへの送信に必要で 全プラットフォームで サポートされています どの通知を どのAppleデバイスに送る時も必ず apns-push-typeを追加してください
APNsリクエストヘッダの APNSトピックキーは WatchKit Appバンドルの IDになります WatchKit Extensionではないことに 言及しておきます
iPhone AppとWatch Appのように 複数のAppがある場合は 両方のデバイスに 同時に通知を送ってください そうすることで システムは 通知を適切に重複排除します
もう1つの優れた方法は コンプリケーションプッシュです コンプリケーションが文字盤で 有効になっている場合は Appのアップデートに最適です
これは watchOSで利用可能になった PushKitを介して行います PushKitはレジストレーションと デリバリの両方で使用可能です iOSの 古いコンプリケーションの プッシュメカニズムを使っている場合は 今後はコンプリケーションのプッシュを 直接Watchへ送るようお勧めします
コードでは PKPushRegistryと delegateを設定し desiredPushTypesを指定すれば コンプリケーションプッシュを 登録できます
その後 デバイスのトークンを取得し Serverへ転送して 起こりうる無効化にも対応できます
実際にプッシュを送信する時には 適切なPushKitメソッドを実装し― コンプリケーションプッシュの 受信処理をして コンプリケーションタイムラインを 再度読み込みます
以上がデバイスに情報を プッシュする方法です 次に アプリケーションデータの収集と Connectivityについて説明します
ネットワークは これまでもwatchOSで 利用可能だったURLSessionを使います CloudKitでもアプリケーション データを収集することができます
WatchConnectivityを使っていて 特定のデータがiPhone Appに 依存している場合 WatchConnectivityの使用の全てを NSURLSessionに移行してください
多くの場合ユーザはWatch Appを 2~3秒しか使わず すぐに閉じるので 必ずバックグラウンドセッションを 使って URLSessionsが適切に完了するよう 確認してください
WatchConnectivityは 引き続き利用可能で どんなコンパニオンAppの 特定のインタラクションにも使えますが やむを得ない場合のみ 使用してください
そしてiPhone Appがあるかを知らせるため Booleanプロパティ ”isCompanionAppInstalled” が導入されています
すでにCloudKitを使っているならば watchOS上で完全に CKSubscriptionがサポートされ それはCloudKit通知の サポートと連携しています 独自のServerや通知プロバイダの管理を 避けたければ CloudKitを使えます CloudKitと そのベストプラクティスに 関する詳細はオンラインで調べられます
CKSubscriptionは 他のデバイス上で起きた データベースの変更をSubscribeするのに最適です アプリケーションの アップデート時期を知らせる― バックグランドのプッシュ通知を受け取り AppとCloudKitコンテナの中で 変更されたものだけを取得できます
例えば iPhone Appを 使っているユーザが データベースを変更したとします その変更はCloudKitに送信され CloudKitはそれを認識して APNsに対し サブスクリプションを持つ他のデバイスにも バックグラウンドで通知するよう伝えます この例ではWatch Appです
ユーザがWatch Appで変更を加えた場合 このサイクルが繰り返されます 通知の送信方法は全てのデバイスに 共通のルールによって管理されています CloudKitサブスクリプションを 設定するには notificationInfoを設定して souldSendContentAvailableが trueかを確認してください するとCloudKitが 先ほど話していた デリゲートコールバック― didReceiveRemoteNotificationで プッシュをデリバリします。 そしてAppと CloudKitコンテナの中で― 変更されたものだけを取得します
以上3つがWatch Appを独立させる 主な方法です ユーザデータの取得方法 デバイスに情報をプッシュする方法 そして 自分のアプリケーションデータの 取得に関する対処方法です
ユーザはApple Watchが提供する 自由と独立性を享受します そして システムとデベロッパ向けの機能が ふんだんになった今 ぜひWatch Appを 独立させてください ユーザはこれまで以上に Watch Appが 独立することを期待しています
オンラインで セッションや 優れた情報が確認できます ご来場ありがとうございました WWDCを楽しんでください (拍手)
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。