Skip to content

fix(macOS): Thin Client入力パイプラインを安定化 - #345

Merged
ensan-hcl merged 1 commit into
mainfrom
fix/thin-client-input-pipeline
Aug 2, 2026
Merged

fix(macOS): Thin Client入力パイプラインを安定化#345
ensan-hcl merged 1 commit into
mainfrom
fix/thin-client-input-pipeline

Conversation

@ensan-hcl

Copy link
Copy Markdown
Member

概要

プロセス分離後のmacOS入力処理を、ConverterServerが変換状態を一元管理するThin Client構成に整理し、入力遅延・入力漏れ・候補選択のフィードバックループを修正します。

あわせて、アプリに組み込んだConverterServerが署名・リソース・App Groupの問題で起動できないケースを修正します。

背景・原因

  • クライアントとサーバーの双方が入力状態を持ち、応答待ちや状態同期のタイミングによってmarked textへの反映が遅れたり、入力が英字として漏れたりしていた
  • 非同期XPCイベントの順序と重複が明示的に管理されておらず、負荷時にサーバー状態とのずれが起こり得た
  • ConverterServerの実行ファイル・SwiftPMリソース・署名・rpathの配置が、アプリ内Helperとしての実行条件と一致していなかった
  • サーバーから受け取った候補スナップショットの描画時にも選択変更をサーバーへ通知し、候補選択が先頭と次候補を往復するループを作っていた

変更内容

  • 入力・変換・辞書・学習・セッション状態をConverterServer側へ集約
  • クライアント側は同期的なキーイベント所有判定と表示反映に限定
  • XPCコマンドを順序どおり送るキューと、イベントIDによる重複・順序管理をCoreへ追加
  • クライアント側のInputSessionを削除し、テスト可能なルーティング処理をCoreへ移動
  • ConverterServerをContents/Helpersへ配置し、必要なSwiftPMリソースの同梱、rpath、署名、App Groupパス解決を修正
  • サーバースナップショットによる候補選択と、ユーザー操作による候補選択を分離
  • Thin Client入力、XPC順序制御、App Group解決、候補選択フィードバックの回帰テストを追加

影響範囲

  • macOS版の入力イベント処理と候補ウィンドウ
  • ConverterServerとのXPC通信
  • ConverterServerのアプリ内組み込みとLaunchAgentからの起動
  • 選択テキスト変換、AI変換、設定反映のサーバー呼び出し

動作確認

  • swift test --package-path Core(63 tests passed)
  • xcodebuild -project azooKeyMac.xcodeproj -scheme azooKeyMac -destination 'platform=macOS' -only-testing:azooKeyMacTests CODE_SIGNING_ALLOWED=NO test(9 tests passed)
  • swiftlint lint --quiet --strict
  • ./install.sh --dry-run
  • インストール後のConverterServerへのpingとセッション作成
  • marked textを含む連続入力、および候補表示後の下矢印選択を実機確認

備考

入力内容を含み得るデバッグログの整理は、このPRには含めず別タスクで扱います。

@ensan-hcl ensan-hcl self-assigned this Aug 1, 2026
@ensan-hcl
ensan-hcl marked this pull request as ready for review August 1, 2026 23:53
@ensan-hcl
ensan-hcl merged commit 3ae5a46 into main Aug 2, 2026
8 checks passed
@ensan-hcl
ensan-hcl deleted the fix/thin-client-input-pipeline branch August 2, 2026 00:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant