Files
cappuccino/Tools/XcodeCapp/pbxprojModifier.py
T
Andrew Hankinson 5c3adfda29 Fixed: XCodeCapp adding duplicate files to Xcode project
Previously, XCC would indiscriminately add files to the Xcode project via the pbxprojModifier.py script. This resulted in duplicate references to a file.

This fix adds a check to see if the file is already included in the project's sourceGroup folder, and will return None if it is.

Fixes #1866
2013-03-22 09:44:02 -04:00

64 lines
2.7 KiB
Python
Executable File

import sys, os
from mod_pbxproj import XcodeProject
XCODESUPPORTFOLDER = ".XcodeSupport"
def update_general_include(project, projectBaseURL):
xcc_general_include_file = "%s/%s/xcc_general_include.h" % (projectBaseURL, XCODESUPPORTFOLDER)
content = ""
for file in os.listdir("%s/%s" % (projectBaseURL, XCODESUPPORTFOLDER)):
if file.endswith(".h"):
content += "#include \"%s\"\n" % file
f = open(xcc_general_include_file, "w")
f.write(content)
f.close()
if len(project.get_files_by_os_path("%s/%s" % (XCODESUPPORTFOLDER, os.path.basename(xcc_general_include_file)))) == 0:
project.add_file(xcc_general_include_file, parent=shadowGroup)
def add_file(project, shadowGroup, sourceGroup, shadowHeaderPath, shadowImplementationFilePath, sourcePath, projectBaseURL):
project.add_file(shadowHeaderPath, parent=shadowGroup)
project.add_file(shadowImplementationFilePath, parent=shadowGroup)
if sourcePath in project.get_files_by_os_path(os.path.relpath(sourcePath, projectBaseURL)):
return
project.add_file(sourcePath, parent=sourceGroup)
def remove_file(project, shadowGroup, sourceGroup, shadowHeaderPath, shadowImplementationFilePath, sourcePath, projectBaseURL):
project.remove_file("%s/%s" % (XCODESUPPORTFOLDER, os.path.basename(shadowHeaderPath)), parent=shadowGroup)
project.remove_file("%s/%s" % (XCODESUPPORTFOLDER, os.path.basename(shadowImplementationFilePath)), parent=shadowGroup)
project.remove_file(os.path.relpath(sourcePath, projectBaseURL), parent=sourceGroup)
if __name__ == '__main__':
action = sys.argv[1]
PBXProjectFilePath = sys.argv[2]
shadowHeaderFilePath = sys.argv[3]
shadowImplementationFilePath = sys.argv[4]
sourceFilePath = sys.argv[5]
projectBaseURL = sys.argv[6]
project = XcodeProject.Load(PBXProjectFilePath)
shadowGroup = project.get_or_create_group('Classes')
sourceGroup = project.get_or_create_group('Sources')
if "main.j" in sourceFilePath:
sys.exit(0)
files = project.get_files_by_os_path("%s/%s" % (XCODESUPPORTFOLDER, os.path.basename(shadowHeaderFilePath)))
if action == "add" and len(files) == 0:
update_general_include(project, projectBaseURL)
add_file(project, shadowGroup, sourceGroup, shadowHeaderFilePath, shadowImplementationFilePath, sourceFilePath, projectBaseURL)
project.save()
elif action == "remove" and len(files) == 1:
update_general_include(project, projectBaseURL)
remove_file(project, shadowGroup, sourceGroup, shadowHeaderFilePath, shadowImplementationFilePath, sourceFilePath, projectBaseURL)
project.save()