Xcode 9自定义项目模板中的文件夹引用

27
在Xcode 9中,当您创建一个组时,它也会在文件系统中创建一个链接文件夹。因此,您不需要手动为每个组创建文件夹。关于Xcode 9中与组和文件夹相关的更改的很好的解释,请参见这里
我有一个自定义的Xcode项目模板,它生成一个项目并在自定义文件夹中添加大量的Swift样板源文件。我的问题是,我只能像这样创建组文件夹:enter image description here,它表示一个未与文件系统目录关联的组。这不好,因为如果您稍后在Xcode中重命名文件夹,则不会对相应的文件系统目录产生影响。
我的目标是编写一个Xcode项目模板,将我的自定义样板swift文件添加到真实的引用文件夹中,如下所示:enter image description here
您可以从这里下载我的简化模板,并将其放置在:~/Library/Developer/Xcode/Templates下
然后打开Xcode > 文件 > 新建 > 项目,并选择Custom-Template。

TemplateInfo.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>
        <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>
        </dict>
    </dict>
</dict>
</plist>

它创建了一个像这样的项目:

enter image description here

我希望能够实现以下目标:

enter image description here

任何帮助都非常感激! :)
更新1:
我找到了一个小技巧..使用模板脚本创建自己的复杂文件夹层次结构,然后只需删除根文件夹 - 在我的情况下是“Classes”。然后打开垃圾箱并将其拖回Xcode,选择“如果需要则复制项目”并选择“创建组”。它将使用真实的引用文件夹构建文件夹结构。

这个有帮助吗?https://stackoverflow.com/questions/5575294/how-to-add-folder-reference-in-xcode-4-project-template 或 https://dev59.com/GlgR5IYBdhLWcg3wT71M - Tarun Lalwani
谢谢提供链接,但是我已经能够像那样创建组和文件夹了,这已经在我的代码中实现了。我的问题是关于Xcode 9的,请再次确认。 - balazs630
添加一个 Classes 节点和一个定义,它将向实例化的项目中添加一个文件夹。该文件夹将由蓝色文件夹表示,而不是带有黄色文件夹的组。 - Jean-Baptiste Yunès
1
我明白了...但是蓝色文件夹映射到应用程序部署包中的实际文件夹,这对于代码来说是不必要的。蓝色文件夹的真正用例是作为资产。如果某种类型的资产应该动态插入项目中,则应仅使用文件夹引用。对于普通项目文件(如类),最好使用组进行管理。 - balazs630
3
我也在寻找一个解决方案,这对于支持Xcode 9的组/文件夹链接非常重要。 - Rico Crescenzio
1
已更新原始问题并提供了一个临时解决方案。 - balazs630
2个回答

1

以下是您需要做的事情。 在节点部分,在命名文件之前指定组。

<key>Nodes</key>
<array>
<string>MyGroup/File.swift:comments</string>
<array>

下一步,在定义中使用类似以下方式将组名提供给键:
<key>Definitions</key>
<dict>
<key>MyGroup/File.swift</key>
<dict>
<key>Path</key>
<string>File.swift</string>
<key>Group</key>
<string>MyGroup</string>
</dict>

希望这有所帮助。

0

为此,可以使用像iMessage模板中使用的组件。

组件的示例是

<key>Components</key>
    <array>
        <dict>
            <key>Identifier</key>
            <string>com.apple.dt.unit.messagesextensioncomponentios</string>
            <key>Name</key>
            <string>___PACKAGENAME___ MessagesExtension</string>
            <key>ProductBuildPhaseInjections</key>
            <array>
                <dict>
                    <key>TargetIdentifier</key>
                    <string>com.apple.dt.messagesOnlyApp</string>
                </dict>
            </array>
        </dict>
    </array>

不错的发现,但据我所知,组件始终是在主应用程序文件夹之外创建的。请注意,我的组层次结构位于“示例”文件夹内。我相信与“名称”键有关,因为当您将组更改为具有链接文件夹的组时,在project.pbxproj xml文件中,此“名称”键将出现为更改后的组。 - balazs630

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接