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

时间:2018-05-20 11:49:52

标签: ios xcode templates directory project

在Xcode 9中,当您创建组时,它也会在文件系统中创建链接文件夹。因此,您不需要手动为每个组创建文件夹。关于Xcode 9中的组和文件夹相关更改的一个很好的解释,see this

我有一个自定义Xcode项目模板,它生成一个项目并在自定义文件夹中添加大量Swift样板源文件。我的问题是我只能创建这样的组文件夹:enter image description here,它代表一个与文件系统目录无关的组。它不好,因为如果你以后重命名Xcode中的文件夹,它将对相应的文件系统目录没有影响。

我的目标是编写一个Xcode项目模板,将我的自定义样板文件快速文件添加到真实的参考文件夹中,如下所示:enter image description here

您可以从here下载我的简化模板,将其放在:〜/ Library / Developer / Xcode / Templates

然后Xcode>文件>新>单击项目,然后选择自定义模板。

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:

我找到了一个小的解决方法..使用模板脚本创建自己的复杂文件夹层次结构然后只需删除根文件夹 - 在我的情况下&#34; Classes&#34;。然后打开废纸篓并将其拖回Xcode,选择&#34;如果需要,复制项目&#34;并选择&#34;创建群组&#34;。它将使用真实的参考文件夹构建文件夹结构。

2 个答案:

答案 0 :(得分:0)

为此,可以使用imessages模板中使用的组件

组件示例

<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>

答案 1 :(得分:0)

这是您需要做的。 在命名文件之前,在节点部分中指定组。

   func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCell(withIdentifier: "StatusTableViewCell") as! StatusTableViewCell
        statusViewModel.configurationStatusCell(cell: cell, forRowAtIndexPath: indexPath as NSIndexPath)

        guard  statusViewModel.progressValues(indexValue: indexPath.row) >= 50 else{

            cell.backgroundStatusView.backgroundColor = .blue
           return cell
        }
        cell.backgroundStatusView.backgroundColor =.red


        return cell
    }
}

接下来,定义中会在密钥中提供组名,如下所示:

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

希望这会有所帮助。