WWDC25:Dive deeper into Writing Tools

作文ツールについて。カスタムテキストエンジンでも適用できるらしい。あの独特な編集アニメーションの仕組みに言及されていたのが個人的なハイライト。実装する機会はないと思うけど、、


0:00 – Introduction

  • Writing Tools はテキストのリライト 校正 要約などをテキストビュー内で実現する機能
  • 今年は ChatGPT 連携によるコンテンツ生成や画像生成も可能に
  • visionOS でも利用可能になり iOS, iPadOS, macOS 26 ではリライト後のフォローアップリクエスト(文体や調子の調整)も対応
  • Writing Tools の各機能は Shortcuts からも自動化可能(校正、書き直し、要約など)
  • アプリでサポートするための新しい API でツールバーやメニュー項目

2:21 – Customize native text views

  • システム標準のテキストビューは Writing Tools を自動サポート
  • ライフサイクルメソッドで同期停止や挙動カスタマイズが可能
  • 書き換え禁止範囲やリッチテキスト/リスト/テーブル対応も result options で制御
  • テキストヘビーなアプリはツールバーやメニューに Writing Tools ボタン追加推奨
    • UIBarButtonItem / NSToolbarItem
  • コンテクストメニューには作文ツール項目が自動挿入
    • カスタムメニュー実装時は
      • automaticallyInsertsWritingToolsItems を false
      • WritingToolsItems API で標準項目を取得

4:00 – Rich text formatting

  • テキストビューの種類に応じて .plainText, .richText, .presentationIntent など WritingToolsResultOptions を指定
    • 例: 検索フィールドではリッチテキストをサポートしない
  • RichText では display attributes: 表示属性(太字 斜体等)や presentation intent(見出し/リスト/テーブル等)を使い分け
  • Notes などセマンティックスタイル対応アプリは presentation intent でネイティブな見出しやリストを活用
  • 表示属性 と presentation intent は併用される場合もあり アプリ側で適切に変換が必要
    • TextEdit の場合具体的なフォント情報を含むが、セマンティック情報を含んでいない
    • Memos はセマンティックスタイルをフル活用する → 内部で独自の表示属性に変換する必要がある
    • 表示属性は下線や上下付き文字に使用
  • requestContexts メソッドで文脈情報や presentation intent を提供するとセマンティクスの理解精度が向上

7:41 – Custom text engines

  • カスタムテキストエンジンでも共通プロトコル対応で Writing Tools の基本機能が利用可能
  • さらに WritingToolsCoordinator API でリライトや校正のアニメーションやインライン反映も実現
    • coordinator をビューにアタッチし delegate 実装で文脈取得、変更反映、プレビュー生成、校正マーク描画などを制御
    • delegate メソッドは非同期(@escaping callback)で挙動、大規模テキストにも対応
  • 処理中のテキストアニメーション表示のために、coordinator はテキストのプレビュー画像をリクエスト(透明背景のテキストレンダリング)
    • テキストでなくこの画像にエフェクトを適用する
  • 状態変化時の undo や同期停止、外部変更の通知も coordinator で一元管理