Caplio MounterがOS X 10.6で正常に動作しない件の調査

MacBook AirにMac OS X 10.6.7をインストールしたところCaplio Mounter 5.1でiPhotoに デバイスが表示されなくなったので、調べてみることにした。

カメラをUSBで接続すると、Caplio Mounterのアプリケーションは起動してイメージ が含まれるファイルシステムがマウントされているので、全く動いていない訳では ない。dfコマンドで確認した結果は以下のようになる。

sh-3.2$ df | grep Caplio
Caplio.SD         978560   124416    854144    13%    /Volumes/Caplio.SD
sh-3.2$ kextstat | grep ricoh
  116    0 0x4d6ca000 0x12000    0x11000    jp.co.ricoh.kext.caplio-10.4 (4.0) <5 4 1>

iPhotoのデバイスはOS XのImage Capture(IC)で処理されているようだ。ICでの 認識がないので、iPhotoでもデバイスとし出てこないものと思われる。また 「カメラ接続時に開くアプリケーション」もICからキックされているのではないか と思われる。

Netで検索するとCaplio以外でも10.6でiPhotoでデジカメが認識されなくなったこ との書き込みがいくつか見つかったが、解決策ははっきりしたものがなかった。

iPhotoを起動するとICに含まれる /System/Library/Image Capture/Support/Image Capture Extension.appが 起動されている。このアプリが何らかの方法で、対応デバイスを取得して /Library/Cachesに対応デバイスのキャッシュを作っている。

10.6ではアプリケーションを起動する仕組みのLaunch Services(LS)には問題がある ようだがターミナルで"open -a iPhoto"で正常に起動できるので、LSの問題ではな いように思われる。

ImageCaptureCore.frameworkが10.6からのサポートなので、10.6ではICの作り替えが あって、このような状態になった可能性が高い。もともとICはCarbonで作られていた ようだがこのフレームワークはCocoaなものになっている。

xcode_3.2.5_and_ios_sdk_4.2_finalでICなアプリを作る場合ヘッダーが10.4uにしか 用意されていないため、gcc4でビルドする必要がある。この環境では64BitなICアプリ は作れないと思われるが最新のiPhotoは64Bitになっていると思われるが、どうやっ てビルドしているんだろうか?

"/Library/Image Capture/Devices"の下にスキャナーのドライバと思われるファイル があるが、ここにドライバーをインストールする必要があるのだろうか?

ADCのIC関係の情報

Finderの環境設定で、「接続中のサーバ」にチェックを入れればボリュームが表示さ れファイルをみることはできるのだが、iPhotoと連携できていたのができなくなって いるのは、まったく不便きわまりない。そもそもリコーは最新機種ではMacのサポート が無くなっていように気がする。おそらくCaplio Mounterも修正は望み薄が気がする。 だがkextが正常に動作しているので、どうにか動くようにできそうな気もするのだが。

インストーラの大切な情報に以下の記述があった。10.6.7ではNGなのだろうか。。。

4.iPhoto対応について

・Mac OS X 10.4 - 10.6.1をご使用中の方
 iPhotoの「読み込み」ボタンで写真を直接転送することができます。

インストール時にCaplio Mounterに含まれる、CaplioStartup.appがアカウントの ログイン項目でログイン時に起動されるようにして、USBを監視してデジカメの 接続時にkextをロードしてファイルシステムとして見えるようにしていると思われる。 と書いてはみたが、CaplioStartup.appはユーザプロセスとして動いているのでkext をロードさせることはできないはずだ。インストール時にSystemのどっかにファイル をコピーしているのかもしれないが、見つけることができない。

USBのmassストレージ(com.apple.iokit.IOUSBMassStorageClass)として見えるデジカメ は10.6でも問題ないようだ。これは /System/Library/Image Capture/Devices/MassStorageCamera.appと Image Capture Extension.appがmassストレージが接続されるとICに登録してるので はないかと思われる。 Caplioの用なmassストレージではなく凝った仕組みの デジカメは10.6では10.5とは同じようには動かないのではないかと思われる。

ADCにあったICAObjectDumperをXCode 3でcarbon.frameworkを追加してビルドして試 したところやはりカメラをつないでも認識されてない。ダイソーで買ってきた105円 のSDカードリード/ライターを接続すると以下のように表示が出る。

sh-3.2$ ./ICAObjectDumper 
==========================
=    ICAObjectDumper     =
==========================

devicelist [40000001]
           |
           +-------[vdci]  [armc]  [40000003]
                   |
                   +-------[erid]  [erid]  [40000005]
                           |
                           +-------[erid]  [erid]  [40000007]
                           |       |
                           |       +-------[elif]  [gami]  [4000000D]
                           |
                           +-------[erid]  [erid]  [40000009]
                           |       |
                           |       +-------[elif]  [gami]  [4000000F]
                           |       |
                           |       +-------[elif]  [gami]  [40000011]
                           |
                           +-------[erid]  [erid]  [4000000B]
                                   |
                                   +-------[elif]  [gami]  [40000013]
                                   |
                                   +-------[elif]  [gami]  [40000015]

iPhoneをつないだときのPIDをみると、先にPTPCameraが起動されて、その後に Image Capture Extensionが起動されているようだ。Image Capture Extension が起動されている状態で、Caplioを接続しても認識されない。。。

稲田元彦さんのページにICの詳しい資料があり参考になった。

iBook Dual USBの10.4にCaplio Mounter 5.1をインストールして、確認したところ MassStorage.appが起動して認識されていた。MassStorageCamera.appに変わって 挙動が変わったことが原因のようである。。。

MassStorageCamera.appのマッチパターンはDeviceMatchingInfo.plistに書いてある ようだ。

MassStorage.appのVolumeInfo.plistには以下の記述がある。。。

<dict>
   <key>dev_type</key>
   <string>rico</string>
   <key>path</key>
   <string>/Volumes/Caplio</string>
   <key>product</key>
   <string>Caplio</string>
   <key>vendor</key>
   <string>Ricoh</string>
   <key>volumeFormat</key>
   <string>0x6375</string>
</dict> 

この問題はApple側の10.6でICの作り直しをしたときに互換が無くなった事が 原因で、RICHO側のソフトには問題はないようだ。ただ一点気になるのはこの ICの作り替えは10.6の最初のバージョンから行われていたと思われるが、 RICHOの説明は10.6でiPhotoから読み込みが出来るような事が書いてある事だ。

Caplio Mounterのバイナリには以下のようにMassStorage.appの文字列が含まれ ているので、この処理は動かないと思われる。おそらく接続解除時のプロセスの 終了処理のためのPIDの確認かなにかと思われ、認識自体には関係ないと思われる。

sh-3.2$ strings "Caplio Mounter" | grep MassStorage
/bin/ps alxww | /usr/bin/grep MassStorage.app