Wednesday, February 06, 2013

How to fix a corrupted JavaScriptCore.framework on Mac OS X 10.7.5

If /System/Library/Framework/JavaScriptCore.framework gets deleted or corrupted on Mac OS X you are in serious trouble. You can't run a browser, you can't start Preview, and more. But restoring it is possible.

To save anyone else the pain of figuring this stuff out here's how I got myself out of this situation. This blog post is boring until you have this problem and end up here because you searched for a solution. Welcome!

First you need to find the 'Client Combo' from Apple for your operating system. In my case that was the OS X Lion Update 10.7.5 (Client Combo). It contains a fresh copy of the JavaScriptCore.framework that just requires extracting and copying into place. Note that you can't just install the combo from the .dmg file because the Apple package manager relies on JavaScriptCore.framework. You have to do everything at the terminal.

Step 1. Download the combo and get it on your machine. For that you need to open Terminal (which you can get via Spotlight as it will still work) and type:

curl -L > MacOSXUpdCombo10.7.5.dmg

That will create a file called MacOSXUpdCombo10.7.5.dmg.

Step 2. Extract the pkg file from inside the dmg. To do this you need to mount it (as it is a volume) by typing

hdiutil attach MacOSXUpdCombo10.7.5.dmg

This should result in the contents being available in  /Volumes/Mac OS X 10.7.5 Update Combo. So change to that directory:

cd "/Volumes/Mac OS X 10.7.5 Update Combo"

And you'll find a single file in there: MacOSXUpdCombo10.7.5.pkg.

Step 3. Extract the contents of the pkg file by typing:

pkgutil --expand MacOSXUpdCombo10.7.5.pkg ~/combo

That will extract it into a directory called combo in your home. Go there with

cd ~/combo

Step 4. In that directory you'll find a directory called MacOSXUpdCombo10.7.5.pkg, the JavaScriptCore.framework is in there but needs further extracting like this

cat MacOSXUpdCombo10.7.5.pkg/Payload | gzip -d - | cpio -im

There will now be a System directory which contains the framework needed. Delete the corrupt one and copy the new one into place:

cd System/Library/Frameworks/
sudo rm -rf /System/Library/Frameworks/JavaScriptCore.framework
sudo cp -R JavaScriptCore.framework/ /System/Library/Frameworks/JavaScriptCore.framework

and you should be fixed.


Roberto said...

Thanks! Worked for my MacBook Air running Mountain Lion 10.8.3.

Roberto said...

Thanks! Worked for my MacBook Air, Mountain Lion 10.8.3.

Unknown said...
This comment has been removed by the author.
Unknown said...

For OS X 10.8.3, the relevant update combo is found on .

Unknown said...

The new Payload (in OS X 10.8.3) is encrypted with bzip2, not gzip. The flag to extract is the same, so just s/gzip/bzip2/ above.

Geoff said...

For OS X 10.9.5, the URL is:
for OS X 10.10.1, the URL is:

And, as Fredrik Carlén commented, bzip2 must now be used rather than gzip.

Geoff said...

For other versions of OS X:

1. Visit (note: loads slowly!).
2. Select "Downloads in other languages" if applicable.
3. Select "Browse by Product" -> "Mac OS".
4. Scroll down until you find the correct "OS X Update".
5. Click "Load more results" if not found.
6. Often there will be an "Update" and "Update (Combo)" version. If so, select the Combo version.
7. Select "Download".
8. Restore /System/Library/Frameworks/JavaScriptCore.framework as described in the post. Use bzip2 rather than gzip for more recent versions.
9. You may want to (re)apply subsequent security updates in case one applies to the the JavaScriptCore.framework. You may have noticed these as you looked for the correct update, as the site appears to be in reverse chronological order. Apply security updates in the correct order.

Unknown said...

I have tried to repair my 10.6.8 using the info. Problem is that there is no Payload file in the 10.6.8 combo file. Can I use 10.7.5 to do the repair?

Making an old USB printer support Apple AirPrint using a Raspberry Pi

There are longer tutorials on how to connect a USB printer to a Raspberry Pi and make it accessible via AirPrint but here's the minimal ...