Make your Mac identify any card reader as an Apple one

Today, a little « cosmetic » hack. When you click on « About this Mac » in the information systems, you can see a line named « card reader »… Except that the only card reader that will appear there is the one integrated in your computer, if any. On my MacBook Pro, there is not any, but I have an ExpressCard card reader (a Sony) that does its job well.

The idea is to ensure that the card reader is recognized as an Apple model.

It’s pretty easy to do, but I advise to save your files first, as we will modify the drivers and it would be stupid to do something wrong.

Step 1: Get a card reader recognized by the system, in USB. We’ll have to get two pieces of information: the manufacturer ID and  the product ID.

We must go to the System Report, in the USB section. These are two values ​​in hexadecimals, indicated as « identifiable provider » and « product ID ».

For my card reader, it is 0x054c for the supplier (Sony) and 0x0281 for the product… Values that we will have to convert to decimal. As I assume you are not familiar with any of hexadecimal conversions, we will go through the Mac OS X calculator. We must switch to « Programmer » in the menus, click on the icon « 16 », enter the value and then click on the little « 10 ». 641 then becomes 0x0281 and 0x054c becomes 1356.

Step 2: let’s modify the files. You must go to « /System/Library/Extensions » and copy the AppleStorageDrivers.kext in a safe place (like a backup copy).

Then right-click on the file, select « Show package contents » . In « Contents/Plugins », you should find AppleUSBCardReader.kext. Right click on the file, select « Show package contents » again. In « Contents », you should find Info.plist.

Now we shall modify the file. I usually use HexFiend, but any editor that does not change the format (same xCode is enough) can be used. You might have to identify yourself.

In the file, you have to look for <key>idProduct</key>
Just below, replace the value of your drive product number, <integer>641</integer> in my case.

On the following line, <key>idVendor</key>, you have to put the value identifying the manufacturer, <integer>1356</integer> in this case.

Once it is done, save the file and replace the old file by the new AppleUSBCardReader.kext.

To be sure that OS X recognizes the changes, it is necessary that the permissions are correct and you also have to rebuild the cache : the easiest way is through a dedicated software, although it is perfectly possible to do it manually. I personally use Kext Utility but there are others. The operation is simple: launch the software and it takes care of everything.

Once you have finished, just reboot and it should work.

Pay attention to a small cosmetic bug: as Apple only uses SD card readers, the default icon will be an SD card, even if your player supports other formats. In my case, the reader also reads Memory Stick, but it appears with an SD card icon. I did not find how to change the icon depending on the card, but it is possible to force a particular icon.

In the Info.plist file, you must change the value in <key>IOBundleResourceFile</key> (which contains <string>SD.icns</string>) by one of the following, depending on the type of cards : CompactFlash.icns, MemoryStick.icns, MemoryStickProDuo.icns, MiniSD.icns, SmartMedia.icns, TransFlash.icns, XD.icns.

Well, I hope this useless hack will be useful to someone…