Pasty v0.8.1-beta
Pasty v0.8.1-beta — クリックが「指に追いつく」リズムに。
「触れた瞬間に応答する。」
⚡️ クリック反応速度を大幅改善
v0.8.0 のリリース後、複数のユーザーから「クリックしてからクリップが選ばれるまでがもっさりする」という声をいただきました。 徹底的に hot path を計測した結果、3 系統の遅延 が積み重なっていたことがわかり、すべて潰しました。
根本原因と対策
1. シングルクリックとダブルクリックの判別待ち (約 250ms) onTapGesture(count: 2) と onTapGesture(count: 1) を二段重ねていたため、SwiftUI が「次のタップが来ないか」を約 1/4 秒待ってからシングルタップを発火していました。これが「もっさり」の主因です。 対策: simultaneousGesture ペアに置き換え、シングルタップは タッチダウン直後に即発火 するように変更。ダブルクリック (= 貼付) も従来通り動作します。
2. paste 経路の不要な sleep を削減 PasteAutomator の前後 sleep を 60ms→30ms / 100ms→50ms に短縮 (合計 80ms カット)。 貼付先アプリが既にアクティブな場合は restoreFocus のグレース期間を完全スキップするようにしました。
3. カードのアニメーションを軽量化 StripCard の 3 段重ねシャドウを 2 段に減らし、スプリング応答を response: 0.18 に短縮。 隣接カードへのクリック時は scrollTo アニメーションをスキップ (3 枚以上離れた場合のみアニメ)。
4. ホバープレビューのキャンセル & スクロールキャッシュ タップ時に保留中のホバープレビュー (500ms 遅延ポップ) を即座にキャンセル。 WheelToHorizontalCatcher が毎回サブビューツリーを歩いていた処理をキャッシュ化。
体感
ローカル計測で、クリックからクリップ選択の視覚フィードバックまで 約 250ms 短縮、貼付完了までも 約 80ms 短縮 されました。 「触れたら反応する」リズムに戻っています。
🌐 公式インストールページ公開
https://ivygain.github.io/Pasty/ で 常に最新版の DMG を 1 クリックダウンロード できるようになりました。 ページ下部には 全リリースノートが折りたたみ式で一覧表示 され、過去のバージョン履歴も追えます。
各バージョンには専用パーマリンク (/Pasty/whats-new/<version>.html) も用意され、特定リリースのリンク共有が可能になりました。
🔧 リリース自動化
./scripts/release.sh を実行すると、appcast.xml だけでなく docs/index.html と docs/whats-new/<version>.html も自動再生成され、同じコミットにステージされるようになりました。 今後すべてのベータ版で Pages とアプリ内アップデート通知が 同時に最新化 されます。
🛠 内部改善
HoverPreviewController.dismissNow()をタップ経路のフェイルセーフとして活用PreviousAppTracker.restoreFocusがapp.isActiveで早期 returnWheelCatcherNSViewにcachedScrollViewを導入し、scroll wheel ハンドラの 1 イベントあたりのコストを大幅削減- リリースノートビルダー
scripts/build-pages.py(独自 markdown→HTML 変換器内蔵) を新規追加
🔧 既知の制約
- C1 iCloud 同期は引き続き設計フェーズ完了状態 (UI 上は disabled)。実装は v0.9 で進めます。
リリース詳細: https://github.com/IvyGain/Pasty/releases/tag/v0.8.1-beta
GitHub Releases で詳細を見る ↗