Quicklook stopped working with xcode's .m and .h file suddenly
A week ago, quicklook stopped working with .m
and .h
files. Instead, it's showing me a .m
or .h
thumbnail. I think that day a message box popped up and I didn't read it — I answered the question hastily — but I wasn't doing anything with the system. Anyway, now I've lost the quicklook for these file types.
It still works for all other default files. I tried to copy the ".qlgenerator" files from another mac, which has the same OS version... and it still didn't work.
I tried to disk verify/repair permissions, it indicated something concerning .qlgenerator files, but I thought "It's probably because of my copy-paste-replace by intruder files that probably changed some permissions". Anyway, it didn't solve the problem.
I also tried running qlmanage -r
, and restarting my mac. The problem persists.
The other mac is still showing the default way (aka, with quicklook previews) for these file types.
Any idea on what went wrong? Do you think that that message box that I answered hastily is responsible for that? I feel that it is, but I'm not sure, because I wasn't configuring the system or anything, nor even anything that is related neither to quicklook (I didn't know that this feature had a name back then) nor xcode... I'm lost.
EDIT As @Bootle suggested, i ran
qlmanage -p FILE
and surprisingly, the Quicklook opened the file correctly, i.e. you can see the content of the file and the default XCode coloring for it. Additionally, the following output was printed in the terminal.
So any more hints?
EDIT New hints emerged after checking the log from the console after @StvnW 's edit.
i'm attaching the logs image after ordering quicklook on a file
UPDATE The solution was because i was keeping older versions of XCodes since 3.6.2 ^_^ and other versions, i put all of them together in a folder where i disallowed myself the permission to access it. Thus they became inaccessible to the system too. And problem was solved, the system (or QL) fixed itself to the latest official XCode application.
But this is thanks to the below answer that gave me that hint from the debugging. I guess other people who have this same problem should follow his answer. I'm marking this response as the correct answer
You might consider simply using QLStephen which will add proper QuickLook support for all text files regardless of their extensions. It will also properly handle files without extensions (e.g. README
, Makefile
). What I like about it is that you don't have to maintain a list of extensions; QLStephen detects text files automatically. QLStephen is independent of XCode and is a QL plugin that you drop into /Library/QuickLook/
or ~/Library/QuickLook/
.
The fact that I am also named Steven is purely coincidental.
Edit: Debugging QuickLook based on more info from OP:
Turn on QuickLook logging:
defaults write -g QLEnableLogging YES
Here is some reference logging output (written to Console):
Stock Xcode installed:
2014-04-29 2:46:08.172 PM quicklookd[19315]:
[QL] Thumbnailing file://localhost/Users/user/src/hello/main.m.
Content type UTI: public.objective-c-source
Generator used: <QLGenerator Text.qlgenerator>
2014-04-29 2:46:08.173 PM com.apple.quicklook.satellite[19330]:
[QL] <QLThumbnailRequest main.m
token: d45af7955eb9401bc7a49fd6652d1c3aa5cc4a8b;00000000;000000000000001a;
com.apple.app-sandbox.read;00000001;01000003;0000000003e32849;
/users/user/src/hello/main.m>.
Content type UTI: public.objective-c-source.
Generator used: <QLGenerator /System/Library/QuickLook/Text.qlgenerator>
Third-party generator (QLColorCode) installed:
2014-04-29 2:51:40.458 PM quicklookd[19359]:
[QL] Thumbnailing file://localhost/Users/user/src/hello/main.m.
Content type UTI: public.objective-c-source.
Generator used: <QLGenerator /Users/user/Library/QuickLook/QLColorCode.qlgenerator>
2014-04-29 2:51:40.459 PM com.apple.quicklook.satellite[19367]:
[QL] <QLThumbnailRequest main.m
token: d45af7955eb9401bc7a49fd6652d1c3aa5cc4a8b;00000000;000000000000001a;
com.apple.app-sandbox.read;00000001;01000003;0000000003e32849;
/users/user/src/hello/main.m>.
Content type UTI: public.objective-c-source.
Generator used: <QLGenerator /Users/user/Library/QuickLook/QLColorCode.qlgenerator>
Since things work for you when calling qlmanage
from the command line, you might be able to compare the logs written to Console with the output from manually invoking on the command line and spot the issue. With only Xcode installed:
[user@macbook]/Users/user/src/hello$ qlmanage -p -d 1 main.m
Testing Quick Look preview with files:
main.m
[DEBUG] Registering <QLGenerator Built-in 0x7fa08241eaa0> for public.image
[DEBUG] Preview test for main.m -- file://localhost/Users/user/src/hello/.
Content type UTI: public.objective-c-source
[DEBUG] Previewing file://localhost/Users/user/src/hello/main.m.
Content type UTI: public.objective-c-source.
Generator used: <QLGenerator Text.qlgenerator>
[DEBUG] Loading <QLGenerator Text.qlgenerator>
[DEBUG] Previewing file://localhost/Users/user/src/hello/main.m finished
QuickLook for these types of files works because the file type is specified in Xcode's Info.plist.
In order for QuickLook to use Xcode to quick view these files again in Finder, you'll need to edit Xcode's Info.plist file. This is found by right clicking the Xcode.app file in your Applications and clicking "Show Package Contents". You'll find Info.plist in the Contents folder that opens up.
In the Info.plist file, all of the file types associated with Xcode are listed as "CFBundleTypeExtensions" dictionaries.
Once opening the plist, do a search for <string>h</string>
(or the same with 'm'). If it can't be found, you'll need to add it.
Note: At this point, you may want to create a backup of the whole Xcode.app file in case something goes wrong.
Make a copy of Info.plist by alt-dragging it to your Desktop. Open the copy and search for <key>CFBundleExecutable</key>
. You'll see </array>
on the line above it. Before the </array>
, paste in the block of text allowing for a file type to be associated with Xcode (shown below). This block should start and end with <dict>
and </dict>
, respectively.
For the .h file:
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>h</string>
</array>
<key>CFBundleTypeIconFile</key>
<string>c-header_Icon</string>
<key>CFBundleTypeName</key>
<string>C Header Source</string>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>LSIsAppleDefaultForType</key>
<true/>
<key>LSItemContentTypes</key>
<array>
<string>public.c-header</string>
</array>
</dict>
For the .m file:
<dict>
<key>CFBundleTypeExtensions</key>
<array>
<string>m</string>
</array>
<key>CFBundleTypeIconFile</key>
<string>objective-c-source_Icon</string>
<key>CFBundleTypeName</key>
<string>Objective-C Source</string>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>LSIsAppleDefaultForType</key>
<true/>
<key>LSItemContentTypes</key>
<array>
<string>public.objective-c-source</string>
</array>
</dict>
Once this is done, you should be able to copy the edited Info.plist back into the Xcode.app Contents folder. Sometimes, apps don't like you editing their plists and decide not to work afterwards. If this is the case, just restore from the copy you (should have) made earlier.
This can be replicated with any application and any filetype. If there's a better way to do this perhaps by changing/setting some preferences in Xcode, it'd be good to know.