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

после загрузки бета-версии Xcode 9 я заметил изменения в системе файловых шаблонов.

Например, у меня был простой шаблон, который создавал 2 файла (вероятно, это вообще не должно работать). Базовые имена файлов

___FILEBASENAME___.swift

а также

___FILEBASENAME___View.swift

и создает TableCell.swift и TableCellView.swift, вот коды:

//
//  ___FILENAME___
//  ___PROJECTNAME___
//
//  Created by ___FULLUSERNAME___ on ___DATE___.
//___COPYRIGHT___
//

import Foundation
import UIKit

class ___FILEBASENAME___: UITableViewCell {

    let mainView = ___FILEBASENAME___View()

    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        setupCell()
        contentView.addSubview(mainView)
        mainView.setupView()
    }

    fileprivate func setupCell() {
        backgroundColor = UIColor.clear
        selectionStyle = .none
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

}

И просмотр файла:

//
//  ___FILENAME___
//  ___PROJECTNAME___
//
//  Created by ___FULLUSERNAME___ on ___DATE___.
//___COPYRIGHT___
//

import Foundation
import UIKit
import SnapKit

fileprivate struct Constants {

}

class ___FILEBASENAME___View: UIView {

    func setupView() {
        setupSelf()
    }

    fileprivate func setupSelf() {
            snp.makeConstraints { (make) in
                make.leading.trailing.top.bottom.equalTo(0)
        }
    }

}

Чтобы создать эти файлы, я просто выбирал шаблон из

Новые файлы...

меню, добавьте имя для напр. TableCell и нажмите Enter. Теперь, когда я это делаю, мой вывод выглядит так:

import Foundation
import UIKit

class TableCell: UITableViewCell {

    let mainView = TableCellView()

    override init(style: UITableViewCellStyle, reuseIdentifier: String?) {
        super.init(style: style, reuseIdentifier: reuseIdentifier)
        setupCell()
        contentView.addSubview(mainView)
        mainView.setupView()
    }

    fileprivate func setupCell() {
        backgroundColor = UIColor.clear
        selectionStyle = .none
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

}

а также

import Foundation
import UIKit
import SnapKit

fileprivate struct Constants {

}

class NewCellView: UIView {

    func setupView() {
        setupSelf()
    }

    fileprivate func setupSelf() {
        snp.makeConstraints { (make) in
            make.leading.trailing.top.bottom.equalTo(0)
        }
    }

}

Теперь проблема в том, что в Xcode 9 они изменили шаблоны (что-то с шаблонами на игровых площадках, как новичок вообще будет использовать шаблоны на игровых площадках?).

Вернемся к проблеме: теперь, после создания файлов из шаблона, TableCell.swift выглядит так же, но TableCellView.swift сходит с ума из-за этого изменения.

___FILEBASENAME___Просмотр

становится новым

___ИМЯ БАЗЫ ФАЙЛОВ___

так что теперь, когда я создаю TableCellView, это выглядит так:

import Foundation
import UIKit
import SnapKit

fileprivate struct Constants {

}

class TableCellViewView: UIView {

    func setupView() {
        setupSelf()
    }

    fileprivate func setupSelf() {
        snp.makeConstraints { (make) in
            make.leading.trailing.top.bottom.equalTo(0)
        }
    }

}

Теперь проблема усложняется, когда я создаю несколько файлов с зависимостями друг от друга, например, у меня есть TableCellManager с делегатом в TableCellViewControllerDelegate, теперь при создании файлов это выглядит так

TableCellManagerViewControllerDelegate

вместо этого просто

Таблевиевконтроллерделегат

___FILEBASENAME___ заменяется в зависимости от области действия, например, если вновь созданный файл

___FILEBASENAME___View.swift

использование ключевого слова «Таблица» создает TableView.swift, в котором ___FILEBASENAME___ не «Таблица», а «TableView»

Может ли кто-нибудь сказать мне, есть ли способ справиться с этим? Может быть, есть что-то новое, например ___KEYWORD___? При создании нового файла я хочу ввести ключевое слово, которое будет работать как ___FILEBASENAME___ в более старых версиях Xcode. ПОМОЩЬ!


person Maciej Zajda    schedule 29.06.2017    source источник


Ответы (1)


У меня есть рабочее решение на моем github для Xcode 9, Beta 4. Проверьте его: https://github.com/reni99/Xcode-VIPER-Template

Я получил решение отсюда: https://github.com/infinum/iOS-VIPER-Xcode-Templates/tree/master/VIPER%20Templates/Module.xctemplate/UIViewController

То, что вы ищете, это эта переменная: ___VARIABLE_moduleName___

Обязательно настройте свой TemplateInfo.plist под свои нужды.

Надеюсь это поможет :)

Ваше здоровье

person Renato Stauffer    schedule 25.07.2017
comment
Это именно то, что я искал! Большое спасибо! - person Maciej Zajda; 26.07.2017
comment
Нет проблем :) Рад, что помогло! - person Renato Stauffer; 26.07.2017