본문 바로가기

iOS/PROJECT

[burstcamp] XCTemplate

이미지 클릭시 burstcamp github로 이동합니다.

 

 

팀에서 코드 템플릿을 만들어 사용하자는 의견이 있어서

Notion에 템플릿을 적어두고 구현할 때마다 복사해서 사용하기로 했었습니다.

 

템플릿에는 ViewController에서 구현해야하는

required init, loadView, viewDidLoad, configureUI, bind, MARK 주석

등을 적어두었습니다.

 

그러던 도중 XCTemplate 라는 것을 처음 딜라이트룸의 벨로그 글을 보고 알게되었습니다.

 

https://medium.com/delightroom/xcode-xctemplate-filetemplate-을-통해-팀-생산성을-높여보자-ff2d20f5eaa0

 

[Xcode] XCTemplate(FileTemplate)을 통해 팀 생산성을 높여보자

딜라이트룸 iOS 그룹의 생산성 높이기

medium.com

 

이 글을 보고 불필요하게 반복적이던

Notion에서 템플릿을 복사해서 ViewController 파일을 붙여넣는 작업의 비용을 줄일 수 있을 것이라 생각하고

얼죽아팀의 ViewController XCTemplate을 만들어보기로 했습니다.

 

 

Xcode에서 가장 많이 보는 화면 중에 하나인 파일 템플릿 선택 창에

얼죽아 팀의 ViewController를 생성하는 방법을 기록해두려고 합니다.

 

어디에 File Template을 생성해야할까?

제가 파일 템플릿을 생성한 위치는

[Ventura 13.0, Xcode 14.1] 을 기준으로 다음과 같은 위치에 ViewController.xctemplate 폴더를 생성하였습니다.

여기서 ViewController의 이름이 위 사진에서 템플릿 이름으로 선택창에 나타나게 됩니다.

(XCTemplate은 기본적으로 폴더 기반으로 이루어져 있고, 내부에 필요한 파일을 넣는 형식으로 구성된다고 합니다.)

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/File Templates

 

xctemplate 폴더 안에는 무엇을 넣어야할까?

1. TemplateIcon.png

2. TemplateInfo.plist

3. ___FILEBASENAME___.swift

 

이렇게 세가지의 파일을 넣으면 템플릿을 쉽게 완성할 수 있습니다.

 

1. TemplateIcon.png

파일 템플릿의 사진입니다. 필요한 템플릿 사진을 넣으면 되고 저는 2x 사진까지 넣어보았습니다.

 

2. TemplateInfo.plist 

템플릿을 생성하는데 필요한 정보들이 저장되어있는 파일입니다.

처음에 plist 파일을 직접 생성하다가 잘 적히지 않는 바람에 🫠

이미 존재하는 xctemplate의 plist 파일을 복사, 변경해서 사용하였습니다.

 

TemplateInfo.plist
0.00MB

 

꼭 적어야하는 템플릿의 내용을 보면

 

- Kind

File template: Xcode.IDEFoundation.TextSubstitutionFileTemplateKind

Project template : Xcode.Xcode3.ProjectTemplateUnitKind

 

저는 Filetemplate을 사용했기 때문에 위의 것으로 적어주었습니다.

 

- Sort Order

템플릿이 보여지는 순서를 정해줍니다.

 

아래는 선택사항 입니다.

 

- Platforms

ios : com.apple.platform.iphoneos

macosx: com.apple.platform.macosx

 

- Options

옵션에서 뭘 지정하는 건지 뭔지 혼자 삽질을 했었는데

혼자 이해한 바로는 템플릿 선택시 옵션으로 지정해서 적을 수 있게 해주는 Item이라고 생각했습니다.

(예를들어 코코아터치 템플릿은 UIViewController를 지정한다던지)

- Item

저는 MyPage를 적으면 파일과 클래스명이 MyPageViewController로 생성되게 하기 위하여 Name을 받아주었습니다.

간단하게 템플릿 info를 작성을 완료했습니다.

 

 

 

3. ___FILEBASENAME___.swift

Xcode에서 생성되는 파일입니다. Notion에 적어뒀던 템플릿 내용이 들어가게 됩니다.

 

저희의 ViewController 템플릿입니다.

중간 중간 ___어쩌구___ 라고 적혀져 있는 것들이 보이는데 찾아보니 매크로 변수..? 라고 하는데  정확한 명칭을 찾지 못했습니다.

 

이 템플릿에 쓰여진 것 위주로 살펴봅시다.

이렇게 생성하게되면 이 템플릿을 생성한 사용자, 시간에 맞게 코드에 값이 들어가게 됩니다.

___PROJECTNAME___ : 프로젝트명
___FULLUSERNAME___ : 생성한 사용자 이름
___DATE___: 날짜
___YEAR___ : 년도
___ORGANIZATIONNAME___
___VARIABLE_ProductName___ : 아까 생성한 Identifier 변수
//
//  ___VARIABLE_ProductName___ViewController.swift
//  ___PROJECTNAME___
//
//  Created by ___FULLUSERNAME___ on ___DATE___.
//

import UIKit

final class ___VARIABLE_ProductName___ViewController: UIViewController {
    
    // MARK: - Properties
    
    private var view: <#View#>
    
    private var viewModel: <#ViewModel#>
    
    // MARK: - Initializer
    
    init(viewModel: <#ViewModel#>) {
        self.viewModel = viewModel
        super.init(nibName: nil, bundle: nil)
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    // MARK: - Life Cycle
    
	override func loadView() {
    	<#code#>
	}

    override func viewDidLoad() {
        configureUI()
        bind()
    }
    
    // MARK: - Methods
    
    private func configureUI() {
        <#code#>
    }
    
    private func bind() {
        <#code#>
    }
}

 

팀원들과 함께 쓰려면?

아쉬운 부분 중에 하나였는데 직접 팀원들이 공유한 폴더를 다운 받아서 맨 처음의 경로에 넣어주어야 했습니다.

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/File Templates

 

후기

ViewController를 생성할 때마다 Notion을 열어보던 번거로움이 사라졌고,

팀원들의 코드도 일관성있게 바뀌었다는 점이 가장 큰 장점이었습니다.

 

한가지 아쉬운 점은 로컬 설정이라 직접 넣어주어야 한다는 점..? 

RIBs로 어떻게 한다는 글도 보았는데 그쪽 지식은 0라서 추후에 또 적용하는 좋은 방식이 있다면 찾아봐야겠습니다.

 

 

 

 

https://tech.lezhin.com/2019/12/16/ios-file-template

 

[iOS] Xcode File Template을 이용해 반복작업 줄이기

프리미엄 웹툰 서비스 - “레진코믹스” 를 만들고 있는 레진엔터테인먼트가 운영하는 기술 블로그입니다. 글로벌 콘텐츠 플랫폼을 만들면서 익힌 실전 경험과 정보, 최신 기술, 팁들을 공유하

tech.lezhin.com

https://ios-development.tistory.com/760

 

[iOS - swift] Xcode 코드 템플릿 (File Template, Custom File Template)

Xcode File Template 파일을 생성할 때 기존에 정의한 Template에 따라 생성되는 로직 아래의 경로로 이동하면 기존의 template들을 확인 가능 cd /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Develop

ios-development.tistory.com

https://eunjin3786.tistory.com/347

 

[iOS] XCode Template + install script 만들기

[ 목표 ] RIBs 에서 Template과 template을 xcode에 설치할 수 있는 스크립트를 제공하는 것처럼 두개의 템플릿 (Reactor Template / Reactor Unit Tests Template)과 install 스크립트를 만들어보기! 그리고 Reactor Template

eunjin3786.tistory.com