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
6 changes: 3 additions & 3 deletions AppleStoreProductKiosk.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@
7F41C5542E798756007C4017 /* Exceptions for "AppleStoreProductKiosk" folder in "AppleStoreProductKiosk" target */ = {
isa = PBXFileSystemSynchronizedBuildFileExceptionSet;
membershipExceptions = (
Resources/Info.plist,
App/Resources/Info.plist,
);
target = C8F725DD2E790F9F00C2A1DE /* AppleStoreProductKiosk */;
};
Expand Down Expand Up @@ -428,7 +428,7 @@
DEVELOPMENT_TEAM = N94CS4N6VR;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = AppleStoreProductKiosk/Resources/Info.plist;
INFOPLIST_FILE = AppleStoreProductKiosk/App/Resources/Info.plist;
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
INFOPLIST_KEY_UILaunchScreen_Generation = YES;
Expand Down Expand Up @@ -462,7 +462,7 @@
DEVELOPMENT_TEAM = N94CS4N6VR;
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = AppleStoreProductKiosk/Resources/Info.plist;
INFOPLIST_FILE = AppleStoreProductKiosk/App/Resources/Info.plist;
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
INFOPLIST_KEY_UILaunchScreen_Generation = YES;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
<?xml version="1.0" encoding="UTF-8"?>
<Scheme
LastUpgradeVersion = "2600"
version = "1.7">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES"
buildArchitectures = "Automatic">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"
buildForRunning = "YES"
buildForProfiling = "YES"
buildForArchiving = "YES"
buildForAnalyzing = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "C8F725DD2E790F9F00C2A1DE"
BuildableName = "AppleStoreProductKiosk.app"
BlueprintName = "AppleStoreProductKiosk"
ReferencedContainer = "container:AppleStoreProductKiosk.xcodeproj">
</BuildableReference>
</BuildActionEntry>
</BuildActionEntries>
</BuildAction>
<TestAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
shouldUseLaunchSchemeArgsEnv = "YES">
<TestPlans>
<TestPlanReference
reference = "container:AppleStoreProductKioskTests/AppleStoreProductKioskTestPlan.xctestplan"
default = "YES">
</TestPlanReference>
</TestPlans>
<Testables>
<TestableReference
skipped = "NO"
parallelizable = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "C8F725EA2E790FA100C2A1DE"
BuildableName = "AppleStoreProductKioskTests.xctest"
BlueprintName = "AppleStoreProductKioskTests"
ReferencedContainer = "container:AppleStoreProductKiosk.xcodeproj">
</BuildableReference>
</TestableReference>
<TestableReference
skipped = "NO"
parallelizable = "YES">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "C8F725F42E790FA100C2A1DE"
BuildableName = "AppleStoreProductKioskUITests.xctest"
BlueprintName = "AppleStoreProductKioskUITests"
ReferencedContainer = "container:AppleStoreProductKiosk.xcodeproj">
</BuildableReference>
</TestableReference>
</Testables>
</TestAction>
<LaunchAction
buildConfiguration = "Debug"
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
launchStyle = "0"
useCustomWorkingDirectory = "NO"
ignoresPersistentStateOnLaunch = "NO"
debugDocumentVersioning = "YES"
debugServiceExtension = "internal"
allowLocationSimulation = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "C8F725DD2E790F9F00C2A1DE"
BuildableName = "AppleStoreProductKiosk.app"
BlueprintName = "AppleStoreProductKiosk"
ReferencedContainer = "container:AppleStoreProductKiosk.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</LaunchAction>
<ProfileAction
buildConfiguration = "Release"
shouldUseLaunchSchemeArgsEnv = "YES"
savedToolIdentifier = ""
useCustomWorkingDirectory = "NO"
debugDocumentVersioning = "YES">
<BuildableProductRunnable
runnableDebuggingMode = "0">
<BuildableReference
BuildableIdentifier = "primary"
BlueprintIdentifier = "C8F725DD2E790F9F00C2A1DE"
BuildableName = "AppleStoreProductKiosk.app"
BlueprintName = "AppleStoreProductKiosk"
ReferencedContainer = "container:AppleStoreProductKiosk.xcodeproj">
</BuildableReference>
</BuildableProductRunnable>
</ProfileAction>
<AnalyzeAction
buildConfiguration = "Debug">
</AnalyzeAction>
<ArchiveAction
buildConfiguration = "Release"
revealArchiveInOrganizer = "YES">
</ArchiveAction>
</Scheme>
27 changes: 27 additions & 0 deletions AppleStoreProductKiosk/App/Application/AppDelegate.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
//
// AppDelegate.swift
// AppleStoreProductKiosk
//
// Created by Wonji Suh on 9/17/25.
//

