作文ツールについて。カスタムテキストエンジンでも適用できるらしい。あの独特な編集アニメーションの仕組みに言及されていたのが個人的なハイライト。実装する機会はないと思うけど、、
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 メソッドは非同期(
@escapingcallback)で挙動、大規模テキストにも対応
- 処理中のテキストアニメーション表示のために、coordinator はテキストのプレビュー画像をリクエスト(透明背景のテキストレンダリング)
- テキストでなくこの画像にエフェクトを適用する
- 状態変化時の undo や同期停止、外部変更の通知も coordinator で一元管理