Skip to content

Commit 703c2e4

Browse files
XCGroup: modification to read and write correctly if the group is a PBXVariantGroup
1 parent 2a56ae1 commit 703c2e4

File tree

4 files changed

+46
-12
lines changed

4 files changed

+46
-12
lines changed

Source/XCGroup.h

+10
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@
4444

4545
XCFileOperationQueue* _fileOperationQueue;
4646
XCProject* _project;
47+
XcodeMemberType _memberType;
4748

4849
}
4950

@@ -77,8 +78,12 @@
7778

7879
+ (XCGroup*)groupWithProject:(XCProject*)project key:(NSString*)key alias:(NSString*)alias path:(NSString*)path children:(NSArray<id<XcodeGroupMember>>*)children;
7980

81+
+ (XCGroup*)groupWithProject:(XCProject*)project key:(NSString*)key alias:(NSString*)alias path:(NSString*)path children:(NSArray<id<XcodeGroupMember>>*)children memberType:(XcodeMemberType)groupType;
82+
8083
- (id)initWithProject:(XCProject*)project key:(NSString*)key alias:(NSString*)alias path:(NSString*)path children:(NSArray<id<XcodeGroupMember>>*)children;
8184

85+
- (id)initWithProject:(XCProject*)project key:(NSString*)key alias:(NSString*)alias path:(NSString*)path children:(NSArray<id<XcodeGroupMember>>*)children memberType:(XcodeMemberType)groupType;
86+
8287
#pragma mark Parent group
8388

8489
- (void)removeFromParentGroup;
@@ -134,6 +139,11 @@
134139
*/
135140
- (XCGroup*)addGroupWithAlias:(NSString *)alias;
136141

142+
/**
143+
* Adds a _group with an alias to this _group and a particular type (only PBXGroupType and PBXVariantGroupType are valid)
144+
*/
145+
- (XCGroup*)addGroupWithAlias:(NSString *)alias groupType:(XcodeMemberType)type;
146+
137147
/**
138148
* Adds a version group with a path relative to this group.
139149
*/

Source/XCGroup.m

+27-7
Original file line numberDiff line numberDiff line change
@@ -37,17 +37,24 @@ + (XCGroup *)groupWithProject:(XCProject *)project key:(NSString *)key alias:(NS
3737
children:(NSArray *)children
3838
{
3939

40-
return [[XCGroup alloc] initWithProject:project key:key alias:alias path:path children:children];
40+
return [[XCGroup alloc] initWithProject:project key:key alias:alias path:path children:children memberType:PBXGroupType];
41+
}
42+
43+
+ (XCGroup *)groupWithProject:(XCProject *)project key:(NSString *)key alias:(NSString *)alias path:(NSString *)path children:(NSArray<id<XcodeGroupMember>> *)children memberType:(XcodeMemberType)groupType
44+
{
45+
return [[XCGroup alloc]initWithProject:project key:key alias:alias path:path children:children memberType:groupType];
4146
}
4247

4348
//-------------------------------------------------------------------------------------------
4449
#pragma mark - Initialization & Destruction
4550
//-------------------------------------------------------------------------------------------
4651

47-
- (id)initWithProject:(XCProject *)project key:(NSString *)key alias:(NSString *)alias path:(NSString *)path
48-
children:(NSArray *)children
52+
- (id)initWithProject:(XCProject *)project key:(NSString *)key alias:(NSString *)alias path:(NSString *)path children:(NSArray<id<XcodeGroupMember>> *)children memberType:(XcodeMemberType)groupType
4953
{
5054
self = [super init];
55+
56+
assert(groupType == PBXGroupType || groupType == PBXVariantGroupType);
57+
5158
if (self) {
5259
_project = project;
5360
_fileOperationQueue = [_project fileOperationQueue];
@@ -59,10 +66,18 @@ - (id)initWithProject:(XCProject *)project key:(NSString *)key alias:(NSString *
5966
if (!_children) {
6067
_children = [[NSMutableArray alloc] init];
6168
}
69+
70+
_memberType = groupType;
6271
}
6372
return self;
6473
}
6574

75+
- (id)initWithProject:(XCProject *)project key:(NSString *)key alias:(NSString *)alias path:(NSString *)path
76+
children:(NSArray *)children
77+
{
78+
return [self initWithProject:project key:key alias:alias path:path children:children memberType:PBXGroupType];
79+
}
80+
6681
//-------------------------------------------------------------------------------------------
6782
#pragma mark - Interface Methods
6883
//-------------------------------------------------------------------------------------------
@@ -276,7 +291,12 @@ - (XCGroup *)addGroupWithPath:(NSString *)path
276291
return group;
277292
}
278293

279-
- (XCGroup*)addGroupWithAlias:(NSString *)alias
294+
- (XCGroup *)addGroupWithAlias:(NSString *)alias
295+
{
296+
return [self addGroupWithAlias:alias groupType:PBXGroupType];
297+
}
298+
299+
- (XCGroup*)addGroupWithAlias:(NSString *)alias groupType:(XcodeMemberType)type
280300
{
281301
NSString *groupKey = [[XCKeyBuilder forItemNamed:alias] build];
282302

@@ -290,7 +310,7 @@ - (XCGroup*)addGroupWithAlias:(NSString *)alias
290310
}
291311
}
292312

