iOS Personal Hotspot with OS X Lion 10.7 and iTunes 11, on a late 2007 Macbook 3,1
Yeah, I know the title is really wordy. But I wanted to make sure people could use the Google to get here. You see, this issue has frustrated me to no end, and so if I can help someone else find the solution, I want to surely do that.
The issue: you have an iOS device on which you’ve signed up for a cellular data plan that includes a “Personal Hotspot” or whatever your carrier calls it. (It used to be known as “tethering” in some circles.) You want to use this data plan to ride the tubes on the Internets with your beloved Macbook 3,1 (or other Mac of similar vintage, that being about late 2007), which is now deemed obsolete and cannot be upgraded to OS X 10.8 Mountain Lion, and you want to use a USB cable to connect your iOS device, for any number of good reasons, as opposed to 802.11b/g/n/ac or Bluetooth. (I’ve always hated the name WiFi... it’s such a complete marketing term.)
You have also upgraded your iTunes application to 11.0 or later.
You now notice that your Macbook refuses to acknowledge the presence or activity of the iDevice as a network provider, when you open System Preferences and select the Network icon. No matter how many times you plug and unplug the cable, reboot the iDevice, reset its network settings, turn the Personal Hotspot on and off, etc., nothing happens.
OK, so here’s why this was happening to me. (It may be the same thing that is happening to you, although I certainly don’t guarantee anything.) Time for a little deep diving into the bowels of OS X, and how it talks to the devices plugged into it.
The central software part of OS X which controls everything else is called the “kernel.” The kernel knows how to communicate with various devices by means of small software modules called “kernel extensions”, or “kexts” for short, which it loads whenever someone asks for the specific kind of device that it controls. (Some are loaded at startup because they’re so vital to basic functionality, but that’s not important right now.)
One of these “kext” modules is responsible for communicating with an iDevice that’s trying to provide network (internet) service to the Macbook over a USB cable. The name of this kext is AppleUSBEthernetHost.kext and it lives in a very specific place in the Macbook’s filesystem, with very specific permissions and ownership. For those of you with developer skillz, here’s the relevant information:
drwxr-xr-x 3 root wheel 102 Apr 19 00:29 /System/Library/Extensions/AppleUSBEthernetHost.kext
OK, now for the rest of us, the kext file (package) lives in the directory /System/Library/Extensions and is owned by user root and group wheel, and has permissions of 755. This information will come in handy later.
The problem occurs because iTunes 11 installs a version of this kext (kernel extension) which is somehow incompatible with the Macbook. I know, Apple is supposed to be all perfect and everything, but the Macbook 3,1 that I have is now listed as “obsolete” or some such insulting language, and they’re apparently not testing for its unique characteristics anymore.
Nerd note: I suspect that what’s happening is that the kext that iTunes 11 installs is a 64-bit-only version, and since the Macbook 3,1 can’t run a fully 64-bit kernel and EFI, it fails on load. At least that’s what I got from watching iosnoop as I plugged my iPad into the Macbook. But I could be very wrong.
So, fortunately there is a way to get a version of the kext that will work properly, but it’s kind of a real pain in whatever body part you usually choose to have pains like this in. You have to replace the kext with a version supplied by iTunes 10.6.3, which can be downloaded here (http://support.apple.com/kb/dl1575).
Note: this procedure involves mucking around with the internals of your system software and may very well render it unusable. This will get you a very unhappy look from the Genius you take it to at an Apple Store, as well as lots of inconvenience. If you’re not comfortable with this risk, DON’T DO IT.
OK, now that the disclaimer is out of the way, here’s the steps. This involves typing lots of fiddly commands into the Terminal, as the root user.
Download iTunes 10.6.3 from the link above.
Quit the iTunes app and disconnect any iPhones, iPads, iPods, etc. from the Macbook’s USB ports.
Execute this Terminal command to remove the existing kext that was installed by iTunes 11. (You will have to enter an administrator user’s password): sudo rm -rf /System/Library/Extensions/AppleUSBEthernetHost.kext
Execute this Terminal comand to remove the iTunes application. Yes, completely remove it. This will not disturb any of your music, movies, apps, etc.--it’s just the application itself: sudo rm -rf /Applications/iTunes.app
Open the iTunes 10.6.3 DMG file you downloaded in step 1 and run the installer inside it.
DO NOT OPEN THE iTUNES APPLICATION.
Execute the following Terminal command to open the Extensions folder in the Finder: open /System/Library/Extensions
Find AppleUSBEthernetHost.kext in this folder, and Option-drag it to your Desktop. Make sure you hold down Option; this will copy the kext instead of trying to move it, which probably wouldn’t work.
I would advise right-clicking on the copy of the kext on your Desktop, and choosing “Compress AppleUSBEthernetHost.kext” in order to zip up a nice backup copy of this pristine version of the working module for safekeeping. Put it somewhere safe, like where you put other important backups.
When you’re back to the desktop, plug in your iDevice, make sure its Personal Hotspot feature is turned on, you have a cellular connection, etc., and open System Preferences. Choose the Network icon, and you should see “iPad USB” or “iPhone USB” as an active option in your list of network devices. Congratulations. Turn off any other network connections such as 802.11b/g/n/ac or wired Ethernet, and try a website you know should work such as ford.com. (I use that one because it’s not likely to be in your browser’s cache--unless you’ve been car shopping lately or something.) It should come up just fine.
Now we need to get iTunes back up to version 11. The problem is that it will now overwrite your nicely working kext with the bad version again. This is why we copied it to your desktop, so we can overwrite the bad version after reinstalling iTunes 11.
So, repeat steps 2 through 4 to remove iTunes 10.6.3. (You can skip step 3, since it’s not going to matter. The important thing is to remove the iTunes app.)
Then go download the latest iTunes installer from http://www.apple.com/itunes/download/
Open the iTunes 11 installer DMG and run the installer.
Now repeat step 3 to remove the bad kext.
Now execute this Terminal command to copy the good kext where it needs to be: sudo cp -r ~/Desktop/AppleUSBEthernetHost.kext /System/Library/Extensions
Execute this Terminal command to set the proper permissions on the copied kext package: sudo chmod 755 /System/Library/Extensions/AppleUSBEthernetHost.kext
Execute this Terminal command to set the proper ownership on the copied kext package: sudo chown root:wheel /System/Library/Extensions/AppleUSBEthernetHost.kext
Now reboot your Macbook again.
When you get back to the desktop, repeat step 11 to test your Personal Hotspot connection. It should be running OK. If it’s not, well, frankly, I don’t know. But good luck...
NOTE: After applying a new iTunes update, if your Personal Hotspot stops working again, grab your zipped backup copy of the kext, put it on the Desktop, open it to decompress it, and repeat just steps 16 and following--this should get you running again.
As with all shade-tree surgery, your mileage may vary with this procedure. May the Force be with you.