如何让Xcode 9自定义项目模板生成关联文件系统的Folder References?
解决Xcode模板生成关联文件系统Folder References的问题
嘿,我明白你的痛点——现在你的模板生成的是虚拟Group(黄色那种,改名字不影响本地文件夹),想要改成Xcode里的蓝色Folder References,也就是和文件系统真实绑定的文件夹。这得从模板的目录结构和TemplateInfo.plist配置入手,具体操作如下:
第一步:先搭好模板的本地目录结构
首先在你的Custom-Template模板文件夹里,手动创建和你想要生成的项目完全一致的文件夹层级:
Custom-Template/ ├── Classes/ │ ├── Interfaces/ │ │ ├── CustomInterface.swift
这样模板在生成项目时,会直接把这些文件夹复制到项目目录里,为后续绑定Folder Reference打好基础。
第二步:修改TemplateInfo.plist配置
核心是给每个需要绑定的文件夹添加FolderReference标记,同时调整层级关联。把你原来的plist替换成下面的内容:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Kind</key> <string>Xcode.Xcode3.ProjectTemplateUnitKind</string> <key>Concrete</key> <true/> <key>Identifier</key> <string>custom-swift.xcodeTemplate</string> <key>Description</key> <string>Swift starter project for iOS projects</string> <key>Ancestors</key> <array> <string>com.apple.dt.unit.cocoaTouchFramework</string> </array> <key>Nodes</key> <array> <string>Classes/Interfaces/CustomInterface.swift</string> </array> <key>Definitions</key> <dict> <!-- 把Classes标记为Folder Reference --> <key>Classes</key> <dict> <key>Group</key> <array/> <key>Path</key> <string>Classes</string> <key>FolderReference</key> <true/> <key>TargetIndices</key> <array> <integer>0</integer> </array> </dict> <!-- 把Interfaces标记为Classes下的Folder Reference --> <key>Classes/Interfaces</key> <dict> <key>Group</key> <array> <string>Classes</string> </array> <key>Path</key> <string>Classes/Interfaces</string> <key>FolderReference</key> <true/> <key>TargetIndices</key> <array> <integer>0</integer> </array> </dict> <!-- 配置.swift文件的归属 --> <key>Classes/Interfaces/CustomInterface.swift</key> <dict> <key>Group</key> <array> <string>Classes</string> <string>Interfaces</string> </array> <key>Path</key> <string>Classes/Interfaces/CustomInterface.swift</string> <key>TargetIndices</key> <array> <integer>0</integer> </array> </dict> </dict> </dict> </plist>
关键配置解释
FolderReference <true/>:这是核心,告诉Xcode这个条目是和文件系统绑定的Folder Reference,生成后会显示为蓝色文件夹TargetIndices:指定把这些文件夹/文件添加到哪个项目目标里,一般0就是主目标- 层级配置:要从根文件夹到子文件夹再到文件依次配置,确保每个Folder Reference都能正确嵌套在上级文件夹下
第三步:验证效果
把修改后的模板放到~/Library/Developer/Xcode/Templates,重启Xcode后新建项目试试:
- 生成的
Classes和Interfaces会变成蓝色的Folder Reference - 现在在Xcode里重命名这些文件夹,本地文件系统里的对应目录也会跟着变,完美解决你之前的问题
额外:如果需要动态生成文件夹
要是你的模板需要根据参数动态创建文件夹(不是预先在模板里写死),可以加个脚本辅助:
- 在模板里建个
Script文件夹,放个create_folders.sh脚本:
#!/bin/bash mkdir -p "${PROJECT_DIR}/Classes/Interfaces"
- 在
TemplateInfo.plist里加个PostProcess配置,让模板生成后自动运行脚本:
<key>PostProcess</key> <array> <string>Script/create_folders.sh</string> </array>
再结合上面的Folder Reference配置,就能动态生成绑定文件系统的文件夹结构了。
内容的提问来源于stack exchange,提问作者balazs630
相关产品推荐
相关产品推荐

