Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,7 @@ public extension TargetDependency.SPM {
static let composableArchitecture = TargetDependency.external(name: "ComposableArchitecture", condition: .none)
static let tcaCoordinator = TargetDependency.external(name: "TCACoordinators", condition: .none)
static let weaveDI = TargetDependency.external(name: "WeaveDI", condition: .none)

static let googleSignIn = TargetDependency.external(name: "GoogleSignIn", condition: .none)
static let appAuth: TargetDependency = .external(name: "AppAuth")
}
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@ public extension ModulePath {
case Foundations

public static let name: String = "Network"
case Networks
case ThirdPartys
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,37 @@
//

import ProjectDescription
import Foundation

// MARK: - Helper Functions
private func ensureTestsSourcesDirectoryExists(for projectName: String) {
let fileManager = FileManager.default

// Try to find the current module directory
let currentDirectory = fileManager.currentDirectoryPath
let possiblePaths = [
"\(currentDirectory)/Tests/Sources",
"./Tests/Sources"
]

for testsSourcesPath in possiblePaths {
let parentDir = URL(fileURLWithPath: testsSourcesPath).deletingLastPathComponent().path

if fileManager.fileExists(atPath: parentDir) || parentDir == "." {
if !fileManager.fileExists(atPath: testsSourcesPath) {
do {
try fileManager.createDirectory(atPath: testsSourcesPath, withIntermediateDirectories: true, attributes: nil)
print("📁 Created Tests/Sources directory for \(projectName) at \(testsSourcesPath)")
return
} catch {
print("⚠️ Failed to create Tests/Sources directory for \(projectName) at \(testsSourcesPath): \(error)")
}
} else {
return // Directory already exists
}
}
}
}

public extension Project {
static func makeAppModule(
Expand All @@ -23,7 +54,8 @@ public extension Project {
resources: ProjectDescription.ResourceFileElements? = nil,
infoPlist: ProjectDescription.InfoPlist = .default,
entitlements: ProjectDescription.Entitlements? = nil,
schemes: [ProjectDescription.Scheme] = []
schemes: [ProjectDescription.Scheme] = [],
hasTests: Bool = false
) -> Project {

let appTarget: Target = .target(
Expand Down Expand Up @@ -84,18 +116,24 @@ public extension Project {
dependencies: dependencies
)

let appTestTarget : Target = .target(
name: "\(name)Tests",
destinations: destinations,
product: .unitTests,
bundleId: "\(bundleId).\(name)Tests",
deploymentTargets: deploymentTarget,
infoPlist: .default,
sources: ["\(name)Tests/Sources/**"],
dependencies: [.target(name: name)]
)
var targets: [Target] = [appTarget, appDevTarget, appStageTarget, appProdTarget]

if hasTests {
// Ensure Tests/Sources directory exists
ensureTestsSourcesDirectoryExists(for: name)

let targets = [appTarget, appDevTarget, appStageTarget, appProdTarget ,appTestTarget]
let appTestTarget : Target = .target(
name: "\(name)Tests",
destinations: destinations,
product: .unitTests,
bundleId: "\(bundleId).\(name)Tests",
deploymentTargets: deploymentTarget,
infoPlist: .default,
sources: ["Tests/Sources/**"],
dependencies: [.target(name: name)]
)
targets.append(appTestTarget)
}

return Project(
name: name,
Expand Down Expand Up @@ -125,9 +163,10 @@ public extension Project {
resources: ProjectDescription.ResourceFileElements? = nil,
infoPlist: ProjectDescription.InfoPlist = .default,
entitlements: ProjectDescription.Entitlements? = nil,
schemes: [ProjectDescription.Scheme] = []
schemes: [ProjectDescription.Scheme] = [],
hasTests: Bool = false
) -> Project {

let appTarget: Target = .target(
name: name,
destinations: destinations,
Expand All @@ -141,34 +180,26 @@ public extension Project {
scripts: scripts,
dependencies: dependencies
)

let appDevTarget: Target = .target(
name: "\(name)-QA",
destinations: destinations,
product: product,
bundleId: "\(bundleId)",
deploymentTargets: deploymentTarget,
infoPlist: infoPlist,
sources: sources,
resources: resources,
entitlements: entitlements,
scripts: scripts,
dependencies: dependencies
)

let appTestTarget : Target = .target(
name: "\(name)Tests",
destinations: destinations,
product: .unitTests,
bundleId: "\(bundleId).\(name)Tests",
deploymentTargets: deploymentTarget,
infoPlist: .default,
sources: ["\(name)Tests/Sources/**"],
dependencies: [.target(name: name)]
)

let targets = [appTarget, appDevTarget, appTestTarget]


var targets: [Target] = [appTarget]

if hasTests {
// Ensure Tests/Sources directory exists
ensureTestsSourcesDirectoryExists(for: name)

let appTestTarget : Target = .target(
name: "\(name)Tests",
destinations: destinations,
product: .unitTests,
bundleId: "\(bundleId).\(name)Tests",
deploymentTargets: deploymentTarget,
infoPlist: .default,
sources: ["Tests/Sources/**"],
dependencies: [.target(name: name)]
)
targets.append(appTestTarget)
}

return Project(
name: name,
packages: packages,
Expand Down

This file was deleted.

3 changes: 2 additions & 1 deletion Projects/App/Project.swift
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ let project = Project.makeAppModule(
// 테스트 플랜 스킴: 커스텀 구성명 사용 (.dev / .stage / .prod 중 택1)
Scheme.makeTestPlanScheme(target: .dev, name: Project.Environment.appName),

]
],
hasTests: true
)

2 changes: 1 addition & 1 deletion Projects/App/Sources/Application/NomadSpotApp.swift
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import SwiftUI
import ComposableArchitecture

@main
struct AttendanceApp: App {
struct NomadSpotApp: App {
@UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate

init() {
Expand Down
10 changes: 5 additions & 5 deletions Projects/App/Sources/Di/DiRegister.swift
Original file line number Diff line number Diff line change
Expand Up @@ -26,11 +26,11 @@ public class AppDIManager: @unchecked Sendable {
public func registerDefaultDependencies() async {
// 🏗️ 1. WeaveDI.builder 패턴으로 실제 구현체들 등록
WeaveDI.builder
// .register { KeychainManager() as KeychainManaging }
// .register {
// let keychainManager = UnifiedDI.resolve(KeychainManaging.self) ?? KeychainManager()
// return KeychainTokenProvider(keychainManager: keychainManager) as TokenProviding
// }
.register { KeychainManager() as KeychainManagingInterface }
.register {
let keychainManager = UnifiedDI.resolve(KeychainManagingInterface.self) ?? KeychainManager()
return KeychainTokenProvider(keychainManager: keychainManager) as TokenProviding
}
// .register(ProfileInterface.self) { ProfileRepositoryImpl() }
// // MARK: - 로그인
// .register { AuthRepositoryImpl() as AuthInterface }
Expand Down
40 changes: 20 additions & 20 deletions Projects/App/Sources/Di/KeychainTokenProvider.swift
Original file line number Diff line number Diff line change
Expand Up @@ -5,23 +5,23 @@
// Created by Wonji Suh on 3/1/26.
//

//import Foundation
//
//import DomainInterface
//import Foundations
//
//struct KeychainTokenProvider: TokenProviding {
// private let keychainManager: KeychainManaging
//
// init(keychainManager: KeychainManaging) {
// self.keychainManager = keychainManager
// }
//
// func accessToken() -> String? {
// keychainManager.accessToken()
// }
//
// func saveAccessToken(_ token: String) {
// keychainManager.saveAccessToken(token)
// }
//}
import Foundation

import DomainInterface
import Foundations

struct KeychainTokenProvider: TokenProviding {
private let keychainManager: KeychainManagingInterface

init(keychainManager: KeychainManagingInterface) {
self.keychainManager = keychainManager
}

func accessToken() -> String? {
keychainManager.accessToken()
}

func saveAccessToken(_ token: String) {
keychainManager.saveAccessToken(token)
}
}
9 changes: 0 additions & 9 deletions Projects/Core/Core/Sources/Exported/CoreExport.swift

This file was deleted.

22 changes: 0 additions & 22 deletions Projects/Core/ThirdParty/Sources/Base.swift

This file was deleted.

8 changes: 0 additions & 8 deletions Projects/Core/ThirdParty/ThirdPartyTests/Sources/Test.swift

This file was deleted.

8 changes: 0 additions & 8 deletions Projects/Data/API/APITests/Sources/Test.swift

This file was deleted.

5 changes: 3 additions & 2 deletions Projects/Data/API/Project.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ let project = Project.makeAppModule(
product: .staticFramework,
settings: .settings(),
dependencies: [

.Network(implements: .ThirdPartys)
],
sources: ["Sources/**"]
sources: ["Sources/**"],
hasTests: false
)
8 changes: 0 additions & 8 deletions Projects/Data/Model/ModelTests/Sources/Test.swift

This file was deleted.

3 changes: 2 additions & 1 deletion Projects/Data/Model/Project.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,6 @@ let project = Project.makeAppModule(
dependencies: [
.Domain(implements: .Entity)
],
sources: ["Sources/**"]
sources: ["Sources/**"],
hasTests: false
)
9 changes: 6 additions & 3 deletions Projects/Data/Repository/Project.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,11 @@ let project = Project.makeAppModule(
product: .staticFramework,
settings: .settings(),
dependencies: [
.Network(implements: .Networking),
.Domain(implements: .DomainInterface)
.Data(implements: .Service),
.Domain(implements: .DomainInterface),

.SPM.googleSignIn
],
sources: ["Sources/**"]
sources: ["Sources/**"],
hasTests: true
)
7 changes: 5 additions & 2 deletions Projects/Data/Service/Project.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,10 @@ let project = Project.makeAppModule(
product: .staticFramework,
settings: .settings(),
dependencies: [

.Network(implements: .ThirdPartys),
.Data(implements: .API),
.Network(implements: .Foundations),
],
sources: ["Sources/**"]
sources: ["Sources/**"],
hasTests: false
)
8 changes: 0 additions & 8 deletions Projects/Data/Service/ServiceTests/Sources/Test.swift

This file was deleted.

This file was deleted.

7 changes: 5 additions & 2 deletions Projects/Domain/DomainInterface/Project.swift
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,10 @@ let project = Project.makeAppModule(
product: .framework,
settings: .settings(),
dependencies: [
.Domain(implements: .Entity)
.Data(implements: .Model),
.SPM.composableArchitecture,
.SPM.weaveDI,
],
sources: ["Sources/**"]
sources: ["Sources/**"],
hasTests: false
)
Loading