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 update_general_include(projectBaseURL): f = open("%s/%s/xcc_general_include.h" % (projectBaseURL, XCODESUPPORTFOLDER), "w") for file in os.listdir("%s/%s" % (projectBaseURL, XCODESUPPORTFOLDER)): if file.endswith(".m"): f.write("#include \"%s\"\n" % file) f.close() 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('Classes') 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) update_general_include(projectBaseURL)