오랜만에 크리스마스 맞이(?) 블로그 글을 작성해봅니다,,🎄
프로젝트에서 VIP 아키텍처를 채택하여 사용하고있는데, 화면 당 같은 구조의 코드를 가진 파일을 반복해서 생성해야 하는 수고가 있었다. Xcode의 파일 템플릿을 이용하면 이러한 반복작업을 줄일 수 있다고 하여 방법을 찾아 시도해 봤다!
우선 한번쯤 사용해 봤을 Cocoa Touch Class 또한 template으로 만들어져 있는 것인데, 그 구조를 참고하여 수정하면 나만의 템플릿을 생성할 수 있다고 한다.
기존 파일 템플릿이 어떠한 구조로 만들어져 있는지 참고하기 위해서는 아래 경로로 들어가면 된다.
/Applications/Xcode.app/Contents/Developer/Platforms
/iPhoneOS.platform/Developer/Library/Xcode/Templates/File Templates/
(Finder를 통하여 찾고싶은 경우에는 패키지 내용보기로 접근할 수 있다.)
File Template 기본 구조는 다음과 같다.
.xctemplate (폴더)
- TemplateIcon.png
- File template 이미지 아이콘
- TemplateInfo.plist
- template에 관한 정보
- ___ FILEBASENAME___.swift
- 최종적으로 생성되는 파일
위 세가지 파일을 xxxx.xctemplate 형태의 이름을 가진 폴더에 넣어 올바른 위치에 생성하면 되는데, 아이콘 이미지는 기존 템플릿에서 사용하고 있는 아이콘 이미지를 복사하여 사용해도 무방하다.
custom file template 생성하는 법
-
.xctemplate 폴더 만들기
~/Library/Developer/Xcode/Templates/AAAAA/BBBBB.xctemplate
- 위 경로 처럼
~/Library/Developer/Xcode/Templates/
아래에 폴더를 생성하고, 해당 폴더 내에 .xctemplate을 생성하면된다. - 이때 상위 폴더 이름(AAAAA)이 파일 생성 인터페이스에서 헤더 부분으로 나타나게 됨!
- ~/Library/Developer/Xcode/Templates/Custom\ Templates/KnockKnock-VIPER.xctemplate
- 위 경로 처럼
-
.xctemplate 폴더를 만들었으면, 해당 폴더 안에 기존 파일 템플릿 파일들을 복사 붙여넣기 해준다.
- TemplateInfo.plist 파일을 수정한다.
-
plist파일에서는 템플릿에대한 여러가지 옵션을 부여할 수 있다.
- Kind: 템플릿 종류
- Description, Summary: 템플릿 설명
- SortOrder: 템플릿 정렬 순서
- BuildableType: 해당 값은 템플릿을 통해 파일 생성시 Targets이 test로 되어있도록 하는 디폴트 설정 값
- DefaultComletionName: 해당 template file을 만들때 미리 입력되어 있는 이름
- Option: 템플릿 생성 시 사용자로 부터 입력받을 내용 (아래 사진 부분)
-
- 이제 ___ FILEBASENAME___.swift 파일을 원하는대로 수정해주면 된다.(언더바 앞 뒤로 세개씩!)
- //___FILEHEADER___
- 파일 생성시 자동으로 생성되는 파일의 정보를 담는 주석 부분
- 코드 예
// // ViewController.swift // KnockKnock-iOS // // Created by Daye on 2022/02/13. //
- ___VARIABLE_productName (언더바 3개 1개)
- 파일 생성 시 입력한 내용으로 치환 됨
- 다음 화면에서 test로 입력한다면, ___VARIABLE_productName 부분은 test로 치환
- (해당 화면에 대한 설정은 TemplateInfo.plist 에서 할 수 있음)
- ___FILEBASENAMEASIDENTIFIER___
- 파일 이름
- 예를 들어, 파일의 이름을 ___ FILEBASENAME___ViewController.swift 로 지정하면, 해당 부분은 testViewController로 치환 된다.
- //___FILEHEADER___
다음 코드는 내가 위 3가지를 적용하여 ViewController 파일에 대한 템플릿을 작성한 것이다.
- ___ FILEBASENAME___ViewController.swift
//___FILEHEADER___
import UIKit
protocol ___VARIABLE_productName:identifier___ViewProtocol: AnyObject {
var interactor: ___VARIABLE_productName:identifier___InteractorProtocol? { get set}
}
final class ___FILEBASENAMEASIDENTIFIER___: BaseViewController<___VARIABLE_productName:identifier___View> {
// MARK: - Properties
var interactor: ___VARIABLE_productName:identifier___InteractorProtocol?
// MARK: - Life Cycle
override func viewDidLoad() {
super.viewDidLoad()
}
override func setupConfigure() {
}
}
// MARK: - ___VARIABLE_productName:identifier___ View Protocol
extension ___FILEBASENAMEASIDENTIFIER___: ___VARIABLE_productName:identifier___ViewProtocol {
}
이렇게 ViewController 뿐만아니라 Interactor, Presenter, Worker, Router 등 프로젝트에서 기본적으로 사용하는 파일들에 대하여 템플릿을 생성하여, 필요한 파일들을 손쉽게 자동으로 생성할 수 있었다.
- 적용 화면
참고
[iOS] Xcode File Template을 이용해 반복작업 줄이기
[iOS - swift] Xcode 코드 템플릿 (File Template, Custom File Template)