ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
メールApp Extensionの構築
メール上で素晴らしいエクスペリエンスを創り出す最良の手段であるMailKitを紹介します。MailKitは、AppがmacOSのメールAppと簡単かつ安全にやり取りすることを可能にします。本セッションではMailKit APIを深く掘り下げていき、メッセージの作成、メッセージアクション、セキュアメール、コンテンツブロックなどの拡張機能を作成する方法を紹介します。
リソース
-
ダウンロード
こんにちは Mailは欠かせないAppです その拡張機能を使うと新たな方法で そのメリットを活用できます この動画では私Abhilashが 同僚のSethと共に Mail Appの優れた 拡張機能について説明します 最新のmacOS Montereyで AppleはMailKitという Mail拡張機能のための新しい フレームワークを提供します これらの拡張機能は Safari App拡張機能や シェアシート拡張機能などの 他のApp拡張機能と同じ 基盤の上に構築されています ユーザープライバシーとセキュリティを 念頭に置いて開発された機能です MailKit APIは主要な macOSリリースにおいて ドキュメントおよびサポートされます 他のApp拡張機能と同様に 適切に署名された Mac Appや既存Appに 含めることができAppStoreで配布可能です Mail拡張機能はMail Appの未来です 今後のmacOSリリースでは プラグインが廃止されます 今回はMailのUXを拡張する 4つの新しい方法を紹介します まず メール作成拡張機能でメール作成時に 新たなワークフローが使用可能になります アクション拡張機能は受信 Mailにカスタムルールを 設定することで受信トレイの管理を簡素化します コンテンツブロックはメールメッセージのための WebKitコンテンツブロッカーを提供します メッセージセキュリティは メッセージの署名 暗号化および復号化により メール送受信時のセキュリティを強化します これによりメッセージの作成 受信メッセージに対するアクション 不要なメールコンテンツのブロック さらに暗号化と復号化をサポートする Mail拡張機能が提供されます コードを書くのは簡単で 大きな効果が得られます これらは安定した機能で OSとMail Appにおいて 長期的に使用できます Mail拡張機能について 説明する前に 実用例を1つ見てみましょう 私が多国籍企業に勤めているとします 同僚たちはいくつもの 機密プロジェクトに関わっています プロジェクトの機密性を守るために Big Secrecy拡張機能が メール受信者を検証します 火星にできた新しいリモートオフィスについて 同僚のSethにメールを送りたいとします メール作成画面で Big Secrecy拡張機能の ボタンに気付くでしょう この拡張機能により担当プロジェクトの 一覧が表示されるので火星リモートオフィスを選び 件名とSethのアドレスを入力します 拡張機能はこのプロジェクトが Sethに開示されていることを検証し 彼の電子メールアドレスを青く色付けます こうした重大プロジェクトの連絡には マネージャーのマイキーも 含めたいので追加します どうやら新しいリモートオフィスの情報は マイキーには開示されていないようです 彼を宛先から削除してメールを送信します
Sethから返信がきました メッセージ一覧で赤く表示されています これはBig Secrecyが 火星プロジェクトを 赤に色分けしたためです さらに拡張機能がこのメッセージに対して アクションをしたことを示す アイコンが表示されます メッセージを表示すると メッセージビューアにアイコンが表示され Sethからのメッセージが暗号化されて Big Secrecyによって正常に 復号化された事がわかります
ではMailKit APIを使って Big Secrecyのような 強力な拡張機能を構築する方法を見ていきましょう まずはメール作成時の新機能を提供する メール作成拡張機能についてお話します macOS Montereyでは拡張機能が メール作成画面と関わる方法は4つあります
拡張機能ではユーザーのメール作成時に 受信者のメールアドレスを検証し 作成中のメッセージに関する 追加のコンテキストを View Controllerに提供し 送信メッセージに追加のヘッダーを設定し メッセージ送信前にエラーを ユーザーに警告できます
次はメール作成拡張機能の構築方法についてです
まず既存のmacOS Appに 新規ターゲットを追加します Xcode 13では 新しい Mail拡張ターゲットを作成できる 新たなMail拡張テンプレートが利用できます 設定時 作成したい 拡張機能のタイプを選択できます Mail作成拡張機能には “セッションハンドラー作成 機能を含む”を選択します
拡張ターゲットのInfo.plistでは MEComposeSession ディクショナリで アイコンとツールチップも指定する必要があります Mail Appはアイコンと ツールチップを使って メール作成画面のツールバーボタンを表示します 次に拡張機能の プリンシパルクラスの実装についてです 拡張機能のプリンシパルクラスは MEExtensionプロトコルに 準拠している必要があります MEExtensionは4つのタイプ の各拡張機能に対して オプションのハンドラーメソッドを提供します メール作成拡張機能の場合プリンシパルクラスは セッションメソッドのハンドラーを実装し MEComposeSessionHandler プロトコルに準拠する インスタンスを返す必要があります MEComposeSessionHandler のメソッドは Mailによって呼び出され作成ウィンドウの ライフサイクルについて拡張機能に通知します 最初に呼び出されるメソッドは 新規作成画面を開いた時に起こる ComposeSessionDidBegin です 他にも受信者アドレスの編集やメール送信など ユーザーの行動に基いて 呼び出されるものがあります
MEComposeSessionHandlerの すべてのメソッドは 作成画面に関する情報を提供する MEComposeSession 引数を持っています Mail Appは各作成画面に対してユニークな MEComposeSession インスタンスを作成します これには編集中のメッセージに関する情報を持つ MEMessageプロパティが含まれます この情報を利用してMailが拡張機能の MEComposeSessionHandler メソッドを呼び出す時に 提供するレスポンスをカスタマイズできます 受信者のメールアドレスに注釈を付ける 方法の例を見てみましょう
受信者のアドレスが編集される度にMailは ComposeSessionHandlerの annotateAddresses ForSessionを呼び出します この例ではMEMessageの allRecipientAddresses プロパティを使用して seth@example.comではない アドレスをエラー表示します メール作成拡張機能は作成画面で表示される ビューコントローラーも提供します 各ビューコントローラーを作成画面毎に カスタマイズすることでユーザーに関する貴重な コンテクストが得られます 拡張機能のビューコントローラーは MEExtensionViewController のサブクラスです Mailは MEComposeSessionHandlerの viewControllerForSession メソッドを呼び出し このビューコントローラーの インスタンスを要求します
メール作成APIの詳細と ワークフロー構築方法は MailKitドキュメントをご覧ください 次にアクション拡張機能についてお話します アクション拡張機能は受信メールに アクションを実行することで 受信トレイ管理を楽にします macOS Montereyでは 新規メッセージに対して 3種類のアクションが可能です アクション拡張機能は受信メッセージの 既読ステータスとフラグを変更したり 迷惑メール ゴミ箱アーカイブなどの フォルダに移動したり メッセージ一覧でメッセージに 色を適用したりできます Mail拡張ターゲットの作成時に “メッセージアクション ハンドラーを含める”を選び メッセージアクションのサポートを追加できます 作成拡張機能と同様に アクション拡張機能の場合プリンシパルクラスは メッセージアクションのハンドラーを実装して メッセージアクションハンドラーを返します この例ではプリンシパルクラスが MEMessageActionHandler を採用することで アクションハンドラーとしても機能しています アクション拡張機能には MEMessageActionHandlerの decideAction for message も実装する必要があります DecideAction for messageは MEMessage引数で呼び出されます ここではヘッダープロパティに“Mars”が 含まれているかを確認し メッセージを赤にしています アクションハンドラーに関し 注意点がいくつかあります Mailは受信トレイに表示 される前にダウンロードする 全新着メッセージに対してハンドラーの decideAction for message を呼び出します Mailが拡張機能の decideAction for message メソッドを 初めて呼び出す時 MEMessageインスタンスには メッセージヘッダーのサブセットのみが含まれます 利用可能なヘッダーに基づいて メッセージの色分けなどの決定ができます Mailがメッセージにアクションを適用すると 受信ボックスでもそれが表示されます アクションを適切に判断するには メッセージの全文とヘッダー が必要な場合もあります この場合decideAction for messageメソッドは invokeAgainWithBodyの 決定を返すことがあります これによりMailはハンドラーの decideAction for messageを 再度呼び出す前に メッセージ全文とヘッダーを取得します その結果受信ボックスに 表示される前により正確な決定が返せます ここからはSethがコンテンツブロックと セキュリティ拡張機能の構築方法について話します ありがとうAbhilash まずコンテンツブロッカー拡張機能の 追加方法を説明します コンテンツブロッカーは MailのWebKit構成に作用し 拡張機能がメッセージの HTMLのトリガーに基づいて コンテンツの読み込みを ブロックできるようにします これによりURLなどのHTMLの基準に基づいて 読み込まれるコンテンツをブロックできます この例では拡張機能が コンテンツのルールに基づいて リモート画像をブロックしています Mail拡張ターゲットの作成時に “コンテンツブロッカーを含める”を 選択することでブロック機能を追加できます 次に拡張機能のプリンシパルクラスで コンテンツブロッカーのハンドラーを返します この例ではプリンシパルクラスは MEContentBlockerを使うため selfを返します コンテンツルールは同じ構文をSafariの コンテンツブロッカーとして 使うことで指定できます よってSafariのコンテンツブロッカーに すでにコンテンツルールがある場合は Mail App拡張機能にも 同じルールを使用できます コンテンツルールリストの作成方法は “Webkitコンテンツブロッカーの概要” ドキュメントを参照してください リストが完成したら contentRulesJSONメソッドで 返してMail Appに渡します このメソッドにはコンテンツルールリスト JSONのデータエンコーディングが必要です コンテンツブロッカーについては以上です 次にメッセージセキュリティ 拡張機能についてお話します メッセージセキュリティ拡張機能は 暗号化されたメッセージを エンコード デコードします さらにメッセージに署名して 署名済みメッセージの証明書も確認できます Mail拡張ターゲットの作成時に “メッセージセキュリティハンドラーを含める” を選択するとメッセージ セキュリティを追加できます 次に拡張機能のプリンシパルクラスで MEMessageSecurityHandler プロトコルをサポートする ハンドラーを拡張機能から返す必要があります この例では拡張機能はプリンシパルクラスも MEMessageSecurityHandler プロトコルを使用するため selfを返します では作成中のメッセージをエンコードする方法を 見ていきましょう メッセージのエンコードは 2つのタイプに分類できます 1つ目はメッセージ作成時にUIを動作させます これにより拡張機能に現在のメッセージに 署名し暗号化できることを示します 2つ目はメッセージ送信時に 暗号化および署名します メッセージ作成時Mail Appは 送信者と受信者一覧を含む メッセージを拡張機能に送信します その後拡張機能がメッセージの 署名および暗号化が可能かを判断します 拡張機能が返すものに基づいて Mailはメッセージの署名と 暗号化が可能かに応じて ロックアイコンと証明書アイコンを強調表示します
送信者または受信者が変更される度にMailは 拡張機能のメッセージセキュリティハンドラで getEncodingStatusメソッド を呼び出します 拡張機能はメッセージに署名して暗号化し 現在のエンコードステータスを Mailに戻せるかを確認します この例ではExampleEncoderを インポートして メッセージのエンコードステータスを 確認しています メッセージセキュリティハンドラーは ステータスが明らかになるとそれを返します メッセージが送信されるとMailは RFC822メッセージデータを 取得し 拡張機能に渡します 拡張機能は必要に応じて メッセージに署名して暗号化し 署名および暗号化された RFC822データを返します その後Mailはこのデータを 送信サーバーに送信します
メッセージの送信準備ができたらMailは encodeMessageメソッドで メッセージを拡張機能の メッセージセキュリティハンドラーに渡します 拡張機能のメッセージセキュリティハンドラーは エンコードされたメッセージを返します この例では再度 ExampleEncoderを使って メッセージをエンコードします セキュリティハンドラーがメッセージを返します デコードはエンコードとは逆に機能します メッセージが閲覧されると Mailはエンコードされた RFC822メッセージ データを拡張機能に送ります 拡張機能はメッセージを未暗号化または署名された RFC822データに デコードしMailに返します 次にMailはデコードされた メッセージを表示します
Mailがメッセージをデコードする準備が整うと decodeMessageメソッドを 呼び出す拡張機能の セキュリティハンドラーを呼び出します 拡張機能がメッセージをデコードできる場合 デコードされたRFC822メッセージを返します メッセージのデコードに拡張機能が不要な場合 すぐにnilが返されます メッセージが閲覧される時署名および 暗号化されているかが判断できます 署名されたメッセージの場合 署名者ラベルの横にある署名者証明書に 送信者の証明書情報が表示されます 拡張機能は独自の View Controllerで この証明書情報をレンダリングできます デコードされたメールメッセージの一部として 拡張機能はメッセージの署名者を返します 提供されたラベルはメッセージビューで 署名者として表示されます 拡張機能は署名証明書を表示するのに 必要な情報を コンテキストプロパティに入力することもできます 証明書アイコンがクリックされると Mailは拡張機能から ViewControllerを要求し 現在のメッセージの署名者を渡します この署名者はメッセージが 最初にデコードされた時に 拡張機能によってMailに返されたものです ビューコントローラーは MEExtensionViewController のサブクラスである必要があります メッセージセキュリティ 拡張機能については以上です Mail拡張機能はメール体験を 向上させるための強力な方法です これらのMail機能を 製品開発に役立ててください フィードバックをお待ちしています メールまたは開発者フォーラムにて メッセージを投稿してください 今回の例ではMail App 拡張機能の力を紹介しました 受信者を検証するメール作成拡張機能 受信メッセージを色分けするアクション拡張機能 コンテンツブロック拡張機能について見てきました またMail Appにカスタムの暗号化および 復号化を追加する方法にも触れました Mail App拡張機能の 構築方法を学んだ皆さんが これらを活用して素晴らしいものを 生み出すことを期待しています さぁ 新しいMail App 拡張機能を構築しましょう ご視聴ありがとうございました
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。