2017-06-29 20 views
8

po pobraniu wersji beta Xcode 9 zauważyłem zmianę w systemie szablonów plików.Jak zmieniły się niestandardowe szablony Xcode 9?

Na przykład miałem prosty szablon, który tworzył 2 pliki (prawdopodobnie nie powinien działać w ten sposób). . Nazwy plików baza są

___ ___ FILEBASENAME Swift

i

___ ___ FILEBASENAME View.swift

i jego tworzy TableCell.swift i TableCellView.swift, oto kody:

// 
// ___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") 
    } 

} 

A View file:

// 
// ___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) 
     } 
    } 

} 

do stworzenia tego pliki właśnie zbieranie szablon z

Akt Nowych ...

menu, dodać nazwę dla ex. TableCell i wciśnij enter. Teraz, kiedy robię to moje wyjście wyglądał następująco:

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") 
    } 

} 

i

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

} 

Teraz problem jest w Xcode 9 zmienili rzeczy w szablonach (coś z szablonami na placach zabaw, jak newbie użyłby szablony w placówkach mimo to?).

Powrót do problemu, teraz po utworzeniu plików z szablonu, TableCell.swift wygląda tak samo, ale TableCellView.swift szaleje z powodu tej zmiany.

___FILEBASENAME___View

staje nowy

___FILEBASENAME___

więc teraz, gdy tworzę TableCellView wygląda to tak:

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

} 

Teraz problem staje się bardziej skomplikowana, gdy tworzę wiele plików z zależnościami od siebie na przykład mam TableCellManager z delegatem do TableCellViewControllerDelegate podczas tworzenia plików teraz wygląda to tak

TableCellManagerViewControllerDelegate

zamiast tylko

TableViewControllerDelegate

___FILEBASENAME___ otrzymuje w zależności od zakresu, czy nowo utworzony plik jest na przykład

___ ___ FILEBASENAME View.swift

za pomocą słowa kluczowego "stół" tworzy TableView.swift - w którym ___FILEBASENAME___ nie jest "Tabela" ale "TableView"

Czy ktoś może mi powiedzieć, czy istnieje sposób, aby z nim poradzić? Może jest coś nowego jak ___KEYWORD___? Przy tworzeniu nowego pliku chcę wprowadzić słowo kluczowe, które działałoby jak ___FILEBASENAME___ w starszych wersjach Xcode. WSPARCIE!

Odpowiedz

10

Mam roztwór roboczy na moim github dla Xcode 9 Beta 4. Sprawdź: https://github.com/reni99/Xcode-VIPER-Template

mam rozwiązanie stąd: https://github.com/infinum/iOS-VIPER-Xcode-Templates/tree/master/VIPER%20Templates/Module.xctemplate/UIViewController

Co szukasz jest to zmienna: ___VARIABLE_moduleName___

Upewnij się, aby dostosować swoją TemplateInfo.plist do swoich potrzeb.

Nadzieja to pomaga :)

Cheers

+1

To jest dokładnie to, czego szukasz! Dziękuję Ci bardzo! –

+0

Nie ma problemu :) Cieszę się, że pomogło! –

Powiązane problemy