aboutsummaryrefslogtreecommitdiff
path: root/SpotlightPlugins/InterfaceBuilder
diff options
context:
space:
mode:
authorGravatar thomasvl@gmail.com <thomasvl@gmail.com@7dc7ac4e-7543-0410-b95c-c1676fc8e2a3>2008-08-21 18:51:00 +0000
committerGravatar thomasvl@gmail.com <thomasvl@gmail.com@7dc7ac4e-7543-0410-b95c-c1676fc8e2a3>2008-08-21 18:51:00 +0000
commit0f0f40db85a2c295a9b6dc1623cd76106a4448a5 (patch)
treeacc44bc5851a452200ca067711982b67eee0f786 /SpotlightPlugins/InterfaceBuilder
parent5a1a87dbfba0ad19a9bb9a8a3ea36496cc359da8 (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.m84
-rw-r--r--SpotlightPlugins/InterfaceBuilder/InterfaceBuilder.xcodeproj/project.pbxproj6
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;
};