ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
AppKitの最新情報
AppKitを使用したMac App開発の最新情報をご覧ください。SF Symbolsの最新情報について解説し、強化されたコントロールでインターフェイスを向上させる方法を紹介し、Stage Managerでのウィンドウの動作を調整する方法を学びます。また、macOSの共有機能やコラボレーション機能に関する最新情報も紹介します。
リソース
関連ビデオ
WWDC22
-
ダウンロード
♪ ♪
こんにちは AppKitの新機能へようこそ AppKitチームのエンジニアJeff Nadeauです 今日は macOS Ventura向けApp構築の 最新情報をお伝えします Apple Siliconのパフォーマンスと効率性 macOSのパワー そして豊かなAppのエコシステムなど Macにとってこれほどエキサイティングな 時代はありません あなたのAppはその物語の重要な一部です 最高のAppを作り続けられるよう 私たちは AppKitを前進させ続けています ここでは 多岐に渡るトピックを取り上げます Stage Managerから始まり 環境設定 コントロール SF Symbols そして共有についてお話しします まずご紹介するStage Managerは
アクティブなウィンドウが画面の中央にいる間 非アクティブなウィンドウを片付けてくれます さらに高度なワークフロー実現のため ウィンドウをセットにして グループとして入れ替えも可能です
Appのウィンドウの表示方法にも影響します Stage Manageは作業スペースを 整理整頓しようとするので 新しいウィンドウが表示されると 既存のものは画面から退場して スペースを確保します これは 「プライマリ」ウィンドウに 限った話で パネルやポップオーバー 設定などの補助ウィンドウは 引き続き既存のウィンドウ上に現れます NSWindowには特定のウィンドウに 必要な動作の 定義に役立つAPIが既に多数用意されています
デフォルトではフローティングパネルや モーダルウィンドウ プリファレンススタイルの ツールバーを持つウィンドウの場合は 他と入れ替えません
Stage Managerはウィンドウの collectionBehaviorも尊重します このOptionSetは スペースとフルスクリーンでの ウィンドウの動作を定義し Stage Managerがウィンドウを 補助または フローティングだと認識するサポートをします ウィンドウのcollectionBehaviorに auxiliary moveToActiveSpace stationary transientが 含まれる場合は アクティブなウィンドウを動かしません 適切なcollectionBehaviorを設定すれば フルスクリーン デスクトップスペース Stage Managerの中など あらゆる状況でウィンドウの動作が 優れたものになります 次に「環境設定」の重要な変更点について macOS Venturaではシステム設定Appの ナビゲーションスキームを一新して ビジュアルデザインも新しくしました また 他のOSの設定と同様にApp名を 「システム設定」に変更しました この変更は皆さんのAppにも適用されます 例えば システム設定Appに表示される 環境設定ペインバンドルがあるとします Appの中に設定エリアがある場合もあります コントロール性に富んだ フォームのデザインシステムは 設定のインターフェースや インスペクターに最適でしょう カスタムのPreferencePanesバンドルを リリースしている場合 新しい設定Appでも引き続き動作します カスタムペインはサイドバーに表示され AppはMonterey以前と同様に バンドルをロードし設定UIを表示します システム設定Appの新名称に合わせて App内の環境設定も「設定」に改名しました 最新のSDKでビルドすると AppKit は自動的にAppメニューの 「環境設定」メニュー項目の名前を更新します しかし ウィンドウのタイトルや説明用のラベル App周りのコントロールなど 他の多くの場所で 「環境設定」という単語を 使用している場合があります ローカライズされたテキストを 検索して更新してください
TextEditの設定ウィンドウは 以前は「環境設定」でしたが 「設定」に改名し システムの他の部分と統一しました システム設定Appは 新しいインターフェースを使って すべての設定オプションを表示しています 設定のインターフェースは コントロール部品が多いので 多くのコントロールを内包する 「フォーム」を使って 簡潔明瞭に表示するスタイルです
フォーム自体が多くのパーツを描画するので システムコントロールの多くは このコンテキストに適応して 控えめな見た目で描画され ステートがオンになると より目立つ表示となります
SwiftUIでは この新しいデザインを使った インターフェイスを非常に簡単に使えます Fromビューにコントロールを配置し 「insetGrouped」の フォームスタイルを適用します SwiftUIは残りを引き受けフォームの ビジュアルスタイルやスクロールの動作 レイアウトはすべて自動的に適用されます
まだSwiftUIを始めていない方は この機会にぜひお試しください 設定画面はAppのインターフェイスの中でも 独立した領域のため 段階的な採用を行うには最適です SwiftUIとAppKitを一緒に使うことについて 動画も作成したのでぜひご覧ください 次に コントロールのアップデートについて NSComboButtonという 新しいコントロールをはじめ コントロールの拡張を多数ご紹介します またNSColorWellの更新や NSToolbar API の強化 NSAlert のデザイン調整 NSTableViewの性能向上も行いました まずは NSComboButtonから NSComboButtonは即時のボタン操作と 追加オプションのメニューの 組み合わせにつきます
今日では何らかの動作を実行するために ボタンで即座に動作を実行したり プルダウンボタンで多数のオプションを持つ メニューを表示したりします NSComboButtonはプライマリーアクションと プルダウンメニューを結合したものです メールのように 予測されるフォルダはワンクリックで選べ その他のフォルダはメニューを開いて選んで メッセージをファイリングするような ケースに使用します これまでは セグメントコントロールAPIで 構築していましたが 今回は専用のコントロールを用意しています NSComboButtonには2つのスタイルがあり ボタンの外観と動作の両方を指定できます デフォルトのスタイルは「split」と呼ばれ メニューのために独立した矢印があります
2つ目の「unified」は普通のボタンに近いです このスタイルはクリックで主要な動作を行い クリック&ホールドでメニューを表示します これがNSComboButtonです NSColorWellの外観を一新したのを皮切りに アップデートをいくつか行いました カラーウェルの外観は四角いグラデーションから システムの他のボタンベゼルを思わせる 新しいスタイルに変更しました 変更は自動で行われるので このモダンな外観のために 何かを導入する必要はありません しかし カラーピッキングはクリエイティブで プロフェッショナルなAppの 重要な部分を担うため NSColorWellに2つの新しい スタイルを導入しました
1つ目はミニマムのスタイルで ロールオーバー時に開示矢印を表示し 色パレットから素早く選択できる ポップオーバーを表示し フルNSColorPanelを開くオプションを持ち 素早く色を選ぶ体験を提供します デフォルトでは システム標準の カラーグリッドですが 別のUIやパレットを考えている場合は カスタマイズ可能です
もうひとつはiWorkのAppでおなじみの エキスパンドスタイルです 両方のインタラクションモデルを 組み合わせており 左側のウェルには素早く選択できるよう 同じ開示矢印とポップオーバーがあり 右側のボタンは より詳細な色が選択できるよう フルパネルが表示されます
NSColorWellは3種類の色の選び方を提供します
NSColorWellの新しい colorWellStyleプロパティで デフォルト エキスパンド ミニマルの 各スタイルにアクセスします
NSColorWellは新たに 「プルダウンアクション」のために ターゲットとアクションのペアも付けました この動作はミニマルまたは エキスパンドカラーウェルの プルダウンのクリック時に 何が起こるかを決定します デフォルトのプロパティはnilで NSColorWellは システム標準のポップオーバーを使用しますが 動作をカスタマイズして 独自のポップオーバーの 表示やメニューのような 別のピッキングインターフェースの 表示にも使用できます これが新しいNSColorWellです 外観も一新し 色を素早く選ぶ方法も 2つ追加しました 次に NSToolbarに関して いくつかお知らせします カスタマイズをより良く制御し レイアウトの柔軟性を高めるため 様々なAPIの拡張が行われました カスタマイズの面ではツールバーの カスタマイズ性をより良く制御できるよう 2つの新しいデリゲートメソッドを追加しました 1つ目は 「toolbarImmovableItemIdentifiers」です 実装してアイテム識別子の セットを返すようにすると そのアイテムはユーザーによる 移動や取り外しができず カスタマイズモードに入っても アニメーションが発生しません
例えば メールAppで「フィルター」ボタンを 常にメッセージリストの上に表示させたい場合 このAPIを使えば移動しないようにできます
2つ目は 「toolbar itemIdentifier canBeInsertedAt」 このデリゲートメソッドは 特定の順番の変更や挿入 ツールバーからの削除に対する 拒否権を与えます 例えば ツールバーの あるセクション内では許可されて 別のセクション内では禁止される ツールバーアイテムが作成できます
ツールバーの中央揃えアイテムが centeredItemIdentifiersプロパティで 複数指定できます ツールバーがカスタマイズ可能な場合 これらのアイテムは ツールバーへの追加や削除は可能ですが 中央のグループ内でのみ並び替えできます この例では写真編集ツールは 先頭と末尾にいくつアイテムを配置しても すべてツールバーの中央に固まっています ツールバーをカスタマイズしたら アイテムが移動するのは困りものです 状態によって意味が変わる ツールバーアイテムの場合 難しいことがあります 例えばメールの「ミュート」と 「ミュート解除」ボタンは クリックすると切り替わります
ラベルのサイズが異なるため ツールバーの他の項目も その変更に対応するように移動します
このようなシナリオでは NSToolbarItemの新しい possibleLabelsプロパティで アイテムのローカライズされた文字列の セットが提供できます
NSToolbarは最長のラベルに 合わせて項目のサイズを自動調整するので 再構成後もレイアウトは同じままです 次に アラートのデザイン更新について macOSのアラートはコンパクトなレイアウトで 少量のテキストといくつかの明確な選択肢を 伴うように最適化されています 一般的には アラートのまとめ役として最適です アラートには短いテキストが最適です メッセージをより直接的に伝えることができ 誰もがあなたが書いたものを読んでから アラートを進める可能性が高くなります
しかし このディスクユーティリティの 警告のように ファイルシステムのデータについて 本当に重要な選択を伝える必要がある場合など 説明を短くできないこともあります コンパクトなレイアウトは ここでは最適ではありません このような場合NSAlertは長文に適した ワイドなレイアウトを提供するようにしました 情報テキストが長すぎて コンパクトに収まらないアラートに対して 自動的に適用されます アクセサリビューが大きくて コンパクトな警告ウィンドウに 収まらない場合も同様です この動作はシステム全体に 自動的に適用されるため App側で選択する必要はありません 注意すべきは レイアウトは アラートを表示する際に 決定されるので アラートが画面上にあるときに変更しても スタイルが入れ替わらないことです
アラートテキストは短いことが理想ですが 今回のデザインアップデートにより そうできない場合も ユーザーエクスペリエンスを向上させられます
次に NSTableViewの重要な新機能について NSTableViewは非常に多くの行を 効率的に処理でき スクロール時にビューを遅延生成し 再利用します しかし 各行が異なる高さを持つ可能性がある テーブルの場合は難しく その理由は良いスクロール体験を提供するには テーブルがその全高とスクロール領域における 各行の位置を知る必要があるからです
NSTableViewはテーブルの すべての行のサイズ調整を行い 初期のロード時間に影響する可能性があります macOS VenturaではNSTableViewが これらの目標達成と同時に 優れたパフォーマンスを発揮します
各行の高さを計算する代わりに NSTableViewは スクロールするビューポート内 またはその近くにある行に基づいて 行の高さを遅延的に計算するようになりました
まだ未測定の行については NSTableViewは 既に 測定した行の高さに基づいた 実行中の推定の高さを使用します テーブルをスクロールすると NSTableViewは必要に応じて行の高さを要求し 正しいスクロール位置を維持しながら 推定された高さを実測値に置き換えます
これで大きなテーブルの ロード時間が改善できます この変更により 「tableView heightOfRow」のような デリゲート呼び出しのタイミングが変わるので NSTableViewがいつ行の高さを要求するか 仮定するべきではありません
この最適化は NSTableViewと SwiftUIのリストビューの両方に適用され macOS VenturaのすべてのAppで 自動的に使用されます これがNSTableViewの機能です 次に SF Symbolsのアップデートについて macOS Venturaにはあらゆる分野をカバーする 450以上の新しいシンボル画像を追加した 「SF Symbols 4」を搭載しています
月桂樹や生活用品 世界の通貨記号 スポーツ関連など 様々なシンボルマークを追加しました 数千ものシンボルカタログを持つ SF Symbolsには あなたのアイデアに応える プロフェッショナルな デザインのアイコンがあるでしょう しかし 私たちはここでは終わりません SF Symbols 4にはアイコンをさらに充実させる 新機能を搭載しています シンボル画像は いくつかの レンダリングモードに対応しており デザインに応じて選択できます 単色を使用するモノクロームや シンボルの特定の部分を強調するために 異なる不透明度の色を使用する階層的な色 シンボルの各パーツに 個別の色を指定するパレット シンボルのアートワークに 直接デザインされた色を使用する マルチカラーがあります
これらは多様なデザインを 実現するための柔軟性を備えますが 私たちは同時に何も設定することなく シンボル画像が最高の状態に なることも望んでいます
そこで macOS Venturaの シンボルに新機能として 優先レンダリングモードを導入しました 優先レンダリングモードでは シンボルが好みの レンダリングスタイルを指定でき 実行時にAppKitが自動的に そのスタイルを使用します AirPods Proのように 細かいディテールの鮮明さを高めるために 階層的なスタイルを好むシンボルには 最適なのです もちろん 別のデザインを考えている場合は NSImageSymbolConfigurationオブジェクトで いつでも好みのスタイルが選択できます
記号の中には 単に概念を表すだけでなく Wi-Fiの電波強度やオーディオの音量など 何らかの値や量を伝える 意味を持つものもあります このような場合のため「可変記号」と呼ばれる 新しいタイプの記号を導入しました 変数シンボルでは浮動小数点値を 直接NSImageに与え シンボルはその値に基づいて 各パスがどのように変化するか 決定する数値の閾値を埋め込みます これがそのAPIです 変数シンボルは 新しいイニシャライザーで作成されます 既存のシンボル画像イニシャライザーと 似ていますが 0-1間の浮動小数点数である 値パラメーターが追加されています シンボル画像に可変閾値が 定義されていない場合 この値は無視され通常通り描画されます その場合 シンボルパスの描画は あなたが与えた値に基づいて 異なることがわかります
変数シンボルはそれぞれ 独自の方法で値が表せて その値をAPIレベルで提供することで シンボルの構成方法の詳細を知らなくても すべてのバリエーションにアクセスできます
パレットカラーやマルチカラーなどの レンダリングスタイルとの組み合わせで あらゆるデザインに対応できます 最後に大きなアップデートである Sharingについて説明します macOS Venturaは Macでの共有体験を向上させ 提案された人々や共同制作をしている人々を 招待し管理する新しい方法を導入しています これらの機能拡張を Appが最大限活用できるよう 採用できる新しいAPIがいくつかあります
最も顕著なアップデートは 新しい共有ポップオーバーで これは既存の共有メニューに代わるもので 共有文書に関する多くの情報や 提案された人々などを含む リッチなインターフェイスを備えています 従来のピッカーと同じAPIと デリゲートメソッドに対応するので 共有サービスのリストのフィルタリングや 独自のカスタムサービスを ピッカーに挿入できます
ファイルのURLを共有する際 NSSharingServicePickerは 自動的にヘッダーにアイコンや名前など ファイルに関するメタデータが入力できます カスタムタイプの共有時は NSSharingServicePickerが その情報を要求するために使用する NSPreviewRepresentableActivityIte と呼ばれる
新しいプロトコルに項目を適合させられます 適合するタイプはNSItemProviderのような 共有する基礎となるアイテムを返す必要があり オプションでタイトル・画像プロバイダ アイコンプロバイダを返します
AppKitには NSPreviewRepresentingActivityItemという 便利な準拠クラスがあり 既存の共有アイテムと そのメタデータが束ねられます 各画像パラメータを NSImageとして直接提供したり 前もって生成するのが難しい場合は NSItemProviderが使用できます
新しい共有ピッカーはツールバーボタンから 共有を開始するには最適ですが メインメニューバーや App内の選択したビューの コンテキストメニューのような メニューから共有を開始したい場合もあります 従来は共有サービスを列挙し それぞれにメニューを構築して 対応していました これは標準のピッカーを バイパスしてしまうので せっかくの新機能が台無しになります macOS VenturaではNSSharingServicePickerで 「標準の共有メニュー項目」が作成できます どんなメニューにも 定番アイテムを追加して共有開始できます 選択されたメニュー項目は 共有ポップオーバーを呼び出し コンテキストメニューの場合 メニューを生成したのと同じビューに ポップオーバーをアンカーで固定できます macOS Venturaでは共同制作の 管理用のサポートを多数用意しています 共有できるアイテムは共有ピッカーや メッセージへのドラッグ&ドロップ FaceTimeを介したコラボレーションへの 招待状が作成できます CloudKitやiCloudDriveでの コンテンツの共有や招待フローと コラボレーションサーバーを連携できます 詳しく説明するための動画を用意しました Appが既に共同制作をサポートしている場合や 新規に共同制作を追加したい場合は必見です macOS Venturaの開始にあたり Stage Managerで最適に動作するように ウィンドウの設定をお願いします 次にNSComboButtonやNSColorWellのような コントロールの拡張を どうデザインに生かすか考えます SF Symbolsの最新のシンボルや機能で アイコンを変身させましょう 最後に共同制作のために 最新のAPIを採用しmacOS Venturaの 新しい共有体験を最大限に活用しましょう
そしてこれからも素晴らしい Macアプリケーションを作り続けてください
-
-
4:54 - Using the grouped form style in SwiftUI
enum AirDropVisbility: String, CaseIterable, Identifiable { case nobody = "No One" case contactsOnly = "Contacts Only" case everyone = "Everyone" var id: String { rawValue } var label: String { rawValue } var symbolName: String { switch self { case .nobody: return "person.crop.circle.badge.xmark" case .contactsOnly: return "person.2.circle" case .everyone: return "person.crop.circle.badge.checkmark" } } } struct ExampleFormView: View { @State private var name: String = "Mac Studio" @State private var screenSharingEnabled: Bool = true @State private var fileSharingEnabled: Bool = false @State private var airdropVisibility = AirDropVisbility.contactsOnly var body: some View { Form { TextField("Computer Name", text: $name) Toggle("Screen Sharing", isOn: $screenSharingEnabled) Toggle("File Sharing", isOn: $fileSharingEnabled) Picker("AirDrop", selection: $airdropVisibility) { ForEach(AirDropVisbility.allCases) { Label($0.label, systemImage: $0.symbolName) .labelStyle(.titleAndIcon) .tag($0) } } } .formStyle(.grouped) } }
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。