You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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里重命名这些文件夹,本地文件系统里的对应目录也会跟着变,完美解决你之前的问题

额外:如果需要动态生成文件夹

要是你的模板需要根据参数动态创建文件夹(不是预先在模板里写死),可以加个脚本辅助:

  1. 在模板里建个Script文件夹,放个create_folders.sh脚本:
#!/bin/bash
mkdir -p "${PROJECT_DIR}/Classes/Interfaces"
  1. 在TemplateInfo.plist里加个PostProcess配置,让模板生成后自动运行脚本:
<key>PostProcess</key>
<array>
    <string>Script/create_folders.sh</string>
</array>

再结合上面的Folder Reference配置,就能动态生成绑定文件系统的文件夹结构了。

内容的提问来源于stack exchange,提问作者balazs630

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:18:11