Skip to content

fix(input): XPC入力を同期化し、入力モード同期とセッション寿命を修正 - #374

Open
ensan-hcl wants to merge 3 commits into
mainfrom
fix/synchronous-xpc-input
Open

fix(input): XPC入力を同期化し、入力モード同期とセッション寿命を修正#374
ensan-hcl wants to merge 3 commits into
mainfrom
fix/synchronous-xpc-input

Conversation

@ensan-hcl

@ensan-hcl ensan-hcl commented Sep 6, 2026

Copy link
Copy Markdown
Member

概要

ConverterServer との XPC 通信を維持しながら、キー処理を同期化し、入力モードとセッション管理の不整合を修正します。目的は、ホストアプリへの入力反映の遅れや、日本語モードなのに英字が直接入力される経路を解消することです。

変更内容

1. キー処理とホストアプリへの反映を同期化

  • Server の応答を待ち、確定文字列・MarkedText を反映してから handle の消費判定を返します。候補選択・確定操作も同期的に反映します。
  • 先行コマンドの応答を反映してから次のキーを処理し、遅れた応答で表示が巻き戻ることを防ぎます。
  • XPC の返信キューで待機を解除するため、返信に MainActor の実行を必要としません。待機中に RunLoop は回しません。

2. 入力モードは送信直前の値を使用

従来は「英数で activate → 日本語に切替 → 最初のキー」の順で、保存済みの古い英数モードが Server に再送され、日本語への変更を上書きしていました。

初回キー・再接続時の activation は、送信直前の最新モードと設定から生成します。既存セッションのモード変更は同期的に反映し、無関係な setValue 通知は無視します。また、未確定文字列がないモード変更では、空の MarkedText による不要な置換を行いません。

3. アプリ切替・切断時の状態とセッションを整理

  • セッション作成中の deactivate も送信し、次の activate で古い入力が復活することを防ぎます。
  • 非アクティブな Client への遅延エラーや古い世代のコマンド応答による、意図しない文字挿入・表示更新を防ぎます。
  • Client 破棄時にセッションを閉じ、Server 側でも接続終了後に残ったセッションを回収します。再接続のために 5 秒の猶予を設け、新しい接続へ引き継がれたセッションは回収しません。

通信仕様・互換性

  • 待機期限は同期操作が 1 RPC あたり 30 秒、その他の非同期操作が 1 秒です。先行コマンドの待機は別途発生するため、キー処理全体の上限ではありません。
  • 通信失敗・タイムアウト時は、処理済みか不明な操作を再送せず、遅延返信を無視します。表示済みの未確定文字列を保全し、次回は新しいセッションで開始します。
  • 失敗または 200ms 超のキー処理を、入力文字・文脈を含めずにログへ記録します。
  • XPC メソッドのシグネチャと通信データ形式は変更しません。変換処理は Server に残し、通信互換性の範囲で ConverterServer を独立更新できる構成を維持します。

検証と未確認事項

  • swift test --package-path Core: 88 テスト通過
  • azooKeyMacTests(署名無効): 14 テスト通過
  • SwiftLint・git diff --check: 通過

実 Server で古い activation による英字の直接挿入を再現し、修正後は日本語の未確定入力になることを検証しています。実 NSXPCConnection を使った同期待機・タイムアウト・セッション回収の回帰テストも含みます。Server を直接テストできるよう、main.swift の既存処理は主に ConverterServer.swift へ移動しています。

通信失敗したキーをアプリへ通すフォールバックは残ります。 Server 停止中も日本語入力を継続できる設計ではありません。Terminal.app での修正後の実入力、高負荷・長時間稼働は未確認で、報告されている症状すべての解消を保証するものではありません。#358 の暫定 MarkedText 方式は採用していません。

@ensan-hcl ensan-hcl changed the title fix(input): XPCのキー処理を期限付き同期呼び出しにする fix(input): XPC入力を同期化し、入力モード同期とセッション寿命を修正 Sep 6, 2026
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