import Foundation
import UIKit

import DiContainer

class AppDelegate: UIResponder, UIApplicationDelegate {



func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

UnifiedDI.enablePerformanceOptimization()

DependencyContainer.bootstrapInTask { _ in
await AppDIContainer.shared.registerDefaultDependencies()
}

return true
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
//
// AppleStoreProductKioskApp.swift
// AppleStoreProductKiosk
//
// Created by 홍석현 on 9/16/25.
//

import SwiftUI
import ComposableArchitecture

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

var body: some Scene {
WindowGroup {
let store = Store(initialState: AppReducer.State()) {
AppReducer()
._printChanges()
._printChanges(.actionLabels)
}

AppView(store: store)
}
}
}
22 changes: 22 additions & 0 deletions AppleStoreProductKiosk/App/Di/Extension+AppDIContainer.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
//
// Extension+AppDIContainer.swift
// AppleStoreProductKiosk
//
// Created by Wonji Suh on 9/17/25.
//

import Foundation
import DiContainer

extension AppDIContainer {
func registerDefaultDependencies() async {
await registerDependencies { container in
// Repository 먼저 등록
let factory = ModuleFactoryManager()

await factory.registerAll(to: container)

}
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
//
// Extension+RepositoryModuleFactory.swift
// AppleStoreProductKiosk
//
// Created by Wonji Suh on 9/17/25.
//

import Foundation

import DiContainer

extension RepositoryModuleFactory {
public mutating func registerDefaultDefinitions() {
let register = registerModule

definitions = {
return [
register.productRepositoryImplModule
]
}()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
//
// Extension+UseCaseModuleFactory.swift.swift
// AppleStoreProductKiosk
//
// Created by Wonji Suh on 9/17/25.
//

import Foundation

import DiContainer

extension UseCaseModuleFactory {
public mutating func registerDefaultDefinitions() {
let register = registerModule

definitions = {
return [
register.productUseCaseImplModule,
]
}()
}
}
19 changes: 19 additions & 0 deletions AppleStoreProductKiosk/App/Di/ModuleFactoryManager.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
//
// ModuleFactoryManager.swift
// AppleStoreProductKiosk
//
// Created by Wonji Suh on 9/17/25.
//

import Foundation

import DiContainer

extension ModuleFactoryManager {
mutating func registerDefaultDependencies() {
// Repository
repositoryFactory.registerDefaultDefinitions()

useCaseFactory.registerDefaultDefinitions()
}
}
54 changes: 54 additions & 0 deletions AppleStoreProductKiosk/App/Reducer/AppReducer.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
//
// AppReducer.swift
// AppleStoreProductKiosk
//
// Created by Wonji Suh on 9/17/25.
//

import Foundation

import ComposableArchitecture

@Reducer
struct AppReducer {

@ObservableState
enum State: Equatable {
case productList(ProductListFeature.State)

init() {
self = .productList(.init())
}
}

enum Action: ViewAction {
case view(View)
}

@CasePathable
enum View {
case productList(ProductListFeature.Action)
}

var body: some ReducerOf<Self> {
Reduce { state, action in
switch action {
case .view(let ViewAction):
handleViewAction(&state, action: ViewAction)
}
}
.ifCaseLet(\.productList, action: \.view.productList) {
ProductListFeature()
}
}

func handleViewAction(
_ state: inout State,
action: View
) -> Effect<Action> {
switch action {
case .productList:
return .none
}
}
}
23 changes: 23 additions & 0 deletions AppleStoreProductKiosk/App/View/AppView.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
//
// AppView.swift
// AppleStoreProductKiosk
//
// Created by Wonji Suh on 9/17/25.
//

import SwiftUI

import ComposableArchitecture

struct AppView: View {
@Perception.Bindable var store: StoreOf<AppReducer>

var body: some View {
switch store.state {
case .productList:
if let store = store.scope(state: \.productList, action: \.view.productList) {
ContentView(store: store)
}
}
}
}
17 changes: 0 additions & 17 deletions AppleStoreProductKiosk/Application/AppleStoreProductKioskApp.swift

This file was deleted.

Loading
Loading