[Tuist 4.x] Tuist External Dependencies 관련
공식 홈페이지에서는 Package.swift에 external dependency를 추가해서 관리할 수 있다고 나와있다.
하지만 그대로 따라하면 안된다..
우선 https://sunrinnote.tistory.com/187 여기를 모두 진행했다는 가정 하에
mise exec -- tuist init --platform ios
위 명령어로 프로젝트를 새로 시작한다고 가정한다.
1. Tuist 폴더 생성, Package.swift 파일 생성
원래는 init할 때 자동으로 Tuist 폴더가 생기고, ProjectDescriptionHelper 폴더가 생겼던 걸로 기억하는데, 바뀐 버전에서는 생기지 않는다.
우선 Tuist 폴더를 만들어주고, 그 안에 Package.swift 파일을 만들어준다.
파일의 내용은 예시에 나와있는 그대로 하면 안되고, import ProjectDescriptionHelper 라인을 지워주어야 한다. (파일 내용 수정은 mise exec -- tuist edit 으로 수정해도 되고, 그냥 파일 내용을 넣어줘도 된다.)
// swift-tools-version: 5.9
import PackageDescription
#if TUIST
import ProjectDescription
let packageSettings = PackageSettings(
productTypes: [
"Alamofire": .framework, // default is .staticFramework
]
)
#endif
let package = Package(
name: "PackageName",
dependencies: [
.package(url: "https://github.com/Alamofire/Alamofire", from: "5.0.0"),
]
)
2. Project.swift 파일 수정
테스트용으로 dependencies에 .external로 Alamofire를 넣어준다.
import ProjectDescription
let project = Project(
name: "TuistTest1",
targets: [
.target(
name: "TuistTest1",
destinations: .iOS,
product: .app,
bundleId: "io.tuist.TuistTest1",
infoPlist: .extendingDefault(
with: [
"UILaunchStoryboardName": "LaunchScreen.storyboard",
]
),
sources: ["TuistTest1/Sources/**"],
resources: ["TuistTest1/Resources/**"],
dependencies: [
.external(name: "Alamofire", condition: .none)
]
),
.target(
name: "TuistTest1Tests",
destinations: .iOS,
product: .unitTests,
bundleId: "io.tuist.TuistTest1Tests",
infoPlist: .default,
sources: ["TuistTest1/Tests/**"],
resources: [],
dependencies: [.target(name: "TuistTest1")]
),
]
)
3. install & generate
edit으로 열린 창을 모두 저장 & 닫고 다음 두 명령어를 실행한다.
mise exec -- tuist install
mise exec -- tuist generate
install하면 의존성이 설치될 것이고, generate하면, 프로젝트 파일들이 만들어지면서 자동으로 .xcworkspace 파일을 실행한다.
아무 파일에서 import Alamofire를 해보면 잘 들어오고, 코드 자동완성 및 실행도 잘 되는 것을 확인할 수 있다.