diff options
author | 2008-08-21 18:51:00 +0000 | |
---|---|---|
committer | 2008-08-21 18:51:00 +0000 | |
commit | 0f0f40db85a2c295a9b6dc1623cd76106a4448a5 (patch) | |
tree | acc44bc5851a452200ca067711982b67eee0f786 /SpotlightPlugins/InterfaceBuilder | |
parent | 5a1a87dbfba0ad19a9bb9a8a3ea36496cc359da8 (diff) |
- add svn:ignore properties in a few places.
- fix up the test script so the resource fork can exists after svn.
- add schema files to the importers that needed them.
- change how we launch ibtool so it won't create zombies.
Diffstat (limited to 'SpotlightPlugins/InterfaceBuilder')
-rw-r--r-- | SpotlightPlugins/InterfaceBuilder/GetMetadataForFile.m | 84 | ||||
-rw-r--r-- | SpotlightPlugins/InterfaceBuilder/InterfaceBuilder.xcodeproj/project.pbxproj | 6 |
2 files changed, 62 insertions, 28 deletions
diff --git a/SpotlightPlugins/InterfaceBuilder/GetMetadataForFile.m b/SpotlightPlugins/InterfaceBuilder/GetMetadataForFile.m index 8c09f1c..32c37c5 100644 --- a/SpotlightPlugins/InterfaceBuilder/GetMetadataForFile.m +++ b/SpotlightPlugins/InterfaceBuilder/GetMetadataForFile.m @@ -17,7 +17,6 @@ // #import <Foundation/Foundation.h> -#import "GTMScriptRunner.h" #import "GTMGarbageCollection.h" static BOOL AddStringsToTextContent(NSSet *stringSet, @@ -116,32 +115,73 @@ static BOOL ExtractConnections(NSDictionary *ibToolData, return AddStringsToTextContent(connectionsSet, attributes); } +static NSString *FindIBTool(void) { + NSString *result = nil; + + NSString *possiblePaths[] = { + @"/usr/bin/ibtool", + @"/Developer/usr/bin/ibtool", + }; + + NSFileManager *fm = [NSFileManager defaultManager]; + BOOL isDir; + for (size_t i = 0; i < (sizeof(possiblePaths) / sizeof(NSString*)); ++i) { + if ([fm fileExistsAtPath:possiblePaths[i] isDirectory:&isDir] && + !isDir) { + result = possiblePaths[i]; + break; + } + } + + return result; +} + +static NSData *CommandOutput(NSString *cmd) { + NSMutableData *result = [NSMutableData data]; + + // NOTE: we use popen/pclose in here instead of NSTask because NSTask uses + // a delayed selector to clean up the process it spawns, so since we have + // no runloop it gets ungly trying to clean up the zombie process. + + FILE *fp; + char buffer[2048]; + size_t len; + if((fp = popen([cmd UTF8String], "r"))) { + // spool it all in + while ((len = fread(buffer, 1, sizeof(buffer), fp)) > 0) { + [result appendBytes:buffer length:len]; + } + // make sure we get a clean exit status + if (pclose(fp) != 0) { + result = nil; + } + } + return result; +} + static BOOL ImportIBFile(NSMutableDictionary *attributes, NSString *pathToFile) { BOOL wasGood = NO; - GTMScriptRunner *runner = [GTMScriptRunner runner]; - NSDictionary *environment - = [NSDictionary dictionaryWithObject:@"/usr/bin:/Developer/usr/bin" - forKey:@"PATH"]; - [runner setEnvironment:environment]; - NSString *cmdString - = @"ibtool --classes --localizable-strings --connections \"%@\""; - NSString *cmd = [NSString stringWithFormat:cmdString, pathToFile]; - NSString *dataString = [runner run:cmd]; - CFDataRef data - = (CFDataRef)[dataString dataUsingEncoding:NSUTF8StringEncoding]; - if (data) { - NSDictionary *results - = GTMCFAutorelease(CFPropertyListCreateFromXMLData(NULL, - data , - kCFPropertyListImmutable, - NULL)); - if (results && [results isKindOfClass:[NSDictionary class]]) { - wasGood = ExtractClasses(results, attributes); - wasGood |= ExtractLocalizableStrings(results, attributes); - wasGood |= ExtractConnections(results, attributes); + NSString *ibtoolPath = FindIBTool(); + if (ibtoolPath) { + NSString *cmdString + = @"%@ --classes --localizable-strings --connections \"%@\""; + NSString *cmd = [NSString stringWithFormat:cmdString, ibtoolPath, pathToFile]; + NSData *data = CommandOutput(cmd); + if (data) { + NSDictionary *results + = GTMCFAutorelease(CFPropertyListCreateFromXMLData(NULL, + (CFDataRef)data , + kCFPropertyListImmutable, + NULL)); + if (results && [results isKindOfClass:[NSDictionary class]]) { + wasGood = ExtractClasses(results, attributes); + wasGood |= ExtractLocalizableStrings(results, attributes); + wasGood |= ExtractConnections(results, attributes); + } } } + return wasGood; } diff --git a/SpotlightPlugins/InterfaceBuilder/InterfaceBuilder.xcodeproj/project.pbxproj b/SpotlightPlugins/InterfaceBuilder/InterfaceBuilder.xcodeproj/project.pbxproj index 8bea28e..9909cd4 100644 --- a/SpotlightPlugins/InterfaceBuilder/InterfaceBuilder.xcodeproj/project.pbxproj +++ b/SpotlightPlugins/InterfaceBuilder/InterfaceBuilder.xcodeproj/project.pbxproj @@ -25,7 +25,6 @@ 2C05A19C06CAA52B00D84F6F /* GetMetadataForFile.m in Sources */ = {isa = PBXBuildFile; fileRef = 2C05A19B06CAA52B00D84F6F /* GetMetadataForFile.m */; }; 8B1D48820E59F52A000EB8CA /* main.c in Sources */ = {isa = PBXBuildFile; fileRef = 8B1D48810E59F52A000EB8CA /* main.c */; }; 8B58F8700E5726D000A0E02E /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8B58F86F0E5726D000A0E02E /* Foundation.framework */; }; - 8BF153730E5A436600D28B05 /* GTMScriptRunner.m in Sources */ = {isa = PBXBuildFile; fileRef = 8BF153720E5A436600D28B05 /* GTMScriptRunner.m */; }; 8BF1543C0E5B42F500D28B05 /* ApplicationServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8BF1543B0E5B42F500D28B05 /* ApplicationServices.framework */; }; 8D5B49A804867FD3000E48DA /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 8D5B49A704867FD3000E48DA /* InfoPlist.strings */; }; /* End PBXBuildFile section */ @@ -48,8 +47,6 @@ 8B58F75A0E56502600A0E02E /* ReadMe.rtf */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; path = ReadMe.rtf; sourceTree = "<group>"; }; 8B58F86F0E5726D000A0E02E /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; }; 8B58F9110E579A1300A0E02E /* LoadableBundle.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = LoadableBundle.xcconfig; sourceTree = "<group>"; }; - 8BF153710E5A436600D28B05 /* GTMScriptRunner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GTMScriptRunner.h; path = ../../Foundation/GTMScriptRunner.h; sourceTree = SOURCE_ROOT; }; - 8BF153720E5A436600D28B05 /* GTMScriptRunner.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = GTMScriptRunner.m; path = ../../Foundation/GTMScriptRunner.m; sourceTree = SOURCE_ROOT; }; 8BF1537B0E5A456F00D28B05 /* GTMDefines.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GTMDefines.h; path = ../../GTMDefines.h; sourceTree = SOURCE_ROOT; }; 8BF153C30E5A48C400D28B05 /* GTMGarbageCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = GTMGarbageCollection.h; path = ../../Foundation/GTMGarbageCollection.h; sourceTree = SOURCE_ROOT; }; 8BF1543B0E5B42F500D28B05 /* ApplicationServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ApplicationServices.framework; path = /System/Library/Frameworks/ApplicationServices.framework; sourceTree = "<absolute>"; }; @@ -109,8 +106,6 @@ isa = PBXGroup; children = ( 8BF1537B0E5A456F00D28B05 /* GTMDefines.h */, - 8BF153710E5A436600D28B05 /* GTMScriptRunner.h */, - 8BF153720E5A436600D28B05 /* GTMScriptRunner.m */, 8BF153C30E5A48C400D28B05 /* GTMGarbageCollection.h */, 2C05A19B06CAA52B00D84F6F /* GetMetadataForFile.m */, 8B1D48840E59F591000EB8CA /* PluginID.h */, @@ -235,7 +230,6 @@ files = ( 2C05A19C06CAA52B00D84F6F /* GetMetadataForFile.m in Sources */, 8B1D48820E59F52A000EB8CA /* main.c in Sources */, - 8BF153730E5A436600D28B05 /* GTMScriptRunner.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; |