Using older drivers on recent MacOS

Everybody knows the feeling, you buy some great printer and when the next release of your operating system comes out, there are no compatible drivers for your OS.
It sucks because printer suppliers can take weeks or even forever to bring you an updated software for your printer. Luckily for us you can easily fix it yourself!

First of lets take a look at the exact issue we have here.

I own a Canon Selphy CP900 which is a great image printer but when I visit the canon website after a reinstall I see the following message:

Great, there are no drivers for my OS Version, now what!? Simply select and older version of your OS. I had to go back to OS X 10.10 in order to get a download. Once you get there, download the latest available software.
You should have received either a DMG or a PKG file. If you received a DMG, mount the DMG and see if there’s a PKG file inside, if so, great!
To make things a little easier, I copied the PKG file to my desktop by simply dragging it there.

If you were to just try to install it, you would probably be getting an error like this:

Let’s see if we can fix that, shall we?
To do so, open up Terminal.app and type the following:

pkgutil --expand inFile.pkg ~/Desktop/outFile/

And where you see the inFile.pkg, simply drag in the .pkg file we just copied to the desktop. The ‘~/Desktop/outFile/’ part will create a folder on your Desktop named outFile where it will deposit all the files found inside the .pkg package.

This will look something like this:

As you see, the PKG actually consists of a Distribution file, a Resources folder and a few different driver files. The only file we’ll be needing is the Distribution file.
Simply open the Distribution file in a text editor. I’ll be using an app called Chocolat (link). When you open the Distribution file, you’ll se that it consists of code, like this:

If you start reading the code, you’ll notice a part that says:

function installationCheck () {... }

What this function does is, it checks to see whether or not you’re running the required OS in order to install the software. In this case, it will only install if you run OS X 10.10 if not, it will result in a fatal error like the one we saw before.

In order to fix this issue, we can simply remove the code that does the check. To do so, in this case, you must completely remove the following code:

function installationCheck() {
if ( (system.compareVersions( system.version.ProductVersion, '10.10' ) == -1) ||
(system.compareVersions( system.version.ProductVersion, '10.11' ) != -1) ){
my.result.type = 'Fatal';
my.result.title = system.localizedStringWithFormat('installation_check_failed_title');
my.result.message = system.localizedStringWithFormat('installation_check_failed_msg');
return false;
}
return true;
}

This has deleted the code that enables the installation check, however if you look a little bit higher, you will find one line that says:

<installation-check script="installationCheck();"/>

As we will no longer be using the installationCheck, we no longer need this reference to it. So also delete that line.
If you’ve done that correct, your file should look something like this:

If so, go ahead and save your file.

Now that we’ve deleted the installation check, we’re ready to put it all back together again.
To do so, let’s get back to Terminal.

Once in Terminal, type:

pkgutil --flatten ~/Desktop/outFile/ ~/Desktop/Driver.pkg

Where theĀ ~/Desktop/outFile/ points to the folder we created earlier andĀ ~/Desktop/Driver.pkg will create a new .pkg file on your Desktop called ‘Driver.pkg’
Simply press the return button and Terminal will do the rest.

If you now run the .pkg file we just created, you will no longer receive the fatal error we started with but it should install the software just like we wanted to.


Leave a Reply

Your email address will not be published. Required fields are marked *