플러그인
플러그인은 여러 프로젝트에서 Tuist 아티팩트를 공유하고 재사용하기 위한 도구입니다. 다음 아티팩트가 지원됩니다:
- 프로젝트 설명 헬퍼를 여러 프로젝트에서 사용
- 템플릿을 여러 프로젝트에서 사용
- 여러 프로젝트에서 태스크 사용
- 여러 프로젝트에서 리소스 접근자 템플릿 사용
플러그인은 Tuist의 기능을 간단하게 확장할 수 있도록 설계되었습니다. 따라서 고려해야 할 몇 가지 제한 사항이 있습니다:
- 플러그인은 다른 플러그인에 의존할 수 없습니다.
- 플러그인은 서드파티 Swift 패키지에 의존할 수 없습니다.
- 플러그인은 해당 플러그인을 사용하는 프로젝트의 프로젝트 설명 헬퍼를 사용할 수 없습니다.
더 많은 유연성이 필요하다면, 도구에 대한 기능 제안을 고려하거나 Tuist의 생성 프레임워크인 TuistGenerator을 기반으로 자체 솔루션을 구축해 보세요.
플러그인 유형#
프로젝트 설명 헬퍼 플러그인#
프로젝트 설명 헬퍼 플러그인은 플러그인 이름을 선언하는 Plugin.swift 매니페스트 파일과 헬퍼 Swift 파일을 포함하는 ProjectDescriptionHelpers 디렉터리로 구성된 디렉터리로 표현됩니다.
import ProjectDescription
let plugin = Plugin(name: "MyPlugin")
.
├── ...
├── Plugin.swift
├── ProjectDescriptionHelpers
└── ...
리소스 접근자 템플릿 플러그인#
생성된 리소스 접근자를 공유해야 하는 경우 이 유형의 플러그인을 사용할 수 있습니다. 이 플러그인은 플러그인 이름을 선언하는 Plugin.swift 매니페스트 파일과 리소스 접근자 템플릿 파일을 포함하는 ResourceSynthesizers 디렉터리로 구성된 디렉터리로 표현됩니다.
import ProjectDescription
let plugin = Plugin(name: "MyPlugin")
.
├── ...
├── Plugin.swift
├── ResourceSynthesizers
├───── Strings.stencil
├───── Plists.stencil
├───── CustomTemplate.stencil
└── ...
템플릿 이름은 리소스 유형의 카멜 케이스 버전입니다:
| 리소스 유형 | 템플릿 파일 이름 |
|---|---|
| Strings | Strings.stencil |
| Assets | Assets.stencil |
| Property Lists | Plists.stencil |
| Fonts | Fonts.stencil |
| Core Data | CoreData.stencil |
| Interface Builder | InterfaceBuilder.stencil |
| JSON | JSON.stencil |
| YAML | YAML.stencil |
프로젝트에서 리소스 신서사이저를 정의할 때, 플러그인의 템플릿을 사용하기 위해 플러그인 이름을 지정할 수 있습니다:
let project = Project(resourceSynthesizers: [.strings(plugin: "MyPlugin")])
태스크 플러그인 #
태스크 플러그인은 사용 중단되었습니다. 프로젝트의 자동화 솔루션을 찾고 있다면 이 블로그 포스트를 확인하세요.
태스크는 tuist-<task-name> 네이밍 규칙을 따르는 경우 tuist 명령어를 통해 호출할 수 있는 $PATH에 노출된 실행 파일입니다. 이전 버전에서 Tuist는 Swift 패키지의 실행 파일로 표현되는 build, run, test 및 archive 태스크를 위해 tuist plugin 아래에 일부 느슨한 규칙과 도구를 제공했지만, 이 기능은 도구의 유지 관리 부담과 복잡성을 증가시키므로 사용 중단했습니다.
Tuist를 사용하여 태스크를 배포하고 있었다면, 직접 구축하는 것을 권장합니다.
let graph = try Tuist.graph()를 사용하여 로직에서 프로젝트 그래프에 접근하기 위해 모든 Tuist 릴리스와 함께 배포되는ProjectAutomation.xcframework를 계속 사용할 수 있습니다. 이 명령어는 시스템 프로세스를 사용하여tuist명령어를 실행하고 프로젝트 그래프의 인메모리 표현을 반환합니다.- 태스크를 배포하려면 GitHub 릴리스에
arm64및x86_64를 지원하는 유니버설 바이너리를 포함하고, 설치 도구로 Mise를 사용하는 것을 권장합니다. Mise에게 도구를 설치하는 방법을 지시하려면 플러그인 저장소가 필요합니다. 참고 자료로 Tuist의 저장소를 사용할 수 있습니다. - 도구 이름을
tuist-{xxx}로 지정하고 사용자가mise install를 실행하여 설치할 수 있도록 하면, 도구를 직접 호출하거나tuist xxx를 통해 실행할 수 있습니다.
사용자에게 프로젝트 그래프 전체를 노출하는 단일 하위 호환 프레임워크로 ProjectAutomation 및 XcodeGraph 모델을 통합할 계획입니다. 또한 생성 로직을 새로운 레이어인 XcodeGraph로 추출하여 자체 CLI에서도 사용할 수 있도록 할 예정입니다. 이를 자체 Tuist를 구축하는 것으로 생각하면 됩니다.
플러그인 사용#
플러그인을 사용하려면 프로젝트의 Tuist.swift 매니페스트 파일에 추가해야 합니다:
import ProjectDescription
let tuist = Tuist(
project: .tuist(plugins: [
.local(path: "/Plugins/MyPlugin")
])
)
서로 다른 저장소에 있는 여러 프로젝트에서 플러그인을 재사용하려면, 플러그인을 Git 저장소에 푸시하고 Tuist.swift 파일에서 참조할 수 있습니다:
import ProjectDescription
let tuist = Tuist(
project: .tuist(plugins: [
.git(url: "https://url/to/plugin.git", tag: "1.0.0"),
.git(url: "https://url/to/plugin.git", sha: "e34c5ba")
])
)
플러그인을 추가한 후 tuist install가 전역 캐시 디렉터리에서 플러그인을 가져옵니다.
알 수 있듯이, 플러그인에 대한 버전 해결 기능을 제공하지 않습니다. 재현성을 보장하기 위해 Git 태그 또는 SHA를 사용하는 것을 권장합니다.
프로젝트 설명 헬퍼 플러그인을 사용할 때, 헬퍼를 포함하는 모듈의 이름은 플러그인의 이름과 같습니다.
import ProjectDescription
import MyTuistPlugin
let project = Project.app(name: "MyCoolApp", platform: .iOS)