ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
macOS向けAppKitの新機能
このセッションでは、AppKitの最新のAPIと、関連するフレームワークについてについて説明します。また、時間の節約になり、最新のハードウェアを活用しながらAppに磨きをかけることができるmacOS Catalinaの強化点の概要を紹介します。
リソース
関連ビデオ
WWDC19
-
ダウンロード
(音楽)
(拍手) Cocoaフレームワークの クリス・ドレーセンです 今年のAppKitを紹介します さっそく始めましょう 様々な機能が向上し NSColorやNSScreenが― 新しくなりました テキストやフォントの調整に 役立つ機能も満載です この場でいろいろ お見せします ToolbarやTouchBar Sidebarなども紹介予定です
macOS 10.15の 新しい コントロール機能についても触れます NSEventの話もしましょう Foundationの機能の中には― 強化したGeometryや 新しいFormattersもあります macOS 10.15のSystem Extensionに ついてもご紹介します
こういった話をする前に 重要なお知らせがあります macOS 10.15のUIフレームワークは AppKit以外に― 新しく2つが加わりました 1つは知ってる方も多い UIKitです
macOS 10.15では iPadの アプリケーションを Macで使えます AppKit Appの状態が よく保たれていれば関係のない話です しかし iPad Appを Macで使わない人や― Macでの使用が減っている人は 注目してください 使える機能です UIKit Appの仕上げには― やはりAppKitを使います
面白いはずです もう1つのフレームワークは SwiftUIです 宣言型のSwiftUIを使い― UIの表現や切り替えができます モデルデータに結びつけます UIを作る時に有効で― Swift言語を使って開発できます AppKitと一緒に使い― あらゆるビュー階層に埋め込みます フレームワークについては 他のセッションでも説明しています
AppKitに移りましょう macOS 10.15では― NSColorに新色のティールと インディゴが加わりました システムの色を変えられます 配色はお使いの設定によりますが
ぜひ新色を楽しんでください
NSColorでは 他にも注目すべき改良点があります Tagged Pointerシステムです NSNumberとNSStringにも使います ではTagged Pointerとは 何でしょうか? 通常では NSColorはiBarsとして 情報を格納します Tagged Pointerでは 情報を凝縮し― 格納できます アロケーションは不要です アロケーションを繰り返す コードがある人は― パフォーマンスの向上を 実感できるでしょう
これは目に見えない変化ですが― 1つ紹介させてください 例えば CGColorにタグ付けせずに アクセスする時― 色のiBarとしてキャッシュされます CGColorも保てるでしょう 今 画面上のスニペットでは― Color Callで色を付けています これは今までのやり方です オートリリースプールの 外においては― Tagged Pointerの使用は危険です
おなじみのColor Panelです 必須のツールである eyedropperは― クリックすると拡大鏡が現れます そして選択された色の RGB値を読み込みます macOS 10.15では この機能が有効になりました NSColorSamplerです ここではShowという 単一の クラスメソッドを使用します Showにブロックを渡し― 選んだ色を受け取ったり キャンセルできます おすすめの機能です 自分のインプリメンテーションを 使う場合― ユーザの許可を求められます しかし NSColorSamplerなら 必要ありません
NSColorのAPIである Dynamic Color Providerは― NSColorの 新しいイニシャライザです NSAppearanceを許可するのが― 引数のブロックです 色を決める際は ビットマップでもファイルでも 背景の色でも構いませんが― 適当だと思う色で ブロックを呼び出します スニペット上では ベストマッチメソッドを使って― アクアかダークアクアかを 教えてもらうことができます 色はハードコードされています プログラム上やNSColorで― ダイナミックさを出したい時に 有効です ビュー階層のハードコードした色を 適用するより簡単です
紹介したい もう1つの引数は 名前です 名前はコーディングには重要です オブジェクト上で送った色を デコードする時― 名前で探します 名前はコネクションの両方に 登録します
きれいな色も スクリーンがあってこそですね NSScreenの改良点です screen picker controlを インプリメントするなら― NSScreenを識別したいですよね NSObjectのメソッドでは ユーザは不満でしょう NSScreenの0x60000261e460ではね
NSScreen.localizedNameなら― 人が読みやすい文字列を表示します
一般的な話もしましょう ここ数年間で スクリーンは徐々に明るくなりました 最大の明るさで使用する人は 少数です
写真を例にとると 黒色のコンポーネントの値は0で― 1は白色の値です スクリーンを暗くすれば 白の絶対値は圧縮され― ソフトウェアの フォトンの値を下げます モニターの性能が発揮できません Extended Dynamic Rangeなら 幅があります モニターの性能は損なわず― ホワイトポイントを明るく映します これはMacの macOS 10.11の頃から ある機能なんです このAPIは2つです NSScreen.maximumExtendedDynamic RangeColorComponentValueは― ただ名前が長いだけではなく とても便利です (笑い声) これはクリッピングが始まる前に― コンポーネントの最大値を 教えてくれます 例えば1.3という値です
この方式でなければ1.0に戻ります 別のAPI CAMetalLayerも 同じモードで使えます NSOpenGLViewにもAPIがあって― どちらかのAPIがtrueなら スペースを増やせます
macOS 10.15で加えたのは さらに長い名前のものですが―
重要な部分はmaximumPotentialです Extended Dynamic Rangeモード でなくても最大値が分かります これで送りたいデータの パイプラインを― 複数 確保することも可能になります 例えば浮動小数点の パイプラインは― BJRAより高額です 事前に確保したスペースが分かれば 調整も楽です
Appleのディスプレイ用の APIを紹介します このディスプレイの明るさには 驚きです 1000ニトの輝度を保てます この性能から 基準品質と言えるでしょう このコンポーネントは ピクセルごとに ニトが絶対数あります
とはいえ無限に明るくは できません 明るいピクセル値を作ろうとしても 表現できず― 基準品質も台なしになります 画像の明るさは 設定されている 明暗に左右されます APIが示す値を超えれば― 絶対数のニトを得ることはできません
CAMetalLayerで コンテンツを得ると言いましたが― MacでMetalLayerを使う時の ヒントを教えます 使用するスクリーンやMetalデバイスに 注意を払ってください 必要なのはウィンドウとそのスクリーン そして装置記述です それから文書内のハードコードされた 文字列を呼び出します あとはデバイスを選ばせるだけです こうすればシステムバスの間で データを動かさずに済みます 今回はさらに進化して― 新しいデバイス特性で 代わりに答を出してくれます
これで かなりコードを減らせるので 楽ですよね
スクリーンは以上です 次はテキストの話です NSTextViewは― 暗い背景に適応して 色を割り当てます TextEditでオンとオフができます ライトモードと ダークモードの背景に システム内の色をのせました SnowとLicoriceの色が 入れ替わっていますね 他の鮮やかな色は 同じ性質を保ちつつ― 背景の色に合わせて 明るさが変わっています
テキストの表現を 見た目に合わせたい時に有効です Rich Textの文書で 印刷の再現をするより― 画面の色に合わせたい時に とても便利だと思います Rich Textのコンテンツを書く アプリケーションなら― この機能は外すか オフにするようにします 画面でどうかより 印刷時の見え方を重視したい場合です
ここにもNSSpellCheckerのユーザは 多いでしょう macOS 10.15では その後継者ができました NSTextCheckingControllerです 以前はテキストのビューで 使いましたが― 今回はUIKit WebKit AppKitで使えます NSTextCheckingClientを 実行してください 文法の間違いも見つけてくれて― URLや電話番号そして日付も探します 間違いを指摘するだけか― 自動でスペルを直してくれるかを 設定できます テキストを書く人には役に立つ 柔軟なAPIです
NSTextのクラスは セキュアコーディングを― サポートしています これを語いにするなら NSXPCコネクションで― 容易に使えます
NSFontDescriptorは なじみが薄いでしょう これはフォントの意味属性を使って― フォントを見つけ 変えることができます 画面はその例です 1行目は自分でハードコードしました それ以外の行は― SNFontDescriptorを使いました 丸い文字やセリフ体 等幅フォントにしたい時などに使えます アプリケーションの スタイルを決めるには― いい方法ですね
macOSとiOSの両方で Rich Text文書を書く場合や― 別のプラットフォームのAppで 文書を読む場合があります どの文書でも フォントサイズは同じはずなのに 見た目が違います それぞれのデバイスは 画面密度が違うからです
macOS 10.15は文字列のAPIが 新しくなり― Rich Textの文書に使えます ソースやデスティネーションを 知らせれば― 各デバイスのフォントが 同じになるように調整します 画面では160ポイントを120に落とし ほぼ同じ高さになりました
次にお話ししたいのは― usesDefaultHyphenationです 今までは NSParagraphStyleを使い― ハイフンを打ってもらっていました 今回はもっと簡単に使えます デフォルトは左でオフの設定です オンにすればハイフンが入り― 画面右側の スクリーンのようになりました
このAPIならテキストシステムを 洗練されたものにできます
NSToolbarの― 新たな機能の第1弾は isBorderedです
ボタンを押すタイプを NSToolbarで作るなら― 以前は自分で NSを割り当て構成していました カスタムビューとして使うためです 少し手間ですね 自動でイネーブル ディセーブルする― ビルトインも生かせません でもこれを プロパティとして使えばいいのです そしてNSToolbarに 新しいプロパティも加わりました アイコンの代わりに 文字列をボタンにすることもできます このボタンはラベルとは違います 下にラベルを出す場合には Toolbarでの設定が必要です
macOS 10.15の機能性はここからです 多数の機能を加えて 多用途で使える製品にしました まずコンビニエンスコンストラクタの 装備です 少ないコードで同じ機能のUIを 作ることができます 同時に柔軟性も高まりました 画面右側を見てください Segmented controlができました プルダウンや ポップアップにもなります いろいろと使えます 他のToolbarも使う場合 自動的に折り畳み表示にもできます 幅が足りない時に便利です
NSMenuToolbarItemも似ていますが― こちらはメニューを表示したい時に 便利です そしてNSMenuを使うので― サブメニューやセパレータなどの機能を 活用できます カスタムビューも使えます 洗練されたドリルダウンを 求めている人には お薦めです
NSTouchBarも強化されました 新しいクラスのプロパティは― AutomaticCustomized TouchBarMenuItemEnabledです NSApplicationと同じプロパティです このTouchBarなら― NSApplicationなしで使えます UIKitを書くとしたら NSApplicationは使いません
NSStepperTouchBarItemです 画面のステッパーは― 日付や数字を 別々に入力する時に便利です TouchBarのサイズも大きく 水平なので― 視覚的に選ぶスタイルにもできます NSStepperTouchBarItemで アプリケーションを作ってください
NSSliderTouchBarItemも 進化しています これを使った人は 少し小さすぎると 感じたかもしれません この問題を解決するには スライダーをつかみ― レイアウト制約を加えます macOS 10.15では― スライダーの最小幅を決め あとはお任せです もっと広い世界を目指すなら― 最大幅のスライダーもいいですね
最後に サイドバーの話をしましょう System Preferencesなどで 幅を切り替えられます
デフォルトは中で 小や大も選べます この機能を知らなければ― 小や大に合うアートワークも 用意できません ビットマップや解像度に左右されない アートワークもいいですね 他にも自動的に 画面の明るさを選ぶ機能も加わりました 一般の設定パネルにあります
Toolbarなどの後は コントロールの話です 広範囲な話題ですね まずはNSSwitchです NSControlのサブクラスで バインディングなどをサポートします
チェックボックス機能の横にあります この2つの使い分けが 問題になりますよね 今 チェックボックスを使っているなら そのまま使うのがベストです もしトグルを頻繁に利用するなら NSSwitchesを薦めます 例を見せましょう 左のマスタートグルで 右にある すべてのサービスをイネーブルできます
NSCollectionViewには 力を注ぎました まず組成上の レイアウトについてのお話しです このレイアウトは サブクラスによる修正は必要ありません 面白い機能も追加できます コンテナに比例したサイズや レイアウトの組み換え 個々のセクションをスクロールでき 右から左に読む言語にも対応します
次は Diffable Data Sourcesに ついてです IDベースのデータソースで― アイテムの増減や ロケーション間の移動を見つけます 最適なアニメーションが分かるので― reloadDataなどは要りません
コントロールから IB機能に移りましょう IB storyboardは 複数の ビューコントローラをつなぎます
これまで ビューコントローラは コーダーが初期化してきました 多様な情報を見つけるのが 必須でしたよね 自分が望む以上に コードの要因が大きくなったためです これはshowPetDetailsです 新しいビューコントローラが コーダーを渡します そして自分で愛称も選べます
これで初期化や構成過程を まとめられます そしてこの機能には IBSegueActionも付いています Interface Builderなどで― このメソッドに直接つなぎます ビューコントローラに コンフィギュレーションも追加できます
AppKitはAuto Layoutを サポートしているため― コンテンツを計測し Auto Layout エンジンにフィードできます フィールドやボタンの文字列を 変えたり― ビュー階層やウィンドウを 整えてくれます
UIによっては それが重要ではないこともあります このグリッドは すべてサイズが決まっています ラベルのサイズは重要ではありません それでもAppKitは計測し フィードします 結果には反映されません
macOS 10.15なら これをオフにできます NSViewは縦横両方向の計測を オフにすることができるんです コントロールのサイズが重要でない時 UIのパフォーマンスを上げられます
少し幅広い コントローラの話をしましょう NSResponderは Block Captureに関連します 画面上 外のブロックは― バックグラウンドのスレッドで 実行されます 内側のブロックは メインスレッドです 一般的には バックグラウンドで仕事をして― それをメインスレッドで UIにアサインします
しかしこのスニペットだと macOS 10.14では クラッシュする可能性があります フィールドを保持するのが ブロックだけなら― ブロックの破棄は定義されません ブロックが取り消されたら フィールドは解放されます フィールドはResponderだったり― ビュー階層の一部の可能性も deallocが解放しようとするデータは 危険な状態です
でもmacOS 10.15なら 大丈夫です deallocを自動的に メインスレッドに移すからです ブロックの解放を気にせずに 保持できるのです アプリケーションは クラッシュを免れます 背景のスレッドの破損が 後からしか分からない時 助かります
続いてOpen and Save Panelsです macOS 10.15は大幅に変わりました Open and Save Panelsも プロセスが分かれました sandboxでは すでに分かれていたので 応用したのです パフォーマンスや セキュリティ以外の変化は― 気づかない部分の変化です ただサブクラスをして― 特定のビュー階層だけに頼ると 問題が起こることも その場合は相談して解決しましょう
NSWorkspaceも新しくなりました
URLやアプリケーションを 複数 開いてくれます NSWorkspaceの何が 変わったのかと言うと― 新しいメソッドは非同期で メインスレッドを邪魔しません アプリケーションのローンチが終われば 完了ハンドラが知らせます 非同期であると同時に URLなどのローンチ時は― 高度なコントロールも期待できます NSWorkspace.OpenConfigurationの おかげです ユーザがローンチに 関わるかどうか― 私たちがコントロールできます 私たちがどのアプリケーションを使うか 迷ったら― ユーザが決めることも それを防ぐには Openをキャンセルします Recentsのメニューに入れるかも 決められます ローンチ時に隠すものや アクティベーションも― コントロールできます アプリケーションに必要なものは― NSWorkspaceが準備します
次はEventsについてです 見てほしい機能があります タイトルバーの 緑のボタンの上に行くと― この新しいメニューが開きます 最初のオプションは スクリーンのサイズや― 画面共有する時のポジションを 設定できます もっと便利なのはウィンドウを 別のディスプレイに映せる設定です
画面を別のモニターで 見たい人にとっては 便利な機能です 今までのディスプレイだけでなく― iPadに映すこともできます
次はPencil Drawです きれいな筆記体が映っています Apple Pencilに対応しているiPadを Macの端末にできます 今後タブレットを使う人は 増えるでしょう アプリケーションを タブレット対応にするなら― 今が いいタイミングです ヒントを教えます
Tablet Eventsはマウスイベントです
NSEvent SubTypeを見ると tabletPointがあります tabletPointにはタブレットと― 圧力の情報が見て取れます 筆記体の文字を書くには 圧力の情報が重要です ペン先の幅が変わるからです
iOSでpencilのAPIを使う時 ハンドラを登録しておくと― 過去にさかのぼって情報を得られます これはNSEventの 圧力のフィールドにあります
Apple Pencilの話をします Pencilの横をダブルタップすると― 使用中のペンの種類が 他のものに変わります これはchangeModeEventです 新しいResponderが指示を出します
Viewなどサブクラスに アンカーしていない機能を― 使いたい時もあるでしょう でも直接 仕切りたいなら― LocalEventMonitorを使います この画面で使っているのは― NSEvent.addLocalEventMonitorです changeModeEventsのためです あとは繰り返してイベントを戻し Responder全体を通します コードをファクターするのに 便利ですね
Foundationの話をしましょう Geometryが新しくなりました Foundationの話は― 皆さん前のめりに なりますよね (笑い声) データはNSDirectionalRectEdgeと― NSDirectionalEdgeInsetsです min関数やmax関数 左や右を使わず― Leadingなどの識別子を使います 内容によって 右からと左からが切り替わります NSCollectionViewのおかげです 直接 アプリケーションに 採用できます
次は役に立つ 新しいFormattersの話をしましょう NSRelativeDateFormatterです
その中のdateTimeStyleは― 絶対単位か砕けた感じかを 選ばせてくれます “1週間前”か“先週”かです unitsStyleは― 冗長だったり簡潔すぎる言葉を 制御します
次はNSListFormatterです スカラのオブジェクトで フォーマットする代わりに― 複数のオブジェクトを使います オブジェクトごとに フォーマットを割り当てます List Formatter addsは― 文字列のどこにコンマを入れるか 分かっています “オックスフォード・コンマが 必要か?”なども より詳しいセッションもあるので 参加してください
Combineも楽しみな機能の1つです SwiftのAPIで オブジェクトのプロパティを― 別のプロパティとつなぎます awakeFromNibを例にとって紹介します モデルオブジェクトのプロパティを NSTextにつなぎます プロパティの名前が変われば それに対応します UIのバインディング以上の アプリケーションです 詳細が分かる 楽しいセッションがあります ぜひ参加してください
最後にmacOSの System Extensionです 機能が少し加わりました UIを使わないFileProviderです UIを使うFileProviderに 慣れていても違和感はないはず 余分なUIは不要です なくても満足できます
DOSを加えるのに必要だった― Kernel Extensionも要りません 似た働きのSystem Extensionを 作りました DriverKitは デバイスドライバを開発します Endpoint Securityは ウイルス対策ソフトの開発を支援します Kernel Extensionを 書いてきた人には朗報です セキュリティ強化が できるうえに― Kernelから解放されるんです
以上が 新たに加わった機能です 今日のおさらいをしましょう NSColorに追加された機能は Dynamic System Colors programmatic dynamicismを NSColorに埋め込む方法 そして直接 色を選べる NSColorSamplerです
NSScreenの Extended Dynamic Rangeも 皆さんに 活用していただきたいです
テキストの改良も加わりました
アプリケーションをダークモードで よく見せたいなら― エンハンスメントが使えます テキストエンジンを豊かにする APIもあります iOSとmacOS間の― テキストサイズの適合も便利です UIKitが登場した今は特にです
また NSSwitchやCollectionViewなど コントロールの話をしました UIには欠かせない存在ですので ぜひセッションを聞いてください NSToolbarの エンハンスメントを使って― ボタンも簡単に 作れるようになりました
NSEventでは タブレットに関する話や― Apple Pencilも 今後 タブレットのユーザが 増えるので― タブレット対応にするのも いいですね
ローカライゼーションの強化と― 新しいFormattersの話もしました
こちらもぜひ活用してください では以上です ありがとうございます (拍手)
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。