View in English

  • メニューを開く メニューを閉じる
  • Apple Developer
検索
検索を終了
  • Apple Developer
  • ニュース
  • 見つける
  • デザイン
  • 開発
  • 配信
  • サポート
  • アカウント
次の内容に検索結果を絞り込む

クイックリンク

5 クイックリンク

ビデオ

メニューを開く メニューを閉じる
  • コレクション
  • トピック
  • すべてのビデオ
  • 利用方法

WWDC19に戻る

ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。

  • 概要
  • トランスクリプト
  • Safari Extensionの新機能

    Safari Extensionによって、App固有の機能をSafariで使用できるようにすることができます。このセッションでは、コンテンツブロックの通知や、ページ、タブ、ポップオーバーといったユーザーインターフェイスを管理および制御するためのイノベーションなど、Safari App Extensionとコンテンツブロッカーをさらにパワフルにする新機能について説明します。また、ExtensionとApp間でコミュニケーションするための最新のAPIとベストプラクティスについても紹介します。

    リソース

    • Converting a legacy Safari extension to a Safari app extension
    • Safari web extensions
    • SFSafariServicesAvailable(_:)
      • HDビデオ
      • SDビデオ
    • プレゼンテーションスライド(PDF)
  • このビデオを検索

    (音楽)

    Safariチームの ブライアン・ワインスタインです Safari Extensionの 新機能を説明します Safari Extensionにより Safariの動作を拡張し Web閲覧効率を上げます 例えばスクリプトや スタイルシートの追加や コンテンツブロックなどです

    今日のトピックは― Safari Extensionの配布方法 コンテンツブロッカーの動作が どう通知されるか ウインドウやタブ ページ管理のサポート Safari App Extensionの ポップアップの改善点 Safari Extensionと アプリケーションの連携の ベストプラクティスの紹介です

    Safari Extensionは2種類 コンテンツブロッカーと

    Safari App Extensionです どちらもXcodeでビルドした Mac Appに含まれます

    拡張機能を含むアプリケーションを インストールすると Safariの環境設定に表示され 動作可能になります

    公証サービスで検証後に Webサイトから アプリケーションを 配布することもできます 拡張機能を表示するには アプリケーションの起動が必要です 皆さんが作ったものは すばらしいですね そしてバグの報告や改善策を 寄せてくださったことに 心から感謝しています

    要望が多かったのは コンテンツブロッカーが動作する時を 拡張機能が知る方法です

    コンテンツブロッカーは リストを提供します ブロックや非表示にする コンテンツのルールのリストです Safariはコンテンツブロッカーが オンの時はリストを要求

    閲覧中にコンテンツブロッカーが リソースをフラグ付けします

    するとコンテンツブロッカーに関連した Safari App Extensionに Safariがそれを伝えます Safari App Extensionをオンにして 統計値を見ることや コンテンツブロッカーのみをオンにして プライベートな閲覧も可能 とても簡単です

    まずInfo.plistファイル内で Safari App Extensionを コンテンツブロッカーと関連付けます Info.plistの NSExtensionセクションに エントリを追加して実行します キーはSFSafariAssociated ContentBlockersです

    値は通知を受けたい コンテンツブロッカーの バンドルIDのアレイです 複数のコンテンツブロッカーの 通知を受けられます コンテンツブロッカーと Safari App Extensionは 同じContaining App内にある 必要があります

    Info.plistを設定したら プリンシパルオブジェクトに デリゲートメソッドを実装 ContentBlocker(withIdentifierblocked ResourcesWith urls: on pageです

    これらの通知はバッチ化され URLのみ通知されます Info.plistのWebサイト アクセスセクションで アクセスを許可したURLです

    これだけです

    次はウインドウやタブ ページ管理の改善点について これも強い要望があった― ページが移動する時に それを通知するAPIです コンテンツブロッカーの 通知と合わせると 今後の通知が新しいページの ロードだと分かります

    これも強い要望があった― ページが移動する時に それを通知するAPIです コンテンツブロッカーの 通知と合わせると 今後の通知が新しいページの ロードだと分かります これを利用し ページのロードから リダイレクトチェーンを たどることもできます サイトの特定のバージョンに リダイレクトするか URLパラメータを見て拡張機能が UIをユーザに見せたかを判断します メソッドはプリンシパルオブジェクトで 呼ばれます 拡張機能がターゲットURLに アクセスできなくてもです その時URLはnilになります お気に入りや履歴を開いた場合も URLはnilになります

    サンプルで 新しいAPIを使いましょう

    以前 Safari App Extensionを 紹介した時 “bear”をクマの絵文字に 置換する拡張機能を作りました 今日は ネット上でクマの生活を 便利にします “honey”をURLに含む全画像を ブロックし― お菓子の誘惑を絶つ コンテンツブロッカーを作りました これをSafari App Extensionと 関連付けます まずSafari App Extensionの Info.plistを開きます SF Safari associated Content Blockersを― NSExtensionセクションに追加します XMLビューアを開き ソースコードを貼り付けます

    plistビューアに戻ります

    新しいコンテンツブロッカーの バンドルIDだけのアレイです 次にコンテンツブロックの 通知を確認します

    SFSafariPageと ブロックされているリソースの マップを作ります コンテンツブロッカーが ブロックしたとの通知があると ブロックされたリソースの リストを見つけ― 通知を受けたリソースを追加 ページを移動する時に リストを消去します

    そのためにページをNavigateToURLに オーバライドして ブロックされたリソースを消去します 最後にツールバーの項目のバッジを ブロックしたリソースの数に設定します

    ツールバーの項目を検証するには アクティブなタブを見つけます

    アクティブなページで― ブロックされたリソースの数を マップから取得します 見てみましょう 拡張機能が見つかるよう Animalifyをビルドして実行します

    アプリケーションを実行すると―

    拡張機能の設定に移動する スプラッシュスクリーンが表示されます XcodeからSafari Extension Appを 作成すれば 無料でスプラッシュスクリーンを 入手できます Safariを起動して bearseating.comにアクセスし 何を食べるか考えましょう ここではデモが目的なので デベロッパの証明書はありませんが 大丈夫です 拡張機能を一時的に 実行できる方法があるのです まずSafariの環境設定を開き 詳細に進み 開発メニューをオンにします

    そして開発メニューで “未署名の機能拡張を許可”を選択 Safari Extensionの 設定をチェックします コンテンツブロッカーと Safari App Extensionを有効にし bearseating.comをリロード クマがハチミツを食べた写真が ブロックされ ツールバーにブロックされた リソース数の“3”が表示されます

    コンテンツブロッカー無しで リロードすると バッジが消え ブロックした画像が再び現れます 再度リロードすると画像は消えます このようにブロックと ページの移動の通知が簡単です

    これはSafari App Extensionの 新しいAPIのほんの一部です 他も見てみます

    SF Safariのページの表示内容を 取得する機能が追加 拡張機能がURLに アクセスする必要があります APIから画像を取得するためです

    最新版では Safari Extensionバンドルからの コンテンツ表示が簡単です ネイティブコードから拡張機能の BaseURIを取得できます スクリプトの挿入は不要です

    スクリプト無しでタブを 直接URLに移動することもできます

    最後にSafariは Safari JavaScriptオブジェクトを 拡張機能のコンテンツでロードされた フレームに挿入します フレームはSafari App Extension との間でメッセージを送受信します

    Safari Extensionはアクティブな ウインドウやタブだけでなく Safariで開いているものまで 分かるようになりました

    ここにアプリケーション内の 全ウィンドウを取得してから 各ウィンドウごとに 全タブを取得するコードがあります

    ページのgetContainingTabと タブのgetContainingWindowも あります 例えばツールバーの項目の更新が必要な コンテンツスクリプトからの メッセージの処理を検討します タブを含むページを取得後に ウィンドウを含むタブを取得できます

    ピン留めされたタブは nilを含むウインドウを持ちます これらが全ウィンドウに 属しているからです

    以上がウインドウやタブ ページ管理の改善点です

    最後のAPIの改善点はポップアップを

    プログラムで 開閉できるようにしたことです ツールバーの項目で “ポップアップを表示する”を選択し ウインドウから ポップアップを表示できます ポップアップが ViewControllerから消えます self.dismissPopoverを 呼び出すだけです

    APIの追加により改善した 拡張機能を見てみましょう

    Safari Extensionを 新しいAPIで改善します ツールバーの項目のテーブルビューで ポップアップが表示されます タブごとに1行と2列になります 左の列は タブのスクリーンショットで 右の列にはページのタイトルと ブロックの数が表示されます

    まずポップアップ表示前の Safariウインドウの状態に PopoverViewControllerを伝えます そのためにPopoverWillShowを オーバライドし情報を取得

    この関数はウィンドウ内の 全タブで反復処理され 3つのアレイを埋めます 1つはブロックしたリソース用 1つは画像用 もう1つはタイトル用です

    タブごとに表示されるのは ページのスクリーンショットと

    プロパティからの各ページのタイトルと ブロックされたリソースです PopoverViewControllerも オーバーライドし ViewControllerに 戻るようにします ViewControllerを見ます

    PopoverStateと変数を設定し テーブルをリロードします

    最後は ユーザが この行のどれかをクリックした場合 そのタブをアクティブにし ポップアップを閉じます

    テーブルビューの選択が変わると クリックしたタブをアクティブにして ポップアップを閉じます Animalifyを 再ビルドして実行します

    Safariを再起動し ホームページを読み込みます 拡張機能がオフになっています 未署名の拡張機能の許可が 必要だからです 開発メニューから実行します

    そしてアプリケーションに進み 次に拡張機能に進みます

    拡張機能と コンテンツブロッカーをオンにし ページをリロードします 更に数ページ開きます

    bearseating.com以外の タブを選択すると ツールバーのバッジが消えます ポップアップを開きましょう

    ウインドウ内のタブが見えます beardiet.comから2つ bearseating.comから1つが ブロックされました 1行目をクリックして タブをアクティブにします タブに戻りポップアップが終了 これは新しいAPIの一部です

    Safari Extensionとアプリケーションの 連携のベストプラクティスを 最後に取り上げます

    Safariは必要に応じて 拡張機能を起動します アプリケーションが実行中の 保証はありません

    XPCサービス搭載の アプリケーションであれば 拡張機能とそのサービスを 連携させましょう またはSafari Extensionとアプリの間で データを共有したい時があります 拡張機能はアプリケーションで 設定した環境設定を持つことができます

    Safari Extensionと XPCサービスを― アプリケーションと同じApp Groupにします これでSafari Extensionは グループ内のサービスを検出できます また UserDefaultsの SuiteNameイニシャライザにより グループ内でデータを共有できます

    しかしSafari App Extensionで 最適に処理される動作を アプリケーション内で実行したとします 例えばパスワード管理 アプリケーションを作成していて ユーザーが認証を選択しているとします 拡張機能やSafariが 動作している保証はありません

    Safari App Extensionに メッセージを送るAPIがあります DispatchMessage withName: ToExtensionWithIdentifierを アプリケーションが呼び出します これが有効なのは 拡張機能がオンで― APIを呼ぶコードと同じApp Bundle に ある場合にのみです

    このAPIを呼び出すと Safariにメッセージが送られ 起動されます

    そしてSafariは拡張機能に これを転送します MessageReceivedFrom ContainingAppを実装して Safari App Extensionは メッセージを聞くことができます 受信したメッセージを 実行することで対応します では Safari Extensionsと App間での データ共有の方法を 見てみましょう

    両方が同じApp Groupに 属していれば NSXPCConnectionを使った連携や UserDefaultsを使った データ共有ができます AppからSafari App Extensionに メッセージを送る際は SFSafariApplication. dispatchMessageで送信 messageReceived FromContainingAppで処理します

    これがAppとSafari Extensionの 連携方法です

    今日のトピックは終了です 説明したのは Safari Extensionsを Mac App Storeや― Webサイトから配布できるということ

    コンテンツブロッカーと連携させると いつ動作するかが分かります

    また App GroupでSafari Extensionと アプリケーションを連携可能です

    今日お話ししたAPIはすべて 皆さんのフィードバックの賜物です 今後もフォーラムへ ご意見をお寄せください 皆さんの拡張機能を 楽しみにしています

Developer Footer

  • ビデオ
  • WWDC19
  • Safari Extensionの新機能
  • メニューを開く メニューを閉じる
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    Open Menu Close Menu
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • SF Symbols
    メニューを開く メニューを閉じる
    • アクセシビリティ
    • アクセサリ
    • App Extension
    • App Store
    • オーディオとビデオ(英語)
    • 拡張現実
    • デザイン
    • 配信
    • 教育
    • フォント(英語)
    • ゲーム
    • ヘルスケアとフィットネス
    • アプリ内課金
    • ローカリゼーション
    • マップと位置情報
    • 機械学習
    • オープンソース(英語)
    • セキュリティ
    • SafariとWeb(英語)
    メニューを開く メニューを閉じる
    • 英語ドキュメント(完全版)
    • 日本語ドキュメント(一部トピック)
    • チュートリアル
    • ダウンロード(英語)
    • フォーラム(英語)
    • ビデオ
    Open Menu Close Menu
    • サポートドキュメント
    • お問い合わせ
    • バグ報告
    • システム状況(英語)
    メニューを開く メニューを閉じる
    • Apple Developer
    • App Store Connect
    • Certificates, IDs, & Profiles(英語)
    • フィードバックアシスタント
    メニューを開く メニューを閉じる
    • Apple Developer Program
    • Apple Developer Enterprise Program
    • App Store Small Business Program
    • MFi Program(英語)
    • News Partner Program(英語)
    • Video Partner Program(英語)
    • セキュリティ報奨金プログラム(英語)
    • Security Research Device Program(英語)
    Open Menu Close Menu
    • Appleに相談
    • Apple Developer Center
    • App Store Awards(英語)
    • Apple Design Awards
    • Apple Developer Academy(英語)
    • WWDC
    Apple Developerアプリを入手する
    Copyright © 2025 Apple Inc. All rights reserved.
    利用規約 プライバシーポリシー 契約とガイドライン