WWDC25:Meet PaperKit

新登場の PaperKit。がっつり UIKit ベースの実装で懐かしさを感じた。Apple Pencil 結局使いこなせていない、、空間アクセサリとして対応する日が来たら、また変わるのかもしれない。


0:00 – イントロダクション

  • PaperKit は Apple のシステム全体で使われているマークアップ体験を支えるフレームワーク
  • Notes やスクリーンショット、QuickLook、Journal アプリなどで利用
  • キャンバス上で描画や多様なマークアップ要素(図形、画像、テキストボックス等)を追加できる
  • macOS Tahoe でも同様のリッチなマークアップ体験を提供

1:36 – PaperKitの基本知識

  1. PaperKit の主な3コンポーネント
    1. PaperMarkupViewController:インタラクティブなマークアップ・描画の提供
    2. PaperMarkup:データモデルコンテナ・PaperKit マークアップ、PincilKit 描画データの保存・読み込み、レンダリング
    3. MarkupEditViewController or MarkupToolbarViewController(macOS):挿入メニュー

3:35 – PaperKitの導入

  • iOSアプリへの導入例:
    • UIViewControllerviewDidLoad() 内で PaperMarkupPaperMarkupViewController を初期化
      • PaperMarkup は初期化時に bounds を指定
    • PencilKit のツールピッカー(PKToolPicker)と連携し、ツールの表示や操作を制御
      • paperViewController と紐づけツールピッカーの状態変化に動的に応答
    • UIResponder.pencilKitResponderState.activeToolPicker / .toolPickerVisibility
    • アクセサリボタンから挿入メニューを呼び出し、マークアップ要素を追加
      • MarkupEditViewController
  • macOS アプリでも同様の手順で導入可能。ツールバーUIで挿入メニューを提供
  • SwiftUI 環境でも UI/NSViewControllerRepresentable で統合可能
  • デリゲートや Observable 対応で状態管理や自動保存も柔軟
  • ディスク読み込みのデータに対し、前方互換性のためコンテンツバージョンの検証が必要
    • 不一致時はアラートでアップグレードを訴求/あらかじめレンダリングされたサムネイル表示
    • PaperKit の前方互換性担保の仕組み:CGContextmarkupModel.draw(…)

8:37 – 機能セットのカスタマイズ

  • PaperKit の全機能は FeatureSet で管理
  • FeatureSet.latest で最新機能を一括利用可能
  • remove/insert で利用可能なツールやインクを細かく制御
  • HDR対応も可能(colorMaximumLinearExposure プロパティで設定)
  • カスタマイズした FeatureSet を各コントローラに適用し、アプリ全体で一貫した体験を実現
  • paperViewController.contentView のカスタマイズで独自テンプレートや背景も設定可能(カスタムビューを指定することで、マークアップの下のレイヤーとしてレンダリングされる)