Ссылки на папки Xcode 9 с пользовательским шаблоном проекта

В Xcode 9, когда вы создаете группу, она также создает связанную папку в файловой системе. Поэтому вам не нужно создавать папку для каждой группы вручную. Хорошее объяснение изменений в группе и папке в Xcode 9, см. Это.

У меня есть собственный шаблон проекта Xcode, который генерирует проект и добавляет множество исходных файлов шаблонов Swift в пользовательские папки. Моя проблема в том, что я могу создавать только такие групповые папки: enter image description here, которая представляет группу, не связанную с файловой системой. Это плохо, потому что если вы позже переименуете папку в Xcode, это не повлияет на соответствующий каталог файловой системы.

Моя цель - написать шаблон проекта Xcode, который добавит мои настраиваемые файлы шаблонов swift в настоящие справочные папки следующим образом: enter image description here.

Вы можете скачать мой упрощенный шаблон отсюда, поместить его под: ~/Library/Developer/Xcode/Templates

Затем Xcode> File> New> Project и выберите 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:

Я нашел небольшое обходное решение. Создайте свою собственную сложную иерархию папок со сценарием шаблона, а затем просто удалите корневую папку - в моем случае "Классы". Затем откройте корзину и перетащите ее обратно в Xcode, выберите "Скопируйте элементы при необходимости" и выберите "Создать группы". Он создаст структуру папок с реальными справочными папками.

Ответы

Ответ 1

Для этой цели можно использовать Компоненты, используемые в шаблоне 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>