
👋 들어가기 전
항상 RIBs의 개념에서 필요한 것만 갔다 썼기때문에 쓰지 않은 것에 대해서는
그 때 그 때 알아봤다.
그런데 공식문서에서 눈이 가는 한가지 사진이 있다.

항상 Xcode에서 제공해주는 내용만 있을 줄 알았는데
저기를 건드릴 수가 있네 ??

더 늦으면 인생 절반 손해볼뻔 했다..
당장 알아보자.
✊무엇일까?
제목을 보면 대충 유추할 수 있다. 바로 파일을 만드는 템플릿이다.
☝️그래서 어디에 있는데?

~/Library/Developer/Xcode
일단 여기가 시작 포인트!
이후 Templates 폴더를 만들어준다.
mkdir -p ~/Library/Developer/Xcode/Templates
✌️.xctemplate 디렉토리 만들기
일단 RIBS를 만드는 느낌으로 가보자.
RIBs.xctemplate으로 만들어보자.

현재 이런 구조이다.
👍구성 요소
✨ 아이콘
첫번 째 구성요소는 바로 아이콘이다.
RIB의 아이콘을 사용하는 것 같으니 그대로 넣어보자.

TemplateIcon이라는 이름으로 넣어줬다.

📌 플레이스 홀더

이렇게 우리는 파일을 만들기 위해 이렇게 입력을 받는데
Xcode와 RIBs에서는 저 값을 이용해 파일을 만들 때 알맞은 위치에 넣어주는 것을 우리는 볼 수 있었다.
그 역할을 하는 것 중 하나가 바로 플레이스 홀더이다.
여기서 기본적으로 제공해주는 플레이스 홀더와 커스텀으로 사용하는
플레이스 홀더를 한번 분리해서 알아보자.
기본 제공 플레이스 홀더
플레이스홀더 | 설명 | 예시 |
___FILENAME___ | 현재 파일의 전체 이름 (확장자 포함) | MyViewController.swift |
___FILEBASENAME___ | 파일의 기본 이름(확장자 제외) | MyViewController |
___FILEBASENAMEASIDENTIFIER___ | 파일 이름을 식별자로 사용 | MyViewController |
___PROJECTNAME___ | 현재 프로젝트 이름 | MyApp |
___FULLUSERNAME___ | 현재 macOS 사용자 이름 | Hamp |
___DATE___ | 현재 날짜 | 2025-01-01 |
___YEAR___ | 현재 연도 | 2025 |
___ORGANIZATIONNAME___ |
프로젝트 조직 이름 | MyCompany |
커스텀 플레이스 홀더
이 부분은 3번째 구성요소인 .plist쪽과 같이 설명해야하지만 간단하게 커스텀 플레이스 홀더 형태만 보자.
___VARIABLE_Identifier___
바로 이 형태이다. 여기서 Identifier를 .plist에 기록한 내용과 비교하여 알맞은 값으로 대체된다.
📋.plist
plist의 key값이 어떤걸 의미하는 지 알아보자.
DefaultCompletionName (String, required)
- 파일의 기본 이름으로 사용되는 값
Description (String, required)
- 설명
Kind (String, required)
- 템플릿 종류를 의미하며 파일 or 프로젝트를 의미한다.
파일 템플릿일 경우
- Xcode.IDEFoundation.TextSubstitutionFileTemplateKind
아직 프로젝트는 찾지 못했다..
Summary (String, required)
- 요약
MainTemplateFile (String)
- 템플릿 파일이 2개 이상일 경우, 생성 후 보여질 파일을 지정
SortOrder (String, required)
- 템플릿 파일이 그룹안에서 어떤 놈이 왼쪽 (먼저) 배치 될지 값이 작을수록 먼저
- 값이 같다면 나중에 추가된게 먼저 배치
Options (Array)
- 여기가 하이라이트 Identifier를 이용해 외부에서 값을 받아 넣어주는 영역
Item (Dictionary)
- Name : 입력 받을 필드 (String)
- Description: 설명 (String)
- Type: 어떤 형태로 입력 받을지 (String)
- text: 텍스트 필드
- checkbox: 체크 박스
- static: 수정 불가
- combo: 텍스트 필드 + popup 느낌 ??
- popup: 드랍다운 메뉴
- Required: 필수 여부 (Boolean)
- Identifier: 식별자 (String)

✅ 결과
일단 Xcode 상에서 잘 보이긴한다 ??

왼쪽에 Item0에 있는 Name이 있다.
Item1이 하나 더 있으면 아래 필드가 하나 더 생길 듯??


저장하는 곳에 DefulatCompletionName의 값이 있다.
이렇게 보니 Key 변수 이름 잘 설정한 듯 ??


템플릿 swift가 이렇게 생겼다.
한번 어떤 값이 들어오는 지 사진을 봐보자.
// ___FILEBASENAME___.swift [실제로는 없는 주석 그냥 파일 이름이 저렇게 되어 있음]
// ___FILENAME___
// ___PROJECTNAME___
//
// Created by ___FULLUSERNAME___ on ___DATE___.
//
import SwiftUI
struct ___VARIABLE_className___Class: View {
var body: some View {
Text("커스텀하시어요")
}
}

결과를 보면 className에 입력한 FileA가
___VARIABLE_className___Class(className Identifier 플레이스 홀더)로
들어와 struct 명으로 들어왔다.
이후 Save As에 입력한 TestA는 ___FILEBASENAME___플레이스 홀더에 들어왔다.
😀 소감 및 마무리
더욱 많은 템플릿을 추후 다른 프로젝트에서 많이 써보고 싶다.
생각보다 쉬운데??
내가 RIBs 템플릿 만든 것 같은 느낌

출처
http://jeanetienne.net/2017/09/10/advanced-xcode-template.html
Advanced Xcode 9 File Template (Part 2) | Jean-Étienne's Blog
In the first part of this article (Simple Xcode 9 File Template) we saw how to create a simple Xcode File Template to generate a custom file. Let’s go beyond the Copy/Paste type of template, and see what we can do to make a more dynamic template with opt
jeanetienne.net
https://zeddios.tistory.com/930
Xcode ) Custom File Template만들어보기
안녕하세요 :) Zedd입니다. 쓰고있는 글이;; 많긴 한데 마무리가 안되네요. 힝구 오늘 좀 고민을 해봤는데... 어떤 사람이 ViewController를 만들 때 A와 B나 C같은걸(클래스, 프로토콜) 미리 상속or채택
zeddios.tistory.com
'iOS' 카테고리의 다른 글
DEFINES_MODULE was set 경고 (0) | 2025.03.02 |
---|---|
시뮬레이터 vs 에뮬레이터 (0) | 2025.01.26 |
샌드박스와 파일시스템 (0) | 2025.01.26 |
리팩토링 결과 발표 (0) | 2025.01.11 |
패키지 만들기 (0) | 2025.01.07 |