使用pbxproj Python库添加文件夹引用时路径重复及类型错误问题
问题分析与解决方案
你的问题出在路径参数的相对路径定义错误,以及add_folder方法在指定parent组时的路径拼接逻辑:
- 当指定
parent=ondemand_group(即FolderOne组)时,add_folder的path参数需要是相对于项目根目录的完整相对路径,而非相对于parent组的路径。你传入的'FolderTwo'会被库解析为项目根下的FolderTwo,但实际该文件夹在FolderOne下,导致库错误拼接路径,生成了{ABS_PATH}/MyProject/FolderOne/MyProject/FolderOne/FolderTwo这种重复路径,最终找不到文件夹所以显示红色。 - 空文件夹本身不会导致红色显示,只要路径正确,Xcode会将空的文件夹引用显示为灰色文件夹。
修正后的代码方案
方案1:使用相对于项目根的完整相对路径
from pbxproj import XcodeProject from pbxproj.pbxextensions import FileOptions # 打开项目 project = XcodeProject.load('{ABS_PATH}/MyProject.xcodeproj/project.pbxproj') ondemand_group = project.get_or_create_group(name='FolderOne') file_options = FileOptions( create_build_files=True, add_groups_relative=False ) # 改为相对于项目根的完整路径:FolderOne/FolderTwo relative_path = 'FolderOne/FolderTwo' folder = project.add_folder( path=relative_path, parent=ondemand_group, create_groups=False, # 确保创建文件夹引用而非组 target_name='MyTarget', file_options=file_options ) project.save()
方案2:使用绝对路径(更可靠,避免相对路径歧义)
import os from pbxproj import XcodeProject from pbxproj.pbxextensions import FileOptions # 项目根目录绝对路径 project_root = '{ABS_PATH}/MyProject' # 目标文件夹绝对路径 folder_path = os.path.join(project_root, 'FolderOne', 'FolderTwo') # 打开项目 project = XcodeProject.load(os.path.join(project_root, 'MyProject.xcodeproj', 'project.pbxproj')) ondemand_group = project.get_or_create_group(name='FolderOne') file_options = FileOptions( create_build_files=True, add_groups_relative=False ) folder = project.add_folder( path=folder_path, parent=ondemand_group, create_groups=False, target_name='MyTarget', file_options=file_options ) project.save()
额外说明
create_groups=False的设置是正确的,确保生成的是文件夹引用(蓝色文件夹)而非组(黄色文件夹)。add_groups_relative=False保持默认即可,该参数控制是否将路径相对于parent组解析,但使用完整相对路径或绝对路径时,该参数不会造成干扰。
内容的提问来源于stack exchange,提问作者JordiLaForge
相关产品推荐
相关产品推荐

