diff --git a/XCode/PBXFileReference.m b/XCode/PBXFileReference.m index 2714a58..edd96c1 100644 --- a/XCode/PBXFileReference.m +++ b/XCode/PBXFileReference.m @@ -89,6 +89,10 @@ + (NSString *) fileTypeFromPath: (NSString *)path { result = @"file.gorm"; // GS specific } + else if ([ext isEqualToString: @"entitlements"]) + { + result = @"text.plist.entitlements"; + } return result; } @@ -125,19 +129,23 @@ + (NSString *) extForFileType: (NSString *)type { result = @"app"; } - if ([type isEqualToString: @"file.xib"]) + else if ([type isEqualToString: @"file.xib"]) { result = @"xib"; } - if ([type isEqualToString: @"file.nib"]) + else if ([type isEqualToString: @"file.nib"]) { result = @"nib"; } - if ([type isEqualToString: @"file.gorm"]) + else if ([type isEqualToString: @"file.gorm"]) { - result = @"gorm"; // GS specific + result = @"gorm"; } - + else if ([type isEqualToString: @"text.plist.entitlements"]) + { + result = @"entitlements"; + } + return result; } diff --git a/XCode/PBXFileSystemSynchronizedRootGroup.m b/XCode/PBXFileSystemSynchronizedRootGroup.m index 0892a8d..34dd9b8 100644 --- a/XCode/PBXFileSystemSynchronizedRootGroup.m +++ b/XCode/PBXFileSystemSynchronizedRootGroup.m @@ -26,51 +26,59 @@ #import "PBXFileSystemSynchronizedRootGroup.h" #import "PBXFileReference.h" #import "PBXBuildFile.h" +#import "NSString+PBXAdditions.h" @implementation PBXFileSystemSynchronizedRootGroup - (NSMutableArray *) synchronizedChildren { NSFileManager *fm = [NSFileManager defaultManager]; - BOOL isDirectory; + NSDirectoryEnumerator *den = [fm enumeratorAtPath: _path]; NSMutableArray *result = [NSMutableArray array]; + NSString *filePath = nil; + NSMutableArray *fp = [NSMutableArray array]; - if ([fm fileExistsAtPath: _path isDirectory: &isDirectory] - && isDirectory == YES) + while ((filePath = [den nextObject]) != nil) { - NSError *error = nil; - NSArray *files = [fm contentsOfDirectoryAtPath: _path error: &error]; - - if (error == nil) + BOOL isDir = NO; + NSString *fullPath = [_path stringByAppendingPathComponent: filePath]; + + if ([fm fileExistsAtPath: fullPath isDirectory: &isDir] && isDir == NO) { - NSEnumerator *en = [files objectEnumerator]; - NSString *path = nil; + PBXBuildFile *buildFile = [[PBXBuildFile alloc] init]; + PBXFileReference *fileRef = nil; + NSString *fpc = [filePath firstPathComponent]; + NSString *path = filePath; - while ((path = [en nextObject]) != nil) + AUTORELEASE(buildFile); + + if ([[fpc pathExtension] isEqualToString: @"xcassets"]) { - PBXBuildFile *buildFile = [[PBXBuildFile alloc] init]; - PBXFileReference *fileRef = [[PBXFileReference alloc] initWithPath: path]; + path = fpc; + } - AUTORELEASE(buildFile); - AUTORELEASE(fileRef); + if ([fp containsObject: path] == NO) + { + fileRef = [[PBXFileReference alloc] initWithPath: path]; + // NSLog(@"fileRef = %@", fileRef); + AUTORELEASE(fileRef); [buildFile setFileRef: fileRef]; [result addObject: buildFile]; + [fp addObject: path]; } } } + + // NSLog(@"result = %@", result); return result; } -- (instancetype) init +- (void) setPath: (NSString *)path { - self = [super init]; - if (self != nil) - { - [self setChildren: [self synchronizedChildren]]; - } - return self; + [super setPath: path]; + [self setChildren: [self synchronizedChildren]]; } @end diff --git a/XCode/PBXSourcesBuildPhase.m b/XCode/PBXSourcesBuildPhase.m index 498bab9..c80e304 100644 --- a/XCode/PBXSourcesBuildPhase.m +++ b/XCode/PBXSourcesBuildPhase.m @@ -85,9 +85,13 @@ - (BOOL) build xcprintf("\t* Parallel build using %ld CPUs...\n", _cpus); } + + NSArray *synchronizedFiles = [_target synchronizedSources]; + files = [files arrayByAddingObjectsFromArray: synchronizedFiles]; + // NSLog(@"files = %@", files); // if the database is present use it's list of files... - if (db != nil) + if (db != nil && [synchronizedFiles count] == 0) { if ([db isEmpty]) { diff --git a/XCode/PBXTarget.h b/XCode/PBXTarget.h index 34f8ef9..9321753 100644 --- a/XCode/PBXTarget.h +++ b/XCode/PBXTarget.h @@ -29,6 +29,8 @@ #import "XCConfigurationList.h" #import "PBXFileReference.h" #import "GSXCBuildContext.h" +#import "PBXBuildFile.h" +#import "PBXFileSystemSynchronizedRootGroup.h" @class PBXProject, GSXCBuildDatabase; diff --git a/XCode/PBXTarget.m b/XCode/PBXTarget.m index 8c38667..176b9a1 100644 --- a/XCode/PBXTarget.m +++ b/XCode/PBXTarget.m @@ -151,17 +151,91 @@ - (void) setProductType: (NSString *)object; // setter - (NSArray *) synchronizedSources { - return nil; + NSMutableArray *result = [NSMutableArray array]; + NSEnumerator *gen = [_fileSystemSynchronizedGroups objectEnumerator]; + PBXFileSystemSynchronizedRootGroup *group = nil; + + while ((group = [gen nextObject]) != nil) + { + NSArray *children = [group children]; + NSEnumerator *cen = [children objectEnumerator]; + PBXBuildFile *buildFile = nil; + + while ((buildFile = [cen nextObject]) != nil) + { + PBXFileReference *fr = [buildFile fileRef]; + NSString *name = [fr path]; + + // NSLog(@"path = %@", name); + if ([[name pathExtension] isEqualToString: @"m"] + || [[name pathExtension] isEqualToString: @"mm"] + || [[name pathExtension] isEqualToString: @"M"] + || [[name pathExtension] isEqualToString: @"c"] + || [[name pathExtension] isEqualToString: @"cc"] + || [[name pathExtension] isEqualToString: @"C"] + || [[name pathExtension] isEqualToString: @"swift"]) + { + [result addObject: buildFile]; + } + } + } + + return result; } - (NSArray *) synchronizedHeaders { - return nil; + NSMutableArray *result = [NSMutableArray array]; + NSEnumerator *gen = [_fileSystemSynchronizedGroups objectEnumerator]; + PBXFileSystemSynchronizedRootGroup *group = nil; + + while ((group = [gen nextObject]) != nil) + { + NSArray *children = [group children]; + NSEnumerator *cen = [children objectEnumerator]; + PBXBuildFile *buildFile = nil; + + while ((buildFile = [cen nextObject]) != nil) + { + PBXFileReference *fr = [buildFile fileRef]; + NSString *name = [fr path]; + + if ([[name pathExtension] isEqualToString: @"h"]) + { + [result addObject: buildFile]; + } + } + } + + return result; } -- (NSArray *) synchronizeResources +- (NSArray *) synchronizedResources { - return nil; + NSMutableArray *result = [NSMutableArray array]; + NSEnumerator *gen = [_fileSystemSynchronizedGroups objectEnumerator]; + PBXFileSystemSynchronizedRootGroup *group = nil; + + while ((group = [gen nextObject]) != nil) + { + NSArray *children = [group children]; + NSEnumerator *cen = [children objectEnumerator]; + PBXBuildFile *buildFile = nil; + + while ((buildFile = [cen nextObject]) != nil) + { + PBXFileReference *fr = [buildFile fileRef]; + NSString *name = [fr path]; + + if ([[name pathExtension] isEqualToString: @"xcassets"] + || [[name pathExtension] isEqualToString: @"xib"]) + { + [result addObject: buildFile]; + } + } + } + + return result; } - (BOOL) build