1. 소개
1.1 Xcode 템플릿의 기본 개념
Xcode에서 제공하는 템플릿은 파일이나 클래스를 미리 정의된 형식으로 생성할 수 있게 해줍니다. 예를 들어 Swift 클래스 파일을 만들 때 기본적으로 필요한 init 메서드나 프로퍼티 등을 템플릿에 미리 정의해두면, 개발자는 불필요한 반복 작업을 줄이고 중요한 로직 구현에만 집중할 수 있습니다.
템플릿을 생성할 때는 TemplateInfo.plist 라는 파일을 사용하여 해당 템플릿이 어떤 파일들을 생성할지, 어떤 옵션을 제공할지를 정의합니다.
2. Xcode 파일 템플릿의 구조
2.1 템플릿 파일 구성
파일 템플릿을 만들기 위해서는 특정한 파일 구조를 따라야 합니다. Xcode에서 템플릿을 인식하고 동작시키기 위해 템플릿 폴더 내에는 여러 가지 파일과 설정이 필요합니다. 그 중 가장 중요한 파일이 바로 TemplateInfo.plist입니다. 이 파일은 템플릿이 어떤 방식으로 동작할지를 결정하는 핵심 설정 파일로, 여기에서 템플릿의 종류, 생성할 파일, 지원할 플랫폼 등을 정의하게 됩니다.
2.2 TemplateInfo.plist 개요
TemplateInfo.plist는 파일 템플릿의 동작을 정의하는 핵심 파일입니다. 이 파일은 템플릿의 속성을 설명하고, 옵션을 제공하여 사용자가 필요한 파일을 생성할 수 있게 해줍니다. 주요 속성들은 아래와 같이 구분됩니다.
- Kind: 템플릿의 종류를 정의합니다.
- Summary: 템플릿의 짧은 설명으로, Xcode의 파일 생성 화면에서 사용자에게 간단히 설명합니다.
- Description: 템플릿의 보다 상세한 설명으로, 사용자가 템플릿의 기능을 파악하는 데 도움을 줍니다.
- SortOrder: 파일 생성 화면에서 템플릿의 표시 순서를 결정합니다. 값이 낮을수록 상단에 배치됩니다.
- AllowedTypes: 템플릿이 지원하는 파일 유형을 정의하며, 예를 들어 Swift 파일이나 Objective-C 파일에 템플릿을 적용할 수 있도록 설정합니다.
- MainTemplateFiles: 템플릿에서 실제로 생성될 파일을 정의합니다.
3. 파일 템플릿 속성
3.1 Kind
Kind는 템플릿의 종류를 정의하는 속성으로, 템플릿이 어떤 역할을 할지를 결정합니다. Xcode에서 파일 템플릿으로 인식되기 위해서는 Kind 속성에 반드시 Xcode.IDEKit.TextSubstitutionFileTemplateKind 값을 사용해야 합니다. 이 값을 사용하면 Xcode는 이 템플릿이 새로운 파일을 생성하는 템플릿임을 인식하게 됩니다.
3.2 Summary
Summary 속성은 템플릿에 대한 짧은 설명을 나타냅니다. 사용자가 Xcode에서 파일을 생성할 때, 템플릿 선택 화면에서 표시되는 간단한 요약 설명입니다. 이 속성은 사용자가 템플릿의 기능을 빠르게 파악하는데 주용한 역할을 하기 때문에 간결하고 명확하게 작성하는 것이 좋습니다.
3.3 Description
Description은 템플릿의 더 자세한 설명을 제공합니다. Xcode에서 사용자가 파일을 생성할 때 템플릿을 선택하면 이 설명이 UI에 표시됩니다. 이 속성은 템플릿이 무엇을 하고, 언제 사용해야 하는지에 대한 상세한 정보를 담고 있어야 합니다.
3.4 SortOrder
SortOrder는 템플릿 목록에서 표시되는 순서를 결정합니다. 값이 낮을수록 목록의 상단에 표시되며, 값이 높을수록 하단에 나타납니다. 예를 들어, 커스텀 템플릿을 목록의 상단에 배치하고 싶다면 작은 값을 설정하면 됩니다.
3.5 AllowedTypes
AllowedTypes는 템플릿이 생성할 수 있는 파일 유형을 정의하는 속성입니다. 예를 들어, Swift, Objective-C 또는 특정 확장자를 가진 파일에만 템플릿을 적용하 수 있도록 제한할 수 있습니다. 이 속성은 파일 생성 시 파일 유형 필터링에 유용합니다.
3.6 DefaultCompletionName
DefaultCompletionName은 사용자가 파일 이름을 입력하지 않았을 때 자동으로 사용할 기본 파일 이름을 정의합니다. 이 속성은 새로운 파일을 생성할 때 파일 이름 필드에 자동으로 채워지는 기본값입니다.
3.7 MainTemplateFiles
MainTemplateFiles는 템플릿에서 생성될 주용 파일들을 지정하는 속성입니다. 이 속성은 배열 형태로 템플릿에 포함된 파일 이름과 경로를 명시합니다. 이때 ___FILEBASENAME___와 같은 변수를 사용하여 파일 이름을 동적으로 생성할 수 있습니다.
3.8 Platforms
Platforms는 템플릿이 지원하는 플랫폼을 정의하는 속성입니다. iOS, macOS, tvOS, watchOS 등 여러 플랫폼에서 템플릿이 동작할 수 있도록 설정할 수 있으며, 특정 플랫폼에 맞춘 파일을 생성하고자 할 때 유용합니다.
4. 옵션 구성
파일 템플릿에 다양한 사용자 정의 옵션을 추가하면 템플릿을 더욱 유연하게 사용할 수 있습니다. 이러한 옵션들은 사용자가 파일을 생성할 때 선택하거나 입력할 수 있는 항목을 제공합니다. 이를 통해 템플릿을 더욱 세밀하게 제어할 수 있으며, 코드나 파일의 동작을 원하는 대로 설정할 수 있습니다.
옵션 구성은 TemplateInfo.plist 파일 내에서 이루어지며, 각 옵션은 Options 배열에 추가됩니다.
4.1 Identifier
Identifier는 옵션의 고유 식별자로, Xcode에서 해당 옵션을 참조할 때 사용됩니다. 이 식별자는 TemplateInfo.plist 내부에서 유일해야 하며, 각 옵션이 정확이 구분되도록 정의해야 합니다.
4.2 Required
Required는 해당 옵션이 필수인지 여부를 결정합니다. true로 설정하면, 파일을 생성할 때 사용자가 반드시 이 옵션에 값을 입력하거나 선택해야 합니다. 필수 옵션을 정의함으로써, 템플릿이 동작하는데 필요한 값을 사용자가 빠뜨지리 않도록 할 수 있습니다.
4.3 Name
Name은 Xcode UI에서 사용자에게 표시될 옵션의 이름을 정의합니다. 이 이름은 사용자가 옵션을 선택할 때 UI상에 나타나므로, 사용자 친화적인 이름으로 설정하는 것이 중요합니다. 사용자가 쉽게 이해할 수 있는 명확한 이름을 사용하여 UX를 개선할 수 있습니다.
4.4 Description
Description은 해당 옵션이 무엇을 하는지에 대한 설명을 작성하는 속성입니다. 이 설명은 Xcode UI에서 사용자가 옵션을 선택하거나 값을 입력할 때 도움이 되는 정보를 제공합니다. 옵션이 어떤 역할을 하는지 명확하게 설명함으로써, 사용자가 쉽게 이해할 수 있도록 도와줍니다.
4.5 Type
Type 속성은 옵션의 데이터 유형을 정의합니다. Xcode 템플릿에서 지원하는 유형으로는 text, static, popUp, bool 등이 있으며, 이를 통해 옵션의 입력 방식이나 선택 방식을 결정할 수 있습니다.
text: 사용자가 자유롭게 텍스트를 입력할 수 있는 필드를 제공합니다.
static: 고정된 값을 사용합니다.
popUp: 드롭다운 메뉴에서 미리 정의된 값 중 하나를 선택할 수 있게 합니다.
bool: 체크박스 형태로 선택할 수 있습니다.
4.6 NotPersisted
NotPersisted는 옵션 값을 템플릿이 생성될 때 영구적으로 저장하지 않도록 설정하는 속성입니다. 기본적으로 템플릿의 옵션 값은 파일 생성 시 자동으로 파일이나 설정에 저장되지만, NotPersisted를 true로 설정하면 이 값은 저장되지 않고 일회성으로만 사용됩니다. 즉, 파일 생성 이후에는 해당 값이 저장되지 않으며, 다음 파일 생성 시에는 새로운 값을 입력해야 합니다.
4.7 RequiredOptions
RequiredOptions는 특정 옵션을 선택했을 때, 다른 옵션들이 필수적으로 선택되어야 하는지를 정의합니다. 이를 통해 옵션 간의 상호 의존성을 설정할 수 있습니다. 예를 들어, 옵션 A를 선택하면 옵션 B와 C가 자동으로 필수 선택 항목이 되는 경우를 설정할 수 있습니다.