Tuist를 사용해서 Test Target을 추가하려는데 며칠동안 추가가 안돼서 나를 괴롭히던게 원인은 모르지만 추가하는 방법을 찾아서 삽질로그를 작성한다.
The command generates and opens an Xcode workspace where the targets and schemes not directly related to MyApp are removed. If the direct and transitive dependencies exist in the cache, Tuist replaces them with their pre-compiled version. Thanks to that developers can safely clean their Xcode environment because they'll only be building the target they are focusing on.
Tuist Docs에서 tuist generate MyApp에 대한 설명이다.
Demo App을 빼고 프로젝트를 생성하려고 항상 tuist generate 이름으로 해서 test target들이 빠진 것 같다
아래는 삽질 해결삽질(?) 과정
잘못된 접근이지만 일단 남겨둔다..
let appTarget = Target(name: name,
platform: platform,
product: product,
bundleId: "\(organizationName).\(name)",
deploymentTarget: deploymentTarget,
infoPlist: infoPlist,
sources: sources,
resources: resources,
entitlements: entitlements,
dependencies: dependencies)
let testTarget = Target(name: "\(name)Tests",
platform: platform,
product: .unitTests,
bundleId: "\(organizationName).\(name)Tests",
deploymentTarget: deploymentTarget,
infoPlist: .default,
sources: "Tests/**",
dependencies: [.target(name: name)])
let targets: [Target] = [appTarget, testTarget]
let schemes: [Scheme] = [.makeScheme(target: .debug, name: name)]
return Project(
name: name,
organizationName: organizationName,
packages: packages,
settings: settings,
targets: targets,
schemes: schemes
)
기존에 뭐 이런식으로 appTarget, testTarget을 만들어서 프로젝트에 심어줬는데...
분명 다른 프로젝트에서는 이렇게 하면 타겟 설정이 잘 되었지만 왠지 모르게 여기서는 TestTarget이 안만들어졌다.

TestTarget을 추가하기 위해 product를 unitTests로 설정해야 하지만... 그냥 .framework로 추가해봤더니 타겟이 설정됐다...🤨
난 App, Static Framework, Dynamic Framework를 만드는 메소드를 따로 작성하였고, 변경한 코드는 Static Framework를 만드는 메소드의 test target부분이다.
static func staticFramework(name: String, dependencies: [TargetDependency]) -> Project {
let organizationName = /* OrganizationName */
let platform: Platform = .iOS
let deploymentTarget: DeploymentTarget = .iOS(targetVersion: "15.0", devices: .iphone)
let appTarget = Target(name: name,
platform: platform,
product: .staticFramework,
bundleId: "\(organizationName).\(name)",
deploymentTarget: deploymentTarget,
infoPlist: .default,
sources: ["Sources/**"],
dependencies: dependencies)
let testTarget = Target(name: "\(name)Tests",
platform: platform,
product: .framework, // ✨여기를 unitTest에서 framework로 바꿈
bundleId: "\(organizationName).\(name)Tests",
deploymentTarget: deploymentTarget
,
infoPlist: .default,
sources: "Tests/**",
dependencies: [.target(name: name)])
let targets = [appTarget, testTarget]
return Project(name: name,
organizationName: organizationName,
targets: targets)
그러면 아래와 같이 StaticFramework들은 framework가 2개, 아닌 것들은 testUnit 타겟이 추가된다.
| StaticFramework | Others |
|---|---|
![]() | ![]() |
unitTests로 변경그리고 앞에서 수정한 곳을 다시 unitTests로 변경하면... 잘 들어간다 😭
나 좀 그만 괴롭혀라 Tuist🤬
build setting에서 ENABLE_TESTING_SEARCH_PATHS를 Yes로 바꿔주면 된다.

Tuist에서는 여기서 Key값을 찾은 다음 Setting을 먹여주면 된다.
.settings(base: ["ENABLE_TESTING_SEARCH_PATHS" : "YES"],
configurations: [
.debug(name: .debug),
.release(name: .release)
],
defaultSettings: .recommended))