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.

If you enjoyed this blog post, you might enjoy my travel book for people interested in science and technology: The Geek Atlas. Signed copies of The Geek Atlas are available.


<$BlogCommentDateTime$> <$BlogCommentDeleteIcon$>

Post a Comment

Links to this post:

<$BlogBacklinkControl$> <$BlogBacklinkTitle$> <$BlogBacklinkDeleteIcon$>
Create a Link

<< Home