mirror of
https://github.com/cappuccino/cappuccino.git
synced 2026-11-11 09:28:45 +00:00
Merge branch 'refs/heads/upstream'
This commit is contained in:
commit
081cf61e68
11 files changed
+1522
-224
No files matched your search
@@ -3,7 +3,7 @@
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 45;
|
||||
objectVersion = 46;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
@@ -252,8 +252,11 @@
|
||||
/* Begin PBXProject section */
|
||||
29B97313FDCFA39411CA2CEA /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastUpgradeCheck = 0440;
|
||||
};
|
||||
buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "NativeHost" */;
|
||||
compatibilityVersion = "Xcode 3.1";
|
||||
compatibilityVersion = "Xcode 3.2";
|
||||
developmentRegion = English;
|
||||
hasScannedForEncodings = 1;
|
||||
knownRegions = (
|
||||
@@ -334,14 +337,15 @@
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_ENABLE_FIX_AND_CONTINUE = YES;
|
||||
GCC_MODEL_TUNING = G5;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||
GCC_PREFIX_HEADER = NativeHost_Prefix.pch;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = "ACTIVATION=0";
|
||||
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
|
||||
INFOPLIST_FILE = Info.plist;
|
||||
INFOPLIST_PREPROCESS = YES;
|
||||
INFOPLIST_PREPROCESSOR_DEFINITIONS = "ACTIVATION=0";
|
||||
@@ -354,10 +358,12 @@
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
GCC_MODEL_TUNING = G5;
|
||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||
GCC_PREFIX_HEADER = NativeHost_Prefix.pch;
|
||||
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
|
||||
INFOPLIST_FILE = Info.plist;
|
||||
INFOPLIST_PREPROCESS = YES;
|
||||
INFOPLIST_PREPROCESSOR_DEFINITIONS = "ACTIVATION=0";
|
||||
@@ -376,7 +382,6 @@
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
PREBINDING = NO;
|
||||
SDKROOT = macosx;
|
||||
};
|
||||
name = Debug;
|
||||
@@ -388,7 +393,6 @@
|
||||
GCC_C_LANGUAGE_STANDARD = c99;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
PREBINDING = NO;
|
||||
SDKROOT = macosx;
|
||||
};
|
||||
name = Release;
|
||||
|
||||
@@ -38,74 +38,48 @@ void fsevents_callback(ConstFSEventStreamRef streamRef,
|
||||
for (i = 0; i < numEvents; i++)
|
||||
{
|
||||
[xcc updateLastEventId:eventIds[i]];
|
||||
|
||||
FSEventStreamEventFlags flags = eventFlags[i];
|
||||
|
||||
NSString *path = [[(NSArray *)eventPaths objectAtIndex:i] stringByStandardizingPath];
|
||||
|
||||
if (useFileBasedListening)
|
||||
{
|
||||
if (!(flags & kFSEventStreamEventFlagItemIsFile) ||
|
||||
[xcc isPathMatchingIgnoredPaths:path] ||
|
||||
(![xcc isXIBFile:path] && ![xcc isObjJFile:path] && ![xcc isXCCIgnoreFile:path]))
|
||||
{
|
||||
BOOL conditionIsFile = flags & kFSEventStreamEventFlagItemIsFile;
|
||||
BOOL conditionIsDirectory = NO;
|
||||
BOOL conditionIsIgnored = [xcc isPathMatchingIgnoredPaths:path];
|
||||
BOOL conditionIsValidFile = [xcc isXIBFile:path] || [xcc isObjJFile:path] || [xcc isXCCIgnoreFile:path];
|
||||
BOOL conditionPathExists = [[NSFileManager defaultManager] fileExistsAtPath:path isDirectory:&conditionIsDirectory];
|
||||
|
||||
if (conditionIsIgnored)
|
||||
continue;
|
||||
}
|
||||
|
||||
if (flags & kFSEventStreamEventFlagItemIsFile &&
|
||||
flags & kFSEventStreamEventFlagItemRemoved)
|
||||
{
|
||||
if ([xcc isObjJFile:path])
|
||||
{
|
||||
[xcc tidyShadowedFiles];
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if (conditionIsFile && !conditionIsValidFile)
|
||||
continue;
|
||||
|
||||
if (flags & kFSEventStreamEventFlagItemRemoved)
|
||||
// Events are not so reliable. For example, moving a folder to the trash is not
|
||||
// a deletion. In order to simplify the code, we simply tidyUp the project when we receive
|
||||
// an event.
|
||||
[xcc tidyShadowedFiles];
|
||||
|
||||
if (conditionIsDirectory)
|
||||
continue;
|
||||
|
||||
if (!conditionPathExists)
|
||||
{
|
||||
DLog(@"event type: kFSEventStreamEventFlagItemRemoved for path %@", path);
|
||||
DLog(@"File removed: %@", path);
|
||||
[xcc handleFileRemoval:path];
|
||||
}
|
||||
|
||||
if (flags & kFSEventStreamEventFlagItemCreated ||
|
||||
flags & kFSEventStreamEventFlagItemModified)
|
||||
else
|
||||
{
|
||||
DLog(@"event type: kFSEventStreamEventFlagItemCreated or kFSEventStreamEventFlagItemModified for path %@", path);
|
||||
DLog(@"File modified/added: %@", path);
|
||||
[xcc handleFileModification:path notify:YES];
|
||||
}
|
||||
|
||||
else if ([xcc reactToInodeModification] &&
|
||||
(flags & kFSEventStreamEventFlagItemFinderInfoMod ||
|
||||
flags & kFSEventStreamEventFlagItemXattrMod ||
|
||||
flags & kFSEventStreamEventFlagItemChangeOwner))
|
||||
{
|
||||
DLog(@"event type: %u for path %@", flags, path);
|
||||
[xcc handleFileModification:path notify:YES];
|
||||
}
|
||||
|
||||
else if ([xcc reactToInodeModification] &&
|
||||
flags & kFSEventStreamEventFlagItemInodeMetaMod)
|
||||
{
|
||||
DLog(@"event type: kFSEventStreamEventFlagItemInodeMetaMod for path %@", path);
|
||||
[xcc handleFileModification:path notify:YES];
|
||||
}
|
||||
|
||||
else if (flags & kFSEventStreamEventFlagItemRenamed)
|
||||
{
|
||||
if (![[NSFileManager defaultManager] fileExistsAtPath:path])
|
||||
{
|
||||
DLog(@"event type: kFSEventStreamEventFlagItemRenamed for path %@ (removed origin)", path);
|
||||
[xcc handleFileRemoval:path];
|
||||
}
|
||||
else
|
||||
{
|
||||
DLog(@"event type: kFSEventStreamEventFlagItemRenamed for path %@ (added destination)", path);
|
||||
[xcc handleFileModification:path notify:YES];
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// We should drop support for Snow Leopard soon.
|
||||
|
||||
BOOL isDir = NO;
|
||||
[[NSFileManager defaultManager] fileExistsAtPath:path isDirectory:&isDir];
|
||||
|
||||
|
||||
@@ -40,8 +40,8 @@ extern NSString * const XCCListeningStartNotification;
|
||||
NSString *XCodeSupportProjectName;
|
||||
NSString *XCodeTemplatePBXPath;
|
||||
NSString *profilePath;
|
||||
NSString *PBXModifierScriptPath;
|
||||
NSURL *currentProjectURL;
|
||||
NSURL *XCodeSupportFolder;
|
||||
NSURL *XCodeSupportProject;
|
||||
NSURL *XCodeSupportProjectSources;
|
||||
PRHEmptyGrowlDelegate *growlDelegateRef;
|
||||
|
||||
@@ -318,6 +318,7 @@ NSString * const XCCListeningStartNotification = @"XCCListeningStartNotification
|
||||
DLog(@"Parsing modified file: %@", fullPath);
|
||||
|
||||
NSArray *arguments = nil;
|
||||
NSArray *PBXArguments = nil;
|
||||
NSString *successTitle = nil;
|
||||
NSString *successMsg = nil;
|
||||
NSString *response = nil;
|
||||
@@ -331,13 +332,31 @@ NSString * const XCCListeningStartNotification = @"XCCListeningStartNotification
|
||||
|
||||
if ([self isXIBFile:fullPath])
|
||||
{
|
||||
arguments = [NSArray arrayWithObjects: @"-c", [NSString stringWithFormat:@"(%@; nib2cib '%@';) 2>&1", profilePath, fullPath],@"",nil];
|
||||
arguments = [NSArray arrayWithObjects: @"-c",
|
||||
[NSString stringWithFormat:@"(%@; nib2cib '%@';) 2>&1", profilePath, fullPath],@"",nil];
|
||||
|
||||
successTitle = @"XIB converted";
|
||||
successMsg = splitPath;
|
||||
}
|
||||
else if ([self isObjJFile:fullPath])
|
||||
{
|
||||
arguments = [NSArray arrayWithObjects: @"-c", [NSString stringWithFormat:@"(%@; objj '%@' '%@' '%@';) 2>&1", profilePath, parserPath, fullPath, shadowPath],@"",nil];
|
||||
arguments = [NSArray arrayWithObjects: @"-c",
|
||||
[NSString stringWithFormat:@"(%@; objj '%@' '%@' '%@';) 2>&1",
|
||||
profilePath,
|
||||
parserPath,
|
||||
fullPath,
|
||||
shadowPath],
|
||||
@"",nil];
|
||||
|
||||
PBXArguments = [NSArray arrayWithObjects: @"-c",
|
||||
[NSString stringWithFormat:@"(%@; python %@ add '%@' '%@' '%@' '%@') 2>&1",
|
||||
profilePath,
|
||||
PBXModifierScriptPath,
|
||||
XCodeSupportPBXPath,
|
||||
shadowPath,
|
||||
fullPath,
|
||||
[currentProjectURL path]],nil];
|
||||
|
||||
successTitle = @"Objective-J source processed";
|
||||
successMsg = splitPath;
|
||||
}
|
||||
@@ -352,13 +371,22 @@ NSString * const XCCListeningStartNotification = @"XCCListeningStartNotification
|
||||
// Run the task and get the response if needed
|
||||
if (arguments)
|
||||
{
|
||||
DLog(@"Running task...");
|
||||
DLog(@"Running conversion task...");
|
||||
NSArray *statusInfo = [self runTask:arguments];
|
||||
|
||||
status = [statusInfo objectAtIndex:0];
|
||||
response = [statusInfo objectAtIndex:1];
|
||||
|
||||
DLog(@"Task result/response: %@/%@", status, response);
|
||||
DLog(@"Conversion task result/response: %@/%@", status, response);
|
||||
}
|
||||
|
||||
if (PBXArguments)
|
||||
{
|
||||
DLog(@"Running update PBX task...");
|
||||
NSArray *statusInfo = [self runTask:PBXArguments];
|
||||
status = [statusInfo objectAtIndex:0];
|
||||
response = [statusInfo objectAtIndex:1];
|
||||
DLog(@"Update PBX Task result/response: %@/%@", status, response);
|
||||
}
|
||||
|
||||
if ([status intValue] == 0 && shouldNotify)
|
||||
@@ -392,8 +420,24 @@ NSString * const XCCListeningStartNotification = @"XCCListeningStartNotification
|
||||
if ([self isObjJFile:fullPath])
|
||||
{
|
||||
NSString *shadowPath = [[self shadowURLForSourceURL:[NSURL URLWithString:[fullPath stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]] path];
|
||||
[fm removeItemAtPath:shadowPath error:nil];
|
||||
|
||||
NSArray *PBXArguments = [NSArray arrayWithObjects: @"-c",
|
||||
[NSString stringWithFormat:@"(%@; python %@ remove '%@' '%@' '%@' '%@') 2>&1",
|
||||
profilePath,
|
||||
PBXModifierScriptPath,
|
||||
XCodeSupportPBXPath,
|
||||
shadowPath,
|
||||
fullPath,
|
||||
[currentProjectURL path]],nil];
|
||||
|
||||
DLog(@"Removing shadow file: %@", shadowPath);
|
||||
[fm removeItemAtPath:shadowPath error:nil];
|
||||
|
||||
DLog(@"Removing PBX reference task...");
|
||||
NSArray *statusInfo = [self runTask:PBXArguments];
|
||||
NSNumber *status = [statusInfo objectAtIndex:0];
|
||||
NSString *response = [statusInfo objectAtIndex:1];
|
||||
DLog(@"PBX Reference removal status/response: %@/%@", status, response);
|
||||
}
|
||||
else if ([self isXCCIgnoreFile:fullPath])
|
||||
{
|
||||
@@ -444,15 +488,17 @@ NSString * const XCCListeningStartNotification = @"XCCListeningStartNotification
|
||||
{
|
||||
XCodeSupportProjectName = [NSString stringWithFormat:@"%@.xcodeproj/", currentProjectName];
|
||||
XCodeTemplatePBXPath = [[NSBundle mainBundle] pathForResource:@"project.pbxproj" ofType:@"sample"];
|
||||
XCodeSupportFolder = [NSURL URLWithString:@".xCodeSupport/" relativeToURL:currentProjectURL];
|
||||
XCodeSupportProject = [NSURL URLWithString:XCodeSupportProjectName relativeToURL:XCodeSupportFolder];
|
||||
XCodeSupportProjectSources = [NSURL URLWithString:@"Sources/" relativeToURL:XCodeSupportFolder];
|
||||
XCodeSupportProject = [NSURL URLWithString:XCodeSupportProjectName relativeToURL:currentProjectURL];
|
||||
XCodeSupportProjectSources = [NSURL URLWithString:@".XcodeSupport/" relativeToURL:currentProjectURL];
|
||||
XCodeSupportPBXPath = [NSString stringWithFormat:@"%@/project.pbxproj", [XCodeSupportProject path]];
|
||||
PBXModifierScriptPath = [[NSBundle mainBundle] pathForResource:@"pbxprojModifier" ofType:@"py"];
|
||||
|
||||
|
||||
//[fm removeItemAtURL:XCodeSupportFolder error:nil];
|
||||
//[fm removeItemAtURL:XCodeSupportProjectSources error:nil];
|
||||
//[fm removeItemAtURL:XCodeSupportProject error:nil];
|
||||
|
||||
// create the template project if it doesn't exist
|
||||
if (![fm fileExistsAtPath:[XCodeSupportFolder path]])
|
||||
if (![fm fileExistsAtPath:[XCodeSupportProjectSources path]])
|
||||
{
|
||||
NSLog(@"Xcode support folder created at: %@", [XCodeSupportProject path]);
|
||||
[fm createDirectoryAtPath:[XCodeSupportProject path] withIntermediateDirectories:YES attributes:nil error:nil];
|
||||
@@ -462,14 +508,6 @@ NSString * const XCCListeningStartNotification = @"XCCListeningStartNotification
|
||||
|
||||
DLog(@"Reading the content of the project.pbxproj");
|
||||
NSMutableString *PBXContent = [NSMutableString stringWithContentsOfFile:XCodeSupportPBXPath encoding:NSUTF8StringEncoding error:nil];
|
||||
[PBXContent replaceOccurrencesOfString:@"${CappuccinoProjectName}"
|
||||
withString:currentProjectName
|
||||
options:NSCaseInsensitiveSearch
|
||||
range:NSMakeRange(0, [PBXContent length])];
|
||||
[PBXContent replaceOccurrencesOfString:@"${CappuccinoProjectRelativePath}"
|
||||
withString:@".."
|
||||
options:NSCaseInsensitiveSearch
|
||||
range:NSMakeRange(0, [PBXContent length])];
|
||||
|
||||
[PBXContent writeToFile:XCodeSupportPBXPath atomically:YES encoding:NSUTF8StringEncoding error:nil];
|
||||
DLog(@"PBX file adapted to the project");
|
||||
@@ -557,7 +595,7 @@ NSString * const XCCListeningStartNotification = @"XCCListeningStartNotification
|
||||
range:NSMakeRange(0, [flattenedPath length])];
|
||||
|
||||
DLog(@"Flattened path: %@", flattenedPath);
|
||||
NSString *basename = [NSString stringWithFormat:@"%@.h", [[flattenedPath stringByDeletingPathExtension] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
|
||||
NSString *basename = [NSString stringWithFormat:@"%@.m", [[flattenedPath stringByDeletingPathExtension] stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
|
||||
|
||||
return [NSURL URLWithString:basename relativeToURL:XCodeSupportProjectSources];
|
||||
}
|
||||
@@ -576,7 +614,7 @@ NSString * const XCCListeningStartNotification = @"XCCListeningStartNotification
|
||||
options:0
|
||||
range:NSMakeRange(0, [unshadowedPath length])];
|
||||
|
||||
[unshadowedPath replaceOccurrencesOfString:@".h"
|
||||
[unshadowedPath replaceOccurrencesOfString:@".m"
|
||||
withString:@".j"
|
||||
options:0
|
||||
range:NSMakeRange(0, [unshadowedPath length])];
|
||||
@@ -610,9 +648,12 @@ NSString * const XCCListeningStartNotification = @"XCCListeningStartNotification
|
||||
[ignoredFilePaths addObject:@"*/.svn/*"];
|
||||
[ignoredFilePaths addObject:@"*/.hg/*"];
|
||||
[ignoredFilePaths addObject:@"*/Frameworks/*"];
|
||||
[ignoredFilePaths addObject:@"*/.xCodeSupport/*"];
|
||||
[ignoredFilePaths addObject:@"*/.XcodeSupport/*"];
|
||||
[ignoredFilePaths addObject:@"*/Build/*"];
|
||||
[ignoredFilePaths addObject:@"*/NS_*.j"];
|
||||
[ignoredFilePaths addObject:@"*main.j"];
|
||||
[ignoredFilePaths addObject:@"*.xcodeproj/*"];
|
||||
[ignoredFilePaths addObject:@"*.DS_Store"];
|
||||
|
||||
NSLog(@"Ignoring file paths: %@", ignoredFilePaths);
|
||||
}
|
||||
@@ -709,6 +750,21 @@ NSString * const XCCListeningStartNotification = @"XCCListeningStartNotification
|
||||
{
|
||||
DLog(@"cleaning shadow file: %@", subpath);
|
||||
[fm removeItemAtPath:shadowFullPath error:nil];
|
||||
|
||||
NSArray *PBXArguments = [NSArray arrayWithObjects: @"-c",
|
||||
[NSString stringWithFormat:@"(%@; python %@ remove '%@' '%@' '%@' '%@') 2>&1",
|
||||
profilePath,
|
||||
PBXModifierScriptPath,
|
||||
XCodeSupportPBXPath,
|
||||
shadowFullPath,
|
||||
unshadowed,
|
||||
[currentProjectURL path]],nil];
|
||||
|
||||
DLog(@"Cleaning PBX reference task...");
|
||||
NSArray *statusInfo = [self runTask:PBXArguments];
|
||||
NSNumber *status = [statusInfo objectAtIndex:0];
|
||||
NSString *response = [statusInfo objectAtIndex:1];
|
||||
DLog(@"PBX Reference cleaning status/response: %@/%@", status, response);
|
||||
|
||||
if (![self supportFileLevelAPI] && [self respondsToSelector:@selector(updateLastModificationDate:forPath:)])
|
||||
[self performSelector:@selector(updateLastModificationDate:forPath:) withObject:nil withObject:unshadowed];
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
0218442515D32B5D00A782B8 /* pbxprojModifier.py in Resources */ = {isa = PBXBuildFile; fileRef = 0218442415D32B5D00A782B8 /* pbxprojModifier.py */; };
|
||||
022BCEA71468632000B72910 /* project.pbxproj.sample in Resources */ = {isa = PBXBuildFile; fileRef = 022BCEA61468632000B72910 /* project.pbxproj.sample */; };
|
||||
024A041413699DD400DCBE4D /* parser.j in Resources */ = {isa = PBXBuildFile; fileRef = 024A041113699D6800DCBE4D /* parser.j */; };
|
||||
026F3B6213866B0B00EE5B83 /* xcodecapp-icon-inactive.png in Resources */ = {isa = PBXBuildFile; fileRef = 026F3B6113866B0B00EE5B83 /* xcodecapp-icon-inactive.png */; };
|
||||
@@ -21,6 +22,7 @@
|
||||
027FE4BA1462F64E00B1AB92 /* xcodecapp-icon-working.png in Resources */ = {isa = PBXBuildFile; fileRef = 027FE4B91462F64E00B1AB92 /* xcodecapp-icon-working.png */; };
|
||||
027FE4BD1462F7EB00B1AB92 /* FSEventCallback.m in Sources */ = {isa = PBXBuildFile; fileRef = 027FE4BC1462F7EB00B1AB92 /* FSEventCallback.m */; };
|
||||
0289AC9414668CAF003CD975 /* XcodeCapp.icns in Resources */ = {isa = PBXBuildFile; fileRef = 0289AC9314668CAF003CD975 /* XcodeCapp.icns */; };
|
||||
0294F09315D345A500840547 /* mod_pbxproj.py in Resources */ = {isa = PBXBuildFile; fileRef = 0294F09215D345A500840547 /* mod_pbxproj.py */; };
|
||||
02998CEB1369BF7D006C73DB /* Growl Registration Ticket.growlRegDict in Resources */ = {isa = PBXBuildFile; fileRef = 02998CEA1369BF7D006C73DB /* Growl Registration Ticket.growlRegDict */; };
|
||||
02998CF71369C339006C73DB /* Growl.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 02998CF61369C339006C73DB /* Growl.framework */; };
|
||||
02998CF91369C38A006C73DB /* Growl.framework in CopyFiles */ = {isa = PBXBuildFile; fileRef = 02998CF61369C339006C73DB /* Growl.framework */; };
|
||||
@@ -44,8 +46,9 @@
|
||||
/* End PBXCopyFilesBuildPhase section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
0218442415D32B5D00A782B8 /* pbxprojModifier.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = pbxprojModifier.py; sourceTree = "<group>"; };
|
||||
022BCEA61468632000B72910 /* project.pbxproj.sample */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = project.pbxproj.sample; sourceTree = "<group>"; };
|
||||
024A041113699D6800DCBE4D /* parser.j */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.objj; path = parser.j; sourceTree = "<group>"; };
|
||||
024A041113699D6800DCBE4D /* parser.j */ = {isa = PBXFileReference; explicitFileType = sourcecode.javascript; fileEncoding = 4; path = parser.j; sourceTree = "<group>"; };
|
||||
026F3B6113866B0B00EE5B83 /* xcodecapp-icon-inactive.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "xcodecapp-icon-inactive.png"; sourceTree = "<group>"; };
|
||||
026F3B6413866E7D00EE5B83 /* xcodecapp-icon-active.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "xcodecapp-icon-active.png"; sourceTree = "<group>"; };
|
||||
027D9989136969DD00D3DB13 /* XcodeCapp.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XcodeCapp.pch; sourceTree = "<group>"; };
|
||||
@@ -56,6 +59,7 @@
|
||||
027FE4BB1462F7D600B1AB92 /* FSEventCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FSEventCallback.h; sourceTree = "<group>"; };
|
||||
027FE4BC1462F7EB00B1AB92 /* FSEventCallback.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FSEventCallback.m; sourceTree = "<group>"; };
|
||||
0289AC9314668CAF003CD975 /* XcodeCapp.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = XcodeCapp.icns; sourceTree = "<group>"; };
|
||||
0294F09215D345A500840547 /* mod_pbxproj.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = mod_pbxproj.py; sourceTree = "<group>"; };
|
||||
02998CEA1369BF7D006C73DB /* Growl Registration Ticket.growlRegDict */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = "Growl Registration Ticket.growlRegDict"; sourceTree = "<group>"; };
|
||||
02998CF61369C339006C73DB /* Growl.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = Growl.framework; sourceTree = "<group>"; };
|
||||
089C165DFE840E0CC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
|
||||
@@ -156,6 +160,8 @@
|
||||
29B97317FDCFA39411CA2CEA /* Resources */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
0294F09215D345A500840547 /* mod_pbxproj.py */,
|
||||
0218442415D32B5D00A782B8 /* pbxprojModifier.py */,
|
||||
4E2D0D00154840B400475C01 /* help.rtfd */,
|
||||
022BCEA61468632000B72910 /* project.pbxproj.sample */,
|
||||
027FE4B91462F64E00B1AB92 /* xcodecapp-icon-working.png */,
|
||||
@@ -209,7 +215,7 @@
|
||||
29B97313FDCFA39411CA2CEA /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastUpgradeCheck = 0420;
|
||||
LastUpgradeCheck = 0440;
|
||||
};
|
||||
buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "XcodeCapp" */;
|
||||
compatibilityVersion = "Xcode 3.2";
|
||||
@@ -242,6 +248,8 @@
|
||||
0289AC9414668CAF003CD975 /* XcodeCapp.icns in Resources */,
|
||||
022BCEA71468632000B72910 /* project.pbxproj.sample in Resources */,
|
||||
4E2D0D01154840B400475C01 /* help.rtfd in Resources */,
|
||||
0218442515D32B5D00A782B8 /* pbxprojModifier.py in Resources */,
|
||||
0294F09315D345A500840547 /* mod_pbxproj.py in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
@@ -286,6 +294,7 @@
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
FRAMEWORK_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
@@ -307,6 +316,7 @@
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
FRAMEWORK_SEARCH_PATHS = (
|
||||
"$(inherited)",
|
||||
@@ -336,7 +346,7 @@
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.5;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
SDKROOT = macosx10.6;
|
||||
SDKROOT = macosx;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
@@ -352,7 +362,7 @@
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.5;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
SDKROOT = macosx10.6;
|
||||
SDKROOT = macosx;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
|
||||
+5
@@ -14,6 +14,11 @@
|
||||
<key>orderHint</key>
|
||||
<integer>1</integer>
|
||||
</dict>
|
||||
<key>XcodeCapp.xcscheme</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>SuppressBuildableAutocreation</key>
|
||||
<dict>
|
||||
|
||||
Executable
+968
@@ -0,0 +1,968 @@
|
||||
# Copyright 2012 Calvin Rien
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
# A pbxproj file is an OpenStep format plist
|
||||
# {} represents dictionary of key=value pairs delimited by ;
|
||||
# () represents list of values delimited by ,
|
||||
# file starts with a comment specifying the character type
|
||||
# // !$*UTF8*$!
|
||||
|
||||
# when adding a file to a project, create the PBXFileReference
|
||||
# add the PBXFileReference's guid to a group
|
||||
# create a PBXBuildFile with the PBXFileReference's guid
|
||||
# add the PBXBuildFile to the appropriate build phase
|
||||
|
||||
# when adding a header search path add
|
||||
# HEADER_SEARCH_PATHS = "path/**";
|
||||
# to each XCBuildConfiguration object
|
||||
|
||||
# Xcode4 will read either a OpenStep or XML plist.
|
||||
# this script uses `plutil` to validate, read and write
|
||||
# the pbxproj file. Plutil is available in OS X 10.2 and higher
|
||||
# Plutil can't write OpenStep plists, so I save as XML
|
||||
|
||||
import re, uuid, sys, os, shutil, subprocess, datetime, json
|
||||
|
||||
from UserDict import IterableUserDict
|
||||
from UserList import UserList
|
||||
|
||||
class PBXEncoder(json.JSONEncoder):
|
||||
|
||||
def default(self, obj):
|
||||
"""Tests the input object, obj, to encode as JSON."""
|
||||
|
||||
if isinstance(obj, (PBXList, PBXDict)):
|
||||
return obj.data
|
||||
|
||||
return json.JSONEncoder.default(self, obj)
|
||||
|
||||
|
||||
class PBXDict(IterableUserDict):
|
||||
def __init__(self, d=None):
|
||||
if d:
|
||||
d = dict([(PBXType.Convert(k),PBXType.Convert(v)) for k,v in d.items()])
|
||||
|
||||
IterableUserDict.__init__(self, d)
|
||||
|
||||
def __setitem__(self, key, value):
|
||||
IterableUserDict.__setitem__(self, PBXType.Convert(key), PBXType.Convert(value))
|
||||
|
||||
def remove(self, key):
|
||||
self.data.pop(PBXType.Convert(key), None)
|
||||
|
||||
|
||||
|
||||
class PBXList(UserList):
|
||||
def __init__(self, l=None):
|
||||
if isinstance(l, basestring):
|
||||
UserList.__init__(self)
|
||||
self.add(l)
|
||||
return
|
||||
elif l:
|
||||
l = [PBXType.Convert(v) for v in l]
|
||||
|
||||
UserList.__init__(self, l)
|
||||
|
||||
def add(self, value):
|
||||
value = PBXType.Convert(value)
|
||||
|
||||
if value in self.data:
|
||||
return False
|
||||
|
||||
self.data.append(value)
|
||||
return True
|
||||
|
||||
def remove(self, value):
|
||||
value = PBXType.Convert(value)
|
||||
|
||||
if value in self.data:
|
||||
self.data.remove(value)
|
||||
|
||||
def __setitem__(self, key, value):
|
||||
UserList.__setitem__(self, PBXType.Convert(key), PBXType.Convert(value))
|
||||
|
||||
|
||||
class PBXType(PBXDict):
|
||||
def __init__(self, d=None):
|
||||
PBXDict.__init__(self, d)
|
||||
|
||||
if not self.has_key('isa'):
|
||||
self['isa'] = self.__class__.__name__
|
||||
self.id = None
|
||||
|
||||
@staticmethod
|
||||
def Convert(o):
|
||||
if isinstance(o, list):
|
||||
return PBXList(o)
|
||||
elif isinstance(o, dict):
|
||||
isa = o.get('isa')
|
||||
|
||||
if not isa:
|
||||
return PBXDict(o)
|
||||
|
||||
cls = globals().get(isa)
|
||||
|
||||
if cls and issubclass(cls, PBXType):
|
||||
return cls(o)
|
||||
|
||||
print 'warning: unknown PBX type: %s' % isa
|
||||
return PBXDict(o)
|
||||
else:
|
||||
return o
|
||||
|
||||
@staticmethod
|
||||
def IsGuid(o):
|
||||
return re.match('^[A-F0-9]{24}$', str(o))
|
||||
|
||||
@classmethod
|
||||
def GenerateId(cls):
|
||||
return ''.join(str(uuid.uuid4()).upper().split('-')[1:])
|
||||
|
||||
@classmethod
|
||||
def Create(cls, *args, **kwargs):
|
||||
return cls(*args, **kwargs)
|
||||
|
||||
|
||||
class PBXFileReference(PBXType):
|
||||
def __init__(self, d=None):
|
||||
PBXType.__init__(self, d)
|
||||
self.build_phase = None
|
||||
|
||||
types = {
|
||||
'.a':('archive.ar', 'PBXFrameworksBuildPhase'),
|
||||
'.app': ('wrapper.application', None),
|
||||
'.s': ('sourcecode.asm', 'PBXSourcesBuildPhase'),
|
||||
'.c': ('sourcecode.c.c', 'PBXSourcesBuildPhase'),
|
||||
'.cpp': ('sourcecode.cpp.cpp', 'PBXSourcesBuildPhase'),
|
||||
'.framework': ('wrapper.framework','PBXFrameworksBuildPhase'),
|
||||
'.h': ('sourcecode.c.h', None),
|
||||
'.icns': ('image.icns','PBXResourcesBuildPhase'),
|
||||
'.m': ('sourcecode.c.objc', 'PBXSourcesBuildPhase'),
|
||||
'.mm': ('sourcecode.cpp.objcpp', 'PBXSourcesBuildPhase'),
|
||||
'.nib': ('wrapper.nib', 'PBXResourcesBuildPhase'),
|
||||
'.plist': ('text.plist.xml', 'PBXResourcesBuildPhase'),
|
||||
'.png': ('image.png', 'PBXResourcesBuildPhase'),
|
||||
'.rtf': ('text.rtf', 'PBXResourcesBuildPhase'),
|
||||
'.tiff': ('image.tiff', 'PBXResourcesBuildPhase'),
|
||||
'.txt': ('text', 'PBXResourcesBuildPhase'),
|
||||
'.xcodeproj': ('wrapper.pb-project', None),
|
||||
'.xib': ('file.xib', 'PBXResourcesBuildPhase'),
|
||||
'.strings': ('text.plist.strings', 'PBXResourcesBuildPhase'),
|
||||
'.bundle': ('wrapper.plug-in', 'PBXResourcesBuildPhase'),
|
||||
'.dylib': ('compiled.mach-o.dylib', 'PBXFrameworksBuildPhase')
|
||||
}
|
||||
|
||||
trees = [
|
||||
'<absolute>',
|
||||
'<group>',
|
||||
'BUILT_PRODUCTS_DIR',
|
||||
'DEVELOPER_DIR',
|
||||
'SDKROOT',
|
||||
'SOURCE_ROOT',
|
||||
]
|
||||
|
||||
def guess_file_type(self):
|
||||
self.remove('explicitFileType')
|
||||
self.remove('lastKnownFileType')
|
||||
ext = os.path.splitext(self.get('name', ''))[1]
|
||||
|
||||
f_type, build_phase = PBXFileReference.types.get(ext, ('?', None))
|
||||
|
||||
self['lastKnownFileType'] = f_type
|
||||
self.build_phase = build_phase
|
||||
|
||||
if f_type == '?':
|
||||
print 'unknown file extension: %s' % ext
|
||||
print 'please add extension and Xcode type to PBXFileReference.types'
|
||||
|
||||
return f_type
|
||||
|
||||
def set_file_type(self, ft):
|
||||
self.remove('explicitFileType')
|
||||
self.remove('lastKnownFileType')
|
||||
|
||||
self['explicitFileType'] = ft
|
||||
|
||||
@classmethod
|
||||
def Create(cls, os_path, tree='SOURCE_ROOT'):
|
||||
if tree not in cls.trees:
|
||||
print 'Not a valid sourceTree type: %s' % tree
|
||||
return None
|
||||
|
||||
fr = cls()
|
||||
fr.id = cls.GenerateId()
|
||||
fr['path'] = os_path
|
||||
fr['name'] = os.path.split(os_path)[1]
|
||||
fr['sourceTree'] = '<absolute>' if os.path.isabs(os_path) else tree
|
||||
fr.guess_file_type()
|
||||
|
||||
return fr
|
||||
|
||||
class PBXBuildFile(PBXType):
|
||||
def set_weak_link(self, weak=False):
|
||||
k_settings = 'settings'
|
||||
k_attributes = 'ATTRIBUTES'
|
||||
|
||||
s = self.get(k_settings)
|
||||
|
||||
if not s:
|
||||
if weak:
|
||||
self[k_settings] = PBXDict({k_attributes:PBXList(['Weak'])})
|
||||
|
||||
return True
|
||||
|
||||
atr = s.get(k_attributes)
|
||||
|
||||
if not atr:
|
||||
if weak:
|
||||
atr = PBXList()
|
||||
else:
|
||||
return False
|
||||
|
||||
if weak:
|
||||
atr.add('Weak')
|
||||
else:
|
||||
atr.remove('Weak')
|
||||
|
||||
self[k_settings][k_attributes] = atr
|
||||
|
||||
return True
|
||||
|
||||
def add_compiler_flag(self, flag):
|
||||
k_settings = 'settings'
|
||||
k_attributes = 'COMPILER_FLAGS'
|
||||
|
||||
if not self.has_key(k_settings):
|
||||
self[k_settings] = PBXDict()
|
||||
|
||||
if not self[k_settings].has_key(k_attributes):
|
||||
self[k_settings][k_attributes] = flag
|
||||
return True
|
||||
|
||||
flags = self[k_settings][k_attributes].split(' ')
|
||||
|
||||
if flag in flags:
|
||||
return False
|
||||
|
||||
flags.append(flag)
|
||||
|
||||
self[k_settings][k_attributes] = ' '.join(flags)
|
||||
|
||||
@classmethod
|
||||
def Create(cls, file_ref, weak=False):
|
||||
if isinstance(file_ref, PBXFileReference):
|
||||
file_ref = file_ref.id
|
||||
|
||||
bf = cls()
|
||||
bf.id = cls.GenerateId()
|
||||
bf['fileRef'] = file_ref
|
||||
|
||||
if weak:
|
||||
bf.set_weak_link(True)
|
||||
|
||||
return bf
|
||||
|
||||
class PBXGroup(PBXType):
|
||||
def add_child(self, ref):
|
||||
if not isinstance(ref, PBXDict):
|
||||
return None
|
||||
|
||||
isa = ref.get('isa')
|
||||
|
||||
if isa != 'PBXFileReference' and isa != 'PBXGroup':
|
||||
return None
|
||||
|
||||
if not self.has_key('children'):
|
||||
self['children'] = PBXList()
|
||||
|
||||
self['children'].add(ref.id)
|
||||
|
||||
return ref.id
|
||||
|
||||
def remove_child(self, id):
|
||||
if not self.has_key('children'):
|
||||
self['children'] = PBXList()
|
||||
return
|
||||
|
||||
if not PBXType.IsGuid(id):
|
||||
id = id.id
|
||||
|
||||
self['children'].remove(id)
|
||||
|
||||
def has_child(self, id):
|
||||
if not self.has_key('children'):
|
||||
self['children'] = PBXList()
|
||||
return False
|
||||
|
||||
if not PBXType.IsGuid(id):
|
||||
id = id.id
|
||||
|
||||
return id in self['children']
|
||||
|
||||
def get_name(self):
|
||||
path_name = os.path.split(self.get('path',''))[1]
|
||||
return self.get('name', path_name)
|
||||
|
||||
@classmethod
|
||||
def Create(cls, name, path=None, tree='SOURCE_ROOT'):
|
||||
grp = cls()
|
||||
grp.id = cls.GenerateId()
|
||||
grp['name'] = name
|
||||
grp['children'] = PBXList()
|
||||
|
||||
if path:
|
||||
grp['path'] = path
|
||||
grp['sourceTree'] = tree
|
||||
else:
|
||||
grp['sourceTree'] = '<group>'
|
||||
|
||||
return grp
|
||||
|
||||
|
||||
class PBXNativeTarget(PBXType):
|
||||
pass
|
||||
|
||||
|
||||
class PBXProject(PBXType):
|
||||
pass
|
||||
|
||||
|
||||
class PBXContainerItemProxy(PBXType):
|
||||
pass
|
||||
|
||||
|
||||
class PBXReferenceProxy(PBXType):
|
||||
pass
|
||||
|
||||
|
||||
class PBXVariantGroup(PBXType):
|
||||
pass
|
||||
|
||||
|
||||
class PBXBuildPhase(PBXType):
|
||||
def add_build_file(self, bf):
|
||||
if bf.get('isa') != 'PBXBuildFile':
|
||||
return False
|
||||
|
||||
if not self.has_key('files'):
|
||||
self['files'] = PBXList()
|
||||
|
||||
self['files'].add(bf.id)
|
||||
|
||||
return True
|
||||
|
||||
def remove_build_file(self, id):
|
||||
if not self.has_key('files'):
|
||||
self['files'] = PBXList()
|
||||
return
|
||||
|
||||
self['files'].remove(id)
|
||||
|
||||
def has_build_file(self, id):
|
||||
if not self.has_key('files'):
|
||||
self['files'] = PBXList()
|
||||
return False
|
||||
|
||||
if not PBXType.IsGuid(id):
|
||||
id = id.id
|
||||
|
||||
return id in self['files']
|
||||
|
||||
|
||||
class PBXFrameworksBuildPhase(PBXBuildPhase):
|
||||
pass
|
||||
|
||||
|
||||
class PBXResourcesBuildPhase(PBXBuildPhase):
|
||||
pass
|
||||
|
||||
|
||||
class PBXShellScriptBuildPhase(PBXBuildPhase):
|
||||
pass
|
||||
|
||||
|
||||
class PBXSourcesBuildPhase(PBXBuildPhase):
|
||||
pass
|
||||
|
||||
|
||||
class PBXCopyFilesBuildPhase(PBXBuildPhase):
|
||||
pass
|
||||
|
||||
|
||||
class XCBuildConfiguration(PBXType):
|
||||
def add_search_paths(self, paths, base, key, recursive=True):
|
||||
modified = False
|
||||
|
||||
if not isinstance(paths, list):
|
||||
paths = [paths]
|
||||
|
||||
if not self.has_key(base):
|
||||
self[base] = PBXDict()
|
||||
|
||||
for path in paths:
|
||||
if recursive and not path.endswith('/**'):
|
||||
path = os.path.join(path, '**')
|
||||
|
||||
if not self[base].has_key(key):
|
||||
self[base][key] = PBXList()
|
||||
elif isinstance(self[base][key], basestring):
|
||||
self[base][key] = PBXList(self[base][key])
|
||||
|
||||
if self[base][key].add('\\"%s\\"' % path):
|
||||
modified = True
|
||||
|
||||
return modified
|
||||
|
||||
def add_header_search_paths(self, paths, recursive=True):
|
||||
return self.add_search_paths(paths, 'buildSettings', 'HEADER_SEARCH_PATHS', recursive=recursive)
|
||||
|
||||
def add_library_search_paths(self, paths, recursive=True):
|
||||
return self.add_search_paths(paths, 'buildSettings', 'LIBRARY_SEARCH_PATHS', recursive=recursive)
|
||||
|
||||
def add_other_cflags(self, flags):
|
||||
modified = False
|
||||
|
||||
base = 'buildSettings'
|
||||
key = 'OTHER_CFLAGS'
|
||||
|
||||
if isinstance(flags, basestring):
|
||||
flags = PBXList(flags)
|
||||
|
||||
if not self.has_key(base):
|
||||
self[base] = PBXDict()
|
||||
|
||||
for flag in flags:
|
||||
|
||||
if not self[base].has_key(key):
|
||||
self[base][key] = PBXList()
|
||||
elif isinstance(self[base][key], basestring):
|
||||
self[base][key] = PBXList(self[base][key])
|
||||
|
||||
if self[base][key].add(flag):
|
||||
self[base][key] = [e for e in self[base][key] if e]
|
||||
modified = True
|
||||
|
||||
return modified
|
||||
|
||||
|
||||
class XCConfigurationList(PBXType):
|
||||
pass
|
||||
|
||||
|
||||
class XcodeProject(PBXDict):
|
||||
plutil_path = 'plutil'
|
||||
special_folders = ['.bundle', '.framework', '.xcodeproj']
|
||||
|
||||
def __init__(self, d=None, path=None):
|
||||
if not path:
|
||||
path = os.path.join(os.getcwd(), 'project.pbxproj')
|
||||
|
||||
self.pbxproj_path =os.path.abspath(path)
|
||||
self.source_root = os.path.abspath(os.path.join(os.path.split(path)[0], '..'))
|
||||
|
||||
IterableUserDict.__init__(self, d)
|
||||
|
||||
self.data = PBXDict(self.data)
|
||||
self.objects = self.get('objects')
|
||||
self.modified = False
|
||||
|
||||
root_id = self.get('rootObject')
|
||||
if root_id:
|
||||
self.root_object = self.objects[root_id]
|
||||
root_group_id = self.root_object.get('mainGroup')
|
||||
self.root_group = self.objects[root_group_id]
|
||||
else:
|
||||
print "error: project has no root object"
|
||||
self.root_object = None
|
||||
self.root_group = None
|
||||
|
||||
for k,v in self.objects.iteritems():
|
||||
v.id = k
|
||||
|
||||
def add_other_cflags(self, flags):
|
||||
build_configs = [b for b in self.objects.values() if b.get('isa') == 'XCBuildConfiguration']
|
||||
|
||||
for b in build_configs:
|
||||
if b.add_other_cflags(flags):
|
||||
self.modified = True
|
||||
|
||||
def add_header_search_paths(self, paths, recursive=True):
|
||||
build_configs = [b for b in self.objects.values() if b.get('isa') == 'XCBuildConfiguration']
|
||||
|
||||
for b in build_configs:
|
||||
if b.add_header_search_paths(paths, recursive):
|
||||
self.modified = True
|
||||
|
||||
def add_library_search_paths(self, paths, recursive=True):
|
||||
build_configs = [b for b in self.objects.values() if b.get('isa') == 'XCBuildConfiguration']
|
||||
|
||||
for b in build_configs:
|
||||
if b.add_library_search_paths(paths, recursive):
|
||||
self.modified = True
|
||||
|
||||
# TODO: need to return value if project has been modified
|
||||
|
||||
def get_obj(self, id):
|
||||
return self.objects.get(id)
|
||||
|
||||
def get_files_by_os_path(self, os_path, tree='SOURCE_ROOT'):
|
||||
files = [f for f in self.objects.values() if f.get('isa') == 'PBXFileReference'
|
||||
and f.get('path') == os_path]
|
||||
|
||||
return files
|
||||
|
||||
def get_files_by_name(self, name, parent=None):
|
||||
if parent:
|
||||
files = [f for f in self.objects.values() if f.get('isa') == 'PBXFileReference'
|
||||
and f.get(name) == name
|
||||
and parent.has_child(f)]
|
||||
else:
|
||||
files = [f for f in self.objects.values() if f.get('isa') == 'PBXFileReference'
|
||||
and f.get(name) == name]
|
||||
|
||||
return files
|
||||
|
||||
def get_build_files(self, id):
|
||||
files = [f for f in self.objects.values() if f.get('isa') == 'PBXBuildFile'
|
||||
and f.get('fileRef') == id]
|
||||
|
||||
return files
|
||||
|
||||
def get_groups_by_name(self, name, parent=None):
|
||||
if parent:
|
||||
groups = [g for g in self.objects.values() if g.get('isa') == 'PBXGroup'
|
||||
and g.get_name() == name
|
||||
and parent.has_child(g)]
|
||||
else:
|
||||
groups = [g for g in self.objects.values() if g.get('isa') == 'PBXGroup'
|
||||
and g.get_name() == name]
|
||||
|
||||
return groups
|
||||
|
||||
def get_or_create_group(self, name, path=None, parent=None):
|
||||
if not name:
|
||||
return None
|
||||
|
||||
if not parent:
|
||||
parent = self.root_group
|
||||
elif not isinstance(parent, PBXGroup):
|
||||
# assume it's an id
|
||||
parent = self.objects.get(parent, self.root_group)
|
||||
|
||||
groups = self.get_groups_by_name(name)
|
||||
|
||||
for grp in groups:
|
||||
if parent.has_child(grp.id):
|
||||
return grp
|
||||
|
||||
grp = PBXGroup.Create(name, path)
|
||||
parent.add_child(grp)
|
||||
|
||||
self.objects[grp.id] = grp
|
||||
|
||||
self.modified = True
|
||||
|
||||
return grp
|
||||
|
||||
def get_groups_by_os_path(self, path):
|
||||
path = os.path.abspath(path)
|
||||
|
||||
groups = [g for g in self.objects.values() if g.get('isa') == 'PBXGroup'
|
||||
and os.path.abspath(g.get('path','/dev/null')) == path]
|
||||
|
||||
return groups
|
||||
|
||||
def get_build_phases(self, phase_name):
|
||||
phases = [p for p in self.objects.values() if p.get('isa') == phase_name]
|
||||
|
||||
return phases
|
||||
|
||||
def get_relative_path(self, os_path):
|
||||
return os.path.relpath(os_path, self.source_root)
|
||||
|
||||
def verify_files(self, file_list, parent=None):
|
||||
# returns list of files not in the current project.
|
||||
if not file_list:
|
||||
return []
|
||||
|
||||
if parent:
|
||||
exists_list = [f.get('name') for f in self.objects.values() if f.get('isa') == 'PBXFileReference' and f.get('name') in file_list and parent.has_child(f)]
|
||||
else:
|
||||
exists_list = [f.get('name') for f in self.objects.values() if f.get('isa') == 'PBXFileReference' and f.get('name') in file_list]
|
||||
|
||||
return set(file_list).difference(exists_list)
|
||||
|
||||
def add_folder(self, os_path, parent=None, excludes=None, recursive=True, create_build_files=True):
|
||||
if not os.path.isdir(os_path):
|
||||
return []
|
||||
|
||||
if not excludes:
|
||||
excludes = []
|
||||
|
||||
results = []
|
||||
|
||||
if not parent:
|
||||
parent = self.root_group
|
||||
elif not isinstance(parent, PBXGroup):
|
||||
# assume it's an id
|
||||
parent = self.objects.get(parent, self.root_group)
|
||||
|
||||
path_dict = {os.path.split(os_path)[0]:parent}
|
||||
special_list = []
|
||||
|
||||
for (grp_path, subdirs, files) in os.walk(os_path):
|
||||
parent_folder, folder_name = os.path.split(grp_path)
|
||||
parent = path_dict.get(parent_folder, parent)
|
||||
|
||||
if [sp for sp in special_list if parent_folder.startswith(sp)]:
|
||||
continue
|
||||
|
||||
if folder_name.startswith('.'):
|
||||
special_list.append(grp_path)
|
||||
continue
|
||||
|
||||
if os.path.splitext(grp_path)[1] in XcodeProject.special_folders:
|
||||
# if this file has a special extension (bundle or framework mainly) treat it as a file
|
||||
special_list.append(grp_path)
|
||||
|
||||
new_files = self.verify_files([folder_name], parent=parent)
|
||||
|
||||
if new_files:
|
||||
results.extend(self.add_file(grp_path, parent, create_build_files=create_build_files))
|
||||
|
||||
continue
|
||||
|
||||
# create group
|
||||
grp = self.get_or_create_group(folder_name, path=self.get_relative_path(grp_path) , parent=parent)
|
||||
path_dict[grp_path] = grp
|
||||
|
||||
results.append(grp)
|
||||
|
||||
file_dict = {}
|
||||
|
||||
for f in files:
|
||||
if f[0] == '.' or [m for m in excludes if re.match(m,f)]:
|
||||
continue
|
||||
|
||||
kwds = {
|
||||
'create_build_files': create_build_files,
|
||||
'parent': grp,
|
||||
'name': f
|
||||
}
|
||||
|
||||
f_path = os.path.join(grp_path, f)
|
||||
|
||||
file_dict[f_path] = kwds
|
||||
|
||||
new_files = self.verify_files([n.get('name') for n in file_dict.values()], parent=grp)
|
||||
|
||||
add_files = [(k,v) for k,v in file_dict.items() if v.get('name') in new_files]
|
||||
|
||||
for path, kwds in add_files:
|
||||
kwds.pop('name', None)
|
||||
|
||||
self.add_file(path, **kwds)
|
||||
|
||||
if not recursive:
|
||||
break
|
||||
|
||||
for r in results:
|
||||
self.objects[r.id] = r
|
||||
|
||||
return results
|
||||
|
||||
def add_file(self, f_path, parent=None, tree='SOURCE_ROOT', create_build_files=True, weak=False):
|
||||
results = []
|
||||
|
||||
abs_path = ''
|
||||
|
||||
if os.path.isabs(f_path):
|
||||
abs_path = f_path
|
||||
|
||||
if not os.path.exists(f_path):
|
||||
return results
|
||||
elif tree == 'SOURCE_ROOT':
|
||||
f_path = os.path.relpath(f_path, self.source_root)
|
||||
else:
|
||||
tree = '<absolute>'
|
||||
|
||||
if not parent:
|
||||
parent = self.root_group
|
||||
elif not isinstance(parent, PBXGroup):
|
||||
# assume it's an id
|
||||
parent = self.objects.get(parent, self.root_group)
|
||||
|
||||
file_ref = PBXFileReference.Create(f_path, tree)
|
||||
parent.add_child(file_ref)
|
||||
results.append(file_ref)
|
||||
# create a build file for the file ref
|
||||
if file_ref.build_phase and create_build_files:
|
||||
phases = self.get_build_phases(file_ref.build_phase)
|
||||
|
||||
for phase in phases:
|
||||
build_file = PBXBuildFile.Create(file_ref, weak=weak)
|
||||
|
||||
phase.add_build_file(build_file)
|
||||
results.append(build_file)
|
||||
|
||||
if abs_path and tree == 'SOURCE_ROOT' and os.path.isfile(abs_path)\
|
||||
and file_ref.build_phase == 'PBXFrameworksBuildPhase':
|
||||
|
||||
library_path = os.path.join('$(SRCROOT)', os.path.split(f_path)[0])
|
||||
|
||||
self.add_library_search_paths([library_path], recursive=False)
|
||||
|
||||
for r in results:
|
||||
self.objects[r.id] = r
|
||||
|
||||
if results:
|
||||
self.modified = True
|
||||
|
||||
return results
|
||||
|
||||
def remove_group(self, grp):
|
||||
pass
|
||||
|
||||
def remove_file(self, path, parent):
|
||||
files = self.get_files_by_os_path(path)
|
||||
for r in files:
|
||||
del self.objects[r.id]
|
||||
self.modified = True
|
||||
|
||||
def move_file(self, id, dest_grp=None):
|
||||
pass
|
||||
|
||||
def apply_patch(self, patch_path, xcode_path):
|
||||
if not os.path.isfile(patch_path) or not os.path.isdir(xcode_path):
|
||||
print 'ERROR: couldn\'t apply "%s" to "%s"' % (patch_path, xcode_path)
|
||||
return
|
||||
|
||||
print 'applying "%s" to "%s"' % (patch_path, xcode_path)
|
||||
|
||||
return subprocess.call(['patch', '-p1', '--forward', '--directory=%s'%xcode_path, '--input=%s'%patch_path])
|
||||
|
||||
def apply_mods(self, mod_dict, default_path=None):
|
||||
if not default_path:
|
||||
default_path = os.getcwd()
|
||||
|
||||
keys = mod_dict.keys()
|
||||
|
||||
for k in keys:
|
||||
v = mod_dict.pop(k)
|
||||
|
||||
mod_dict[k.lower()] = v
|
||||
|
||||
parent = mod_dict.pop('group', None)
|
||||
|
||||
if parent:
|
||||
parent = self.get_or_create_group(parent)
|
||||
|
||||
excludes = mod_dict.pop('excludes', [])
|
||||
|
||||
if excludes:
|
||||
excludes = [re.compile(e) for e in excludes]
|
||||
|
||||
compiler_flags = mod_dict.pop('compiler_flags', {})
|
||||
|
||||
for k,v in mod_dict.items():
|
||||
if k == 'patches':
|
||||
for p in v:
|
||||
if not os.path.isabs(p):
|
||||
p = os.path.join(default_path, p)
|
||||
|
||||
self.apply_patch(p, self.source_root)
|
||||
elif k == 'folders':
|
||||
# get and compile excludes list
|
||||
# do each folder individually
|
||||
for folder in v:
|
||||
kwds = {}
|
||||
|
||||
# if path contains ':' remove it and set recursive to False
|
||||
if ':' in folder:
|
||||
args = folder.split(':')
|
||||
kwds['recursive'] = False
|
||||
folder = args.pop(0)
|
||||
|
||||
if os.path.isabs(folder) and os.path.isdir(folder):
|
||||
pass
|
||||
else:
|
||||
folder = os.path.join(default_path, folder)
|
||||
if not os.path.isdir(folder):
|
||||
continue
|
||||
|
||||
if parent:
|
||||
kwds['parent'] = parent
|
||||
|
||||
if excludes:
|
||||
kwds['excludes'] = excludes
|
||||
|
||||
self.add_folder(folder, **kwds)
|
||||
elif k == 'headerpaths' or k == 'librarypaths':
|
||||
paths = []
|
||||
|
||||
for p in v:
|
||||
if p.endswith('/**'):
|
||||
p = os.path.split(p)[0]
|
||||
|
||||
if not os.path.isabs(p):
|
||||
p = os.path.join(default_path, p)
|
||||
|
||||
if not os.path.exists(p):
|
||||
continue
|
||||
|
||||
p = self.get_relative_path(p)
|
||||
|
||||
paths.append(os.path.join('$(SRCROOT)', p, "**"))
|
||||
|
||||
if k == 'headerpaths':
|
||||
self.add_header_search_paths(paths)
|
||||
else:
|
||||
self.add_library_search_paths(paths)
|
||||
elif k == 'other_cflags':
|
||||
self.add_other_cflags(v)
|
||||
elif k == 'libs' or k == 'frameworks' or k == 'files':
|
||||
paths = {}
|
||||
|
||||
for p in v:
|
||||
kwds = {}
|
||||
|
||||
if ':' in p:
|
||||
args = p.split(':')
|
||||
p = args.pop(0)
|
||||
|
||||
if 'weak' in args:
|
||||
kwds['weak'] = True
|
||||
|
||||
file_path = os.path.join(default_path, p)
|
||||
search_path, file_name = os.path.split(file_path)
|
||||
|
||||
if [m for m in excludes if re.match(m,file_name)]:
|
||||
continue
|
||||
|
||||
try:
|
||||
expr = re.compile(file_name)
|
||||
except re.error:
|
||||
expr = None
|
||||
|
||||
if expr and os.path.isdir(search_path):
|
||||
file_list = os.listdir(search_path)
|
||||
|
||||
for f in file_list:
|
||||
if [m for m in excludes if re.match(m,f)]:
|
||||
continue
|
||||
|
||||
if re.search(expr,f):
|
||||
kwds['name'] = f
|
||||
paths[os.path.join(search_path, f)] = kwds
|
||||
p = None
|
||||
|
||||
if k == 'libs':
|
||||
kwds['parent'] = self.get_or_create_group('Libraries', parent=parent)
|
||||
elif k == 'frameworks':
|
||||
kwds['parent'] = self.get_or_create_group('Frameworks', parent=parent)
|
||||
|
||||
if p:
|
||||
kwds['name'] = file_name
|
||||
|
||||
if k == 'libs':
|
||||
p = os.path.join('usr','lib',p)
|
||||
kwds['tree'] = 'SDKROOT'
|
||||
elif k == 'frameworks':
|
||||
p = os.path.join('System','Library','Frameworks',p)
|
||||
kwds['tree'] = 'SDKROOT'
|
||||
elif k == 'files' and not os.path.exists(file_path):
|
||||
# don't add non-existent files to the project.
|
||||
continue
|
||||
|
||||
paths[p] = kwds
|
||||
|
||||
new_files = self.verify_files([n.get('name') for n in paths.values()])
|
||||
|
||||
add_files = [(k,v) for k,v in paths.items() if v.get('name') in new_files]
|
||||
|
||||
for path, kwds in add_files:
|
||||
kwds.pop('name', None)
|
||||
|
||||
if not kwds.has_key('parent') and parent:
|
||||
kwds['parent'] = parent
|
||||
|
||||
self.add_file(path, **kwds)
|
||||
|
||||
if compiler_flags:
|
||||
for k,v in compiler_flags.items():
|
||||
filerefs = []
|
||||
|
||||
for f in v:
|
||||
filerefs.extend([fr.id for fr in self.objects.values() if fr.get('isa') == 'PBXFileReference'
|
||||
and fr.get('name') == f])
|
||||
|
||||
|
||||
buildfiles = [bf for bf in self.objects.values() if bf.get('isa') == 'PBXBuildFile'
|
||||
and bf.get('fileRef') in filerefs]
|
||||
|
||||
for bf in buildfiles:
|
||||
if bf.add_compiler_flag(k):
|
||||
self.modified = True
|
||||
|
||||
|
||||
def backup(self, file_name=None):
|
||||
if not file_name:
|
||||
file_name = self.pbxproj_path
|
||||
|
||||
backup_name = "%s.%s.backup" % (file_name, datetime.datetime.now().strftime('%d%m%y-%H%M%S'))
|
||||
|
||||
shutil.copy2(file_name, backup_name)
|
||||
|
||||
def save(self, file_name=None):
|
||||
if not file_name:
|
||||
file_name = self.pbxproj_path
|
||||
|
||||
# JSON serialize the project and convert that json to an xml plist
|
||||
p = subprocess.Popen([XcodeProject.plutil_path, '-convert', 'xml1', '-o', file_name, '-'], stdin=subprocess.PIPE)
|
||||
p.communicate(PBXEncoder().encode(self.data))
|
||||
|
||||
@classmethod
|
||||
def Load(cls, path):
|
||||
cls.plutil_path = os.path.join(os.path.split(__file__)[0], 'plutil')
|
||||
|
||||
if not os.path.isfile(XcodeProject.plutil_path):
|
||||
cls.plutil_path = 'plutil'
|
||||
|
||||
if subprocess.call([XcodeProject.plutil_path,'-lint','-s',path]):
|
||||
print 'ERROR: not a valid .pbxproj file'
|
||||
return None
|
||||
|
||||
# load project by converting to JSON and parse
|
||||
p = subprocess.Popen([XcodeProject.plutil_path, '-convert', 'json', '-o', '-', path], stdout=subprocess.PIPE)
|
||||
tree = json.loads(p.communicate()[0])
|
||||
|
||||
return XcodeProject(tree, path)
|
||||
|
||||
|
||||
def test(argv=None):
|
||||
if not argv:
|
||||
argv = sys.argv
|
||||
|
||||
proj = XcodeProject.Load('../../Build/Unity-iPhone.xcodeproj/project.pbxproj')
|
||||
|
||||
proj.add_folder('../Assets/Editor/Airship/UI/Default/StoreFront')
|
||||
|
||||
proj.add_file('../Assets/Editor/Airship/libUAirship-1.1.4.a')
|
||||
proj.add_file('../Assets/Plugins/Airship/AirshipConfig.plist')
|
||||
|
||||
proj.backup()
|
||||
proj.save()
|
||||
|
||||
print str(proj)
|
||||
|
||||
@@ -86,7 +86,7 @@ function main(args)
|
||||
types[anIndex] = NSCompatibleClassName(aType, YES);
|
||||
});
|
||||
|
||||
outlets.push(" " + types.join(" ") + " " + ivar_getName(anIvar) + ";");
|
||||
outlets.push("@property (assign) " + types.join(" ") + " " + ivar_getName(anIvar) + ";");
|
||||
}
|
||||
});
|
||||
|
||||
@@ -105,13 +105,17 @@ function main(args)
|
||||
superClassName = superClasses[className];
|
||||
|
||||
ObjectiveCSource +=
|
||||
"#import <Foundation/Foundation.h>\n" +
|
||||
"#import <Cocoa/Cocoa.h>\n" +
|
||||
"\n@interface " + class_getName(aClass) +
|
||||
(superClassName === "Nil" ? "" : (" : " + NSCompatibleClassName(superClassName))) +
|
||||
"\n{\n" +
|
||||
"\n\n" +
|
||||
outlets.join("\n") +
|
||||
"\n}\n" +
|
||||
"\n" +
|
||||
actions.join("\n") +
|
||||
"\n@end";
|
||||
"\n@end\n\n"+
|
||||
"\n@implementation " + class_getName(aClass) +
|
||||
"\n@end\n";
|
||||
});
|
||||
|
||||
if (ObjectiveCSource.length)
|
||||
|
||||
Executable
+51
@@ -0,0 +1,51 @@
|
||||
import sys, os
|
||||
from mod_pbxproj import XcodeProject
|
||||
|
||||
XCODESUPPORTFOLDER = ".XcodeSupport"
|
||||
|
||||
def add_file(project, shadowGroup, sourceGroup, shadowPath, sourcePath, projectBaseURL):
|
||||
project.add_file(shadowPath, parent=shadowGroup)
|
||||
project.add_file(sourcePath, parent=sourceGroup)
|
||||
project.save()
|
||||
|
||||
def remove_file(project, shadowGroup, sourceGroup, shadowPath, sourcePath, projectBaseURL):
|
||||
project.remove_file("%s/%s" % (XCODESUPPORTFOLDER, os.path.basename(shadowPath)), parent=shadowGroup)
|
||||
project.remove_file(os.path.relpath(sourcePath, projectBaseURL), parent=sourceGroup)
|
||||
project.save()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
||||
action = sys.argv[1]
|
||||
PBXProjectFilePath = sys.argv[2]
|
||||
shadowFilePath = sys.argv[3]
|
||||
sourceFilePath = sys.argv[4]
|
||||
projectBaseURL = sys.argv[5]
|
||||
|
||||
project = XcodeProject.Load(PBXProjectFilePath)
|
||||
|
||||
shadowGroup = project.get_or_create_group('Shadows')
|
||||
sourceGroup = project.get_or_create_group('Sources')
|
||||
|
||||
if "main.m" in shadowFilePath:
|
||||
sys.exit(0)
|
||||
|
||||
files = project.get_files_by_os_path("%s/%s" % (XCODESUPPORTFOLDER, os.path.basename(shadowFilePath)))
|
||||
|
||||
if action == "add" and len(files) == 0:
|
||||
add_file(project, shadowGroup, sourceGroup, shadowFilePath, sourceFilePath, projectBaseURL)
|
||||
|
||||
elif action == "remove" and len(files) == 1:
|
||||
remove_file(project, shadowGroup, sourceGroup, shadowFilePath, sourceFilePath, projectBaseURL)
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -8,28 +8,16 @@
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
9EEC4498135749D200615446 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9EEC4497135749D200615446 /* Cocoa.framework */; };
|
||||
9EEC44B5135749D300615446 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9EEC4497135749D200615446 /* Cocoa.framework */; };
|
||||
9EEC44CC13574A0B00615446 /* ${CappuccinoProjectName} in Resources */ = {isa = PBXBuildFile; fileRef = 9EEC44CB13574A0B00615446 /* ${CappuccinoProjectName} */; };
|
||||
9EEC44CC13574A0B00615446 /* CappuccinoRessource in Resources */ = {isa = PBXBuildFile; fileRef = 9EEC44CB13574A0B00615446 /* CappuccinoRessource */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXContainerItemProxy section */
|
||||
9EEC44B6135749D300615446 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 9EEC448A135749D200615446 /* Project object */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = 9EEC4492135749D200615446;
|
||||
remoteInfo = Another;
|
||||
};
|
||||
/* End PBXContainerItemProxy section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
9EEC4493135749D200615446 /* Another.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Another.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
9EEC4497135749D200615446 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
|
||||
9EEC449A135749D300615446 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; };
|
||||
9EEC449B135749D300615446 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; };
|
||||
9EEC449C135749D300615446 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
|
||||
9EEC44B4135749D300615446 /* AnotherTests.octest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AnotherTests.octest; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
9EEC44CB13574A0B00615446 /* ${CappuccinoProjectName} */ = {isa = PBXFileReference; lastKnownFileType = folder; name = ${CappuccinoProjectName}; path = ${CappuccinoProjectRelativePath}; sourceTree = "<group>"; };
|
||||
9EEC44CB13574A0B00615446 /* CappuccinoRessource */ = {isa = PBXFileReference; lastKnownFileType = folder; name = CappuccinoRessource; path = Resources; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
@@ -41,23 +29,14 @@
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
9EEC44B0135749D300615446 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
9EEC44B5135749D300615446 /* Cocoa.framework in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
9EEC4488135749D200615446 = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
9EEC44CB13574A0B00615446 /* ${CappuccinoProjectName} */,
|
||||
9EEC44CB13574A0B00615446 /* CappuccinoRessource */,
|
||||
9EEC4496135749D200615446 /* Frameworks */,
|
||||
9EEC4494135749D200615446 /* Products */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
@@ -65,7 +44,6 @@
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
9EEC4493135749D200615446 /* Another.app */,
|
||||
9EEC44B4135749D300615446 /* AnotherTests.octest */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
@@ -109,34 +87,16 @@
|
||||
productReference = 9EEC4493135749D200615446 /* Another.app */;
|
||||
productType = "com.apple.product-type.application";
|
||||
};
|
||||
9EEC44B3135749D300615446 /* AnotherTests */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 9EEC44C8135749D300615446 /* Build configuration list for PBXNativeTarget "AnotherTests" */;
|
||||
buildPhases = (
|
||||
9EEC44AF135749D300615446 /* Sources */,
|
||||
9EEC44B0135749D300615446 /* Frameworks */,
|
||||
9EEC44B1135749D300615446 /* Resources */,
|
||||
9EEC44B2135749D300615446 /* ShellScript */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
9EEC44B7135749D300615446 /* PBXTargetDependency */,
|
||||
);
|
||||
name = AnotherTests;
|
||||
productName = AnotherTests;
|
||||
productReference = 9EEC44B4135749D300615446 /* AnotherTests.octest */;
|
||||
productType = "com.apple.product-type.bundle";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
9EEC448A135749D200615446 /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
LastUpgradeCheck = 0440;
|
||||
ORGANIZATIONNAME = "280 North, Inc.";
|
||||
};
|
||||
buildConfigurationList = 9EEC448D135749D200615446 /* Build configuration list for PBXProject "Another" */;
|
||||
buildConfigurationList = 9EEC448D135749D200615446 /* Build configuration list for PBXProject "XCCSampleProj" */;
|
||||
compatibilityVersion = "Xcode 3.2";
|
||||
developmentRegion = English;
|
||||
hasScannedForEncodings = 0;
|
||||
@@ -149,7 +109,6 @@
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
9EEC4492135749D200615446 /* Another */,
|
||||
9EEC44B3135749D300615446 /* AnotherTests */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
@@ -159,35 +118,12 @@
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
9EEC44CC13574A0B00615446 /* ${CappuccinoProjectName} in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
9EEC44B1135749D300615446 /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
9EEC44CC13574A0B00615446 /* CappuccinoRessource in Resources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXResourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXShellScriptBuildPhase section */
|
||||
9EEC44B2135749D300615446 /* ShellScript */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputPaths = (
|
||||
);
|
||||
outputPaths = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "# Run the unit tests in this test bundle.\n\"${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests\"\n";
|
||||
};
|
||||
/* End PBXShellScriptBuildPhase section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
9EEC448F135749D200615446 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
@@ -196,23 +132,8 @@
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
9EEC44AF135749D300615446 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXTargetDependency section */
|
||||
9EEC44B7135749D300615446 /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
target = 9EEC4492135749D200615446 /* Another */;
|
||||
targetProxy = 9EEC44B6135749D300615446 /* PBXContainerItemProxy */;
|
||||
};
|
||||
/* End PBXTargetDependency section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
9EEC44C3135749D300615446 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
@@ -250,6 +171,7 @@
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
|
||||
@@ -265,6 +187,7 @@
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
COMBINE_HIDPI_IMAGES = YES;
|
||||
COPY_PHASE_STRIP = YES;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
|
||||
@@ -276,54 +199,10 @@
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
9EEC44C9135749D300615446 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/Another.app/Contents/MacOS/Another";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
FRAMEWORK_SEARCH_PATHS = "$(DEVELOPER_LIBRARY_DIR)/Frameworks";
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
|
||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||
GCC_PREFIX_HEADER = "AnotherTests/AnotherTests-Prefix.pch";
|
||||
INFOPLIST_FILE = "AnotherTests/AnotherTests-Info.plist";
|
||||
OTHER_LDFLAGS = (
|
||||
"-framework",
|
||||
SenTestingKit,
|
||||
);
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
TEST_HOST = "$(BUNDLE_LOADER)";
|
||||
WRAPPER_EXTENSION = octest;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
9EEC44CA135749D300615446 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/Another.app/Contents/MacOS/Another";
|
||||
COPY_PHASE_STRIP = YES;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
FRAMEWORK_SEARCH_PATHS = "$(DEVELOPER_LIBRARY_DIR)/Frameworks";
|
||||
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
|
||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||
GCC_PREFIX_HEADER = "AnotherTests/AnotherTests-Prefix.pch";
|
||||
INFOPLIST_FILE = "AnotherTests/AnotherTests-Info.plist";
|
||||
OTHER_LDFLAGS = (
|
||||
"-framework",
|
||||
SenTestingKit,
|
||||
);
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
TEST_HOST = "$(BUNDLE_LOADER)";
|
||||
WRAPPER_EXTENSION = octest;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
9EEC448D135749D200615446 /* Build configuration list for PBXProject "Another" */ = {
|
||||
9EEC448D135749D200615446 /* Build configuration list for PBXProject "XCCSampleProj" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
9EEC44C3135749D300615446 /* Debug */,
|
||||
@@ -339,16 +218,9 @@
|
||||
9EEC44C7135749D300615446 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
};
|
||||
9EEC44C8135749D300615446 /* Build configuration list for PBXNativeTarget "AnotherTests" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
9EEC44C9135749D300615446 /* Debug */,
|
||||
9EEC44CA135749D300615446 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
};
|
||||
rootObject = 9EEC448A135749D200615446 /* Project object */;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,354 @@
|
||||
// !$*UTF8*$!
|
||||
{
|
||||
archiveVersion = 1;
|
||||
classes = {
|
||||
};
|
||||
objectVersion = 46;
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
9EEC4498135749D200615446 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9EEC4497135749D200615446 /* Cocoa.framework */; };
|
||||
9EEC44B5135749D300615446 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9EEC4497135749D200615446 /* Cocoa.framework */; };
|
||||
9EEC44CC13574A0B00615446 /* ${CappuccinoProjectName} in Sources */ = {isa = PBXBuildFile; fileRef = 9EEC44CB13574A0B00615446 /* ${CappuccinoProjectName} */; };
|
||||
/* End PBXBuildFile section */
|
||||
|
||||
/* Begin PBXContainerItemProxy section */
|
||||
9EEC44B6135749D300615446 /* PBXContainerItemProxy */ = {
|
||||
isa = PBXContainerItemProxy;
|
||||
containerPortal = 9EEC448A135749D200615446 /* Project object */;
|
||||
proxyType = 1;
|
||||
remoteGlobalIDString = 9EEC4492135749D200615446;
|
||||
remoteInfo = Another;
|
||||
};
|
||||
/* End PBXContainerItemProxy section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
9EEC4493135749D200615446 /* Another.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Another.app; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
9EEC4497135749D200615446 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; };
|
||||
9EEC449A135749D300615446 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; };
|
||||
9EEC449B135749D300615446 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; };
|
||||
9EEC449C135749D300615446 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; };
|
||||
9EEC44B4135749D300615446 /* AnotherTests.octest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AnotherTests.octest; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
9EEC44CB13574A0B00615446 /* ${CappuccinoProjectName} */ = {isa = PBXFileReference; lastKnownFileType = folder; name = ${CappuccinoProjectName}; path = ${CappuccinoProjectRelativePath}; sourceTree = "<group>"; };
|
||||
/* End PBXFileReference section */
|
||||
|
||||
/* Begin PBXFrameworksBuildPhase section */
|
||||
9EEC4490135749D200615446 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
9EEC4498135749D200615446 /* Cocoa.framework in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
9EEC44B0135749D300615446 /* Frameworks */ = {
|
||||
isa = PBXFrameworksBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
9EEC44B5135749D300615446 /* Cocoa.framework in Frameworks */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXFrameworksBuildPhase section */
|
||||
|
||||
/* Begin PBXGroup section */
|
||||
9EEC4488135749D200615446 = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
9EEC44CB13574A0B00615446 /* ${CappuccinoProjectName} */,
|
||||
9EEC4496135749D200615446 /* Frameworks */,
|
||||
9EEC4494135749D200615446 /* Products */,
|
||||
);
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
9EEC4494135749D200615446 /* Products */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
9EEC4493135749D200615446 /* Another.app */,
|
||||
9EEC44B4135749D300615446 /* AnotherTests.octest */,
|
||||
);
|
||||
name = Products;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
9EEC4496135749D200615446 /* Frameworks */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
9EEC4497135749D200615446 /* Cocoa.framework */,
|
||||
9EEC4499135749D300615446 /* Other Frameworks */,
|
||||
);
|
||||
name = Frameworks;
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
9EEC4499135749D300615446 /* Other Frameworks */ = {
|
||||
isa = PBXGroup;
|
||||
children = (
|
||||
9EEC449A135749D300615446 /* AppKit.framework */,
|
||||
9EEC449B135749D300615446 /* CoreData.framework */,
|
||||
9EEC449C135749D300615446 /* Foundation.framework */,
|
||||
);
|
||||
name = "Other Frameworks";
|
||||
sourceTree = "<group>";
|
||||
};
|
||||
/* End PBXGroup section */
|
||||
|
||||
/* Begin PBXNativeTarget section */
|
||||
9EEC4492135749D200615446 /* Another */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 9EEC44C5135749D300615446 /* Build configuration list for PBXNativeTarget "Another" */;
|
||||
buildPhases = (
|
||||
9EEC448F135749D200615446 /* Sources */,
|
||||
9EEC4490135749D200615446 /* Frameworks */,
|
||||
9EEC4491135749D200615446 /* Resources */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
);
|
||||
name = Another;
|
||||
productName = Another;
|
||||
productReference = 9EEC4493135749D200615446 /* Another.app */;
|
||||
productType = "com.apple.product-type.application";
|
||||
};
|
||||
9EEC44B3135749D300615446 /* AnotherTests */ = {
|
||||
isa = PBXNativeTarget;
|
||||
buildConfigurationList = 9EEC44C8135749D300615446 /* Build configuration list for PBXNativeTarget "AnotherTests" */;
|
||||
buildPhases = (
|
||||
9EEC44AF135749D300615446 /* Sources */,
|
||||
9EEC44B0135749D300615446 /* Frameworks */,
|
||||
9EEC44B1135749D300615446 /* Resources */,
|
||||
9EEC44B2135749D300615446 /* ShellScript */,
|
||||
);
|
||||
buildRules = (
|
||||
);
|
||||
dependencies = (
|
||||
9EEC44B7135749D300615446 /* PBXTargetDependency */,
|
||||
);
|
||||
name = AnotherTests;
|
||||
productName = AnotherTests;
|
||||
productReference = 9EEC44B4135749D300615446 /* AnotherTests.octest */;
|
||||
productType = "com.apple.product-type.bundle";
|
||||
};
|
||||
/* End PBXNativeTarget section */
|
||||
|
||||
/* Begin PBXProject section */
|
||||
9EEC448A135749D200615446 /* Project object */ = {
|
||||
isa = PBXProject;
|
||||
attributes = {
|
||||
ORGANIZATIONNAME = "280 North, Inc.";
|
||||
};
|
||||
buildConfigurationList = 9EEC448D135749D200615446 /* Build configuration list for PBXProject "Another" */;
|
||||
compatibilityVersion = "Xcode 3.2";
|
||||
developmentRegion = English;
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
en,
|
||||
);
|
||||
mainGroup = 9EEC4488135749D200615446;
|
||||
productRefGroup = 9EEC4494135749D200615446 /* Products */;
|
||||
projectDirPath = "";
|
||||
projectRoot = "";
|
||||
targets = (
|
||||
9EEC4492135749D200615446 /* Another */,
|
||||
9EEC44B3135749D300615446 /* AnotherTests */,
|
||||
);
|
||||
};
|
||||
/* End PBXProject section */
|
||||
|
||||
/* Begin PBXResourcesBuildPhase section */
|
||||
9EEC4491135749D200615446 /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
9EEC44CC13574A0B00615446 /* ${CappuccinoProjectName} in Sources */,
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
9EEC44B1135749D300615446 /* Resources */ = {
|
||||
isa = PBXResourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXResourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXShellScriptBuildPhase section */
|
||||
9EEC44B2135749D300615446 /* ShellScript */ = {
|
||||
isa = PBXShellScriptBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
inputPaths = (
|
||||
);
|
||||
outputPaths = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
shellPath = /bin/sh;
|
||||
shellScript = "# Run the unit tests in this test bundle.\n\"${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests\"\n";
|
||||
};
|
||||
/* End PBXShellScriptBuildPhase section */
|
||||
|
||||
/* Begin PBXSourcesBuildPhase section */
|
||||
9EEC448F135749D200615446 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
9EEC44AF135749D300615446 /* Sources */ = {
|
||||
isa = PBXSourcesBuildPhase;
|
||||
buildActionMask = 2147483647;
|
||||
files = (
|
||||
);
|
||||
runOnlyForDeploymentPostprocessing = 0;
|
||||
};
|
||||
/* End PBXSourcesBuildPhase section */
|
||||
|
||||
/* Begin PBXTargetDependency section */
|
||||
9EEC44B7135749D300615446 /* PBXTargetDependency */ = {
|
||||
isa = PBXTargetDependency;
|
||||
target = 9EEC4492135749D200615446 /* Another */;
|
||||
targetProxy = 9EEC44B6135749D300615446 /* PBXContainerItemProxy */;
|
||||
};
|
||||
/* End PBXTargetDependency section */
|
||||
|
||||
/* Begin XCBuildConfiguration section */
|
||||
9EEC44C3135749D300615446 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_OPTIMIZATION_LEVEL = 0;
|
||||
GCC_PREPROCESSOR_DEFINITIONS = DEBUG;
|
||||
GCC_SYMBOLS_PRIVATE_EXTERN = NO;
|
||||
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.6;
|
||||
ONLY_ACTIVE_ARCH = YES;
|
||||
SDKROOT = macosx;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
9EEC44C4135749D300615446 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ARCHS = "$(ARCHS_STANDARD_32_64_BIT)";
|
||||
GCC_C_LANGUAGE_STANDARD = gnu99;
|
||||
GCC_VERSION = com.apple.compilers.llvm.clang.1_0;
|
||||
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
|
||||
GCC_WARN_ABOUT_RETURN_TYPE = YES;
|
||||
GCC_WARN_UNUSED_VARIABLE = YES;
|
||||
MACOSX_DEPLOYMENT_TARGET = 10.6;
|
||||
SDKROOT = macosx;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
9EEC44C6135749D300615446 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
COPY_PHASE_STRIP = NO;
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
|
||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||
GCC_PREFIX_HEADER = "Another/Another-Prefix.pch";
|
||||
INFOPLIST_FILE = "Another/Another-Info.plist";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
WRAPPER_EXTENSION = app;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
9EEC44C7135749D300615446 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
COPY_PHASE_STRIP = YES;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
|
||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||
GCC_PREFIX_HEADER = "Another/Another-Prefix.pch";
|
||||
INFOPLIST_FILE = "Another/Another-Info.plist";
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
WRAPPER_EXTENSION = app;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
9EEC44C9135749D300615446 /* Debug */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/Another.app/Contents/MacOS/Another";
|
||||
COPY_PHASE_STRIP = NO;
|
||||
FRAMEWORK_SEARCH_PATHS = "$(DEVELOPER_LIBRARY_DIR)/Frameworks";
|
||||
GCC_DYNAMIC_NO_PIC = NO;
|
||||
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
|
||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||
GCC_PREFIX_HEADER = "AnotherTests/AnotherTests-Prefix.pch";
|
||||
INFOPLIST_FILE = "AnotherTests/AnotherTests-Info.plist";
|
||||
OTHER_LDFLAGS = (
|
||||
"-framework",
|
||||
SenTestingKit,
|
||||
);
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
TEST_HOST = "$(BUNDLE_LOADER)";
|
||||
WRAPPER_EXTENSION = octest;
|
||||
};
|
||||
name = Debug;
|
||||
};
|
||||
9EEC44CA135749D300615446 /* Release */ = {
|
||||
isa = XCBuildConfiguration;
|
||||
buildSettings = {
|
||||
ALWAYS_SEARCH_USER_PATHS = NO;
|
||||
BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/Another.app/Contents/MacOS/Another";
|
||||
COPY_PHASE_STRIP = YES;
|
||||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
|
||||
FRAMEWORK_SEARCH_PATHS = "$(DEVELOPER_LIBRARY_DIR)/Frameworks";
|
||||
GCC_ENABLE_OBJC_EXCEPTIONS = YES;
|
||||
GCC_PRECOMPILE_PREFIX_HEADER = YES;
|
||||
GCC_PREFIX_HEADER = "AnotherTests/AnotherTests-Prefix.pch";
|
||||
INFOPLIST_FILE = "AnotherTests/AnotherTests-Info.plist";
|
||||
OTHER_LDFLAGS = (
|
||||
"-framework",
|
||||
SenTestingKit,
|
||||
);
|
||||
PRODUCT_NAME = "$(TARGET_NAME)";
|
||||
TEST_HOST = "$(BUNDLE_LOADER)";
|
||||
WRAPPER_EXTENSION = octest;
|
||||
};
|
||||
name = Release;
|
||||
};
|
||||
/* End XCBuildConfiguration section */
|
||||
|
||||
/* Begin XCConfigurationList section */
|
||||
9EEC448D135749D200615446 /* Build configuration list for PBXProject "Another" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
9EEC44C3135749D300615446 /* Debug */,
|
||||
9EEC44C4135749D300615446 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
defaultConfigurationName = Release;
|
||||
};
|
||||
9EEC44C5135749D300615446 /* Build configuration list for PBXNativeTarget "Another" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
9EEC44C6135749D300615446 /* Debug */,
|
||||
9EEC44C7135749D300615446 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
};
|
||||
9EEC44C8135749D300615446 /* Build configuration list for PBXNativeTarget "AnotherTests" */ = {
|
||||
isa = XCConfigurationList;
|
||||
buildConfigurations = (
|
||||
9EEC44C9135749D300615446 /* Debug */,
|
||||
9EEC44CA135749D300615446 /* Release */,
|
||||
);
|
||||
defaultConfigurationIsVisible = 0;
|
||||
};
|
||||
/* End XCConfigurationList section */
|
||||
};
|
||||
rootObject = 9EEC448A135749D200615446 /* Project object */;
|
||||
}
|
||||
Reference in new issue
Block a user