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"の下にスキャナーのドライバと思われるファイル があるが、ここにドライバーをインストールする必要があるのだろうか?
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