293-
XCGroup *group = [[XCGroup alloc] initWithProject:_project key:groupKey alias:alias path:nil children:nil];
313+
XCGroup *group = [[XCGroup alloc] initWithProject:_project key:groupKey alias:alias path:nil children:nil memberType:type];
294314
NSDictionary *groupDict = [group asDictionary];
295315

296316
[_project objects][groupKey] = groupDict;
@@ -828,7 +848,7 @@ - (NSDictionary *)makeFileReferenceWithPath:(NSString *)path name:(NSString *)na
828848
- (NSDictionary *)asDictionary
829849
{
830850
NSMutableDictionary *groupData = [NSMutableDictionary dictionary];
831-
groupData[@"isa"] = [NSString xce_stringFromMemberType:PBXGroupType];
851+
groupData[@"isa"] = [NSString xce_stringFromMemberType:_memberType];
832852
groupData[@"sourceTree"] = @"<group>";
833853

834854
if (_alias != nil) {
@@ -859,4 +879,4 @@ - (void)addSourceFile:(XCSourceFile *)sourceFile toTargets:(NSArray *)targets
859879
}
860880
}
861881

862-
@end
882+
@end

Source/XCProject.m

+7-3
Original file line numberDiff line numberDiff line change
@@ -300,8 +300,12 @@ - (XCGroup *)groupWithPathFromRoot:(NSString *)path
300300

301301
- (XCGroup *)createGroupWithDictionary:(NSDictionary *)dictionary forKey:(NSString *)key
302302
{
303-
return [XCGroup groupWithProject:self key:key alias:[dictionary valueForKey:@"name"]
304-
path:[dictionary valueForKey:@"path"] children:[dictionary valueForKey:@"children"]];
303+
return [XCGroup groupWithProject:self
304+
key:key
305+
alias:[dictionary valueForKey:@"name"]
306+
path:[dictionary valueForKey:@"path"]
307+
children:[dictionary valueForKey:@"children"]
308+
memberType:[[dictionary valueForKey:@"isa"] xce_asMemberType]];
305309
}
306310

307311
//-------------------------------------------------------------------------------------------
@@ -535,4 +539,4 @@ - (BOOL)doPruneEmptyGroups
535539
return hadEmptyGroups;
536540
}
537541

538-
@end
542+
@end

XcodeEditorTests/XCGroupTests.m

+2-2
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ @interface XCFrameworkPath : NSObject
2727
@implementation XCFrameworkPath
2828

2929
static const NSString *SDK_PATH =
30-
@"/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.1.sdk";
30+
@"/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk";
3131

3232
+ (NSString *)eventKitUIPath
3333
{
@@ -488,4 +488,4 @@ - (void)test_allows_deleting_a_group_after_adding_contents
488488
}
489489

490490

491-
@end
491+
@end

0 commit comments

Comments
 (0)