Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- rxswift
- Clean Code
- 애니메이션
- ribs
- Xcode
- 리펙토링
- UICollectionView
- 리팩토링
- swiftUI
- swift documentation
- clean architecture
- tableView
- SWIFT
- UITextView
- 리펙터링
- 스위프트
- Protocol
- uiscrollview
- RxCocoa
- combine
- HIG
- uitableview
- map
- collectionview
- ios
- Refactoring
- Observable
- 클린 코드
- Human interface guide
- MVVM
Archives
- Today
- Total
김종권의 iOS 앱 개발 알아가기
[iOS - swift] 1. Tuist로 모듈화 - Templates (tuist scaffold, Project.swift, .stencil) 본문
iOS 응용 (swift)
[iOS - swift] 1. Tuist로 모듈화 - Templates (tuist scaffold, Project.swift, .stencil)
jake-kim 2023. 3. 11. 00:43* 목차
템플릿화
- 템플릿 코드를 미리 작성해놓고, 이 템플릿 코드를 실행하면 자동으로 커맨드 라인으로 넣은 값이 적용되도록 구현하는게 목적
- Tuist 템플릿 코드 종류
- .swift
- .stencil
템플릿화 방법
- 예제를 위해 디렉토리 준비
- jake.swift는 템플릿중 하나이며, tuist scaffold를 이용하여 현재 디렉토리에 템플릿에서 입력한 내용의 코드가 생성
- jake.swift는 아래에서 계속
주의)
1) 이름을 꼭 Tuist, Templates으로 아래처럼 설정해야 동작함
2) Templates하위에 있는 폴더 이름과 그 폴더 안에 있는 .swift 파일 이름이 동일해야함 (jake 디렉토리 == jake.swift)
.
└── Tuist
└── Templates
└── jake
└── jake.swift
- jake.swift 템플릿
- nameAttribute는 커맨드 라인에서 --name1과 같이 입력될 값
- .required()이면 커맨드 라인에서 반드시 받아야하는 것이며, .optional()인 경우 옵셔널로 받는다는 의미
import ProjectDescription
// command line 입력 --name 파라미터에 들어가는 값
// ex) tuist scaffold jake --name1 hihi
let nameAttribute: Template.Attribute = .required("name1")
let template = Template(
description: "Custom template",
attributes: [
nameAttribute
],
items: [
.string(
path: "README.md",
contents: "# \(nameAttribute)"
)
]
)
- README.md 생성
- scaffold 사용 - scaffold는 템플릿을 참고하여 파일을 생성하는 명령어
tuist scaffold <templates 하위에 있는 폴더> --name1 hihi
결과)
.
└── Tuist
├── README.md
└── Templates
└── jake
└── jake.swift
- README.md 파일을 보면 아래처럼 내용이 등장 (템플릿 적용됨)
# hihi
.stencil, .swift 템플릿화
- 지금까진 .string(path:contents:)로 템플릿화를 사용
import ProjectDescription
let nameAttribute: Template.Attribute = .required("name1")
let template = Template(
description: "Custom template",
attributes: [
nameAttribute
],
items: [
.string(
path: "README.md",
contents: "# \(nameAttribute)" // <-
)
]
)
- contents에 들어가는 영역도 템플릿화 하고 싶은 경우, .file(path:templatePath:)를 사용하고 templatePath에 미리 만들어놓은 .stencil or .swift 사용
- .stencil이란 템플릿할때 자주 사용하는 확장자명(문법은 이곳 참고)
- README.stencil 템플릿을 만들고, 이 템플릿에 입력한 커맨드 라인의 이름으로 자동으로 .swift 파일이 생성되도록 구현
- jake.swift 파일 위치와 같은 디렉토리에 추가
// 코드 출처: https://sarunw.com/posts/tuist-template/
# Welcome {{ name | capitalize }}
{% if name != "jake" %}
Nice to meet you!
{% endif %}
(결과)
.
└── Tuist
├── README.md
└── Templates
└── jake
├── README.stencil
└── jake.swift
- jake.swift파일 수정
- items에 .file 추가
let nameAttribute: Template.Attribute = .required("name1")
let template = Template(
description: "Custom template",
attributes: [
nameAttribute
],
items: [
// .string(
// path: "README.md",
// contents: "# \(nameAttribute)"
// ),
.file(
path: "README.md",
templatePath: "README.stencil"
)
]
)
- tuist scaffold로 다시 생성
tuist scaffold jake --name1 jake
(만들어진 README.md)
// 코드 출처: https://sarunw.com/posts/tuist-template/
# Welcome
Nice to meet you!
* 전체 코드: https://github.com/JK0369/ExTuist-1
* 참고
https://github.com/tuist/tuist
https://sarunw.com/posts/tuist-template/
'iOS 응용 (swift)' 카테고리의 다른 글
Comments