IP Messenger for Mac OS X 0.9.2
バージョンアップしました。
前回から 4 ヶ月と間があいたにも関わらず、不具合修正中心のリリースです。でも地味に便利な改善もあります。
修正内容。
- ネットワーク接続状況の変化を検出してユーザリストを更新する機能を追加[#16]
- コンピュータ名はシステム環境設定に従うようにし、動的に変更を反映するように修正[#16]
- かな漢字変換中にタブキーでの候補選択ができない不具合を修正[#40]
- 起動時または動作中に虹色カーソルになって無応答になる、またはいつの間にか終了してしまう場合がある不具合を修正[#44]
- バックスラッシュと円記号を変換する処理を廃止(不安定になるため)[#44]
- 無線LAN接続で起動してから有線LANを接続すると、自分自身が二人表示される不具合を修正[#15]
- テキスト入力エリアに書式情報付きのクリップボードデータがペーストできてしまう不具合を修正[#45]
- コンピュータ名にAppleTalkホスト名を利用出来る機能を廃止(10.4以降AppleTalkサポート段階的に削除され、10.6で完全に削除されているため)
- 日時表記をシステム環境設定の言語設定に従うように変更(受信ウィンドウ、アラートダイアログ、ログファイル)
- Mac OS X 10.5/10.6それぞれのSDKにおいて発生するコンパイル警告を回避
- Xcodeのプロジェクトファイル互換性を2.4から3.0に変更
- NibファイルをIB3.0形式に統一
- その他内部やUIの細かい修正およびソース整理
自動一覧更新。
今回のバージョンアップで意外と便利な部分が、ネットワーク接続状況の変化によってユーザ一覧が自動で更新される機能です。これは利用形態によっては嬉しい改善だと思います。
例えば、無線 LAN と有線 LAN を切り替えた場合や、スリープして移動し別のネットワークに接続した場合など、これまでは IP Messenger を一度終了して起動しなおさないと相手にメッセージが届かなかったり、自分が二人表示されてしまったりしていました。他にも、起動したままスリープして時間が経ってからスリープ解除すると、ユーザ一覧が変わっているのに更新されていないので送っても送信に失敗するようなこともありました。
0.9.2 からはネットワークの状況が変わるとユーザ一覧を更新するので、社内や校内をよく移動する方でも、一日中 IP Messenger を起動しておくことができると思います。
技術的な側面から説明すると、BSDソケットとioctl システムコールを用いて UNIX 的な方法でネットワークの情報を取得していたのをやめ、SysmtemConfiguration.framework を利用して取得、更新の検出をするようにしたことで実現したものです。OS X 10.0〜10.2 でそのへんが整備されていないころ作ったものをこれまで引きずっていましたが、前回リリースで 10.3 以下をサポートしなくなったこともあり思い切って作り直しました。
安定性の向上。
ここ数ヶ月この件で何人もの方にご協力頂きました。ありがとうございました。
以前から突然落ちる、気がついたら落ちていたということがありましたが、解決できていませんでした。
0.9.1 以降、起動時に虹色のカーソルになって利用できないという報告がいくつかあり、クラッシュレポートやプロセスサンプル(デバッグ用の情報です)を提供して頂くなどして、調査しました。
私自身の環境では再現したことがなく(頑張っても出来ず)、直接原因のクラッシュ箇所を暫定対処してベータテストなどお願いするなど手探りの作業が続き、根本原因はなかなかつかめずに長期化してしまいましたが、結局のところ複合的な理由だったようです。
一つは文字列変換。SJIS と Unicode の変換でバックスラッシュと円記号を、日本語環境の場合には差し替えるような処理を入れていると不安定になります。その理由が確認できていないのですが、実際にその処理をやめると安定しますので、今回は機能を外すことで対処しました。
もう一つは同期制御(排他制御)という、マルチスレッドプログラミングでは基本的な部分でした。IP Mesesnger はいくつかのスレッドを内部で起こしているのですが、ユーザ一覧を管理している部分で、マルチスレッド対応が出来ていない部分があり、メッセージ受信や添付ファイルの送信などのタイミングでまずいことになる可能性がありました(そして実際なっていたんだと思います)。
その他や今後。
その他には、ソースをきれいにしました。非推奨の旧 API の利用を新 API に変えたり、 Xcode や Interface Builder の最低バージョンを上げるなど、10.5 SDK や 10.6 SDK でビルドしたときに警告が山盛り出てくるようなことはなくなりました。
今後の作戦についてはまた別エントリで考えをまとめますが、やりたいことや要望頂いていることはたくさんあるので、進めます。
最後に、0.9.2 で不具合等お気づきのことがありましたら、不具合報告フォームより連絡頂けると助かります。