Info.plist設定

注意:ここで入力する項目はマウスの機種を指定したUSB デバイスドライバとして必要な最小限の項目です。また、Mac OS Xのバージョンによって必要項目が変わることもあります。製品を開発するときには、USBやPCIカードなどターゲット装置に応じて最新情報を入手するようにして下さい。

info_plist

Fig 3. Info Plist

Xcodeの[Navigate]メニューから[Reveal in Project Navigator]を選択します。画面の左欄の[mDriver > mDriver > Supporting Files]から[mDriver-Info.plist]を選択すると左にmDriver-Info.plistファイルの編集画面が表示されます。ここに以下のように各項目を追加します。なお、この項目の実体はXMLファイルです。

[Key]欄の各項目の上にポインタを置くと項目名の右に⊕⊖ボタンが表示されますので、⊕ボタンをクリックして新しい項目を追加します。また、[Type]欄はポップアップ メニューになっており、[Dictionaly]や[String]、[Number]などを設定します。

Info.plistの[IOKitPersonalities]

[IOKitPersonalities]の右に表示される⊕ボタンをクリックし、生成されたKeyを[mDriverClass]、Typeを[Dictionaly]に設定します。

さらに、「mDriverClass」の右に表示されている⊕ボタンをクリックして、Keyを「CFBundleIdentifier」、Typeを「文字列」に設定します。以後「mDriverClass」辞書に以下のプロパティを追加します。

CFBundleIdentifier 文字列 com.inADAinc.driver.mDriver
IOClass 文字列 com_inADAinc_driver_mDriverClass
IOProviderClass 文字列 IOUSBInterface
bConfigurationValue 数値 1*
bInterfaceNumber 数値 0*
bcdDevice 数値 0*
idProduct 数値 125*
idVendor 数値 1118*

ここでは、「CFBundleIdentifier」を再度指定します。また、「IOClass」としてプログラム内への入り口となるClass名も指定します。この場合に「CFBundleIdentifier」の「.」は使用できませんので、「_」を代用します。この変更は、この後に記述する「ソースコード編集」を見て頂ければおわかり頂けます。「IOProviderClass」は上位のClassを指定しています。FireWireなど他のターゲットでは装置に合わせて変更して下さい。

* 印の項目はUSB Prober.appというツールでターゲットを調べて入力します。USB Prober.appはXcode 4.2以前は/Developer/Applications/にあります。Xcode 4.3以降はXcodeメニューの[Open Developer Tool > More Developer Tools...]でAppleのサイトから入手できます。各項目の意味はUSBの規格書を参照して下さい。USBの規格書はUSBのサイトからたどると入手できます。

USBの技術資料はこの資料の執筆時点でUSBのサイト内のDevelopertタブのDocumentsにあります。また、ここにはUSBの規格や機器ごとの規格もあります。

ここでは米Microsoft社のMobile Optical Mouseのデータを例としています。USB Prober.appを起動して[Bus Probe]タブからUSBの規格に沿ってブラウズするとそれぞれの数値が得られます。

Microsoft社のMobile Optical Mouse
Device Vendor ID: idVendor 0x045E: 1118
Product ID: idProduct 0x007d: 125
Device Version Number: bcdDevice 0x0000: 0

他のマウスでもidPeoductとidVendor、bcdDeviceを変更するだけで動作するはずです。

注意:このエディタが表示する数値クラスの値は十進数です。USB Proberの表示は十六進数です。エディタで「0x0045E」などと入力すると十進数に変換します。

Info.plistの[OSBundleLibraries]

[OSBundleLibraries]に入力する値はAppleのサイトにある解説Determine Kext Dependenciesを元にkextlibsというTerminalのツールを使って探します。

上記でBuildしたkextドライバをkextlibsの引数にして必要なライブラリを探します。kextドライバの場所は左欄の[mDriver > mDriver > Products]から[mDriver.kext]を副ボタンでクリックし、ポップアップ メニューから[Show in Finder]を選択すると表示されます。この時に-xmlのスイッチを付けるとXML形式で出力されますので、XMLの部分をmDriver-Info.plistに貼り付けます。

$ kextlibs -xml /Users/.../Build/Products/Debug/mDriver.kext 
    <key>OSBundleLibraries</key>
    <dict>
        <key>com.apple.iokit.IOHIDFamily</key>
        <string>1.7.1</string>
        <key>com.apple.iokit.IOUSBFamily</key>
        <string>4.5.8</string>
        <key>com.apple.kpi.iokit</key>
        <string>11.3</string>
        <key>com.apple.kpi.libkern</key>
        <string>11.3</string>
        <key>com.apple.kpi.mach</key>
        <string>11.3</string>
    </dict>

mDriver-Info.plistに貼り付ける時に、左欄のmDriver-Info.plistを副ボタンでクリックし、ポップアップ メニューから[Open As > Source Code]を選択してペーストします。

[kextlibs]の詳細はTerminalのツール[man]を参照してください。

mDriver-Info.plistの例

以下は「Info.plistのエントリ」の例です。この内容はmDriver.pbprojプロジェクト・バンドル内にあるmDrive-Info.plistファイルの内容を書き出したものです。なお、このファイルはXMLの書式になっています。

info.plistのテキストはこちらです。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.
            apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0"> <dict>     <key>CFBundleDevelopmentRegion</key>     <string>English</string>     <key>CFBundleExecutable</key>     <string>${EXECUTABLE_NAME}</string>     <key>CFBundleIconFile</key>     <string></string>     <key>CFBundleIdentifier</key>     <string>com.inADAinc.driver.${PRODUCT_NAME:rfc1034identifier}
        
</string>     <key>CFBundleInfoDictionaryVersion</key>     <string>6.0</string>     <key>CFBundleName</key>     <string>${PRODUCT_NAME}</string>     <key>CFBundlePackageType</key>     <string>KEXT</string>     <key>CFBundleShortVersionString</key>     <string>1.0</string>     <key>CFBundleSignature</key>     <string>????</string>     <key>CFBundleVersion</key>     <string>1</string>     <key>IOKitPersonalities</key>     <dict>         <key>mDriverClass</key>         <dict>             <key>CFBundleIdentifier</key>             <string>com.inADAinc.driver.mDriver</string>             <key>IOClass</key>             <string>com_inADAinc_driver_mDriverClass</string>             <key>IOProviderClass</key>             <string>IOUSBInterface</string>             <key>bConfigurationValue</key>             <integer>1</integer>             <key>bInterfaceNumber</key>             <integer>0</integer>             <key>bcdDevice</key>             <integer>0</integer>             <key>idProduct</key>             <integer>125</integer>             <key>idVendor</key>             <integer>1118</integer>         </dict>     </dict>     <key>NSHumanReadableCopyright</key>     <string>Copyright © 2012 inADAAll rights reserved.</string>     <key>OSBundleLibraries</key>     <dict>         <key>com.apple.iokit.IOHIDFamily</key>         <string>1.7.1</string>         <key>com.apple.iokit.IOUSBFamily</key>         <string>4.5.8</string>         <key>com.apple.kpi.iokit</key>         <string>11.3</string>         <key>com.apple.kpi.libkern</key>         <string>11.3</string>         <key>com.apple.kpi.mach</key>         <string>11.3</string>     </dict> </dict> </plist>