Mac OS X 10.6.8 及び正規の iPhone 5、そして iOS 6.0.1、iTunes 10.7 において同じ問題に見舞われたので、色々試行錯誤の結果得られた結論を纏めておく。これらの問題は結局は AppleUSBEthernetHost.kext に由来する物らしいが、今回は最新の iTunes 10.7 をインストールしても解決されなかったので、そのダウングレードが必要となる場合の対処法を投稿する。
■正常なテザリング
通常、正常にテザリングに成功すると、コンソールには
>kernel AppleUSBEthernetHost::getHardwareEthernetAddress: MAC address = xx:xx:xx:xx:xx:xx
>kernel AppleUSBEthernetHost::powerStateChangeOccurred: intf is not enabled, ignoring ... st: 0
>kernel AppleUSBEthernetHost: Ethernet address xx:xx:xx:xx:xx:xx
といった MAC アドレスを決定したと言う内容がでる。テザリングを終了すると、
>kernel AppleUSBEthernetHost::disable: failed to set alt interface 0, e0YYYYYY
>kernel AppleUSBEthernetHost::getHardwareEthernetAddress: MAC address = xx:xx:xx:xx:xx:xx
>kernel AppleUSBEthernetHost::powerStateChangeOccurred: intf is not enabled, ignoring ... st: 0
>kernel AppleUSBEthernetHost: Ethernet address xx:xx:xx:xx:xx:xx
>kernel AppleUSBEthernetHost::disable: failed to set alt interface 0, e00002ed
といった内容がでる。
■テザリングできない例
ところが、AppleUSBEthernetHost.kext に由来する問題では、
>com.apple.kextd[10] Failed to load /System/Library/Extensions/AppleUSBEthernetHost.kext - (libkern/kext) link error.
>com.apple.kextd[10] Load com.apple.driver.AppleUSBEthernetHost failed; removing personalities.
kernel kxld[com.apple.driver.AppleUSBEthernetHost]: The super class vtable '__ZTV20IOEthernetController' for vtable '__ZTV20AppleUSBEthernetHost' is out of date. Make sure your kext has been built against the correct headers.
>kernel Can't load kext com.apple.driver.AppleUSBEthernetHost - link failed.
>kernel Failed to load executable for kext com.apple.driver.AppleUSBEthernetHost.
>kernel Kext com.apple.driver.AppleUSBEthernetHost failed to load (0xdc008016).
>kernel Failed to load kext com.apple.driver.AppleUSBEthernetHost (error 0xdc008016).
という、カーネルが kext をリンクできなかったことを告げる、致命的なエラーが、毎回では無いようだが、記録される様である。
■テザリングできない組合せ
AppleUSBEthernetHost.kext の version は、
>iTunes 10.7 - KEXT 2.3.6
>iTunes 10.6.3 - KEXT 2.3.0
>iTunes 10.5.3 - KEXT 2.2.0
と対応し、v.2.3.6 の場合には Mac OS X 10.6.8 との相性が悪いようであった。その事は同じ OS と iTunes をインストールした異なる Intel Mac 二台で確認済である。ところが、
>iTunes 10.7 - Mac OS X 10.7.5 [Intel]
>iTunes 10.6.3 - Mac OS X 10.5.8 [PPC]
の二例においては、何の問題もなくテザリングが可能であつた。但し後者の場合の Interface の名称は Ethernet であり、iPhone であるとは認識されない。Intel Mac における v.10.5 との相性は未確認であるが、恐らく可能であらうと思われる。
■解決方法
AppleUSBEthernetHost.kext の差替えにより対処したところ、問題は解決した。この方法は同様の事例である https://discussions.apple.com/thread/4367664 を参考にした。以下はかなり面倒な操作を伴うので、わからない場合は迂闊に弄らない方がよい。
1. AppleUSBEthernetHost.kext v.2.3.6 を廃棄、v.2.2.0 を入れる。
1.1 尚 KEXT は /System/Library/Extensions/AppleUSBEthernetHost.kext に存在する。
1.2 iTunes 10.5.3 は既に配布が終了しているので、次の URL より入手する。
iTunes 10.5.3 - http://appldnld.apple.com/iTunes10/041-3779.20120119.Bgty5/iTunes10.5.3.dmg
1.3 入手した dmg ファイル中の mpkg ファイルは、Developer Tools の PackageMaker で展開する。
1.4 各 pkg ファイルの取り出しは PackageMaker にバンドルされた Flat Package Editor で行う。
1.5 取り出した各 pkg バンドル中の Payload が tar.gzip のファイルなので、拡張子 gz をつけ足して展開すると、pkg がインストールするファイルが得られる。
1.6 アクセス権を調整する。基本は root / wheel に変更しておく。chown -r root 等とする。
2. 差替えたら、再起動し、iPhone を繫ぐと、テザリング可能になった。確認後、テザリングを一旦終了する。
3. v.2.2.0 を破棄、同様にして v.2.3.0 を入れる。
3.1 iTunes 10.6.3 - http://support.apple.com/kb/DL1575
4. 差替えたら、再起動し、iPhone を繫ぐと、やはりテザリング可能であった。
ここで注意したいのが、v.2.3.6 から直接 v.2.3.0 を入れた場合には、テザリング可能とはならなかったことである。また、v.2.3.6 を再度入れてみてもみたが、テザリング可能とはならなかった。