XcodeEditor
XcodeEditor copied to clipboard
How to add source (class & header) with specific path ?
Is this is possible to add source to group with specific path ?
I think not currently, though it should be very simple to support.
I was edited in XCGroup But fail in XCTarget addMember (invalid path) Could you give me some help ?
- (void)addSourceFile:(XCSourceFileDefinition*)sourceFileDefinition withPath:(NSString*)targetPath
{
[self makeGroupMemberWithName:[sourceFileDefinition sourceFileName] contents:[sourceFileDefinition data]
type:[sourceFileDefinition type] fileOperationStyle:[sourceFileDefinition fileOperationStyle]
withPath:targetPath];
[[_project objects] setObject:[self asDictionary] forKey:_key];
}
- (void)makeGroupMemberWithName:(NSString*)name contents:(id)contents type:(XcodeSourceFileType)type
fileOperationStyle:(XcodeFileOperationStyle)fileOperationStyle
withPath:(NSString*)targetPath
{
NSString* filePath;
XCSourceFile* currentSourceFile = (XCSourceFile*) [self memberWithDisplayName:name];
if ((currentSourceFile) == nil)
{
NSDictionary* reference = [self makeFileReferenceWithPath:name
name:nil type:type];
NSString* fileKey = [[XCKeyBuilder forItemNamed:[NSString stringWithFormat:@"%@/%@", targetPath, name]] build];
[[_project objects] setObject:reference forKey:fileKey];
[self addMemberWithKey:fileKey];
}
filePath = targetPath;
BOOL writeFile = NO;
if (fileOperationStyle == FileOperationStyleOverwrite)
{
writeFile = YES;
[_fileOperationQueue fileWithName:name existsInProjectDirectory:filePath];
}
else if (fileOperationStyle == FileOperationStyleAcceptExisting &&
![_fileOperationQueue fileWithName:name existsInProjectDirectory:filePath])
{
writeFile = YES;
}
if (writeFile)
{
if ([contents isKindOfClass:[NSString class]])
{
[_fileOperationQueue queueTextFile:name inDirectory:filePath withContents:contents];
}
else
{
[_fileOperationQueue queueDataFile:name inDirectory:filePath withContents:contents];
}
}
}
There's a different flag for relative vs absolute file paths.
- Try creating an absolute file in Xcode. . open the project.pbxproj and take a look.
Ah, I did not want to add with absolute path. (sorry didn't mentioned that before) I tried to add with relative path.
Anyways, Thank for your answer.
Did you try running all of the tests? There's a sample project that gets unpacked into /tmp
You can observe the updates there by opening that project in Xcode.
- Currently you can add a source- file by specifying the contents of the file.
- To use an existing file on the disk, and adding it into the project is not really supported, unless you put the file in the correct place.
- You could read the file from disk and set it as the argument to XcodeEditor.
Yes. I think it need support for
path = IZIZ/TIimaveView.m;
or
path = ../IZIZ/TIimaveView.m;
or
path = II/ZZ/TIimaveView.m;
instead of
path = TIimaveView.m;
in
FD88D16718ACA2EE00B74C6D /* TIimaveView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = TIimaveView.m; path = IZIZ/TIimaveView.m; sourceTree = "<group>";
Its possible to add the source with a specific path, if you create groups as needed as you go. Will this work for you?
Sorry for late ACK I'm using below with edited XCGroup file
NSString *projectName = @"RestInPeace";
NSString *workingRoot = @(getenv("WORKING_SRC_ROOT"));
unsigned long startPosition = workingRoot.length - projectName.length;
NSRange replacementRange = NSMakeRange(startPosition, projectName.length);
NSString *targetProjectFile = [workingRoot stringByReplacingCharactersInRange:replacementRange
withString:TARGET_PROJECT];
XCProject *project = [[XCProject alloc] initWithFilePath:targetProjectFile];
XCGroup *currentTargetGroup = [project groupWithPathFromRoot:targetGroup];
XCSourceFileDefinition *newSourceFile =
[[XCSourceFileDefinition alloc] initWithName:fileName text:content type:sourceType];
[newSourceFile setFileOperationType:XCFileOperationTypeOverwrite];
[currentTargetGroup addSourceFile:newSourceFile withPath:TARGET_NAME];
if (shouldAddToTarget) {
XCSourceFile *sourceFile = [project fileWithName:fileName];
XCTarget *targetObj = [project targetWithName:TARGET_NAME];
[targetObj addMember:sourceFile];
XCTarget *targetObjDev = [project targetWithName:TARGET_NAME_DEV];
[targetObjDev addMember:sourceFile];
}
XCGroup.h
- (void)addSourceFile:(XCSourceFileDefinition*)sourceFileDefinition withPath:(NSString*)pathPrefix;
XCGroup.m
- (void)makeGroupMemberWithName:(NSString*)name contents:(id)contents type:(XcodeSourceFileType)type
fileOperationStyle:(XCFileOperationType)fileOperationStyle withPath:(NSString*)targetPath
...
- (void)addSourceFile:(XCSourceFileDefinition*)sourceFileDefinition withPath:(NSString*)pathPrefix
{
[self makeGroupMemberWithName:[sourceFileDefinition sourceFileName] contents:[sourceFileDefinition data]
type:[sourceFileDefinition type] fileOperationStyle:[sourceFileDefinition fileOperationType]
withPath:targetPath];
....
}
You mean its working OK for you now?
What is the edit? Something you went merged into the main XcodeEditor branch?
Yep! OK I will create merge request~
Ok, glad to hear it's working for you now.
Hi iziz/jasper,
I am not able to find this api with the parameter withPath, is it available in some other branch?
[group addSourceFile:newSourceFile withPath:TARGET_NAME];