diff --git a/BookSeries.xcworkspace/.tuist-generated b/BookSeries.xcworkspace/.tuist-generated
new file mode 100644
index 0000000..e69de29
diff --git a/BookSeries.xcworkspace/contents.xcworkspacedata b/BookSeries.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..6d35737
--- /dev/null
+++ b/BookSeries.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,129 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/BookSeries.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/BookSeries.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
new file mode 100644
index 0000000..08de0be
--- /dev/null
+++ b/BookSeries.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
@@ -0,0 +1,8 @@
+
+
+
+
+ IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded
+
+
+
diff --git a/BookSeries.xcworkspace/xcshareddata/xcschemes/BookSeries-Workspace.xcscheme b/BookSeries.xcworkspace/xcshareddata/xcschemes/BookSeries-Workspace.xcscheme
new file mode 100644
index 0000000..274ad4d
--- /dev/null
+++ b/BookSeries.xcworkspace/xcshareddata/xcschemes/BookSeries-Workspace.xcscheme
@@ -0,0 +1,1943 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Config/Dev.xcconfig b/Config/Dev.xcconfig
new file mode 100644
index 0000000..5e35405
--- /dev/null
+++ b/Config/Dev.xcconfig
@@ -0,0 +1,12 @@
+//
+// qa.xcconfig
+// GoGo
+//
+// Created by ha sungyong on 10/29/24.
+//
+
+#include "./Shared.xcconfig"
+
+OTHER_SWIFT_FLAGS[config=STAGE][sdk=*] = $(inherited) -DDEBUG
+SWIFT_ACTIVE_COMPILATION_CONDITIONS = STAGE
+BUNDLE_DISPLAY_NAME = 책시리즈
diff --git a/Config/Prod.xcconfig b/Config/Prod.xcconfig
new file mode 100644
index 0000000..6a52092
--- /dev/null
+++ b/Config/Prod.xcconfig
@@ -0,0 +1,14 @@
+//
+// realse.xcconfig
+// GoGo
+//
+// Created by ha sungyong on 10/29/24.
+//
+
+#include "./Shared.xcconfig"
+
+OTHER_SWIFT_FLAGS[config=PROD][sdk=*] = $(inherited) -DPROD
+SWIFT_ACTIVE_COMPILATION_CONDITIONS = PROD
+BUNDLE_DISPLAY_NAME = 책시리즈
+
+
diff --git a/Config/Release.xcconfig b/Config/Release.xcconfig
new file mode 100644
index 0000000..e0d19b9
--- /dev/null
+++ b/Config/Release.xcconfig
@@ -0,0 +1,16 @@
+//
+// realse.xcconfig
+// GoGo
+//
+// Created by ha sungyong on 10/29/24.
+//
+
+#include "./Shared.xcconfig"
+
+OTHER_SWIFT_FLAGS[config=PROD][sdk=*] = $(inherited) -PROD
+SWIFT_ACTIVE_COMPILATION_CONDITIONS = PROD
+BUNDLE_DISPLAY_NAME = 책시리즈
+
+
+
+
diff --git a/Config/Shared.xcconfig b/Config/Shared.xcconfig
new file mode 100644
index 0000000..5ad0be4
--- /dev/null
+++ b/Config/Shared.xcconfig
@@ -0,0 +1,10 @@
+//
+// Shared.xcconfig
+// GoGo
+//
+// Created by ha sungyong on 10/29/24.
+//
+
+MARKETING_VERSION=1.0.0
+CURRENT_PROJECT_VERSION=20
+
diff --git a/Config/Stage.xcconfig b/Config/Stage.xcconfig
new file mode 100644
index 0000000..5e35405
--- /dev/null
+++ b/Config/Stage.xcconfig
@@ -0,0 +1,12 @@
+//
+// qa.xcconfig
+// GoGo
+//
+// Created by ha sungyong on 10/29/24.
+//
+
+#include "./Shared.xcconfig"
+
+OTHER_SWIFT_FLAGS[config=STAGE][sdk=*] = $(inherited) -DDEBUG
+SWIFT_ACTIVE_COMPILATION_CONDITIONS = STAGE
+BUNDLE_DISPLAY_NAME = 책시리즈
diff --git a/Plugins/DependencyPackagePlugin/Plugin.swift b/Plugins/DependencyPackagePlugin/Plugin.swift
new file mode 100644
index 0000000..c69bec3
--- /dev/null
+++ b/Plugins/DependencyPackagePlugin/Plugin.swift
@@ -0,0 +1,10 @@
+//
+// Plugin.swift
+// Plugins
+//
+// Created by 서원지 on 2/21/24.
+//
+
+import ProjectDescription
+
+@MainActor let plugin = Plugin(name: "DependencyPackagePlugin")
diff --git a/Plugins/DependencyPackagePlugin/ProjectDescriptionHelpers/DependencyPackage/Extension+TargetDependency.swift b/Plugins/DependencyPackagePlugin/ProjectDescriptionHelpers/DependencyPackage/Extension+TargetDependency.swift
new file mode 100644
index 0000000..191e72d
--- /dev/null
+++ b/Plugins/DependencyPackagePlugin/ProjectDescriptionHelpers/DependencyPackage/Extension+TargetDependency.swift
@@ -0,0 +1,16 @@
+//
+// Extension+TargetDependency.swift
+// Plugins
+//
+// Created by 서원지 on 2/21/24.
+//
+
+import ProjectDescription
+
+public extension TargetDependency {
+ enum SPM {}
+
+}
+
+
+
diff --git a/Plugins/DependencyPackagePlugin/ProjectDescriptionHelpers/DependencyPackage/Extension+TargetDependencySPM.swift b/Plugins/DependencyPackagePlugin/ProjectDescriptionHelpers/DependencyPackage/Extension+TargetDependencySPM.swift
new file mode 100644
index 0000000..93ab3ad
--- /dev/null
+++ b/Plugins/DependencyPackagePlugin/ProjectDescriptionHelpers/DependencyPackage/Extension+TargetDependencySPM.swift
@@ -0,0 +1,19 @@
+//
+// Extension+TargetDependencySPM.swift
+// DependencyPackagePlugin
+//
+// Created by 서원지 on 4/19/24.
+//
+
+import ProjectDescription
+
+public extension TargetDependency.SPM {
+ static let asyncMoya = TargetDependency.external(name: "AsyncMoya", condition: .none)
+ static let composableArchitecture = TargetDependency.external(name: "ComposableArchitecture", condition: .none)
+ static let diContainer = TargetDependency.external(name: "DiContainer", condition: .none)
+ static let snapKit = TargetDependency.external(name: "SnapKit", condition: .none)
+ static let then = TargetDependency.external(name: "Then", condition: .none)
+ static let pinLayout = TargetDependency.external(name: "PinLayout", condition: .none)
+ static let flexLayout = TargetDependency.external(name: "FlexLayout", condition: .none)
+ static let logMacro = TargetDependency.external(name: "LogMacro", condition: .none)
+}
diff --git a/Plugins/DependencyPlugin/Plugin.swift b/Plugins/DependencyPlugin/Plugin.swift
new file mode 100644
index 0000000..0d447f2
--- /dev/null
+++ b/Plugins/DependencyPlugin/Plugin.swift
@@ -0,0 +1,10 @@
+//
+// Plugin.swift
+// Plugins
+//
+// Created by 서원지 on 2/21/24.
+//
+
+import ProjectDescription
+
+@MainActor let plugin = Plugin(name: "DependencyPlugin")
diff --git a/Plugins/DependencyPlugin/ProjectDescriptionHelpers/TargetDependency+Module/Modules.swift b/Plugins/DependencyPlugin/ProjectDescriptionHelpers/TargetDependency+Module/Modules.swift
new file mode 100644
index 0000000..bc9f22a
--- /dev/null
+++ b/Plugins/DependencyPlugin/ProjectDescriptionHelpers/TargetDependency+Module/Modules.swift
@@ -0,0 +1,102 @@
+//
+// Modules.swift
+// Plugins
+//
+// Created by 서원지 on 2/21/24.
+//
+
+import Foundation
+import ProjectDescription
+
+public enum ModulePath {
+ case Presentation(Presentations)
+ case Core(Cores)
+ case Network(Networks)
+ case Interface(Interfaces)
+ case Domain(Domains)
+ case Data(Datas)
+ case Shared(Shareds)
+}
+
+// MARK: FeatureModule
+public extension ModulePath {
+ enum Presentations: String, CaseIterable {
+ case Presentation
+
+
+ public static let name: String = "Presentation"
+ }
+}
+
+//MARK: - CoreMoudule
+public extension ModulePath {
+ enum Cores: String, CaseIterable {
+ case Core
+
+ public static let name: String = "Core"
+ }
+}
+
+//MARK: - CoreDomainModule
+public extension ModulePath {
+ enum Networks: String, CaseIterable {
+ case API
+ case Network
+ case Foundations
+ case Model
+ case Service
+ case DiContainer
+ case UseCase
+ case ThirdPartys
+
+
+ public static let name: String = "Network"
+ }
+}
+
+//MARK: - CoreMoudule
+public extension ModulePath {
+ enum Datas: String, CaseIterable {
+ case Model
+ case Repository
+
+ public static let name: String = "Data"
+ }
+}
+
+
+//MARK: - CoreMoudule
+public extension ModulePath {
+ enum Domains: String, CaseIterable {
+ case UseCase
+ case DomainInterface
+ case QRCode
+
+
+ public static let name: String = "Domain"
+ }
+}
+
+//MARK: - CoreMoudule
+public extension ModulePath {
+ enum Interfaces: String, CaseIterable {
+ case Interface
+
+
+ public static let name: String = "Interface"
+ }
+}
+
+
+public extension ModulePath {
+ enum Shareds: String, CaseIterable {
+ case Shared
+ case DesignSystem
+ case Utill
+ case ThirdParty
+
+ public static let name: String = "Shared"
+ }
+}
+
+
diff --git a/Plugins/DependencyPlugin/ProjectDescriptionHelpers/TargetDependency+Module/Path+Modules.swift b/Plugins/DependencyPlugin/ProjectDescriptionHelpers/TargetDependency+Module/Path+Modules.swift
new file mode 100644
index 0000000..e0dd00f
--- /dev/null
+++ b/Plugins/DependencyPlugin/ProjectDescriptionHelpers/TargetDependency+Module/Path+Modules.swift
@@ -0,0 +1,76 @@
+//
+// Path+Modules.swift
+// Plugins
+//
+// Created by 서원지 on 2/21/24.
+//
+
+import Foundation
+import ProjectDescription
+
+
+// MARK: - Presentation
+public extension ProjectDescription.Path {
+ static var Presentation: Self {
+ return .relativeToRoot("Projects/\(ModulePath.Presentations.name)")
+ }
+ static func Presentation(implementation module: ModulePath.Presentations) -> Self {
+ return .relativeToRoot("Projects/\(ModulePath.Presentations.name)/\(module.rawValue)")
+ }
+}
+
+// MARK: - Core
+public extension ProjectDescription.Path {
+ static var Core: Self {
+ return .relativeToRoot("Projects/\(ModulePath.Cores.name)")
+ }
+
+ static func Core(implementation module: ModulePath.Cores) -> Self {
+ return .relativeToRoot("Projects/\(ModulePath.Cores.name)/\(module.rawValue)")
+ }
+}
+
+
+// MARK: ProjectDescription.Path + DesignSystem
+public extension ProjectDescription.Path {
+ static var Shared: Self {
+ return .relativeToRoot("Projects/\(ModulePath.Shareds.name)")
+ }
+
+ static func Shared(implementation module: ModulePath.Shareds) -> Self {
+ return .relativeToRoot("Projects/\(ModulePath.Shareds .name)/\(module.rawValue)")
+ }
+}
+
+// MARK: - Network
+public extension ProjectDescription.Path {
+ static var Networking: Self {
+ return .relativeToRoot("Projects/\(ModulePath.Cores.name)/\(ModulePath.Networks.name)")
+ }
+
+ static func Network(implementation module: ModulePath.Networks) -> Self {
+ return .relativeToRoot("Projects/\(ModulePath.Cores.name)/\(ModulePath.Networks.name)/\(module.rawValue)")
+ }
+}
+
+// MARK: - Domain
+public extension ProjectDescription.Path {
+ static var Domain: Self {
+ return .relativeToRoot("Projects/\(ModulePath.Cores.name)/\(ModulePath.Domains.name)")
+ }
+
+ static func Domain(implementation module: ModulePath.Domains) -> Self {
+ return .relativeToRoot("Projects/\(ModulePath.Cores.name)/\(ModulePath.Domains.name)/\(module.rawValue)")
+ }
+}
+
+// MARK: - Data
+public extension ProjectDescription.Path {
+ static var Data: Self {
+ return .relativeToRoot("Projects/\(ModulePath.Cores.name)/\(ModulePath.Datas.name)")
+ }
+
+ static func Data(implementation module: ModulePath.Datas) -> Self {
+ return .relativeToRoot("Projects/\(ModulePath.Cores.name)/\(ModulePath.Datas.name)/\(module.rawValue)")
+ }
+}
diff --git a/Plugins/DependencyPlugin/ProjectDescriptionHelpers/TargetDependency+Module/TargetDependency+Modules.swift b/Plugins/DependencyPlugin/ProjectDescriptionHelpers/TargetDependency+Module/TargetDependency+Modules.swift
new file mode 100644
index 0000000..fc2b0a3
--- /dev/null
+++ b/Plugins/DependencyPlugin/ProjectDescriptionHelpers/TargetDependency+Module/TargetDependency+Modules.swift
@@ -0,0 +1,59 @@
+//
+// TargetDependency+Modules.swift
+// Plugins
+//
+// Created by 서원지 on 2/21/24.
+//
+
+import Foundation
+import ProjectDescription
+
+// 공통 헬퍼
+private extension TargetDependency {
+ static func projectTarget(_ name: String, path: ProjectDescription.Path) -> Self {
+ .project(target: name, path: path)
+ }
+}
+
+// Presentation
+public extension TargetDependency {
+ static func Presentation(implements module: ModulePath.Presentations) -> Self {
+ projectTarget(module.rawValue, path: .Presentation(implementation: module))
+ }
+}
+
+// Shared
+public extension TargetDependency {
+ static func Shared(implements module: ModulePath.Shareds) -> Self {
+ projectTarget(module.rawValue, path: .Shared(implementation: module))
+ }
+}
+
+// Core
+public extension TargetDependency {
+ static func Core(implements module: ModulePath.Cores) -> Self {
+ projectTarget(module.rawValue, path: .Core(implementation: module))
+ }
+}
+
+// Network
+public extension TargetDependency {
+ static func Network(implements module: ModulePath.Networks) -> Self {
+ projectTarget(module.rawValue, path: .Network(implementation: module))
+ }
+}
+
+// Domain
+public extension TargetDependency {
+ static func Domain(implements module: ModulePath.Domains) -> Self {
+ projectTarget(module.rawValue, path: .Domain(implementation: module))
+ }
+}
+
+// Data
+public extension TargetDependency {
+ static func Data(implements module: ModulePath.Datas) -> Self {
+ projectTarget(module.rawValue, path: .Data(implementation: module))
+ }
+}
+
diff --git a/Plugins/ProjectTemplatePlugin/Package.swift b/Plugins/ProjectTemplatePlugin/Package.swift
new file mode 100644
index 0000000..c532f25
--- /dev/null
+++ b/Plugins/ProjectTemplatePlugin/Package.swift
@@ -0,0 +1,15 @@
+// swift-tools-version: 5.8
+
+import PackageDescription
+
+let package = Package(
+ name: "MyPlugin",
+ products: [
+ .executable(name: "tuist-my-cli", targets: ["tuist-my-cli"]),
+ ],
+ targets: [
+ .executableTarget(
+ name: "tuist-my-cli"
+ ),
+ ]
+)
diff --git a/Plugins/ProjectTemplatePlugin/Plugin.swift b/Plugins/ProjectTemplatePlugin/Plugin.swift
new file mode 100644
index 0000000..729f5ab
--- /dev/null
+++ b/Plugins/ProjectTemplatePlugin/Plugin.swift
@@ -0,0 +1,3 @@
+import ProjectDescription
+
+@MainActor let plugin = Plugin(name: "ProjectTemplatePlugin")
diff --git a/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/Configruation/ConfiguratuonEnviroment.swift b/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/Configruation/ConfiguratuonEnviroment.swift
new file mode 100644
index 0000000..9389323
--- /dev/null
+++ b/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/Configruation/ConfiguratuonEnviroment.swift
@@ -0,0 +1,20 @@
+//
+// ConfiguratuonEnviroment.swift
+// DependencyPackagePlugin
+//
+// Created by Wonji Suh on 7/31/25.
+//
+
+import Foundation
+
+public enum ConfiguratuonEnviroment: CaseIterable {
+ case dev, stage, prod
+
+ public var name: String {
+ switch self {
+ case .dev: "Dev"
+ case .stage: "Stage"
+ case .prod: "Prod"
+ }
+ }
+}
diff --git a/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/Configruation/Extension+Configuration.swift b/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/Configruation/Extension+Configuration.swift
new file mode 100644
index 0000000..1b5e8b8
--- /dev/null
+++ b/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/Configruation/Extension+Configuration.swift
@@ -0,0 +1,30 @@
+//
+// Extension+Configuration.swift
+// DependencyPackagePlugin
+//
+// Created by Wonji Suh on 7/31/25.
+//
+
+import Foundation
+import ProjectDescription
+
+extension ConfigurationName {
+ static let dev = ConfigurationName.configuration(ConfiguratuonEnviroment.dev.name)
+ static let stage = ConfigurationName.configuration(ConfiguratuonEnviroment.stage.name)
+ static let prod = ConfigurationName.configuration(ConfiguratuonEnviroment.prod.name)
+}
+
+public extension Array where Element == Configuration {
+ static let `default`: [Configuration] = [
+ .debug(name: .dev, xcconfig: .path(.dev)),
+ .debug(name: .stage, xcconfig: .path(.stage)),
+ .debug(name: .prod, xcconfig: .path(.prod)),
+ .release(name: .release, xcconfig: .path(.release))
+ ]
+}
+
+public extension ProjectDescription.Path {
+ static func path(_ configuration: ConfigurationName) -> Self {
+ return .relativeToRoot("Config/\(configuration.rawValue).xcconfig")
+ }
+}
diff --git a/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/LocalHelper.swift b/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/LocalHelper.swift
new file mode 100644
index 0000000..6455e6f
--- /dev/null
+++ b/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/LocalHelper.swift
@@ -0,0 +1,9 @@
+import Foundation
+
+public struct LocalHelper {
+ let name: String
+
+ public init(name: String) {
+ self.name = name
+ }
+}
diff --git a/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/Project+Templete/Extension+String.swift b/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/Project+Templete/Extension+String.swift
new file mode 100644
index 0000000..b8175a0
--- /dev/null
+++ b/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/Project+Templete/Extension+String.swift
@@ -0,0 +1,28 @@
+//
+// Extension+String.swift
+// MyPlugin
+//
+// Created by 서원지 on 1/6/24.
+//
+
+import Foundation
+import ProjectDescription
+
+extension String {
+ public static func appVersion(version: String = "1.0.0") -> String {
+ return version
+ }
+
+ public static func mainBundleID() -> String {
+ return Project.Environment.bundlePrefix
+ }
+
+ public static func appBuildVersion(buildVersion: String = "10") -> String {
+ return buildVersion
+ }
+
+ public static func appBundleID(name: String) -> String {
+ return Project.Environment.bundlePrefix+name
+ }
+
+}
diff --git a/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/Project+Templete/Project+Enviorment.swift b/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/Project+Templete/Project+Enviorment.swift
new file mode 100644
index 0000000..908c39c
--- /dev/null
+++ b/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/Project+Templete/Project+Enviorment.swift
@@ -0,0 +1,24 @@
+//
+// Project+Enviorment.swift
+// MyPlugin
+//
+// Created by 서원지 on 1/6/24.
+//
+
+import Foundation
+import ProjectDescription
+
+public extension Project {
+ enum Environment {
+ public static let appName = "BookSeries"
+ public static let appStageName = "BookSeries-Stage"
+ public static let appProdName = "BookSeries-Prod"
+ public static let appDevName = "BookSeries-Dev"
+ public static let deploymentTarget : ProjectDescription.DeploymentTargets = .iOS("17.0")
+ public static let deploymentDestination: ProjectDescription.Destinations = [.iPhone]
+ public static let organizationTeamId = "N94CS4N6VR"
+ public static let bundlePrefix = "io.Roy.BookSeries"
+ public static let appVersion = "1.0.0"
+ public static let mainBundleId = "io.Roy.BookSeries"
+ }
+}
diff --git a/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/Project+Templete/Project+Template.swift b/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/Project+Templete/Project+Template.swift
new file mode 100644
index 0000000..d3d2011
--- /dev/null
+++ b/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/Project+Templete/Project+Template.swift
@@ -0,0 +1,238 @@
+//
+// Project+Template.swift
+// MyPlugin
+//
+// Created by 서원지 on 1/6/24.
+//
+
+import ProjectDescription
+
+public extension Project {
+ static func makeAppModule(
+ name: String = Environment.appName,
+ bundleId: String,
+ platform: Platform = .iOS,
+ product: Product,
+ packages: [Package] = [],
+ deploymentTarget: ProjectDescription.DeploymentTargets = Environment.deploymentTarget,
+ destinations: ProjectDescription.Destinations = Environment.deploymentDestination,
+ settings: ProjectDescription.Settings,
+ scripts: [ProjectDescription.TargetScript] = [],
+ dependencies: [ProjectDescription.TargetDependency] = [],
+ sources: ProjectDescription.SourceFilesList = ["Sources/**"],
+ resources: ProjectDescription.ResourceFileElements? = nil,
+ infoPlist: ProjectDescription.InfoPlist = .default,
+ entitlements: ProjectDescription.Entitlements? = nil,
+ schemes: [ProjectDescription.Scheme] = []
+ ) -> Project {
+
+ let appTarget: Target = .target(
+ name: name,
+ destinations: destinations,
+ product: product,
+ bundleId: bundleId,
+ deploymentTargets: deploymentTarget,
+ infoPlist: infoPlist,
+ sources: sources,
+ resources: resources,
+ entitlements: entitlements,
+ scripts: scripts,
+ dependencies: dependencies
+ )
+
+ let appProdTarget: Target = .target(
+ name: "\(name)-Prod",
+ destinations: destinations,
+ product: product,
+ bundleId: "\(bundleId)",
+ deploymentTargets: deploymentTarget,
+ infoPlist: infoPlist,
+ sources: sources,
+ resources: resources,
+ entitlements: entitlements,
+ scripts: scripts,
+ dependencies: dependencies
+ )
+
+
+ let appStageTarget: Target = .target(
+ name: "\(name)-Stage",
+ destinations: destinations,
+ product: product,
+ bundleId: "\(bundleId)",
+ deploymentTargets: deploymentTarget,
+ infoPlist: infoPlist,
+ sources: sources,
+ resources: resources,
+ entitlements: entitlements,
+ scripts: scripts,
+ dependencies: dependencies
+ )
+
+
+ let appDevTarget: Target = .target(
+ name: "\(name)-Debug",
+ 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/**"],
+ resources:["\(name)Tests/Sources/**"],
+ dependencies: [.target(name: name)]
+ )
+
+ let targets = [appTarget, appDevTarget, appStageTarget, appProdTarget ,appTestTarget]
+
+ return Project(
+ name: name,
+ options: .options(
+ defaultKnownRegions: ["en", "ko"],
+ developmentRegion: "ko"
+ ),
+ packages: packages,
+ settings: settings,
+ targets: targets,
+ schemes: schemes
+ )
+ }
+
+ static func makeModule(
+ name: String = Environment.appName,
+ bundleId: String,
+ platform: Platform = .iOS,
+ product: Product,
+ packages: [Package] = [],
+ deploymentTarget: ProjectDescription.DeploymentTargets = Environment.deploymentTarget,
+ destinations: ProjectDescription.Destinations = Environment.deploymentDestination,
+ settings: ProjectDescription.Settings,
+ scripts: [ProjectDescription.TargetScript] = [],
+ dependencies: [ProjectDescription.TargetDependency] = [],
+ sources: ProjectDescription.SourceFilesList = ["Sources/**"],
+ resources: ProjectDescription.ResourceFileElements? = nil,
+ infoPlist: ProjectDescription.InfoPlist = .default,
+ entitlements: ProjectDescription.Entitlements? = nil,
+ schemes: [ProjectDescription.Scheme] = []
+ ) -> Project {
+
+ let appTarget: Target = .target(
+ name: name,
+ destinations: destinations,
+ product: product,
+ bundleId: bundleId,
+ deploymentTargets: deploymentTarget,
+ infoPlist: infoPlist,
+ sources: sources,
+ resources: resources,
+ entitlements: entitlements,
+ 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]
+
+ return Project(
+ name: name,
+ packages: packages,
+ settings: settings,
+ targets: targets,
+ schemes: schemes
+ )
+ }
+}
+
+
+
+public extension Scheme {
+ static func makeScheme(target: ConfigurationName, name: String) -> Scheme {
+ return Scheme.scheme(
+ name: name,
+ shared: true,
+ buildAction: .buildAction(targets: ["\(name)"]),
+ testAction: .targets(
+ ["\(name)Tests"],
+ configuration: target,
+ options: .options(coverage: true, codeCoverageTargets: ["\(name)"])
+ ),
+ runAction: .runAction(configuration: target),
+ archiveAction: .archiveAction(configuration: target),
+ profileAction: .profileAction(configuration: target),
+ analyzeAction: .analyzeAction(configuration: target)
+
+ )
+}
+
+ static func makeTestPlanScheme(target: ConfigurationName, name: String) -> Scheme {
+ return Scheme.scheme(
+ name: name,
+ shared: true,
+ buildAction: .buildAction(targets: ["\(name)", "\(name)Tests"]),
+ testAction: .testPlans(["\(name)Tests/Sources/\(name)TestPlan.xctestplan"]),
+ runAction: .runAction(configuration: "Debug"),
+ archiveAction: .archiveAction(configuration: "Debug"),
+ profileAction: .profileAction(configuration: "Debug"),
+ analyzeAction: .analyzeAction(configuration: "Debug")
+ )
+ }
+}
+
+
+public extension Scheme {
+ static func scheme(name: String, environment: ConfiguratuonEnviroment) -> Scheme {
+ let appName = Project.Environment.appName
+ let schemeName = switch environment {
+ case .prod: appName
+ case .dev, .stage: "\(appName)-\(environment.name)"
+ }
+
+ return .scheme(
+ name: schemeName,
+ buildAction: .buildAction(targets: [.target(name)]),
+ runAction: .runAction(configuration: .init(stringLiteral: environment.name)),
+ archiveAction: .archiveAction(configuration: .release),
+ profileAction: .profileAction(configuration: .release),
+ analyzeAction: .analyzeAction(configuration: .debug)
+ )
+ }
+}
+
+
diff --git a/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/Project+Templete/ResourceFileElements+Templete.swift b/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/Project+Templete/ResourceFileElements+Templete.swift
new file mode 100644
index 0000000..97549e4
--- /dev/null
+++ b/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/Project+Templete/ResourceFileElements+Templete.swift
@@ -0,0 +1,13 @@
+//
+// ResourceFileElements+Templete.swift
+// MyPlugin
+//
+// Created by 서원지 on 1/6/24.
+//
+
+import Foundation
+import ProjectDescription
+
+public extension ResourceFileElements {
+ static let resources: ResourceFileElements = "Resources/**"
+}
diff --git a/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/Project+Templete/SourceFilesList+Template.swift b/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/Project+Templete/SourceFilesList+Template.swift
new file mode 100644
index 0000000..2343313
--- /dev/null
+++ b/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/Project+Templete/SourceFilesList+Template.swift
@@ -0,0 +1,14 @@
+//
+// SourceFilesList+Template.swift
+// MyPlugin
+//
+// Created by 서원지 on 1/6/24.
+//
+
+import Foundation
+import ProjectDescription
+
+public extension SourceFilesList {
+ static let sources: SourceFilesList = "Sources/**"
+}
+
diff --git a/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/Script/Extension+Script.swift b/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/Script/Extension+Script.swift
new file mode 100644
index 0000000..292c701
--- /dev/null
+++ b/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/Script/Extension+Script.swift
@@ -0,0 +1,30 @@
+//
+// Extension+Script.swift
+// MyPlugin
+//
+// Created by 서원지 on 1/6/24.
+//
+
+import Foundation
+import ProjectDescription
+
+public extension TargetScript {
+ static let SwiftLintString = TargetScript.pre(
+ script: Scripts.swiftLintScript,
+ name: "SwiftLintString",
+ basedOnDependencyAnalysis: false
+ )
+
+ static let FirebaseCrashlyticsString = TargetScript.post(
+ script: Scripts.FirebaseCrashlytics,
+ name: "FirebaseCrashlytics",
+ inputPaths: [
+ "${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${TARGET_NAME}",
+ "$(SRCROOT)/$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)",
+ "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/Resources/Firebase/GoogleService-Info.plist -p ios ${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}"
+
+ ],
+ basedOnDependencyAnalysis: true, // 또는 true, 필요에 따라 변경
+ runForInstallBuildsOnly: true // 또는 true, 필요에 따라 변경
+ )
+}
diff --git a/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/Script/Scripts.swift b/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/Script/Scripts.swift
new file mode 100644
index 0000000..42ef63e
--- /dev/null
+++ b/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/Script/Scripts.swift
@@ -0,0 +1,33 @@
+//
+// Scripts.swift
+// MyPlugin
+//
+// Created by 서원지 on 1/6/24.
+//
+
+import Foundation
+import ProjectDescription
+
+public enum Scripts {
+ public static let swiftLintScript: String = """
+ if test -d "/opt/homebrew/bin/"; then
+ PATH="/opt/homebrew/bin/:${PATH}"
+ fi
+
+ export PATH
+
+ if which swiftlint > /dev/null; then
+ swiftlint
+ else
+ echo "warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint"
+ fi
+ """
+
+ public static let FirebaseCrashlytics: String = """
+ ROOT_DIR=\(ProcessInfo.processInfo.environment["TUIST_ROOT_DIR"] ?? "")
+ "${ROOT_DIR}/Tuist/Dependencies/SwiftPackageManager/.build/checkouts/firebase-ios-sdk/Crashlytics/run"
+"""
+}
+
+
+
diff --git a/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/Setting/Project+Settings.swift b/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/Setting/Project+Settings.swift
new file mode 100644
index 0000000..5924c9d
--- /dev/null
+++ b/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/Setting/Project+Settings.swift
@@ -0,0 +1,122 @@
+//
+// Project+Settings.swift
+// MyPlugin
+//
+// Created by 서원지 on 1/6/24.
+//
+
+import ProjectDescription
+
+extension Settings {
+ private static func commonSettings(
+ appName: String,
+ displayName: String,
+ provisioningProfile: String,
+ setSkipInstall: Bool
+ ) -> SettingsDictionary {
+ return SettingsDictionary()
+ .setProductName(appName)
+ .setCFBundleDisplayName(displayName)
+ .setOtherLdFlags("-ObjC -all_load")
+ .setDebugInformationFormat("dwarf-with-dsym")
+ .setProvisioningProfileSpecifier(provisioningProfile)
+ .setSkipInstall(setSkipInstall)
+ .setCFBundleDevelopmentRegion("ko")
+ }
+
+ private static func commonBaseSettings(appName: String) -> SettingsDictionary {
+ SettingsDictionary()
+ .setProductName(appName)
+ .setOtherLdFlags("-ObjC -all_load")
+ .setStripStyle()
+ }
+
+ public static let appMainSetting: Settings = .settings(
+ base: SettingsDictionary()
+ .setProductName(Project.Environment.appName)
+ .setCFBundleDisplayName(Project.Environment.appName)
+ .setMarketingVersion(.appVersion())
+ .setEnableBackgroundModes()
+ .setArchs()
+ .setOtherLdFlags()
+ .setCurrentProjectVersion(.appBuildVersion())
+ .setCodeSignIdentity()
+ .setCodeSignStyle()
+ .setSwiftVersion("6.0")
+ .setVersioningSystem()
+ .setProvisioningProfileSpecifier("match Development \(Project.Environment.bundlePrefix)")
+ .setDevelopmentTeam(Project.Environment.organizationTeamId)
+ .setCFBundleDevelopmentRegion()
+ .setDebugInformationFormat(),
+ configurations: [
+ .debug(
+ name: .debug,
+ settings: commonSettings(
+ appName: Project.Environment.appName,
+ displayName: Project.Environment.appName,
+ provisioningProfile: "match Development \(Project.Environment.bundlePrefix)",
+ setSkipInstall: false
+ ),
+ xcconfig: .path(.dev)
+ ),
+ .debug(
+ name: .stage,
+ settings: commonSettings(
+ appName: Project.Environment.appStageName,
+ displayName: Project.Environment.appName,
+ provisioningProfile: "match Development \(Project.Environment.bundlePrefix)",
+ setSkipInstall: false
+ ),
+ xcconfig: .path(.stage)
+ ),
+ .release(
+ name: .release,
+ settings: commonSettings(
+ appName: Project.Environment.appName,
+ displayName: Project.Environment.appName,
+ provisioningProfile: "match AppStore \(Project.Environment.bundlePrefix)",
+ setSkipInstall: false
+ ),
+ xcconfig: .path(.release)
+ ),
+ .release(
+ name: .prod,
+ settings: commonSettings(
+ appName: Project.Environment.appProdName,
+ displayName: Project.Environment.appName,
+ provisioningProfile: "match AppStore \(Project.Environment.bundlePrefix)",
+ setSkipInstall: false
+ ),
+ xcconfig: .path(.prod)
+ ),
+ ],
+ defaultSettings: .recommended
+ )
+
+ public static func appBaseSetting(appName: String) -> Settings {
+ .settings(
+ base: SettingsDictionary()
+ .setProductName(appName)
+ .setMarketingVersion(.appVersion())
+ .setCurrentProjectVersion(.appBuildVersion())
+ .setCodeSignIdentity()
+ .setArchs()
+ .setSwiftVersion("6.0")
+ .setVersioningSystem()
+ .setDebugInformationFormat(),
+ configurations: [
+ .debug(
+ name: .debug,
+ settings: commonBaseSettings(appName: appName),
+ xcconfig: .relativeToRoot("./Config/Dev.xcconfig")
+ ),
+ .release(
+ name: .release,
+ settings: commonBaseSettings(appName: appName),
+ xcconfig: .relativeToRoot("./Config/Release.xcconfig")
+ )
+ ],
+ defaultSettings: .recommended
+ )
+ }
+}
diff --git a/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/Setting/SettingDictionary.swift b/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/Setting/SettingDictionary.swift
new file mode 100644
index 0000000..11e16ce
--- /dev/null
+++ b/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/Setting/SettingDictionary.swift
@@ -0,0 +1,106 @@
+//
+// SettingDictionary.swift
+// ProjectTemplatePlugin
+//
+// Created by 서원지 on 6/12/24.
+//
+
+import Foundation
+import ProjectDescription
+
+public extension SettingsDictionary {
+ func setProductBundleIdentifier(_ value: String = "com.iOS$(BUNDLE_ID_SUFFIX)") -> SettingsDictionary {
+ return self.merging(["PRODUCT_BUNDLE_IDENTIFIER": SettingValue(stringLiteral: value)]) { (_, new) in new }
+ }
+
+ func setProductName(_ value: String) -> SettingsDictionary {
+ return self.merging(["PRODUCT_NAME": SettingValue(stringLiteral: value)]) { (_, new) in new }
+ }
+
+ func setCFBundleDisplayName(_ value: String) -> SettingsDictionary {
+ return self.merging(["CFBundleDisplayName": SettingValue(stringLiteral: value)]) { (_, new) in new }
+ }
+
+ func setMarketingVersion(_ value: String) -> SettingsDictionary {
+ return self.merging(["MARKETING_VERSION": SettingValue(stringLiteral: value)]) { (_, new) in new }
+ }
+
+ func setASAuthenticationServicesEnabled(_ value: String = "YES") -> SettingsDictionary {
+ return self.merging(["AS_AUTHENTICATION_SERVICES_ENABLED": SettingValue(stringLiteral: value)]) { (_, new) in new }
+ }
+
+ func setPushNotificationsEnabled(_ value: String = "YES") -> SettingsDictionary {
+ return self.merging(["PUSH_NOTIFICATIONS_ENABLED": SettingValue(stringLiteral: value)]) { (_, new) in new }
+ }
+
+ func setEnableBackgroundModes(_ value: String = "YES", backgroundModes: String = "remote-notification") -> SettingsDictionary {
+ return self.merging(["ENABLE_BACKGROUND_MODES": SettingValue(stringLiteral: value), "BACKGROUND_MODES": SettingValue(stringLiteral: backgroundModes)]) { (_, new) in new }
+ }
+
+ func setArchs(_ value: String = "$(ARCHS_STANDARD)") -> SettingsDictionary {
+ return self.merging(["ARCHS": SettingValue(stringLiteral: value)]) { (_, new) in new }
+ }
+
+ func setOtherLdFlags(_ value: String = "$(inherited) -ObjC") -> SettingsDictionary {
+ return self.merging(["OTHER_LDFLAGS": SettingValue(stringLiteral: value)]) { (_, new) in new }
+ }
+
+ func setCurrentProjectVersion(_ value: String) -> SettingsDictionary {
+ return self.merging(["CURRENT_PROJECT_VERSION": SettingValue(stringLiteral: value)]) { (_, new) in new }
+ }
+
+ func setCodeSignIdentity(_ value: String = "iPhone Developer") -> SettingsDictionary {
+ return self.merging(["CODE_SIGN_IDENTITY": SettingValue(stringLiteral: value)]) { (_, new) in new }
+ }
+
+ func setCodeSignStyle(_ value: String = "Manual") -> SettingsDictionary {
+ return self.merging(["CODE_SIGN_STYLE": SettingValue(stringLiteral: value)]) { (_, new) in new }
+ }
+
+ func setVersioningSystem(_ value: String = "apple-generic") -> SettingsDictionary {
+ return self.merging(["VERSIONING_SYSTEM": SettingValue(stringLiteral: value)]) { (_, new) in new }
+ }
+
+ func setDebugInformationFormat(_ value: String = "DWARF with dSYM File") -> SettingsDictionary {
+ return self.merging(["DEBUG_INFORMATION_FORMAT": SettingValue(stringLiteral: value)]) { (_, new) in new }
+ }
+
+ func setStripStyle(_ value: String = "non-global") -> SettingsDictionary {
+ return self.merging(["STRIP_STYLE": SettingValue(stringLiteral: value)]) { (_, new) in new }
+ }
+
+ func setProvisioningProfileSpecifier(_ value: String) -> SettingsDictionary {
+ return self.merging(["PROVISIONING_PROFILE_SPECIFIER": SettingValue(stringLiteral: value)]) { (_, new) in new }
+ }
+
+ func setSwiftVersion(_ value: String) -> SettingsDictionary {
+ return self.merging(["SWIFT_VERSION": SettingValue(stringLiteral: value)]) { (_, new) in new }
+ }
+
+ func setDevelopmentTeam(_ value: String) -> SettingsDictionary {
+ return self.merging(["DEVELOPMENT_TEAM": SettingValue(stringLiteral: value)]) { (_, new) in new }
+ }
+
+ func setSkipInstall(_ value: Bool = false) -> SettingsDictionary {
+ return self.merging(["SKIP_INSTALL": SettingValue(stringLiteral: value ? "YES" : "NO")])
+ }
+
+ func setExplicitlyBuiltModules(_ value: Bool = true) -> SettingsDictionary {
+ return self.merging(["EXPLICITLY_BUILT_MODULES": SettingValue(stringLiteral: value ? "YES" : "NO")])
+ }
+
+ /// 기본 로케일을 한국어(ko)로 설정하는 메서드
+ func setCFBundleDevelopmentRegion(_ value: String = "ko") -> SettingsDictionary {
+ return self.merging(["CFBundleDevelopmentRegion": SettingValue(stringLiteral: value)]) { (_, new) in new }
+ }
+
+ func setAllowNonModularIncludesInFrameworkModules(_ value: Bool) -> SettingsDictionary {
+ let stringValue = value ? "YES" : "NO"
+ return merging([
+ "CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES": SettingValue(stringLiteral: stringValue)
+ ]) { _, new in new }
+ }
+}
+
+
+
diff --git a/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/infoPlist/InfoPlistDictionary.swift b/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/infoPlist/InfoPlistDictionary.swift
new file mode 100644
index 0000000..58c6dd6
--- /dev/null
+++ b/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/infoPlist/InfoPlistDictionary.swift
@@ -0,0 +1,188 @@
+//
+// InfoPlistDictionary.swift
+// Plugins
+//
+// Created by Wonji Suh on 3/22/25.
+//
+
+import Foundation
+import ProjectDescription
+
+public typealias InfoPlistDictionary = [String: Plist.Value]
+
+extension InfoPlistDictionary {
+ func setUIUserInterfaceStyle(_ value: String) -> InfoPlistDictionary {
+ return self.merging(["UIUserInterfaceStyle": .string(value)]) { (_, new) in new }
+ }
+
+ func setCFBundleDevelopmentRegion(_ value: String) -> InfoPlistDictionary {
+ return self.merging(["CFBundleDevelopmentRegion": .string(value)]) { (_, new) in new }
+ }
+
+ func setCFBundleExecutable(_ value: String) -> InfoPlistDictionary {
+ return self.merging(["CFBundleExecutable": .string(value)]) { (_, new) in new }
+ }
+
+ func setCFBundleIdentifier(_ value: String) -> InfoPlistDictionary {
+ return self.merging(["CFBundleIdentifier": .string(value)]) { (_, new) in new }
+ }
+
+ func setCFBundleInfoDictionaryVersion(_ value: String) -> InfoPlistDictionary {
+ return self.merging(["CFBundleInfoDictionaryVersion": .string(value)]) { (_, new) in new }
+ }
+
+ func setCFBundleName(_ value: String) -> InfoPlistDictionary {
+ return self.merging(["CFBundleName": .string(value)]) { (_, new) in new }
+ }
+
+ func setCFBundlePackageType(_ value: String) -> InfoPlistDictionary {
+ return self.merging(["CFBundlePackageType": .string(value)]) { (_, new) in new }
+ }
+
+ func setCFBundleShortVersionString(_ value: String) -> InfoPlistDictionary {
+ return self.merging(["CFBundleShortVersionString": .string(value)]) { (_, new) in new }
+ }
+
+ // 매개변수 없는 경우, 기본 지역을 "ko"로 설정
+ func setCFBundleDevelopmentRegion() -> InfoPlistDictionary {
+ return self.merging(["CFBundleDevelopmentRegion": .string("ko")]) {
+ (_, new) in new
+ }
+ }
+
+ func setCFBundleURLTypes(_ value: [[String: Any]]) -> InfoPlistDictionary {
+ func convertToPlistValue(_ value: Any) -> Plist.Value {
+ switch value {
+ case let string as String:
+ return .string(string)
+ case let array as [Any]:
+ return .array(array.map { convertToPlistValue($0) })
+ case let dictionary as [String: Any]:
+ return .dictionary(dictionary.mapValues { convertToPlistValue($0) })
+ case let bool as Bool:
+ return .boolean(bool)
+ default:
+ return .string("\(value)")
+ }
+ }
+ let dict: [String: Plist.Value] = [
+ "CFBundleURLTypes": .array(value.map { .dictionary($0.mapValues { convertToPlistValue($0) }) })
+ ]
+ return self.merging(dict) { (_, new) in new }
+ }
+
+ func setCFBundleVersion(_ value: String) -> InfoPlistDictionary {
+ return self.merging(["CFBundleVersion": .string(value)]) { (_, new) in new }
+ }
+
+ func setGIDClientID(_ value: String) -> InfoPlistDictionary {
+ return self.merging(["GIDClientID": .string(value)]) { (_, new) in new }
+ }
+
+ func setLSRequiresIPhoneOS(_ value: Bool) -> InfoPlistDictionary {
+ return self.merging(["LSRequiresIPhoneOS": .boolean(value)]) { (_, new) in new }
+ }
+
+ func setUIAppFonts(_ value: [String]) -> InfoPlistDictionary {
+ return self.merging(["UIAppFonts": .array(value.map { .string($0) })]) { (_, new) in new }
+ }
+
+ func setAppTransportSecurity() -> InfoPlistDictionary {
+ let dict: [String: Plist.Value] = [
+ "NSAppTransportSecurity": .dictionary([
+ "NSAllowsArbitraryLoads": .boolean(true)
+ ])
+ ]
+ return self.merging(dict) { (_, new) in new }
+ }
+
+ // 매개변수 없는 URL 타입 (예: 카카오)
+ func setCFBundleURLTypes() -> InfoPlistDictionary {
+ let dict: [String: Plist.Value] = [
+ "CFBundleURLTypes": .array([
+ .dictionary([
+ "CFBundleURLSchemes": .array([
+ .string("${REVERSED_CLIENT_ID}")
+// .string("com.googleusercontent.apps.882277748169-glpolfiecue4lqqps6hmgj9t8lm1g5qp")
+ ])
+ ])
+ ])
+ ]
+ return self.merging(dict) { (_, new) in new }
+ }
+
+ func setUIApplicationSceneManifest(_ value: [String: Any]) -> InfoPlistDictionary {
+ func convertToPlistValue(_ value: Any) -> Plist.Value {
+ switch value {
+ case let string as String:
+ return .string(string)
+ case let array as [Any]:
+ return .array(array.map { convertToPlistValue($0) })
+ case let dictionary as [String: Any]:
+ return .dictionary(dictionary.mapValues { convertToPlistValue($0) })
+ case let bool as Bool:
+ return .boolean(bool)
+ default:
+ return .string("\(value)")
+ }
+ }
+ let dict: [String: Plist.Value] = [
+ "UIApplicationSceneManifest": convertToPlistValue(value)
+ ]
+ return self.merging(dict) { (_, new) in new }
+ }
+
+ func setUILaunchStoryboardName(_ value: String) -> InfoPlistDictionary {
+ return self.merging(["UILaunchStoryboardName": .string(value)]) { (_, new) in new }
+ }
+
+ func setUIRequiredDeviceCapabilities(_ value: [String]) -> InfoPlistDictionary {
+ return self.merging(["UIRequiredDeviceCapabilities": .array(value.map { .string($0) })]) { (_, new) in new }
+ }
+
+ func setUISupportedInterfaceOrientations(_ value: [String]) -> InfoPlistDictionary {
+ return self.merging(["UISupportedInterfaceOrientations": .array(value.map { .string($0) })]) { (_, new) in new }
+ }
+
+ func setNSCameraUsageDescription(_ value: String) -> InfoPlistDictionary {
+ return self.merging(["NSCameraUsageDescription": .string(value)]) { (_, new) in new }
+ }
+
+ func setUILaunchScreens() -> InfoPlistDictionary {
+ let dict: [String: Plist.Value] = [
+ "UILaunchScreens": .dictionary([
+ "UILaunchScreen": .dictionary([
+ "New item": .dictionary([
+ "UIImageName": .string(""),
+ "UILaunchScreenIdentifier": .string("")
+ ])
+ ])
+ ])
+ ]
+ return self.merging(dict) { (_, new) in new }
+ }
+
+ func setAppUseExemptEncryption(value: Bool) -> InfoPlistDictionary {
+ return self.merging(["ITSAppUsesNonExemptEncryption": .boolean(value)]) { (_, new) in new }
+ }
+
+ func setFirebaseAnalyticsCollectionEnabled() -> InfoPlistDictionary {
+ return self.merging(["FIREBASE_ANALYTICS_COLLECTION_ENABLED": .boolean(false)]) { (_, new) in new }
+ }
+
+ func setCalenderUsage(_ description: String) -> InfoPlistDictionary {
+ return self.merging(["NSCalendarsUsageDescription": .string(description)]) { (_, new) in new }
+ }
+
+ func setGoogleReversedClientID(_ value: String) -> InfoPlistDictionary {
+ return self.merging(["REVERSED_CLIENT_ID": .string(value)]) { (_, new) in new }
+ }
+
+ func setGoogleClientID(_ value: String) -> InfoPlistDictionary {
+ return self.merging(["GOOGLE_CLIENT_ID": .string(value)]) { (_, new) in new }
+ }
+
+ func setBaseURL(_ value: String) -> InfoPlistDictionary {
+ return self.merging(["BASE_URL": .string(value)]) { (_, new) in new }
+ }
+}
diff --git a/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/infoPlist/Project+InfoPlist.swift b/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/infoPlist/Project+InfoPlist.swift
new file mode 100644
index 0000000..01d2a46
--- /dev/null
+++ b/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/infoPlist/Project+InfoPlist.swift
@@ -0,0 +1,58 @@
+//
+// Project+InfoPlist.swift
+// Plugins
+//
+// Created by Wonji Suh on 3/22/25.
+//
+
+import Foundation
+import ProjectDescription
+
+public extension InfoPlist {
+ static let appInfoPlist: Self = .extendingDefault(
+ with: InfoPlistDictionary()
+ .setUIUserInterfaceStyle("Light")
+ .setUILaunchScreens()
+ .setCFBundleDevelopmentRegion()
+ .setCFBundleDevelopmentRegion("$(DEVELOPMENT_LANGUAGE)")
+ .setCFBundleExecutable("$(EXECUTABLE_NAME)")
+ .setCFBundleIdentifier("$(PRODUCT_BUNDLE_IDENTIFIER)")
+ .setCFBundleInfoDictionaryVersion("6.0")
+ .setCFBundleName("${BUNDLE_DISPLAY_NAME}")
+ .setCFBundlePackageType("APPL")
+ .setCFBundleShortVersionString(.appVersion())
+ .setAppTransportSecurity()
+ .setCFBundleURLTypes()
+ .setAppUseExemptEncryption(value: false)
+ .setCFBundleVersion(.appBuildVersion())
+ .setLSRequiresIPhoneOS(true)
+ .setUIAppFonts(["PretendardVariable.ttf"])
+ .setUIApplicationSceneManifest([
+ "UIApplicationSupportsMultipleScenes": true,
+ "UISceneConfigurations": [
+ "UIWindowSceneSessionRoleApplication": [
+ [
+ // ← 구성 이름(문자 그대로)
+ "UISceneConfigurationName": "Default Configuration",
+ // ← 실제 SceneDelegate 클래스 경로
+ "UISceneDelegateClassName": "$(PRODUCT_MODULE_NAME).SceneDelegate"
+ // 스토리보드 안 쓰면 UISceneStoryboardFile은 생략
+ // "UISceneStoryboardFile": "Main"
+ ]
+ ]
+ ]
+ ])
+ )
+
+ static let moduleInfoPlist: Self = .extendingDefault(
+ with: InfoPlistDictionary()
+ .setUIUserInterfaceStyle("Light")
+ .setCFBundleDevelopmentRegion("$(DEVELOPMENT_LANGUAGE)")
+ .setCFBundleExecutable("$(EXECUTABLE_NAME)")
+ .setCFBundleIdentifier("$(PRODUCT_BUNDLE_IDENTIFIER)")
+ .setCFBundleInfoDictionaryVersion("6.0")
+ .setCFBundlePackageType("APPL")
+ .setCFBundleShortVersionString(.appVersion())
+ .setBaseURL("$(BASE_URL)")
+ )
+}
diff --git a/Plugins/ProjectTemplatePlugin/Sources/tuist-my-cli/main.swift b/Plugins/ProjectTemplatePlugin/Sources/tuist-my-cli/main.swift
new file mode 100644
index 0000000..6f05969
--- /dev/null
+++ b/Plugins/ProjectTemplatePlugin/Sources/tuist-my-cli/main.swift
@@ -0,0 +1 @@
+print("Hello, from your Tuist Task")
\ No newline at end of file
diff --git a/Projects/App/BookSeries.xcodeproj/project.pbxproj b/Projects/App/BookSeries.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..3ff7a0c
--- /dev/null
+++ b/Projects/App/BookSeries.xcodeproj/project.pbxproj
@@ -0,0 +1,2699 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 55;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 010184763A46157A7F88742D /* Then.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B1817D8F11F1C7273A9A31A /* Then.framework */; };
+ 01F6DF516D9B7615015C64BF /* DiContainer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 72361704D248E9F89EECDD16 /* DiContainer.framework */; };
+ 0204FC367079D148C155A501 /* Presentation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 480FB7847D6CB247A7FDAEC5 /* Presentation.framework */; };
+ 03884DFB4398149FC2F7C68F /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B124DE28165DC98765FBDEC9 /* Assets.xcassets */; };
+ 049F5497FBA40C38616A4DA8 /* CasePathsCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 18B71AB3B06CDA4F6523E7B0 /* CasePathsCore.framework */; };
+ 04FD21B343F4C53155D0C057 /* Model.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC7D651847DF37010801DD00 /* Model.framework */; };
+ 051D3C5470CE3F8A4344A217 /* CasePathsCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 18B71AB3B06CDA4F6523E7B0 /* CasePathsCore.framework */; };
+ 07101F8EE6B80C0732710182 /* swift-sharing_Sharing.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 17F97A5FC5A75DFADEF0C41B /* swift-sharing_Sharing.bundle */; };
+ 0746FC1BB951889A7B7A15FE /* DesignSystem.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8113B6E527C78DF700D09456 /* DesignSystem.framework */; };
+ 0918BE6C6A5808779FCEEFA0 /* ComposableArchitecture.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 99328B2F83929454C6B85293 /* ComposableArchitecture.framework */; };
+ 09A67ADFA24AE9AF59E9477B /* Model.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC7D651847DF37010801DD00 /* Model.framework */; };
+ 09A78F66FA2229E2C9E94904 /* AppRootViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AE86D4FA8DA4D59926C63FB /* AppRootViewController.swift */; };
+ 09A8631004FA8454841A0FAD /* ThirdParty.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 26ECA252B19B1C8B2DC24890 /* ThirdParty.framework */; };
+ 0A75B410E584D8776B7C568E /* SnapKit_SnapKit.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = D10E9230993DFE46B2863AB6 /* SnapKit_SnapKit.bundle */; };
+ 0B59E3B130774028C1B74300 /* DomainInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 733FD6F089B9429E8E5DA857 /* DomainInterface.framework */; };
+ 0CC194B7D9BC14325F7D3536 /* AppReducer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C823C265E4A0BFC408DC36F9 /* AppReducer.swift */; };
+ 0D0D12B4F864CABE851079F9 /* Extension+AppDIContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AFC7BA08ED016460481B132 /* Extension+AppDIContainer.swift */; };
+ 0E85EE95C9781493677E8813 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 1F0B6AC8575BC9BAF42C4343 /* Preview Assets.xcassets */; };
+ 0F6D2E88174E987A5B0FD0B3 /* SwiftNavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 53A2F03EC7089D8ECA7F3492 /* SwiftNavigation.framework */; };
+ 0FD750CF3A9A4DDD51B375FF /* IssueReportingPackageSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A413B01F01C81128DEC38F6B /* IssueReportingPackageSupport.framework */; };
+ 111A985F488C9393F0497E9A /* LogMacro.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2CE4010433AC0542ABF02584 /* LogMacro.framework */; };
+ 11B8F66A12F799549414CA8C /* TuistBundle+BookSeriesTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = BEA3F9185E9DD88D17A70372 /* TuistBundle+BookSeriesTests.swift */; };
+ 120DEC15744042B0DDB0F1D0 /* Service_Service.bundle in Resources */ = {isa = PBXBuildFile; fileRef = C43E126456B7608A3077322C /* Service_Service.bundle */; };
+ 126FAB5432F7F3FE9E1FC8C4 /* AppRootViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AE86D4FA8DA4D59926C63FB /* AppRootViewController.swift */; };
+ 131806CD3C958A342E4D7E37 /* Service.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2C8D28F7781927A9E5BA024A /* Service.framework */; };
+ 133E1BD3999956179CA18E07 /* Shared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 65D5D6A38F43D58A981C995A /* Shared.framework */; };
+ 13BF6EAC3D6F4FB1E03C8A1E /* Sharing1.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3544CB5805EB2E05E9E8897F /* Sharing1.framework */; };
+ 13C0EA5DA30C40FAFC8A6CBD /* MultiModuleTemplateApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE66B17CBAB07662F606A489 /* MultiModuleTemplateApp.swift */; };
+ 14DC0AAE830AFD4B6F9E87EB /* Service_Service.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = C43E126456B7608A3077322C /* Service_Service.bundle */; };
+ 14DD18344BACD8174F83E504 /* Sharing.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4E260B5B19BADE8D94A1BC87 /* Sharing.framework */; };
+ 171D97DB8A8364BFDA2F18CE /* Network.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F7975D4C04E0C502EAE7211F /* Network.framework */; };
+ 17A7DD0136C946B18921E680 /* swift-sharing_Sharing.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 17F97A5FC5A75DFADEF0C41B /* swift-sharing_Sharing.bundle */; };
+ 191474897F23D410507A96DC /* DomainInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 733FD6F089B9429E8E5DA857 /* DomainInterface.framework */; };
+ 19D43A7C7936AB6DC9CCEC8A /* Utill.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E24FE4EA1EFFF6A311A0D24F /* Utill.framework */; };
+ 1BBB8D65617177620CF811D7 /* Dependencies.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF76B7463B1376A9B57B5CBB /* Dependencies.framework */; };
+ 1D6C7D69564E58F4FEF82AF0 /* PretendardVariable.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 134700A99AD60C839F2E3486 /* PretendardVariable.ttf */; };
+ 1E006DDD65FE7F79BBB4EA4F /* Shared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 65D5D6A38F43D58A981C995A /* Shared.framework */; };
+ 1EC07D804E437137DBB22CA5 /* Repository.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9ED5FB715E54880146B25179 /* Repository.framework */; };
+ 1FB232D3A0EB4D23E09FD96C /* DesignSystem_DesignSystem.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 2EF15C1F8BB7DCB514B67F09 /* DesignSystem_DesignSystem.bundle */; };
+ 2268A67C0D0E60D24D426E80 /* Repository.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9ED5FB715E54880146B25179 /* Repository.framework */; };
+ 2272C576A5D8214496320B45 /* Service_Service.bundle in Resources */ = {isa = PBXBuildFile; fileRef = C43E126456B7608A3077322C /* Service_Service.bundle */; };
+ 22CEE6A94399CE2768EC4BEE /* DependenciesMacros.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 69ADB2DE6075431BA0F7D98A /* DependenciesMacros.framework */; };
+ 230314F89342E07C1220B563 /* TuistBundle+BookSeriesStage.swift in Sources */ = {isa = PBXBuildFile; fileRef = B13914B9BF1940AB194428F3 /* TuistBundle+BookSeriesStage.swift */; };
+ 23976C8EF165BE8066FEF8B7 /* Extension+UseCaseModuleFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC3EAB0592986E36A58E8400 /* Extension+UseCaseModuleFactory.swift */; };
+ 23F32E35F3EB9BFE2CC7ADAC /* AppReducer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C823C265E4A0BFC408DC36F9 /* AppReducer.swift */; };
+ 26773814A346AA7C07FEFFE7 /* Dependencies.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF76B7463B1376A9B57B5CBB /* Dependencies.framework */; };
+ 2686EA674419A846808324F7 /* PretendardVariable.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 134700A99AD60C839F2E3486 /* PretendardVariable.ttf */; };
+ 2790F23F98A2D138EAFFF534 /* Perception.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB232483F1FA5F0D37513CF3 /* Perception.framework */; };
+ 280B0C89F259714211E21947 /* TuistAssets+BookSeries.swift in Sources */ = {isa = PBXBuildFile; fileRef = B125F1B54E7058ED6B04D3EE /* TuistAssets+BookSeries.swift */; };
+ 287C79BB24225A8B6C5A8B25 /* Network.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F7975D4C04E0C502EAE7211F /* Network.framework */; };
+ 292EF74C872162FF586ABD74 /* Sharing2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A690EFD2BE351B2A63014380 /* Sharing2.framework */; };
+ 29479658CD9A0201DA863D3A /* swift-composable-architecture_ComposableArchitecture.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = D8DDB41EB98CC49587957857 /* swift-composable-architecture_ComposableArchitecture.bundle */; };
+ 294C2CD6668FD0C492DBC970 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EE2C6BD75974C8636113B2E /* SceneDelegate.swift */; };
+ 2A324D0E6C70DFCBB6B748CB /* AppReducer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C823C265E4A0BFC408DC36F9 /* AppReducer.swift */; };
+ 2B326661DC1725152C6275F5 /* IdentifiedCollections.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0E410FB6DA5A848404FC78D /* IdentifiedCollections.framework */; };
+ 2B74C3C4B17DB1DF5F2EFEBB /* TuistBundle+BookSeriesDebug.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6587C4F0F6AD1565BE6F66BF /* TuistBundle+BookSeriesDebug.swift */; };
+ 2C19F633F200FA5451F0E875 /* UIKitNavigationShim.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6B01795781D4F8E408FE23BF /* UIKitNavigationShim.framework */; };
+ 2C211C56B6527BC0B04A3878 /* SwiftUINavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C7CE68E271D8F565604BC58 /* SwiftUINavigation.framework */; };
+ 2CE4F2C18F5716E323F84150 /* XCTestDynamicOverlay.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DC5DC061276357FFE1B28E1A /* XCTestDynamicOverlay.framework */; };
+ 2D6086EFBD4F75EF9F80B8A4 /* DiContainer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 72361704D248E9F89EECDD16 /* DiContainer.framework */; };
+ 2DDF50D2EEB0A5E7CDB009C2 /* IssueReporting.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E3145E751D70F16C7E9A6207 /* IssueReporting.framework */; };
+ 2E92B055400D0DA67175F140 /* SwiftUINavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C7CE68E271D8F565604BC58 /* SwiftUINavigation.framework */; };
+ 2EE95DEFFFA07E7317074DB8 /* Extension+AppDIContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AFC7BA08ED016460481B132 /* Extension+AppDIContainer.swift */; };
+ 305AEFDA353241B2EC2583FD /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE57284E331AB79F3FCC74DF /* ContentView.swift */; };
+ 30F2402A8236BF29C6BD5E40 /* SwiftUINavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C7CE68E271D8F565604BC58 /* SwiftUINavigation.framework */; };
+ 3167741785445E65A0E317C5 /* Clocks.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B9A363553200F9EFD0CD9979 /* Clocks.framework */; };
+ 329FB8CD75CC1723E8A48228 /* BookSeriesTestPlan.xctestplan in Resources */ = {isa = PBXBuildFile; fileRef = 26DF3245D9F3B314DBDA6432 /* BookSeriesTestPlan.xctestplan */; };
+ 32B70AC4BCB3CB95545956B1 /* swift-sharing_Sharing.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 17F97A5FC5A75DFADEF0C41B /* swift-sharing_Sharing.bundle */; };
+ 33BBE3FBD29D30F984CA6B4E /* OSLog.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4AD5526931D7D6B18EF034A6 /* OSLog.framework */; };
+ 34265635C882495E11D2CC58 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93F7812CB58B93E37E2C34A9 /* AppDelegate.swift */; };
+ 35556FAD778EF3F73A70E2A4 /* Repository.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9ED5FB715E54880146B25179 /* Repository.framework */; };
+ 3622F889376776F2AC83C6F9 /* Extension+RepositoryModuleFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24C43B3865443C1F114DF6B9 /* Extension+RepositoryModuleFactory.swift */; };
+ 36D440321EAFBF2A3429FA9F /* Then.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B1817D8F11F1C7273A9A31A /* Then.framework */; };
+ 39F025F37A301E3DCAB7C37A /* Clocks.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B9A363553200F9EFD0CD9979 /* Clocks.framework */; };
+ 3B97D49FCB9B5E21D69D0A08 /* Model.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC7D651847DF37010801DD00 /* Model.framework */; };
+ 3BF6C786A0855443D3560C28 /* MultiModuleTemplateApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE66B17CBAB07662F606A489 /* MultiModuleTemplateApp.swift */; };
+ 3CC5506D82551156DEE1A454 /* OrderedCollections.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 39C75D0C168004F9BF8E193E /* OrderedCollections.framework */; };
+ 3DEC7FF046BE8AFE3704A0C1 /* MultiModuleTemplateTests.swift in Resources */ = {isa = PBXBuildFile; fileRef = F2872CFD7FF45AB2217A2BD6 /* MultiModuleTemplateTests.swift */; };
+ 3E44752E327BC2B928AD9989 /* InternalCollectionsUtilities.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C312E6C75C4078A011514088 /* InternalCollectionsUtilities.framework */; };
+ 4239ADF4F559424B6B492245 /* Sharing.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4E260B5B19BADE8D94A1BC87 /* Sharing.framework */; };
+ 433AB87D6E6AEC78B0FFF391 /* LogMacro.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2CE4010433AC0542ABF02584 /* LogMacro.framework */; };
+ 4420A776214E00A84F09B3E3 /* Service.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2C8D28F7781927A9E5BA024A /* Service.framework */; };
+ 44228872AEF3A24AD5567DDB /* Shared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 65D5D6A38F43D58A981C995A /* Shared.framework */; };
+ 4450DD38F22D6CA85F5DD7E4 /* AppReducerTests.swift in Resources */ = {isa = PBXBuildFile; fileRef = 006FC054F733FA63F7303B84 /* AppReducerTests.swift */; };
+ 445AF74B11EDA66B12BDD769 /* SnapKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D827159A12827C3B5E81D2BE /* SnapKit.framework */; };
+ 468DD26AA241FC283974CDDD /* DesignSystem_DesignSystem.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 2EF15C1F8BB7DCB514B67F09 /* DesignSystem_DesignSystem.bundle */; };
+ 46958D3B4904EFDFEBEB68C6 /* Shared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 65D5D6A38F43D58A981C995A /* Shared.framework */; };
+ 47103C1CC32B7163126AA69A /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE57284E331AB79F3FCC74DF /* ContentView.swift */; };
+ 48965DA3D1BE28DB71EEF855 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93F7812CB58B93E37E2C34A9 /* AppDelegate.swift */; };
+ 48A86119CDF32C6DD6A8D7F1 /* SnapKit_SnapKit.bundle in Resources */ = {isa = PBXBuildFile; fileRef = D10E9230993DFE46B2863AB6 /* SnapKit_SnapKit.bundle */; };
+ 4BE6136F6A68E0916E087D0D /* ThirdParty.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 26ECA252B19B1C8B2DC24890 /* ThirdParty.framework */; };
+ 4C6981A745DFD8D164B2B107 /* SnapKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D827159A12827C3B5E81D2BE /* SnapKit.framework */; };
+ 4CD7F959BD5A22F4E065CE0A /* MultiModuleTemplateApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE66B17CBAB07662F606A489 /* MultiModuleTemplateApp.swift */; };
+ 4D017799CEF702BE258FD69F /* PretendardVariable.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 134700A99AD60C839F2E3486 /* PretendardVariable.ttf */; };
+ 4DA9AA53C105F792460076F5 /* ComposableArchitecture.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 99328B2F83929454C6B85293 /* ComposableArchitecture.framework */; };
+ 4F030168FED3FDF9451C8300 /* Sharing.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4E260B5B19BADE8D94A1BC87 /* Sharing.framework */; };
+ 508F3224DDE093DCEDBD5195 /* IssueReportingPackageSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A413B01F01C81128DEC38F6B /* IssueReportingPackageSupport.framework */; };
+ 51C6DD09CBD5351D92284CFF /* Core.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8B7027D72B367616A0D35FED /* Core.framework */; };
+ 533EFBDBD201589BC958DBF4 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 1F0B6AC8575BC9BAF42C4343 /* Preview Assets.xcassets */; };
+ 538E92CEB4E197D5C0F45C90 /* DesignSystem_DesignSystem.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 2EF15C1F8BB7DCB514B67F09 /* DesignSystem_DesignSystem.bundle */; };
+ 5735B4B9FE6D684593747B0A /* TuistBundle+BookSeriesProd.swift in Sources */ = {isa = PBXBuildFile; fileRef = A23DDA0A40A3737C53049CA1 /* TuistBundle+BookSeriesProd.swift */; };
+ 57EEA31CA5696FA1ACF7E6F3 /* swift-sharing_Sharing.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 17F97A5FC5A75DFADEF0C41B /* swift-sharing_Sharing.bundle */; };
+ 5837CFA33E88478AE0F5FAE4 /* UIKitNavigationShim.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6B01795781D4F8E408FE23BF /* UIKitNavigationShim.framework */; };
+ 589635304914F65637BF1801 /* swift-composable-architecture_ComposableArchitecture.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = D8DDB41EB98CC49587957857 /* swift-composable-architecture_ComposableArchitecture.bundle */; };
+ 59F98AF6240DFB5820C8E16B /* AppRootViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AE86D4FA8DA4D59926C63FB /* AppRootViewController.swift */; };
+ 5AA4C0EA3811B9F136CE3D77 /* PretendardVariable.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 134700A99AD60C839F2E3486 /* PretendardVariable.ttf */; };
+ 5B9FDC18C7F8E86AAE5A9061 /* CombineSchedulers.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 934402327D54C70FF2AF5CFE /* CombineSchedulers.framework */; };
+ 5BCC72745ECD607DB16A7F05 /* Then.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B1817D8F11F1C7273A9A31A /* Then.framework */; };
+ 5BDBD90D5443C6569714ADC2 /* CasePaths.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C9F6B5F70EF32E24EA256225 /* CasePaths.framework */; };
+ 5C74E51211DDDA627C518CDE /* DependenciesMacros.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 69ADB2DE6075431BA0F7D98A /* DependenciesMacros.framework */; };
+ 5E034813B5D9F8701E6915C5 /* CasePaths.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C9F6B5F70EF32E24EA256225 /* CasePaths.framework */; };
+ 5E0AB5976997D4368F1A2F21 /* SwiftNavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 53A2F03EC7089D8ECA7F3492 /* SwiftNavigation.framework */; };
+ 5EB46BDC20AD8D9F2317A12F /* TuistAssets+BookSeriesDebug.swift in Sources */ = {isa = PBXBuildFile; fileRef = E88FA9511AF4D12467377037 /* TuistAssets+BookSeriesDebug.swift */; };
+ 5F69B3348E05B15D1B68C6BB /* UIKitNavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AEFAEF397048AB3729AA9AC5 /* UIKitNavigation.framework */; };
+ 5F903474D6C0C9E6C0E9A454 /* Sharing1.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3544CB5805EB2E05E9E8897F /* Sharing1.framework */; };
+ 604A727CA134F38CB534B2D3 /* UseCase.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 414D38C3F2D530595DDCF4DC /* UseCase.framework */; };
+ 609393AA778B72B1CE79F78C /* UIKitNavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AEFAEF397048AB3729AA9AC5 /* UIKitNavigation.framework */; };
+ 61FB02519EBBDF1FA0AEFC35 /* UseCase.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 414D38C3F2D530595DDCF4DC /* UseCase.framework */; };
+ 62C383D8C3816AC5CC092A03 /* Clocks.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B9A363553200F9EFD0CD9979 /* Clocks.framework */; };
+ 64406F306F998091CE728BE3 /* TuistBundle+BookSeries.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E00D0944F306160DBC02D22 /* TuistBundle+BookSeries.swift */; };
+ 6469B0BC6DD52FD76E4AE3D1 /* Presentation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 480FB7847D6CB247A7FDAEC5 /* Presentation.framework */; };
+ 65FF8017EF8CFABA7EACBBDB /* Utill.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E24FE4EA1EFFF6A311A0D24F /* Utill.framework */; };
+ 66FE615A77AC4D0A1F6AA123 /* ConcurrencyExtras.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 49AFE66BD306CDAD926B5776 /* ConcurrencyExtras.framework */; };
+ 6746D65680016AE7A78DE451 /* Dependencies.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF76B7463B1376A9B57B5CBB /* Dependencies.framework */; };
+ 674A863CD39B19A8C41B4B7F /* TuistAssets+BookSeriesStage.swift in Sources */ = {isa = PBXBuildFile; fileRef = EFC5A50539F81CB15005A817 /* TuistAssets+BookSeriesStage.swift */; };
+ 67657DE5A987E782C91B11FD /* Perception.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB232483F1FA5F0D37513CF3 /* Perception.framework */; };
+ 680D17B2DAF9C091381DAB26 /* XCTestDynamicOverlay.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DC5DC061276357FFE1B28E1A /* XCTestDynamicOverlay.framework */; };
+ 68754F9F9F0718B9DD994B2F /* MultiModuleTemplateApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = EE66B17CBAB07662F606A489 /* MultiModuleTemplateApp.swift */; };
+ 6A1AD33B8D775C56D0636AFE /* DomainInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 733FD6F089B9429E8E5DA857 /* DomainInterface.framework */; };
+ 6D05EAB2436489594B042F25 /* OrderedCollections.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 39C75D0C168004F9BF8E193E /* OrderedCollections.framework */; };
+ 6D8D7AACC65AEF7EA9042C14 /* Core.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8B7027D72B367616A0D35FED /* Core.framework */; };
+ 6ED6AF8E005D055B8966D1CC /* OrderedCollections.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 39C75D0C168004F9BF8E193E /* OrderedCollections.framework */; };
+ 6FD86D9A7C4177F5CE9A0236 /* CustomDump.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1492AD11877F9061E900D95C /* CustomDump.framework */; };
+ 7062927B4B93F814A8CFA8B6 /* PerceptionCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C612423162F7BE460B16B573 /* PerceptionCore.framework */; };
+ 707A839AEB92DEAD99F92022 /* Sharing2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A690EFD2BE351B2A63014380 /* Sharing2.framework */; };
+ 71C4EC98060B61788854F45C /* DesignSystem_DesignSystem.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 2EF15C1F8BB7DCB514B67F09 /* DesignSystem_DesignSystem.bundle */; };
+ 7255B6A73FCFA63314C6E9E7 /* SnapKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D827159A12827C3B5E81D2BE /* SnapKit.framework */; };
+ 740DB1888E9C53DD56725A8F /* TuistFonts+BookSeries.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC3F05D94A9986AAED45E845 /* TuistFonts+BookSeries.swift */; };
+ 746208B54C6A8DC0BAC897A9 /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EE2C6BD75974C8636113B2E /* SceneDelegate.swift */; };
+ 74DBD3E00060401BE05CA527 /* swift-sharing_Sharing.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 17F97A5FC5A75DFADEF0C41B /* swift-sharing_Sharing.bundle */; };
+ 75111283A354F0451C4F08F4 /* IssueReporting.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E3145E751D70F16C7E9A6207 /* IssueReporting.framework */; };
+ 753E3D2FA6409DBD906F9491 /* DiContainer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 72361704D248E9F89EECDD16 /* DiContainer.framework */; };
+ 7585ABD0D2CE6F63573C981F /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EE2C6BD75974C8636113B2E /* SceneDelegate.swift */; };
+ 758B82EC4B366AD535207BFF /* DesignSystem_DesignSystem.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 2EF15C1F8BB7DCB514B67F09 /* DesignSystem_DesignSystem.bundle */; };
+ 75B0C35B930B385AE847CBE3 /* Extension+AppDIContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AFC7BA08ED016460481B132 /* Extension+AppDIContainer.swift */; };
+ 75D245A93E19092551C49E9D /* Perception.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB232483F1FA5F0D37513CF3 /* Perception.framework */; };
+ 7657E931475420A5B8495E42 /* Extension+AppDIContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AFC7BA08ED016460481B132 /* Extension+AppDIContainer.swift */; };
+ 76DFB9853D830A03AB822A0A /* IssueReportingPackageSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A413B01F01C81128DEC38F6B /* IssueReportingPackageSupport.framework */; };
+ 77CCB945BE7BA9673F15BE1F /* LogMacro.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2CE4010433AC0542ABF02584 /* LogMacro.framework */; };
+ 782D3D3D1F0DFD81BD275BF6 /* Extension+RepositoryModuleFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24C43B3865443C1F114DF6B9 /* Extension+RepositoryModuleFactory.swift */; };
+ 7AC2B98BA45C62127D482AA2 /* IdentifiedCollections.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0E410FB6DA5A848404FC78D /* IdentifiedCollections.framework */; };
+ 7B2C3548D001D821A6BC3175 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 1F0B6AC8575BC9BAF42C4343 /* Preview Assets.xcassets */; };
+ 7C330423628CE46DEAD42121 /* IssueReporting.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E3145E751D70F16C7E9A6207 /* IssueReporting.framework */; };
+ 7C405798DCC6857A43E3582C /* DesignSystem.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8113B6E527C78DF700D09456 /* DesignSystem.framework */; };
+ 7EC6F6EC211E1145CCA1FAB9 /* SwiftNavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 53A2F03EC7089D8ECA7F3492 /* SwiftNavigation.framework */; };
+ 835D5CDC3E4A8780C845BC40 /* SwiftNavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 53A2F03EC7089D8ECA7F3492 /* SwiftNavigation.framework */; };
+ 835F4884CE20C1C1B09F271A /* Service.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2C8D28F7781927A9E5BA024A /* Service.framework */; };
+ 842B9E350B0CE67CB61C2D77 /* CasePaths.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C9F6B5F70EF32E24EA256225 /* CasePaths.framework */; };
+ 850AF9EC1DFCC41D687D4496 /* Extension+RepositoryModuleFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24C43B3865443C1F114DF6B9 /* Extension+RepositoryModuleFactory.swift */; };
+ 85AA9BBA71DF9D1707F93A79 /* ThirdParty.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 26ECA252B19B1C8B2DC24890 /* ThirdParty.framework */; };
+ 866DDAC66334A0B6C7D07737 /* SnapKit_SnapKit.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = D10E9230993DFE46B2863AB6 /* SnapKit_SnapKit.bundle */; };
+ 86A6B8BAC0364897ABA14993 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B124DE28165DC98765FBDEC9 /* Assets.xcassets */; };
+ 8747F41BF5ECDB4909B696A6 /* Extension+RepositoryModuleFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 24C43B3865443C1F114DF6B9 /* Extension+RepositoryModuleFactory.swift */; };
+ 88F75FA9D69DF36A77216B90 /* SnapKit_SnapKit.bundle in Resources */ = {isa = PBXBuildFile; fileRef = D10E9230993DFE46B2863AB6 /* SnapKit_SnapKit.bundle */; };
+ 89993837DE114B21AE73B7C7 /* swift-composable-architecture_ComposableArchitecture.bundle in Resources */ = {isa = PBXBuildFile; fileRef = D8DDB41EB98CC49587957857 /* swift-composable-architecture_ComposableArchitecture.bundle */; };
+ 8D700DAB3D553B0FC6C009D6 /* IssueReporting.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E3145E751D70F16C7E9A6207 /* IssueReporting.framework */; };
+ 8DAD57BA973D58FC68FD99C2 /* ComposableArchitecture.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 99328B2F83929454C6B85293 /* ComposableArchitecture.framework */; };
+ 8F61FAFA9A5B0FF5852D6996 /* XCTestDynamicOverlay.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DC5DC061276357FFE1B28E1A /* XCTestDynamicOverlay.framework */; };
+ 8F7E3F7B3316B7A4D767572B /* UIKitNavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AEFAEF397048AB3729AA9AC5 /* UIKitNavigation.framework */; };
+ 91A02B74C6966EE61F9B09B5 /* Presentation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 480FB7847D6CB247A7FDAEC5 /* Presentation.framework */; };
+ 91C4578298B5DA4B89E139BF /* UIKitNavigationShim.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6B01795781D4F8E408FE23BF /* UIKitNavigationShim.framework */; };
+ 9205B569A8EA25A87A87AD27 /* Service_Service.bundle in Resources */ = {isa = PBXBuildFile; fileRef = C43E126456B7608A3077322C /* Service_Service.bundle */; };
+ 94E9E9C27B41C04A59EFC99F /* CombineSchedulers.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 934402327D54C70FF2AF5CFE /* CombineSchedulers.framework */; };
+ 9591DA1F39D4C65978A2C12A /* Repository.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9ED5FB715E54880146B25179 /* Repository.framework */; };
+ 96E09CD9CDEEB437878F8F64 /* TestTags.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67ECA91A0997782B9A1C73A4 /* TestTags.swift */; };
+ 979AF1DF374E89E70EFAB80F /* InternalCollectionsUtilities.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C312E6C75C4078A011514088 /* InternalCollectionsUtilities.framework */; };
+ 9923DA6614C6924EB3FADC81 /* TuistAssets+BookSeriesProd.swift in Sources */ = {isa = PBXBuildFile; fileRef = B2B05DA3E86A88511CC6DF8B /* TuistAssets+BookSeriesProd.swift */; };
+ 9A9D96DA9299B4DBBBDE772F /* Then.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B1817D8F11F1C7273A9A31A /* Then.framework */; };
+ 9B71276B203142813610FD25 /* DesignSystem_DesignSystem.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 2EF15C1F8BB7DCB514B67F09 /* DesignSystem_DesignSystem.bundle */; };
+ 9D397D8018DE2D78AEB15109 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE57284E331AB79F3FCC74DF /* ContentView.swift */; };
+ 9E24CF3074E5070C0B86B3C5 /* CombineSchedulers.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 934402327D54C70FF2AF5CFE /* CombineSchedulers.framework */; };
+ 9F75D8DBE53983E1431B100C /* DomainInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 733FD6F089B9429E8E5DA857 /* DomainInterface.framework */; };
+ A1130CCFFC708058221638C2 /* TuistFonts+BookSeriesProd.swift in Sources */ = {isa = PBXBuildFile; fileRef = F7A2F37C96E6C089B38F0AF6 /* TuistFonts+BookSeriesProd.swift */; };
+ A2931A3B32AA162B0B57BD3D /* OSLog.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4AD5526931D7D6B18EF034A6 /* OSLog.framework */; };
+ A2E0621C71BAF49E6B3C1CA4 /* DesignSystem.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8113B6E527C78DF700D09456 /* DesignSystem.framework */; };
+ A3318758197320C09191137A /* SnapKit_SnapKit.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = D10E9230993DFE46B2863AB6 /* SnapKit_SnapKit.bundle */; };
+ A4FFD8B9A73099432613D785 /* TuistFonts+BookSeriesDebug.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A66B4973DE0D8FFDCF60B9C /* TuistFonts+BookSeriesDebug.swift */; };
+ A6E1AD143F9C761E9FC6FF78 /* Presentation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 480FB7847D6CB247A7FDAEC5 /* Presentation.framework */; };
+ A7BAC60193B69B68AADF765B /* AppReducer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C823C265E4A0BFC408DC36F9 /* AppReducer.swift */; };
+ A7DF6253D6580A79752BC17F /* PerceptionCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C612423162F7BE460B16B573 /* PerceptionCore.framework */; };
+ A8FD3575C08AE7B1CDA4FDBC /* UIKitNavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AEFAEF397048AB3729AA9AC5 /* UIKitNavigation.framework */; };
+ A96C20D206262D855DC0F801 /* LogMacro.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2CE4010433AC0542ABF02584 /* LogMacro.framework */; };
+ AA5C80D377EDC43EA9AC248F /* Service_Service.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = C43E126456B7608A3077322C /* Service_Service.bundle */; };
+ AB6B8A21ED9DA430379E7D15 /* UseCase.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 414D38C3F2D530595DDCF4DC /* UseCase.framework */; };
+ AE25F090C601F9D0D3B8A3F2 /* Model.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC7D651847DF37010801DD00 /* Model.framework */; };
+ AE8D96377F15CAE8D9E27190 /* Sharing2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A690EFD2BE351B2A63014380 /* Sharing2.framework */; };
+ B0A46584F930B7405404DD32 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE57284E331AB79F3FCC74DF /* ContentView.swift */; };
+ B32F6AB92355D6855DFF0835 /* swift-composable-architecture_ComposableArchitecture.bundle in Resources */ = {isa = PBXBuildFile; fileRef = D8DDB41EB98CC49587957857 /* swift-composable-architecture_ComposableArchitecture.bundle */; };
+ B3AE03FB2A8F71F2C84D194A /* UIKitNavigationShim.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6B01795781D4F8E408FE23BF /* UIKitNavigationShim.framework */; };
+ B3E9A4BC24F6751D6075599C /* Sharing1.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3544CB5805EB2E05E9E8897F /* Sharing1.framework */; };
+ B496064D30EB69EFA0138A88 /* Sharing.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4E260B5B19BADE8D94A1BC87 /* Sharing.framework */; };
+ B5C9626D9A6FA7EF38A9B236 /* OSLog.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4AD5526931D7D6B18EF034A6 /* OSLog.framework */; };
+ B6C0F7DEAAE2D5A0BD9F6074 /* MultiModuleTemplateTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2872CFD7FF45AB2217A2BD6 /* MultiModuleTemplateTests.swift */; };
+ B7BA698B3A09EDA2A356C725 /* Sharing2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A690EFD2BE351B2A63014380 /* Sharing2.framework */; };
+ B7F3D098E41C7A67D7FEFCE2 /* IdentifiedCollections.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0E410FB6DA5A848404FC78D /* IdentifiedCollections.framework */; };
+ B7FAF94FCFCF412EDEA0A0C3 /* Extension+UseCaseModuleFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC3EAB0592986E36A58E8400 /* Extension+UseCaseModuleFactory.swift */; };
+ B95DE4C3F53E1C40107BB384 /* Service_Service.bundle in Resources */ = {isa = PBXBuildFile; fileRef = C43E126456B7608A3077322C /* Service_Service.bundle */; };
+ BA118828D4DD988EFB24DFF5 /* CasePaths.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C9F6B5F70EF32E24EA256225 /* CasePaths.framework */; };
+ BA9FB17B2827FAB0D9B22794 /* swift-sharing_Sharing.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 17F97A5FC5A75DFADEF0C41B /* swift-sharing_Sharing.bundle */; };
+ BBF598966CC77B9DD432F1E7 /* Utill.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E24FE4EA1EFFF6A311A0D24F /* Utill.framework */; };
+ BCB6595D27DC9B77165ADDAE /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93F7812CB58B93E37E2C34A9 /* AppDelegate.swift */; };
+ BFCD1106FB8CAF2546440C58 /* CasePathsCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 18B71AB3B06CDA4F6523E7B0 /* CasePathsCore.framework */; };
+ C27C145F3B3F54060AACE119 /* Network.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F7975D4C04E0C502EAE7211F /* Network.framework */; };
+ C28F817AC2B26F7C7020CC35 /* swift-composable-architecture_ComposableArchitecture.bundle in Resources */ = {isa = PBXBuildFile; fileRef = D8DDB41EB98CC49587957857 /* swift-composable-architecture_ComposableArchitecture.bundle */; };
+ C2BF7F223380BE77E3AA5C69 /* CustomDump.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1492AD11877F9061E900D95C /* CustomDump.framework */; };
+ C2DF20771DAD82A16D29C72C /* Utill.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E24FE4EA1EFFF6A311A0D24F /* Utill.framework */; };
+ C37BF62F270F03669CFDC52A /* ConcurrencyExtras.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 49AFE66BD306CDAD926B5776 /* ConcurrencyExtras.framework */; };
+ C39FB96D4643AA4CB3BD1BA5 /* CasePathsCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 18B71AB3B06CDA4F6523E7B0 /* CasePathsCore.framework */; };
+ C46BFA32FBFA7049C6D5C616 /* SnapKit_SnapKit.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = D10E9230993DFE46B2863AB6 /* SnapKit_SnapKit.bundle */; };
+ C4A5BCB0119138F82919EE91 /* CustomDump.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1492AD11877F9061E900D95C /* CustomDump.framework */; };
+ C5C3F6E04F9EC5C4D68CC8F2 /* swift-sharing_Sharing.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 17F97A5FC5A75DFADEF0C41B /* swift-sharing_Sharing.bundle */; };
+ C8E970FD4911E3CDAEEFC6A4 /* SnapKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D827159A12827C3B5E81D2BE /* SnapKit.framework */; };
+ C92A378F90F0FD134EDFCC0D /* SnapKit_SnapKit.bundle in Resources */ = {isa = PBXBuildFile; fileRef = D10E9230993DFE46B2863AB6 /* SnapKit_SnapKit.bundle */; };
+ C92DC653172F780CF022B144 /* swift-composable-architecture_ComposableArchitecture.bundle in Resources */ = {isa = PBXBuildFile; fileRef = D8DDB41EB98CC49587957857 /* swift-composable-architecture_ComposableArchitecture.bundle */; };
+ C948F8B501CE541516B48BF4 /* PerceptionCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C612423162F7BE460B16B573 /* PerceptionCore.framework */; };
+ CA0A124C1458A6A3BDE324F2 /* Extension+UseCaseModuleFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC3EAB0592986E36A58E8400 /* Extension+UseCaseModuleFactory.swift */; };
+ CA3ED5AE92BFB329B8C1B765 /* ConcurrencyExtras.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 49AFE66BD306CDAD926B5776 /* ConcurrencyExtras.framework */; };
+ CBF2D8F2ED2D02EC33734FF2 /* DiContainer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 72361704D248E9F89EECDD16 /* DiContainer.framework */; };
+ CD44067C589E116450AD1B40 /* DesignSystem_DesignSystem.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 2EF15C1F8BB7DCB514B67F09 /* DesignSystem_DesignSystem.bundle */; };
+ CF83D3FDAD850D0240516151 /* InternalCollectionsUtilities.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C312E6C75C4078A011514088 /* InternalCollectionsUtilities.framework */; };
+ CF85FD4FFDF80151413EFEE9 /* Core.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8B7027D72B367616A0D35FED /* Core.framework */; };
+ D18B0D4C84FF932AB1493E33 /* ThirdParty.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 26ECA252B19B1C8B2DC24890 /* ThirdParty.framework */; };
+ D27C325BAC693A823398F28D /* OSLog.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4AD5526931D7D6B18EF034A6 /* OSLog.framework */; };
+ D2E5B87C7447FF6D71A77D79 /* XCTestDynamicOverlay.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DC5DC061276357FFE1B28E1A /* XCTestDynamicOverlay.framework */; };
+ D364E72D72B01FE4C9E99DE0 /* AppReducerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 006FC054F733FA63F7303B84 /* AppReducerTests.swift */; };
+ D4F5DFE4384C75BDD52CE2EB /* TuistFonts+BookSeriesStage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64528F066461FAC2B0E920F3 /* TuistFonts+BookSeriesStage.swift */; };
+ D50ABE9BF5315E15C6DAC5A7 /* CustomDump.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1492AD11877F9061E900D95C /* CustomDump.framework */; };
+ D5E7FD36B3910169303FEA50 /* InternalCollectionsUtilities.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C312E6C75C4078A011514088 /* InternalCollectionsUtilities.framework */; };
+ D7473730303A5DC47AAE1953 /* OrderedCollections.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 39C75D0C168004F9BF8E193E /* OrderedCollections.framework */; };
+ D859AAFF4EEAE210E3A2054F /* UseCase.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 414D38C3F2D530595DDCF4DC /* UseCase.framework */; };
+ DAF29501DAC26AA0D07ABDE2 /* Service.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2C8D28F7781927A9E5BA024A /* Service.framework */; };
+ DBD8FED0C03EB226E1B42517 /* swift-composable-architecture_ComposableArchitecture.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = D8DDB41EB98CC49587957857 /* swift-composable-architecture_ComposableArchitecture.bundle */; };
+ DCBC999AE9AEFFDD756D7F01 /* Dependencies.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF76B7463B1376A9B57B5CBB /* Dependencies.framework */; };
+ DEF24E2255DF060D580825B9 /* swift-sharing_Sharing.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 17F97A5FC5A75DFADEF0C41B /* swift-sharing_Sharing.bundle */; };
+ DF82E2FDA80BBEC370C92C4F /* SnapKit_SnapKit.bundle in Resources */ = {isa = PBXBuildFile; fileRef = D10E9230993DFE46B2863AB6 /* SnapKit_SnapKit.bundle */; };
+ E05536D5DE53987260F8AA9C /* DependenciesMacros.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 69ADB2DE6075431BA0F7D98A /* DependenciesMacros.framework */; };
+ E068F4A6D02CBC18F1991CBF /* DependenciesMacros.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 69ADB2DE6075431BA0F7D98A /* DependenciesMacros.framework */; };
+ E0F8EFFBE2EB02C8118CEC19 /* DesignSystem.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8113B6E527C78DF700D09456 /* DesignSystem.framework */; };
+ E3E8FB85BE7AE34CDEC7F53F /* swift-composable-architecture_ComposableArchitecture.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = D8DDB41EB98CC49587957857 /* swift-composable-architecture_ComposableArchitecture.bundle */; };
+ E5A0BBF7D0C1D643C66FEB15 /* DesignSystem_DesignSystem.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 2EF15C1F8BB7DCB514B67F09 /* DesignSystem_DesignSystem.bundle */; };
+ E60F43543646111B55148D6F /* CombineSchedulers.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 934402327D54C70FF2AF5CFE /* CombineSchedulers.framework */; };
+ E6E8457B7F4C200C7E31EE68 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 1F0B6AC8575BC9BAF42C4343 /* Preview Assets.xcassets */; };
+ E78A8343969DD02A03CE755C /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B124DE28165DC98765FBDEC9 /* Assets.xcassets */; };
+ EBFEBAC64B9E582F367ED233 /* Sharing1.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3544CB5805EB2E05E9E8897F /* Sharing1.framework */; };
+ ECFE6B4F312B17A5161802F8 /* ConcurrencyExtras.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 49AFE66BD306CDAD926B5776 /* ConcurrencyExtras.framework */; };
+ EE133CE344A588453D9BD819 /* SwiftUINavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C7CE68E271D8F565604BC58 /* SwiftUINavigation.framework */; };
+ EEF39BC3137EED5FC9DE99BF /* Core.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8B7027D72B367616A0D35FED /* Core.framework */; };
+ F236AD209E30CB7A297A08B3 /* IssueReportingPackageSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A413B01F01C81128DEC38F6B /* IssueReportingPackageSupport.framework */; };
+ F29765960091126213D54A42 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 93F7812CB58B93E37E2C34A9 /* AppDelegate.swift */; };
+ F3F0EEF6DE24E4FEEABD25B9 /* TestTags.swift in Resources */ = {isa = PBXBuildFile; fileRef = 67ECA91A0997782B9A1C73A4 /* TestTags.swift */; };
+ F4C53BF4B1429E2CFD5521C9 /* IdentifiedCollections.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D0E410FB6DA5A848404FC78D /* IdentifiedCollections.framework */; };
+ F73A7F65F54F23AC72F62244 /* Extension+UseCaseModuleFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC3EAB0592986E36A58E8400 /* Extension+UseCaseModuleFactory.swift */; };
+ F7552756E29F92FFCFA3B717 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B124DE28165DC98765FBDEC9 /* Assets.xcassets */; };
+ F872F4EF6D8C37BCF36BBD46 /* AppRootViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AE86D4FA8DA4D59926C63FB /* AppRootViewController.swift */; };
+ F9568B0C2135BDC2CCF2263C /* Clocks.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B9A363553200F9EFD0CD9979 /* Clocks.framework */; };
+ FA092BA8E4612E13A31D4E5B /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EE2C6BD75974C8636113B2E /* SceneDelegate.swift */; };
+ FA75DC075D7C3721AAAAA513 /* ComposableArchitecture.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 99328B2F83929454C6B85293 /* ComposableArchitecture.framework */; };
+ FBAA264305F83C493B3A36CD /* PerceptionCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C612423162F7BE460B16B573 /* PerceptionCore.framework */; };
+ FC0A942C5C156F8A8ED5AF10 /* Service_Service.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = C43E126456B7608A3077322C /* Service_Service.bundle */; };
+ FDD5CEBFF5CBA847CD44ABBD /* Perception.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB232483F1FA5F0D37513CF3 /* Perception.framework */; };
+ FF54F872706489D129CBD310 /* Service_Service.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = C43E126456B7608A3077322C /* Service_Service.bundle */; };
+ FFE37EBBC6B2662807687871 /* Network.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F7975D4C04E0C502EAE7211F /* Network.framework */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+ 646CB713EEC87E44D5786A4D /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 08AE2D4D6AAA4F9B16AB736E /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 48B223603956DB6887655570;
+ remoteInfo = BookSeries;
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ 0FA30BCDA3B052112EB3453D /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 4830C349BE4EE5D4DE47FA15 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 5EC1626DA6243617C6CF2DCD /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ 71C4EC98060B61788854F45C /* DesignSystem_DesignSystem.bundle in Dependencies */,
+ 14DC0AAE830AFD4B6F9E87EB /* Service_Service.bundle in Dependencies */,
+ 866DDAC66334A0B6C7D07737 /* SnapKit_SnapKit.bundle in Dependencies */,
+ 29479658CD9A0201DA863D3A /* swift-composable-architecture_ComposableArchitecture.bundle in Dependencies */,
+ 57EEA31CA5696FA1ACF7E6F3 /* swift-sharing_Sharing.bundle in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ 6D11C3204B25436ED9B61086 /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ 758B82EC4B366AD535207BFF /* DesignSystem_DesignSystem.bundle in Dependencies */,
+ FC0A942C5C156F8A8ED5AF10 /* Service_Service.bundle in Dependencies */,
+ A3318758197320C09191137A /* SnapKit_SnapKit.bundle in Dependencies */,
+ E3E8FB85BE7AE34CDEC7F53F /* swift-composable-architecture_ComposableArchitecture.bundle in Dependencies */,
+ BA9FB17B2827FAB0D9B22794 /* swift-sharing_Sharing.bundle in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ A3EF7F7E2E7D8FEC6843B235 /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ E5A0BBF7D0C1D643C66FEB15 /* DesignSystem_DesignSystem.bundle in Dependencies */,
+ AA5C80D377EDC43EA9AC248F /* Service_Service.bundle in Dependencies */,
+ 0A75B410E584D8776B7C568E /* SnapKit_SnapKit.bundle in Dependencies */,
+ 589635304914F65637BF1801 /* swift-composable-architecture_ComposableArchitecture.bundle in Dependencies */,
+ 74DBD3E00060401BE05CA527 /* swift-sharing_Sharing.bundle in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ AC38993C6594F718271C4A0D /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ 9B71276B203142813610FD25 /* DesignSystem_DesignSystem.bundle in Dependencies */,
+ FF54F872706489D129CBD310 /* Service_Service.bundle in Dependencies */,
+ C46BFA32FBFA7049C6D5C616 /* SnapKit_SnapKit.bundle in Dependencies */,
+ DBD8FED0C03EB226E1B42517 /* swift-composable-architecture_ComposableArchitecture.bundle in Dependencies */,
+ 32B70AC4BCB3CB95545956B1 /* swift-sharing_Sharing.bundle in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ B84101F38544EABAAA750D55 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ C3775FCBAB200648503BA292 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ E6949BF92A62D865B0237367 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ 006FC054F733FA63F7303B84 /* AppReducerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppReducerTests.swift; sourceTree = ""; };
+ 134700A99AD60C839F2E3486 /* PretendardVariable.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = PretendardVariable.ttf; sourceTree = ""; };
+ 1380E99CD4E616B1D3941455 /* BookSeries-Debug-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "BookSeries-Debug-Info.plist"; sourceTree = ""; };
+ 1492AD11877F9061E900D95C /* CustomDump.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CustomDump.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 17F97A5FC5A75DFADEF0C41B /* swift-sharing_Sharing.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "swift-sharing_Sharing.bundle"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 18B71AB3B06CDA4F6523E7B0 /* CasePathsCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CasePathsCore.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 1EE2C6BD75974C8636113B2E /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = ""; };
+ 1F0B6AC8575BC9BAF42C4343 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; };
+ 24C43B3865443C1F114DF6B9 /* Extension+RepositoryModuleFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Extension+RepositoryModuleFactory.swift"; sourceTree = ""; };
+ 26DF3245D9F3B314DBDA6432 /* BookSeriesTestPlan.xctestplan */ = {isa = PBXFileReference; path = BookSeriesTestPlan.xctestplan; sourceTree = ""; };
+ 26ECA252B19B1C8B2DC24890 /* ThirdParty.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ThirdParty.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 2C687AD2E27C52BDEA3B4758 /* BookSeries-Prod-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "BookSeries-Prod-Info.plist"; sourceTree = ""; };
+ 2C8D28F7781927A9E5BA024A /* Service.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Service.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 2CE4010433AC0542ABF02584 /* LogMacro.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = LogMacro.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 2EF15C1F8BB7DCB514B67F09 /* DesignSystem_DesignSystem.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DesignSystem_DesignSystem.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
+ 3544CB5805EB2E05E9E8897F /* Sharing1.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Sharing1.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 35BF178034E378DBAFB55399 /* BookSeriesTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "BookSeriesTests-Info.plist"; sourceTree = ""; };
+ 39C75D0C168004F9BF8E193E /* OrderedCollections.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = OrderedCollections.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 414D38C3F2D530595DDCF4DC /* UseCase.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = UseCase.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 480FB7847D6CB247A7FDAEC5 /* Presentation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Presentation.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 49AFE66BD306CDAD926B5776 /* ConcurrencyExtras.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ConcurrencyExtras.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 4AD5526931D7D6B18EF034A6 /* OSLog.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OSLog.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/OSLog.framework; sourceTree = DEVELOPER_DIR; };
+ 4B1817D8F11F1C7273A9A31A /* Then.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Then.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 4E260B5B19BADE8D94A1BC87 /* Sharing.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Sharing.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 53A2F03EC7089D8ECA7F3492 /* SwiftNavigation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftNavigation.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 5AE86D4FA8DA4D59926C63FB /* AppRootViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppRootViewController.swift; sourceTree = ""; };
+ 5AFC7BA08ED016460481B132 /* Extension+AppDIContainer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Extension+AppDIContainer.swift"; sourceTree = ""; };
+ 5B709908639C9F6EC48CA8C7 /* BookSeriesTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BookSeriesTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+ 64528F066461FAC2B0E920F3 /* TuistFonts+BookSeriesStage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistFonts+BookSeriesStage.swift"; sourceTree = ""; };
+ 64F96CDA771EBE931D8B8242 /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; };
+ 6587C4F0F6AD1565BE6F66BF /* TuistBundle+BookSeriesDebug.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistBundle+BookSeriesDebug.swift"; sourceTree = ""; };
+ 65D5D6A38F43D58A981C995A /* Shared.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Shared.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 67ECA91A0997782B9A1C73A4 /* TestTags.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestTags.swift; sourceTree = ""; };
+ 69ADB2DE6075431BA0F7D98A /* DependenciesMacros.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DependenciesMacros.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 6B01795781D4F8E408FE23BF /* UIKitNavigationShim.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = UIKitNavigationShim.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 72361704D248E9F89EECDD16 /* DiContainer.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DiContainer.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 733FD6F089B9429E8E5DA857 /* DomainInterface.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DomainInterface.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 8113B6E527C78DF700D09456 /* DesignSystem.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DesignSystem.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 82DEDBF70140A25582708391 /* Prod.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Prod.xcconfig; sourceTree = ""; };
+ 84C8DA6270E406EAAE472FDC /* BookSeries-Stage-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "BookSeries-Stage-Info.plist"; sourceTree = ""; };
+ 8A66B4973DE0D8FFDCF60B9C /* TuistFonts+BookSeriesDebug.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistFonts+BookSeriesDebug.swift"; sourceTree = ""; };
+ 8B7027D72B367616A0D35FED /* Core.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Core.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 8C7CE68E271D8F565604BC58 /* SwiftUINavigation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftUINavigation.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 8E00D0944F306160DBC02D22 /* TuistBundle+BookSeries.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistBundle+BookSeries.swift"; sourceTree = ""; };
+ 934402327D54C70FF2AF5CFE /* CombineSchedulers.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CombineSchedulers.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 93F7812CB58B93E37E2C34A9 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
+ 99328B2F83929454C6B85293 /* ComposableArchitecture.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ComposableArchitecture.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 9C56BEBD08BA723825CB519D /* BookSeries_Debug.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = BookSeries_Debug.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 9CA83D21F541A0E51AD104D5 /* BookSeries.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = BookSeries.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 9ED5FB715E54880146B25179 /* Repository.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Repository.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ A23DDA0A40A3737C53049CA1 /* TuistBundle+BookSeriesProd.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistBundle+BookSeriesProd.swift"; sourceTree = ""; };
+ A413B01F01C81128DEC38F6B /* IssueReportingPackageSupport.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = IssueReportingPackageSupport.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ A690EFD2BE351B2A63014380 /* Sharing2.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Sharing2.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ AB232483F1FA5F0D37513CF3 /* Perception.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Perception.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ ABA5559F85041DED486B795C /* Stage.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Stage.xcconfig; sourceTree = ""; };
+ AC3F05D94A9986AAED45E845 /* TuistFonts+BookSeries.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistFonts+BookSeries.swift"; sourceTree = ""; };
+ AEFAEF397048AB3729AA9AC5 /* UIKitNavigation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = UIKitNavigation.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ AF76B7463B1376A9B57B5CBB /* Dependencies.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Dependencies.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ B124DE28165DC98765FBDEC9 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
+ B125F1B54E7058ED6B04D3EE /* TuistAssets+BookSeries.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistAssets+BookSeries.swift"; sourceTree = ""; };
+ B13914B9BF1940AB194428F3 /* TuistBundle+BookSeriesStage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistBundle+BookSeriesStage.swift"; sourceTree = ""; };
+ B2B05DA3E86A88511CC6DF8B /* TuistAssets+BookSeriesProd.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistAssets+BookSeriesProd.swift"; sourceTree = ""; };
+ B9A363553200F9EFD0CD9979 /* Clocks.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Clocks.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ BEA3F9185E9DD88D17A70372 /* TuistBundle+BookSeriesTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistBundle+BookSeriesTests.swift"; sourceTree = ""; };
+ BF4969E3D0418C3C81E063BF /* BookSeries_Stage.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = BookSeries_Stage.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ C254A752990B51F5C93C2C4F /* Dev.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Dev.xcconfig; sourceTree = ""; };
+ C312E6C75C4078A011514088 /* InternalCollectionsUtilities.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = InternalCollectionsUtilities.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ C43E126456B7608A3077322C /* Service_Service.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Service_Service.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
+ C612423162F7BE460B16B573 /* PerceptionCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PerceptionCore.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ C823C265E4A0BFC408DC36F9 /* AppReducer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppReducer.swift; sourceTree = ""; };
+ C9F6B5F70EF32E24EA256225 /* CasePaths.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CasePaths.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ CEFBD9DC739502E85AE2BAEC /* BookSeries_Prod.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = BookSeries_Prod.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ D0E410FB6DA5A848404FC78D /* IdentifiedCollections.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = IdentifiedCollections.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ D10E9230993DFE46B2863AB6 /* SnapKit_SnapKit.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SnapKit_SnapKit.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
+ D827159A12827C3B5E81D2BE /* SnapKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SnapKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ D8DDB41EB98CC49587957857 /* swift-composable-architecture_ComposableArchitecture.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "swift-composable-architecture_ComposableArchitecture.bundle"; sourceTree = BUILT_PRODUCTS_DIR; };
+ DC5DC061276357FFE1B28E1A /* XCTestDynamicOverlay.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = XCTestDynamicOverlay.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ E24FE4EA1EFFF6A311A0D24F /* Utill.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Utill.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ E3145E751D70F16C7E9A6207 /* IssueReporting.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = IssueReporting.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ E88FA9511AF4D12467377037 /* TuistAssets+BookSeriesDebug.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistAssets+BookSeriesDebug.swift"; sourceTree = ""; };
+ EC7D651847DF37010801DD00 /* Model.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Model.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ EE66B17CBAB07662F606A489 /* MultiModuleTemplateApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MultiModuleTemplateApp.swift; sourceTree = ""; };
+ EFC5A50539F81CB15005A817 /* TuistAssets+BookSeriesStage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistAssets+BookSeriesStage.swift"; sourceTree = ""; };
+ F2872CFD7FF45AB2217A2BD6 /* MultiModuleTemplateTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MultiModuleTemplateTests.swift; sourceTree = ""; };
+ F5D7507AD817F88039E8D668 /* BookSeries-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "BookSeries-Info.plist"; sourceTree = ""; };
+ F7975D4C04E0C502EAE7211F /* Network.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Network.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ F7A2F37C96E6C089B38F0AF6 /* TuistFonts+BookSeriesProd.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistFonts+BookSeriesProd.swift"; sourceTree = ""; };
+ FC3EAB0592986E36A58E8400 /* Extension+UseCaseModuleFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Extension+UseCaseModuleFactory.swift"; sourceTree = ""; };
+ FE57284E331AB79F3FCC74DF /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 89FE8794707AC450FF988183 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A2931A3B32AA162B0B57BD3D /* OSLog.framework in Frameworks */,
+ 842B9E350B0CE67CB61C2D77 /* CasePaths.framework in Frameworks */,
+ 051D3C5470CE3F8A4344A217 /* CasePathsCore.framework in Frameworks */,
+ 39F025F37A301E3DCAB7C37A /* Clocks.framework in Frameworks */,
+ 94E9E9C27B41C04A59EFC99F /* CombineSchedulers.framework in Frameworks */,
+ FA75DC075D7C3721AAAAA513 /* ComposableArchitecture.framework in Frameworks */,
+ CA3ED5AE92BFB329B8C1B765 /* ConcurrencyExtras.framework in Frameworks */,
+ 51C6DD09CBD5351D92284CFF /* Core.framework in Frameworks */,
+ C4A5BCB0119138F82919EE91 /* CustomDump.framework in Frameworks */,
+ 6746D65680016AE7A78DE451 /* Dependencies.framework in Frameworks */,
+ 22CEE6A94399CE2768EC4BEE /* DependenciesMacros.framework in Frameworks */,
+ 7C405798DCC6857A43E3582C /* DesignSystem.framework in Frameworks */,
+ 2D6086EFBD4F75EF9F80B8A4 /* DiContainer.framework in Frameworks */,
+ 191474897F23D410507A96DC /* DomainInterface.framework in Frameworks */,
+ B7F3D098E41C7A67D7FEFCE2 /* IdentifiedCollections.framework in Frameworks */,
+ CF83D3FDAD850D0240516151 /* InternalCollectionsUtilities.framework in Frameworks */,
+ 75111283A354F0451C4F08F4 /* IssueReporting.framework in Frameworks */,
+ 508F3224DDE093DCEDBD5195 /* IssueReportingPackageSupport.framework in Frameworks */,
+ 433AB87D6E6AEC78B0FFF391 /* LogMacro.framework in Frameworks */,
+ 3B97D49FCB9B5E21D69D0A08 /* Model.framework in Frameworks */,
+ C27C145F3B3F54060AACE119 /* Network.framework in Frameworks */,
+ 6ED6AF8E005D055B8966D1CC /* OrderedCollections.framework in Frameworks */,
+ 75D245A93E19092551C49E9D /* Perception.framework in Frameworks */,
+ 7062927B4B93F814A8CFA8B6 /* PerceptionCore.framework in Frameworks */,
+ A6E1AD143F9C761E9FC6FF78 /* Presentation.framework in Frameworks */,
+ 35556FAD778EF3F73A70E2A4 /* Repository.framework in Frameworks */,
+ DAF29501DAC26AA0D07ABDE2 /* Service.framework in Frameworks */,
+ 46958D3B4904EFDFEBEB68C6 /* Shared.framework in Frameworks */,
+ 4F030168FED3FDF9451C8300 /* Sharing.framework in Frameworks */,
+ B3E9A4BC24F6751D6075599C /* Sharing1.framework in Frameworks */,
+ AE8D96377F15CAE8D9E27190 /* Sharing2.framework in Frameworks */,
+ 7255B6A73FCFA63314C6E9E7 /* SnapKit.framework in Frameworks */,
+ 5E0AB5976997D4368F1A2F21 /* SwiftNavigation.framework in Frameworks */,
+ 2C211C56B6527BC0B04A3878 /* SwiftUINavigation.framework in Frameworks */,
+ 010184763A46157A7F88742D /* Then.framework in Frameworks */,
+ 09A8631004FA8454841A0FAD /* ThirdParty.framework in Frameworks */,
+ 8F7E3F7B3316B7A4D767572B /* UIKitNavigation.framework in Frameworks */,
+ 2C19F633F200FA5451F0E875 /* UIKitNavigationShim.framework in Frameworks */,
+ AB6B8A21ED9DA430379E7D15 /* UseCase.framework in Frameworks */,
+ 65FF8017EF8CFABA7EACBBDB /* Utill.framework in Frameworks */,
+ 2CE4F2C18F5716E323F84150 /* XCTestDynamicOverlay.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ AD66510D0B9F364223556675 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B5C9626D9A6FA7EF38A9B236 /* OSLog.framework in Frameworks */,
+ 5BDBD90D5443C6569714ADC2 /* CasePaths.framework in Frameworks */,
+ BFCD1106FB8CAF2546440C58 /* CasePathsCore.framework in Frameworks */,
+ 3167741785445E65A0E317C5 /* Clocks.framework in Frameworks */,
+ 9E24CF3074E5070C0B86B3C5 /* CombineSchedulers.framework in Frameworks */,
+ 0918BE6C6A5808779FCEEFA0 /* ComposableArchitecture.framework in Frameworks */,
+ 66FE615A77AC4D0A1F6AA123 /* ConcurrencyExtras.framework in Frameworks */,
+ EEF39BC3137EED5FC9DE99BF /* Core.framework in Frameworks */,
+ 6FD86D9A7C4177F5CE9A0236 /* CustomDump.framework in Frameworks */,
+ DCBC999AE9AEFFDD756D7F01 /* Dependencies.framework in Frameworks */,
+ E068F4A6D02CBC18F1991CBF /* DependenciesMacros.framework in Frameworks */,
+ 0746FC1BB951889A7B7A15FE /* DesignSystem.framework in Frameworks */,
+ 01F6DF516D9B7615015C64BF /* DiContainer.framework in Frameworks */,
+ 0B59E3B130774028C1B74300 /* DomainInterface.framework in Frameworks */,
+ 7AC2B98BA45C62127D482AA2 /* IdentifiedCollections.framework in Frameworks */,
+ D5E7FD36B3910169303FEA50 /* InternalCollectionsUtilities.framework in Frameworks */,
+ 7C330423628CE46DEAD42121 /* IssueReporting.framework in Frameworks */,
+ 76DFB9853D830A03AB822A0A /* IssueReportingPackageSupport.framework in Frameworks */,
+ 111A985F488C9393F0497E9A /* LogMacro.framework in Frameworks */,
+ 09A67ADFA24AE9AF59E9477B /* Model.framework in Frameworks */,
+ FFE37EBBC6B2662807687871 /* Network.framework in Frameworks */,
+ 3CC5506D82551156DEE1A454 /* OrderedCollections.framework in Frameworks */,
+ FDD5CEBFF5CBA847CD44ABBD /* Perception.framework in Frameworks */,
+ FBAA264305F83C493B3A36CD /* PerceptionCore.framework in Frameworks */,
+ 0204FC367079D148C155A501 /* Presentation.framework in Frameworks */,
+ 1EC07D804E437137DBB22CA5 /* Repository.framework in Frameworks */,
+ 4420A776214E00A84F09B3E3 /* Service.framework in Frameworks */,
+ 44228872AEF3A24AD5567DDB /* Shared.framework in Frameworks */,
+ B496064D30EB69EFA0138A88 /* Sharing.framework in Frameworks */,
+ EBFEBAC64B9E582F367ED233 /* Sharing1.framework in Frameworks */,
+ B7BA698B3A09EDA2A356C725 /* Sharing2.framework in Frameworks */,
+ 445AF74B11EDA66B12BDD769 /* SnapKit.framework in Frameworks */,
+ 835D5CDC3E4A8780C845BC40 /* SwiftNavigation.framework in Frameworks */,
+ 2E92B055400D0DA67175F140 /* SwiftUINavigation.framework in Frameworks */,
+ 9A9D96DA9299B4DBBBDE772F /* Then.framework in Frameworks */,
+ 4BE6136F6A68E0916E087D0D /* ThirdParty.framework in Frameworks */,
+ A8FD3575C08AE7B1CDA4FDBC /* UIKitNavigation.framework in Frameworks */,
+ B3AE03FB2A8F71F2C84D194A /* UIKitNavigationShim.framework in Frameworks */,
+ 61FB02519EBBDF1FA0AEFC35 /* UseCase.framework in Frameworks */,
+ C2DF20771DAD82A16D29C72C /* Utill.framework in Frameworks */,
+ 680D17B2DAF9C091381DAB26 /* XCTestDynamicOverlay.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B96056FA5CDC4600CF9F19C2 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ D27C325BAC693A823398F28D /* OSLog.framework in Frameworks */,
+ 5E034813B5D9F8701E6915C5 /* CasePaths.framework in Frameworks */,
+ 049F5497FBA40C38616A4DA8 /* CasePathsCore.framework in Frameworks */,
+ 62C383D8C3816AC5CC092A03 /* Clocks.framework in Frameworks */,
+ E60F43543646111B55148D6F /* CombineSchedulers.framework in Frameworks */,
+ 4DA9AA53C105F792460076F5 /* ComposableArchitecture.framework in Frameworks */,
+ C37BF62F270F03669CFDC52A /* ConcurrencyExtras.framework in Frameworks */,
+ 6D8D7AACC65AEF7EA9042C14 /* Core.framework in Frameworks */,
+ C2BF7F223380BE77E3AA5C69 /* CustomDump.framework in Frameworks */,
+ 26773814A346AA7C07FEFFE7 /* Dependencies.framework in Frameworks */,
+ E05536D5DE53987260F8AA9C /* DependenciesMacros.framework in Frameworks */,
+ A2E0621C71BAF49E6B3C1CA4 /* DesignSystem.framework in Frameworks */,
+ 753E3D2FA6409DBD906F9491 /* DiContainer.framework in Frameworks */,
+ 6A1AD33B8D775C56D0636AFE /* DomainInterface.framework in Frameworks */,
+ F4C53BF4B1429E2CFD5521C9 /* IdentifiedCollections.framework in Frameworks */,
+ 979AF1DF374E89E70EFAB80F /* InternalCollectionsUtilities.framework in Frameworks */,
+ 8D700DAB3D553B0FC6C009D6 /* IssueReporting.framework in Frameworks */,
+ 0FD750CF3A9A4DDD51B375FF /* IssueReportingPackageSupport.framework in Frameworks */,
+ 77CCB945BE7BA9673F15BE1F /* LogMacro.framework in Frameworks */,
+ 04FD21B343F4C53155D0C057 /* Model.framework in Frameworks */,
+ 171D97DB8A8364BFDA2F18CE /* Network.framework in Frameworks */,
+ D7473730303A5DC47AAE1953 /* OrderedCollections.framework in Frameworks */,
+ 67657DE5A987E782C91B11FD /* Perception.framework in Frameworks */,
+ A7DF6253D6580A79752BC17F /* PerceptionCore.framework in Frameworks */,
+ 91A02B74C6966EE61F9B09B5 /* Presentation.framework in Frameworks */,
+ 9591DA1F39D4C65978A2C12A /* Repository.framework in Frameworks */,
+ 835F4884CE20C1C1B09F271A /* Service.framework in Frameworks */,
+ 133E1BD3999956179CA18E07 /* Shared.framework in Frameworks */,
+ 14DD18344BACD8174F83E504 /* Sharing.framework in Frameworks */,
+ 13BF6EAC3D6F4FB1E03C8A1E /* Sharing1.framework in Frameworks */,
+ 707A839AEB92DEAD99F92022 /* Sharing2.framework in Frameworks */,
+ C8E970FD4911E3CDAEEFC6A4 /* SnapKit.framework in Frameworks */,
+ 7EC6F6EC211E1145CCA1FAB9 /* SwiftNavigation.framework in Frameworks */,
+ 30F2402A8236BF29C6BD5E40 /* SwiftUINavigation.framework in Frameworks */,
+ 5BCC72745ECD607DB16A7F05 /* Then.framework in Frameworks */,
+ D18B0D4C84FF932AB1493E33 /* ThirdParty.framework in Frameworks */,
+ 5F69B3348E05B15D1B68C6BB /* UIKitNavigation.framework in Frameworks */,
+ 5837CFA33E88478AE0F5FAE4 /* UIKitNavigationShim.framework in Frameworks */,
+ 604A727CA134F38CB534B2D3 /* UseCase.framework in Frameworks */,
+ BBF598966CC77B9DD432F1E7 /* Utill.framework in Frameworks */,
+ 8F61FAFA9A5B0FF5852D6996 /* XCTestDynamicOverlay.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ C60F7FAED2774B3CF2776F50 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ F869BD4924ACB8DBFF83AE21 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 33BBE3FBD29D30F984CA6B4E /* OSLog.framework in Frameworks */,
+ BA118828D4DD988EFB24DFF5 /* CasePaths.framework in Frameworks */,
+ C39FB96D4643AA4CB3BD1BA5 /* CasePathsCore.framework in Frameworks */,
+ F9568B0C2135BDC2CCF2263C /* Clocks.framework in Frameworks */,
+ 5B9FDC18C7F8E86AAE5A9061 /* CombineSchedulers.framework in Frameworks */,
+ 8DAD57BA973D58FC68FD99C2 /* ComposableArchitecture.framework in Frameworks */,
+ ECFE6B4F312B17A5161802F8 /* ConcurrencyExtras.framework in Frameworks */,
+ CF85FD4FFDF80151413EFEE9 /* Core.framework in Frameworks */,
+ D50ABE9BF5315E15C6DAC5A7 /* CustomDump.framework in Frameworks */,
+ 1BBB8D65617177620CF811D7 /* Dependencies.framework in Frameworks */,
+ 5C74E51211DDDA627C518CDE /* DependenciesMacros.framework in Frameworks */,
+ E0F8EFFBE2EB02C8118CEC19 /* DesignSystem.framework in Frameworks */,
+ CBF2D8F2ED2D02EC33734FF2 /* DiContainer.framework in Frameworks */,
+ 9F75D8DBE53983E1431B100C /* DomainInterface.framework in Frameworks */,
+ 2B326661DC1725152C6275F5 /* IdentifiedCollections.framework in Frameworks */,
+ 3E44752E327BC2B928AD9989 /* InternalCollectionsUtilities.framework in Frameworks */,
+ 2DDF50D2EEB0A5E7CDB009C2 /* IssueReporting.framework in Frameworks */,
+ F236AD209E30CB7A297A08B3 /* IssueReportingPackageSupport.framework in Frameworks */,
+ A96C20D206262D855DC0F801 /* LogMacro.framework in Frameworks */,
+ AE25F090C601F9D0D3B8A3F2 /* Model.framework in Frameworks */,
+ 287C79BB24225A8B6C5A8B25 /* Network.framework in Frameworks */,
+ 6D05EAB2436489594B042F25 /* OrderedCollections.framework in Frameworks */,
+ 2790F23F98A2D138EAFFF534 /* Perception.framework in Frameworks */,
+ C948F8B501CE541516B48BF4 /* PerceptionCore.framework in Frameworks */,
+ 6469B0BC6DD52FD76E4AE3D1 /* Presentation.framework in Frameworks */,
+ 2268A67C0D0E60D24D426E80 /* Repository.framework in Frameworks */,
+ 131806CD3C958A342E4D7E37 /* Service.framework in Frameworks */,
+ 1E006DDD65FE7F79BBB4EA4F /* Shared.framework in Frameworks */,
+ 4239ADF4F559424B6B492245 /* Sharing.framework in Frameworks */,
+ 5F903474D6C0C9E6C0E9A454 /* Sharing1.framework in Frameworks */,
+ 292EF74C872162FF586ABD74 /* Sharing2.framework in Frameworks */,
+ 4C6981A745DFD8D164B2B107 /* SnapKit.framework in Frameworks */,
+ 0F6D2E88174E987A5B0FD0B3 /* SwiftNavigation.framework in Frameworks */,
+ EE133CE344A588453D9BD819 /* SwiftUINavigation.framework in Frameworks */,
+ 36D440321EAFBF2A3429FA9F /* Then.framework in Frameworks */,
+ 85AA9BBA71DF9D1707F93A79 /* ThirdParty.framework in Frameworks */,
+ 609393AA778B72B1CE79F78C /* UIKitNavigation.framework in Frameworks */,
+ 91C4578298B5DA4B89E139BF /* UIKitNavigationShim.framework in Frameworks */,
+ D859AAFF4EEAE210E3A2054F /* UseCase.framework in Frameworks */,
+ 19D43A7C7936AB6DC9CCEC8A /* Utill.framework in Frameworks */,
+ D2E5B87C7447FF6D71A77D79 /* XCTestDynamicOverlay.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 1772039BC3404D610BEDF715 = {
+ isa = PBXGroup;
+ children = (
+ 551C1074E92B29354DB7AF41 /* Project */,
+ A889700FEC8AC66930B5EA0A /* Products */,
+ 2B32CD12FCBADAEDA1ACDA07 /* Frameworks */,
+ );
+ sourceTree = "";
+ };
+ 2B32CD12FCBADAEDA1ACDA07 /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ 4AD5526931D7D6B18EF034A6 /* OSLog.framework */,
+ );
+ name = Frameworks;
+ sourceTree = "";
+ };
+ 2EB769EC0EAE12087A2E641E /* Derived */ = {
+ isa = PBXGroup;
+ children = (
+ AB020B682DC026D6E91119CB /* InfoPlists */,
+ E313C4985A8272813635E9A1 /* Sources */,
+ );
+ path = Derived;
+ sourceTree = "";
+ };
+ 32A46DFA6C348B483079642B /* View */ = {
+ isa = PBXGroup;
+ children = (
+ 5AE86D4FA8DA4D59926C63FB /* AppRootViewController.swift */,
+ );
+ path = View;
+ sourceTree = "";
+ };
+ 34B5C1CED42E03FE4F3251B6 /* Sources */ = {
+ isa = PBXGroup;
+ children = (
+ 71FD87D5E1DC0029E5ED3A38 /* Application */,
+ ADB48BAA930D376FF5D2E340 /* DI */,
+ 569254E8E02CDB152DFFBF65 /* Reducer */,
+ 32A46DFA6C348B483079642B /* View */,
+ FE57284E331AB79F3FCC74DF /* ContentView.swift */,
+ );
+ path = Sources;
+ sourceTree = "";
+ };
+ 551C1074E92B29354DB7AF41 /* Project */ = {
+ isa = PBXGroup;
+ children = (
+ AD23F5D5924F1FEA34371EBE /* BookSeriesTests */,
+ D4DF33E01F49B158E3EE0036 /* Config */,
+ 2EB769EC0EAE12087A2E641E /* Derived */,
+ F329C5BE7F40BE6D5BFAE986 /* Resources */,
+ 34B5C1CED42E03FE4F3251B6 /* Sources */,
+ );
+ name = Project;
+ sourceTree = "";
+ };
+ 569254E8E02CDB152DFFBF65 /* Reducer */ = {
+ isa = PBXGroup;
+ children = (
+ C823C265E4A0BFC408DC36F9 /* AppReducer.swift */,
+ );
+ path = Reducer;
+ sourceTree = "";
+ };
+ 71FD87D5E1DC0029E5ED3A38 /* Application */ = {
+ isa = PBXGroup;
+ children = (
+ 93F7812CB58B93E37E2C34A9 /* AppDelegate.swift */,
+ EE66B17CBAB07662F606A489 /* MultiModuleTemplateApp.swift */,
+ 1EE2C6BD75974C8636113B2E /* SceneDelegate.swift */,
+ );
+ path = Application;
+ sourceTree = "";
+ };
+ A818143F78A88C0C4136849D /* Sources */ = {
+ isa = PBXGroup;
+ children = (
+ D489ADC4B1F4CF0F6D4EC97B /* AppTest */,
+ 26DF3245D9F3B314DBDA6432 /* BookSeriesTestPlan.xctestplan */,
+ F2872CFD7FF45AB2217A2BD6 /* MultiModuleTemplateTests.swift */,
+ );
+ path = Sources;
+ sourceTree = "";
+ };
+ A889700FEC8AC66930B5EA0A /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 9C56BEBD08BA723825CB519D /* BookSeries_Debug.app */,
+ CEFBD9DC739502E85AE2BAEC /* BookSeries_Prod.app */,
+ BF4969E3D0418C3C81E063BF /* BookSeries_Stage.app */,
+ 9CA83D21F541A0E51AD104D5 /* BookSeries.app */,
+ 5B709908639C9F6EC48CA8C7 /* BookSeriesTests.xctest */,
+ C9F6B5F70EF32E24EA256225 /* CasePaths.framework */,
+ 18B71AB3B06CDA4F6523E7B0 /* CasePathsCore.framework */,
+ B9A363553200F9EFD0CD9979 /* Clocks.framework */,
+ 934402327D54C70FF2AF5CFE /* CombineSchedulers.framework */,
+ 99328B2F83929454C6B85293 /* ComposableArchitecture.framework */,
+ 49AFE66BD306CDAD926B5776 /* ConcurrencyExtras.framework */,
+ 8B7027D72B367616A0D35FED /* Core.framework */,
+ 1492AD11877F9061E900D95C /* CustomDump.framework */,
+ AF76B7463B1376A9B57B5CBB /* Dependencies.framework */,
+ 69ADB2DE6075431BA0F7D98A /* DependenciesMacros.framework */,
+ 2EF15C1F8BB7DCB514B67F09 /* DesignSystem_DesignSystem.bundle */,
+ 8113B6E527C78DF700D09456 /* DesignSystem.framework */,
+ 72361704D248E9F89EECDD16 /* DiContainer.framework */,
+ 733FD6F089B9429E8E5DA857 /* DomainInterface.framework */,
+ D0E410FB6DA5A848404FC78D /* IdentifiedCollections.framework */,
+ C312E6C75C4078A011514088 /* InternalCollectionsUtilities.framework */,
+ E3145E751D70F16C7E9A6207 /* IssueReporting.framework */,
+ A413B01F01C81128DEC38F6B /* IssueReportingPackageSupport.framework */,
+ 2CE4010433AC0542ABF02584 /* LogMacro.framework */,
+ EC7D651847DF37010801DD00 /* Model.framework */,
+ F7975D4C04E0C502EAE7211F /* Network.framework */,
+ 39C75D0C168004F9BF8E193E /* OrderedCollections.framework */,
+ AB232483F1FA5F0D37513CF3 /* Perception.framework */,
+ C612423162F7BE460B16B573 /* PerceptionCore.framework */,
+ 480FB7847D6CB247A7FDAEC5 /* Presentation.framework */,
+ 9ED5FB715E54880146B25179 /* Repository.framework */,
+ C43E126456B7608A3077322C /* Service_Service.bundle */,
+ 2C8D28F7781927A9E5BA024A /* Service.framework */,
+ 65D5D6A38F43D58A981C995A /* Shared.framework */,
+ 4E260B5B19BADE8D94A1BC87 /* Sharing.framework */,
+ 3544CB5805EB2E05E9E8897F /* Sharing1.framework */,
+ A690EFD2BE351B2A63014380 /* Sharing2.framework */,
+ D10E9230993DFE46B2863AB6 /* SnapKit_SnapKit.bundle */,
+ D827159A12827C3B5E81D2BE /* SnapKit.framework */,
+ D8DDB41EB98CC49587957857 /* swift-composable-architecture_ComposableArchitecture.bundle */,
+ 17F97A5FC5A75DFADEF0C41B /* swift-sharing_Sharing.bundle */,
+ 53A2F03EC7089D8ECA7F3492 /* SwiftNavigation.framework */,
+ 8C7CE68E271D8F565604BC58 /* SwiftUINavigation.framework */,
+ 4B1817D8F11F1C7273A9A31A /* Then.framework */,
+ 26ECA252B19B1C8B2DC24890 /* ThirdParty.framework */,
+ AEFAEF397048AB3729AA9AC5 /* UIKitNavigation.framework */,
+ 6B01795781D4F8E408FE23BF /* UIKitNavigationShim.framework */,
+ 414D38C3F2D530595DDCF4DC /* UseCase.framework */,
+ E24FE4EA1EFFF6A311A0D24F /* Utill.framework */,
+ DC5DC061276357FFE1B28E1A /* XCTestDynamicOverlay.framework */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ AB020B682DC026D6E91119CB /* InfoPlists */ = {
+ isa = PBXGroup;
+ children = (
+ 1380E99CD4E616B1D3941455 /* BookSeries-Debug-Info.plist */,
+ F5D7507AD817F88039E8D668 /* BookSeries-Info.plist */,
+ 2C687AD2E27C52BDEA3B4758 /* BookSeries-Prod-Info.plist */,
+ 84C8DA6270E406EAAE472FDC /* BookSeries-Stage-Info.plist */,
+ 35BF178034E378DBAFB55399 /* BookSeriesTests-Info.plist */,
+ );
+ path = InfoPlists;
+ sourceTree = "";
+ };
+ AD23F5D5924F1FEA34371EBE /* BookSeriesTests */ = {
+ isa = PBXGroup;
+ children = (
+ A818143F78A88C0C4136849D /* Sources */,
+ );
+ path = BookSeriesTests;
+ sourceTree = "";
+ };
+ ADB48BAA930D376FF5D2E340 /* DI */ = {
+ isa = PBXGroup;
+ children = (
+ 5AFC7BA08ED016460481B132 /* Extension+AppDIContainer.swift */,
+ 24C43B3865443C1F114DF6B9 /* Extension+RepositoryModuleFactory.swift */,
+ FC3EAB0592986E36A58E8400 /* Extension+UseCaseModuleFactory.swift */,
+ );
+ path = DI;
+ sourceTree = "";
+ };
+ C3CE9C9293F83752B6B4F4B4 /* FontAsset */ = {
+ isa = PBXGroup;
+ children = (
+ 134700A99AD60C839F2E3486 /* PretendardVariable.ttf */,
+ );
+ path = FontAsset;
+ sourceTree = "";
+ };
+ D489ADC4B1F4CF0F6D4EC97B /* AppTest */ = {
+ isa = PBXGroup;
+ children = (
+ 006FC054F733FA63F7303B84 /* AppReducerTests.swift */,
+ 67ECA91A0997782B9A1C73A4 /* TestTags.swift */,
+ );
+ path = AppTest;
+ sourceTree = "";
+ };
+ D4DF33E01F49B158E3EE0036 /* Config */ = {
+ isa = PBXGroup;
+ children = (
+ C254A752990B51F5C93C2C4F /* Dev.xcconfig */,
+ 82DEDBF70140A25582708391 /* Prod.xcconfig */,
+ 64F96CDA771EBE931D8B8242 /* Release.xcconfig */,
+ ABA5559F85041DED486B795C /* Stage.xcconfig */,
+ );
+ name = Config;
+ path = ../../Config;
+ sourceTree = "";
+ };
+ E313C4985A8272813635E9A1 /* Sources */ = {
+ isa = PBXGroup;
+ children = (
+ B125F1B54E7058ED6B04D3EE /* TuistAssets+BookSeries.swift */,
+ E88FA9511AF4D12467377037 /* TuistAssets+BookSeriesDebug.swift */,
+ B2B05DA3E86A88511CC6DF8B /* TuistAssets+BookSeriesProd.swift */,
+ EFC5A50539F81CB15005A817 /* TuistAssets+BookSeriesStage.swift */,
+ 8E00D0944F306160DBC02D22 /* TuistBundle+BookSeries.swift */,
+ 6587C4F0F6AD1565BE6F66BF /* TuistBundle+BookSeriesDebug.swift */,
+ A23DDA0A40A3737C53049CA1 /* TuistBundle+BookSeriesProd.swift */,
+ B13914B9BF1940AB194428F3 /* TuistBundle+BookSeriesStage.swift */,
+ BEA3F9185E9DD88D17A70372 /* TuistBundle+BookSeriesTests.swift */,
+ AC3F05D94A9986AAED45E845 /* TuistFonts+BookSeries.swift */,
+ 8A66B4973DE0D8FFDCF60B9C /* TuistFonts+BookSeriesDebug.swift */,
+ F7A2F37C96E6C089B38F0AF6 /* TuistFonts+BookSeriesProd.swift */,
+ 64528F066461FAC2B0E920F3 /* TuistFonts+BookSeriesStage.swift */,
+ );
+ path = Sources;
+ sourceTree = "";
+ };
+ F329C5BE7F40BE6D5BFAE986 /* Resources */ = {
+ isa = PBXGroup;
+ children = (
+ C3CE9C9293F83752B6B4F4B4 /* FontAsset */,
+ F5101B0CD275AA560217923C /* Preview Content */,
+ B124DE28165DC98765FBDEC9 /* Assets.xcassets */,
+ );
+ path = Resources;
+ sourceTree = "";
+ };
+ F5101B0CD275AA560217923C /* Preview Content */ = {
+ isa = PBXGroup;
+ children = (
+ 1F0B6AC8575BC9BAF42C4343 /* Preview Assets.xcassets */,
+ );
+ path = "Preview Content";
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 357D7C5D53E55B5FA9B01168 /* BookSeriesTests */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 245CFD16B6984ED8FE978A93 /* Build configuration list for PBXNativeTarget "BookSeriesTests" */;
+ buildPhases = (
+ FB0E7F47D7AC1665805B0C2F /* Sources */,
+ 016801EFAFBA7EAA726FF723 /* Resources */,
+ C60F7FAED2774B3CF2776F50 /* Frameworks */,
+ 0FA30BCDA3B052112EB3453D /* Embed Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 97F7A8161DC32C80DA7CFDCA /* PBXTargetDependency */,
+ );
+ name = BookSeriesTests;
+ packageProductDependencies = (
+ );
+ productName = BookSeriesTests;
+ productReference = 5B709908639C9F6EC48CA8C7 /* BookSeriesTests.xctest */;
+ productType = "com.apple.product-type.bundle.unit-test";
+ };
+ 48B223603956DB6887655570 /* BookSeries */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 3A07130DF442245F64DB1DDE /* Build configuration list for PBXNativeTarget "BookSeries" */;
+ buildPhases = (
+ C59A640272CDDCE353CB1B7B /* Sources */,
+ B390A180C63336DBD9F661F5 /* Resources */,
+ B96056FA5CDC4600CF9F19C2 /* Frameworks */,
+ C3775FCBAB200648503BA292 /* Embed Frameworks */,
+ 6D11C3204B25436ED9B61086 /* Dependencies */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = BookSeries;
+ packageProductDependencies = (
+ );
+ productName = BookSeries;
+ productReference = 9CA83D21F541A0E51AD104D5 /* BookSeries.app */;
+ productType = "com.apple.product-type.application";
+ };
+ 73D62CFE2A9D78D1B0272E15 /* BookSeries-Prod */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = ABE3E479BDB0438C07E73073 /* Build configuration list for PBXNativeTarget "BookSeries-Prod" */;
+ buildPhases = (
+ 6D9B7A6B1E12E857B48A6B65 /* Sources */,
+ 72B39346FAC80EE58B112D04 /* Resources */,
+ 89FE8794707AC450FF988183 /* Frameworks */,
+ 4830C349BE4EE5D4DE47FA15 /* Embed Frameworks */,
+ A3EF7F7E2E7D8FEC6843B235 /* Dependencies */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = "BookSeries-Prod";
+ packageProductDependencies = (
+ );
+ productName = BookSeries_Prod;
+ productReference = CEFBD9DC739502E85AE2BAEC /* BookSeries_Prod.app */;
+ productType = "com.apple.product-type.application";
+ };
+ 74FE90E0D864AA2BCB6F0181 /* BookSeries-Stage */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = B319598DA86C1E1F724BD5C0 /* Build configuration list for PBXNativeTarget "BookSeries-Stage" */;
+ buildPhases = (
+ CE10A0B1943F3956FD2DCC3B /* Sources */,
+ 3F0BCF5A60C3C69C236CE383 /* Resources */,
+ F869BD4924ACB8DBFF83AE21 /* Frameworks */,
+ E6949BF92A62D865B0237367 /* Embed Frameworks */,
+ AC38993C6594F718271C4A0D /* Dependencies */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = "BookSeries-Stage";
+ packageProductDependencies = (
+ );
+ productName = BookSeries_Stage;
+ productReference = BF4969E3D0418C3C81E063BF /* BookSeries_Stage.app */;
+ productType = "com.apple.product-type.application";
+ };
+ B5AE02EEB3610F2430D87C6A /* BookSeries-Debug */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 6A81C5C8D60219EB6791BA0A /* Build configuration list for PBXNativeTarget "BookSeries-Debug" */;
+ buildPhases = (
+ A0DA7CDF74A5C575682E6228 /* Sources */,
+ 6B344746517DAD3E8E4BEA4A /* Resources */,
+ AD66510D0B9F364223556675 /* Frameworks */,
+ B84101F38544EABAAA750D55 /* Embed Frameworks */,
+ 5EC1626DA6243617C6CF2DCD /* Dependencies */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = "BookSeries-Debug";
+ packageProductDependencies = (
+ );
+ productName = BookSeries_Debug;
+ productReference = 9C56BEBD08BA723825CB519D /* BookSeries_Debug.app */;
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 08AE2D4D6AAA4F9B16AB736E /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ BuildIndependentTargetsInParallel = YES;
+ TargetAttributes = {
+ 357D7C5D53E55B5FA9B01168 = {
+ TestTargetID = 48B223603956DB6887655570;
+ };
+ };
+ };
+ buildConfigurationList = DE58DF874FAC94A17F3A7BE1 /* Build configuration list for PBXProject "BookSeries" */;
+ compatibilityVersion = "Xcode 14.0";
+ developmentRegion = ko;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ ko,
+ );
+ mainGroup = 1772039BC3404D610BEDF715;
+ productRefGroup = A889700FEC8AC66930B5EA0A /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 48B223603956DB6887655570 /* BookSeries */,
+ B5AE02EEB3610F2430D87C6A /* BookSeries-Debug */,
+ 73D62CFE2A9D78D1B0272E15 /* BookSeries-Prod */,
+ 74FE90E0D864AA2BCB6F0181 /* BookSeries-Stage */,
+ 357D7C5D53E55B5FA9B01168 /* BookSeriesTests */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 016801EFAFBA7EAA726FF723 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 4450DD38F22D6CA85F5DD7E4 /* AppReducerTests.swift in Resources */,
+ F3F0EEF6DE24E4FEEABD25B9 /* TestTags.swift in Resources */,
+ 329FB8CD75CC1723E8A48228 /* BookSeriesTestPlan.xctestplan in Resources */,
+ 3DEC7FF046BE8AFE3704A0C1 /* MultiModuleTemplateTests.swift in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 3F0BCF5A60C3C69C236CE383 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ F7552756E29F92FFCFA3B717 /* Assets.xcassets in Resources */,
+ 5AA4C0EA3811B9F136CE3D77 /* PretendardVariable.ttf in Resources */,
+ 533EFBDBD201589BC958DBF4 /* Preview Assets.xcassets in Resources */,
+ 468DD26AA241FC283974CDDD /* DesignSystem_DesignSystem.bundle in Resources */,
+ 9205B569A8EA25A87A87AD27 /* Service_Service.bundle in Resources */,
+ C92A378F90F0FD134EDFCC0D /* SnapKit_SnapKit.bundle in Resources */,
+ C28F817AC2B26F7C7020CC35 /* swift-composable-architecture_ComposableArchitecture.bundle in Resources */,
+ 07101F8EE6B80C0732710182 /* swift-sharing_Sharing.bundle in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 6B344746517DAD3E8E4BEA4A /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ E78A8343969DD02A03CE755C /* Assets.xcassets in Resources */,
+ 2686EA674419A846808324F7 /* PretendardVariable.ttf in Resources */,
+ E6E8457B7F4C200C7E31EE68 /* Preview Assets.xcassets in Resources */,
+ CD44067C589E116450AD1B40 /* DesignSystem_DesignSystem.bundle in Resources */,
+ 120DEC15744042B0DDB0F1D0 /* Service_Service.bundle in Resources */,
+ 48A86119CDF32C6DD6A8D7F1 /* SnapKit_SnapKit.bundle in Resources */,
+ 89993837DE114B21AE73B7C7 /* swift-composable-architecture_ComposableArchitecture.bundle in Resources */,
+ DEF24E2255DF060D580825B9 /* swift-sharing_Sharing.bundle in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 72B39346FAC80EE58B112D04 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 03884DFB4398149FC2F7C68F /* Assets.xcassets in Resources */,
+ 1D6C7D69564E58F4FEF82AF0 /* PretendardVariable.ttf in Resources */,
+ 7B2C3548D001D821A6BC3175 /* Preview Assets.xcassets in Resources */,
+ 538E92CEB4E197D5C0F45C90 /* DesignSystem_DesignSystem.bundle in Resources */,
+ 2272C576A5D8214496320B45 /* Service_Service.bundle in Resources */,
+ 88F75FA9D69DF36A77216B90 /* SnapKit_SnapKit.bundle in Resources */,
+ C92DC653172F780CF022B144 /* swift-composable-architecture_ComposableArchitecture.bundle in Resources */,
+ 17A7DD0136C946B18921E680 /* swift-sharing_Sharing.bundle in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B390A180C63336DBD9F661F5 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 86A6B8BAC0364897ABA14993 /* Assets.xcassets in Resources */,
+ 4D017799CEF702BE258FD69F /* PretendardVariable.ttf in Resources */,
+ 0E85EE95C9781493677E8813 /* Preview Assets.xcassets in Resources */,
+ 1FB232D3A0EB4D23E09FD96C /* DesignSystem_DesignSystem.bundle in Resources */,
+ B95DE4C3F53E1C40107BB384 /* Service_Service.bundle in Resources */,
+ DF82E2FDA80BBEC370C92C4F /* SnapKit_SnapKit.bundle in Resources */,
+ B32F6AB92355D6855DFF0835 /* swift-composable-architecture_ComposableArchitecture.bundle in Resources */,
+ C5C3F6E04F9EC5C4D68CC8F2 /* swift-sharing_Sharing.bundle in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 6D9B7A6B1E12E857B48A6B65 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 9923DA6614C6924EB3FADC81 /* TuistAssets+BookSeriesProd.swift in Sources */,
+ 5735B4B9FE6D684593747B0A /* TuistBundle+BookSeriesProd.swift in Sources */,
+ A1130CCFFC708058221638C2 /* TuistFonts+BookSeriesProd.swift in Sources */,
+ F29765960091126213D54A42 /* AppDelegate.swift in Sources */,
+ 13C0EA5DA30C40FAFC8A6CBD /* MultiModuleTemplateApp.swift in Sources */,
+ 294C2CD6668FD0C492DBC970 /* SceneDelegate.swift in Sources */,
+ 47103C1CC32B7163126AA69A /* ContentView.swift in Sources */,
+ 7657E931475420A5B8495E42 /* Extension+AppDIContainer.swift in Sources */,
+ 8747F41BF5ECDB4909B696A6 /* Extension+RepositoryModuleFactory.swift in Sources */,
+ F73A7F65F54F23AC72F62244 /* Extension+UseCaseModuleFactory.swift in Sources */,
+ 2A324D0E6C70DFCBB6B748CB /* AppReducer.swift in Sources */,
+ 126FAB5432F7F3FE9E1FC8C4 /* AppRootViewController.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A0DA7CDF74A5C575682E6228 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 5EB46BDC20AD8D9F2317A12F /* TuistAssets+BookSeriesDebug.swift in Sources */,
+ 2B74C3C4B17DB1DF5F2EFEBB /* TuistBundle+BookSeriesDebug.swift in Sources */,
+ A4FFD8B9A73099432613D785 /* TuistFonts+BookSeriesDebug.swift in Sources */,
+ BCB6595D27DC9B77165ADDAE /* AppDelegate.swift in Sources */,
+ 3BF6C786A0855443D3560C28 /* MultiModuleTemplateApp.swift in Sources */,
+ 746208B54C6A8DC0BAC897A9 /* SceneDelegate.swift in Sources */,
+ B0A46584F930B7405404DD32 /* ContentView.swift in Sources */,
+ 75B0C35B930B385AE847CBE3 /* Extension+AppDIContainer.swift in Sources */,
+ 3622F889376776F2AC83C6F9 /* Extension+RepositoryModuleFactory.swift in Sources */,
+ 23976C8EF165BE8066FEF8B7 /* Extension+UseCaseModuleFactory.swift in Sources */,
+ 23F32E35F3EB9BFE2CC7ADAC /* AppReducer.swift in Sources */,
+ F872F4EF6D8C37BCF36BBD46 /* AppRootViewController.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ C59A640272CDDCE353CB1B7B /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 280B0C89F259714211E21947 /* TuistAssets+BookSeries.swift in Sources */,
+ 64406F306F998091CE728BE3 /* TuistBundle+BookSeries.swift in Sources */,
+ 740DB1888E9C53DD56725A8F /* TuistFonts+BookSeries.swift in Sources */,
+ 34265635C882495E11D2CC58 /* AppDelegate.swift in Sources */,
+ 68754F9F9F0718B9DD994B2F /* MultiModuleTemplateApp.swift in Sources */,
+ FA092BA8E4612E13A31D4E5B /* SceneDelegate.swift in Sources */,
+ 305AEFDA353241B2EC2583FD /* ContentView.swift in Sources */,
+ 0D0D12B4F864CABE851079F9 /* Extension+AppDIContainer.swift in Sources */,
+ 782D3D3D1F0DFD81BD275BF6 /* Extension+RepositoryModuleFactory.swift in Sources */,
+ CA0A124C1458A6A3BDE324F2 /* Extension+UseCaseModuleFactory.swift in Sources */,
+ A7BAC60193B69B68AADF765B /* AppReducer.swift in Sources */,
+ 59F98AF6240DFB5820C8E16B /* AppRootViewController.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ CE10A0B1943F3956FD2DCC3B /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 674A863CD39B19A8C41B4B7F /* TuistAssets+BookSeriesStage.swift in Sources */,
+ 230314F89342E07C1220B563 /* TuistBundle+BookSeriesStage.swift in Sources */,
+ D4F5DFE4384C75BDD52CE2EB /* TuistFonts+BookSeriesStage.swift in Sources */,
+ 48965DA3D1BE28DB71EEF855 /* AppDelegate.swift in Sources */,
+ 4CD7F959BD5A22F4E065CE0A /* MultiModuleTemplateApp.swift in Sources */,
+ 7585ABD0D2CE6F63573C981F /* SceneDelegate.swift in Sources */,
+ 9D397D8018DE2D78AEB15109 /* ContentView.swift in Sources */,
+ 2EE95DEFFFA07E7317074DB8 /* Extension+AppDIContainer.swift in Sources */,
+ 850AF9EC1DFCC41D687D4496 /* Extension+RepositoryModuleFactory.swift in Sources */,
+ B7FAF94FCFCF412EDEA0A0C3 /* Extension+UseCaseModuleFactory.swift in Sources */,
+ 0CC194B7D9BC14325F7D3536 /* AppReducer.swift in Sources */,
+ 09A78F66FA2229E2C9E94904 /* AppRootViewController.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ FB0E7F47D7AC1665805B0C2F /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ D364E72D72B01FE4C9E99DE0 /* AppReducerTests.swift in Sources */,
+ 96E09CD9CDEEB437878F8F64 /* TestTags.swift in Sources */,
+ B6C0F7DEAAE2D5A0BD9F6074 /* MultiModuleTemplateTests.swift in Sources */,
+ 11B8F66A12F799549414CA8C /* TuistBundle+BookSeriesTests.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+ 97F7A8161DC32C80DA7CFDCA /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ name = BookSeries;
+ target = 48B223603956DB6887655570 /* BookSeries */;
+ targetProxy = 646CB713EEC87E44D5786A4D /* PBXContainerItemProxy */;
+ };
+/* End PBXTargetDependency section */
+
+/* Begin XCBuildConfiguration section */
+ 19887325A0265D3A5DAC695F /* Stage */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ ENABLE_PREVIEWS = YES;
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../Tuist/.build/checkouts/swift-navigation/Sources/UIKitNavigationShim/include",
+ "$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/BookSeries-Debug-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/CasePathsMacros#CasePathsMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/ComposableArchitectureMacros#ComposableArchitectureMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/DependenciesMacrosPlugin#DependenciesMacrosPlugin",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/PerceptionMacros#PerceptionMacros",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries;
+ PRODUCT_NAME = BookSeries_Debug;
+ SDKROOT = iphoneos;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ TARGETED_DEVICE_FAMILY = 1;
+ };
+ name = Stage;
+ };
+ 1A5D9D84C37144D171B17CD6 /* Prod */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ ENABLE_PREVIEWS = YES;
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../Tuist/.build/checkouts/swift-navigation/Sources/UIKitNavigationShim/include",
+ "$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/BookSeries-Debug-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/CasePathsMacros#CasePathsMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/ComposableArchitectureMacros#ComposableArchitectureMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/DependenciesMacrosPlugin#DependenciesMacrosPlugin",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/PerceptionMacros#PerceptionMacros",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries;
+ PRODUCT_NAME = BookSeries_Debug;
+ SDKROOT = iphoneos;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ TARGETED_DEVICE_FAMILY = 1;
+ };
+ name = Prod;
+ };
+ 263EEB10617ABC53E1AABF55 /* Prod */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 82DEDBF70140A25582708391 /* Prod.xcconfig */;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = "$(ARCHS_STANDARD)";
+ BACKGROUND_MODES = "remote-notification";
+ CFBundleDevelopmentRegion = ko;
+ CFBundleDisplayName = BookSeries;
+ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ CODE_SIGN_STYLE = Manual;
+ COPY_PHASE_STRIP = NO;
+ CURRENT_PROJECT_VERSION = 10;
+ DEAD_CODE_STRIPPING = YES;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ DEVELOPMENT_TEAM = N94CS4N6VR;
+ ENABLE_BACKGROUND_MODES = YES;
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ MARKETING_VERSION = 1.0.0;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ OTHER_LDFLAGS = "-ObjC -all_load";
+ PRODUCT_NAME = "BookSeries-Prod";
+ PROVISIONING_PROFILE_SPECIFIER = "match AppStore io.Roy.BookSeries";
+ SKIP_INSTALL = NO;
+ SWIFT_VERSION = 6.0;
+ VALIDATE_PRODUCT = YES;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = Prod;
+ };
+ 275D77FD439D6D7EA4EEDAAE /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ ENABLE_PREVIEWS = YES;
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../Tuist/.build/checkouts/swift-navigation/Sources/UIKitNavigationShim/include",
+ "$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/BookSeries-Prod-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/CasePathsMacros#CasePathsMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/ComposableArchitectureMacros#ComposableArchitectureMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/DependenciesMacrosPlugin#DependenciesMacrosPlugin",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/PerceptionMacros#PerceptionMacros",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries;
+ PRODUCT_NAME = BookSeries_Prod;
+ SDKROOT = iphoneos;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ TARGETED_DEVICE_FAMILY = 1;
+ };
+ name = Debug;
+ };
+ 423903480AEDC8066D08285F /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 64F96CDA771EBE931D8B8242 /* Release.xcconfig */;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = "$(ARCHS_STANDARD)";
+ BACKGROUND_MODES = "remote-notification";
+ CFBundleDevelopmentRegion = ko;
+ CFBundleDisplayName = BookSeries;
+ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ CODE_SIGN_STYLE = Manual;
+ COPY_PHASE_STRIP = NO;
+ CURRENT_PROJECT_VERSION = 10;
+ DEAD_CODE_STRIPPING = YES;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ DEVELOPMENT_TEAM = N94CS4N6VR;
+ ENABLE_BACKGROUND_MODES = YES;
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ MARKETING_VERSION = 1.0.0;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ OTHER_LDFLAGS = "-ObjC -all_load";
+ PRODUCT_NAME = BookSeries;
+ PROVISIONING_PROFILE_SPECIFIER = "match AppStore io.Roy.BookSeries";
+ SKIP_INSTALL = NO;
+ SWIFT_VERSION = 6.0;
+ VALIDATE_PRODUCT = YES;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = Release;
+ };
+ 4D45B87C9EF7A812091DC0B9 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ ENABLE_PREVIEWS = YES;
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../Tuist/.build/checkouts/swift-navigation/Sources/UIKitNavigationShim/include",
+ "$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/BookSeries-Debug-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/CasePathsMacros#CasePathsMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/ComposableArchitectureMacros#ComposableArchitectureMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/DependenciesMacrosPlugin#DependenciesMacrosPlugin",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/PerceptionMacros#PerceptionMacros",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries;
+ PRODUCT_NAME = BookSeries_Debug;
+ SDKROOT = iphoneos;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ TARGETED_DEVICE_FAMILY = 1;
+ };
+ name = Debug;
+ };
+ 4F493C9E663B01E05933AB1C /* Prod */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ ENABLE_PREVIEWS = YES;
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../Tuist/.build/checkouts/swift-navigation/Sources/UIKitNavigationShim/include",
+ "$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/BookSeries-Stage-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/CasePathsMacros#CasePathsMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/ComposableArchitectureMacros#ComposableArchitectureMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/DependenciesMacrosPlugin#DependenciesMacrosPlugin",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/PerceptionMacros#PerceptionMacros",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries;
+ PRODUCT_NAME = BookSeries_Stage;
+ SDKROOT = iphoneos;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ TARGETED_DEVICE_FAMILY = 1;
+ };
+ name = Prod;
+ };
+ 5D30F6C751892396A7205E2D /* Stage */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ ENABLE_PREVIEWS = YES;
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../Tuist/.build/checkouts/swift-navigation/Sources/UIKitNavigationShim/include",
+ "$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/BookSeries-Prod-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/CasePathsMacros#CasePathsMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/ComposableArchitectureMacros#ComposableArchitectureMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/DependenciesMacrosPlugin#DependenciesMacrosPlugin",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/PerceptionMacros#PerceptionMacros",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries;
+ PRODUCT_NAME = BookSeries_Prod;
+ SDKROOT = iphoneos;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ TARGETED_DEVICE_FAMILY = 1;
+ };
+ name = Stage;
+ };
+ 63B86951E7925A70613A8F3B /* Prod */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ ENABLE_PREVIEWS = YES;
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../Tuist/.build/checkouts/swift-navigation/Sources/UIKitNavigationShim/include",
+ "$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/BookSeries-Prod-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/CasePathsMacros#CasePathsMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/ComposableArchitectureMacros#ComposableArchitectureMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/DependenciesMacrosPlugin#DependenciesMacrosPlugin",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/PerceptionMacros#PerceptionMacros",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries;
+ PRODUCT_NAME = BookSeries_Prod;
+ SDKROOT = iphoneos;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ TARGETED_DEVICE_FAMILY = 1;
+ };
+ name = Prod;
+ };
+ 67E90E4E1DAAF4D8EE9F5F15 /* Stage */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ ENABLE_PREVIEWS = YES;
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../Tuist/.build/checkouts/swift-navigation/Sources/UIKitNavigationShim/include",
+ "$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/BookSeries-Stage-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/CasePathsMacros#CasePathsMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/ComposableArchitectureMacros#ComposableArchitectureMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/DependenciesMacrosPlugin#DependenciesMacrosPlugin",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/PerceptionMacros#PerceptionMacros",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries;
+ PRODUCT_NAME = BookSeries_Stage;
+ SDKROOT = iphoneos;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ TARGETED_DEVICE_FAMILY = 1;
+ };
+ name = Stage;
+ };
+ 6A00630555F732FD49BD836C /* Prod */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../Tuist/.build/checkouts/swift-navigation/Sources/UIKitNavigationShim/include",
+ "$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/BookSeriesTests-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/CasePathsMacros#CasePathsMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/ComposableArchitectureMacros#ComposableArchitectureMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/DependenciesMacrosPlugin#DependenciesMacrosPlugin",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/PerceptionMacros#PerceptionMacros",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.BookSeriesTests;
+ PRODUCT_NAME = BookSeriesTests;
+ SDKROOT = iphoneos;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ TARGETED_DEVICE_FAMILY = 1;
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/BookSeries.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/BookSeries";
+ TEST_TARGET_NAME = BookSeries;
+ };
+ name = Prod;
+ };
+ 81E1E1367BB19BFC52A757EB /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ ENABLE_PREVIEWS = YES;
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../Tuist/.build/checkouts/swift-navigation/Sources/UIKitNavigationShim/include",
+ "$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/BookSeries-Stage-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/CasePathsMacros#CasePathsMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/ComposableArchitectureMacros#ComposableArchitectureMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/DependenciesMacrosPlugin#DependenciesMacrosPlugin",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/PerceptionMacros#PerceptionMacros",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries;
+ PRODUCT_NAME = BookSeries_Stage;
+ SDKROOT = iphoneos;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ TARGETED_DEVICE_FAMILY = 1;
+ };
+ name = Debug;
+ };
+ 8619D03C050E9DB0E946073B /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ ENABLE_PREVIEWS = YES;
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../Tuist/.build/checkouts/swift-navigation/Sources/UIKitNavigationShim/include",
+ "$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/BookSeries-Stage-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/CasePathsMacros#CasePathsMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/ComposableArchitectureMacros#ComposableArchitectureMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/DependenciesMacrosPlugin#DependenciesMacrosPlugin",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/PerceptionMacros#PerceptionMacros",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries;
+ PRODUCT_NAME = BookSeries_Stage;
+ SDKROOT = iphoneos;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ TARGETED_DEVICE_FAMILY = 1;
+ };
+ name = Release;
+ };
+ 8C7C702E3E75673035D478AD /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../Tuist/.build/checkouts/swift-navigation/Sources/UIKitNavigationShim/include",
+ "$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/BookSeriesTests-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/CasePathsMacros#CasePathsMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/ComposableArchitectureMacros#ComposableArchitectureMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/DependenciesMacrosPlugin#DependenciesMacrosPlugin",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/PerceptionMacros#PerceptionMacros",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.BookSeriesTests;
+ PRODUCT_NAME = BookSeriesTests;
+ SDKROOT = iphoneos;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ TARGETED_DEVICE_FAMILY = 1;
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/BookSeries.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/BookSeries";
+ TEST_TARGET_NAME = BookSeries;
+ };
+ name = Debug;
+ };
+ 9F6B1B465F16CECBA99AEBB2 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = C254A752990B51F5C93C2C4F /* Dev.xcconfig */;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = "$(ARCHS_STANDARD)";
+ BACKGROUND_MODES = "remote-notification";
+ CFBundleDevelopmentRegion = ko;
+ CFBundleDisplayName = BookSeries;
+ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ CODE_SIGN_STYLE = Manual;
+ COPY_PHASE_STRIP = NO;
+ CURRENT_PROJECT_VERSION = 10;
+ DEAD_CODE_STRIPPING = YES;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ DEVELOPMENT_TEAM = N94CS4N6VR;
+ ENABLE_BACKGROUND_MODES = YES;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ MARKETING_VERSION = 1.0.0;
+ MTL_ENABLE_DEBUG_INFO = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ OTHER_LDFLAGS = "-ObjC -all_load";
+ PRODUCT_NAME = BookSeries;
+ PROVISIONING_PROFILE_SPECIFIER = "match Development io.Roy.BookSeries";
+ SKIP_INSTALL = NO;
+ SWIFT_VERSION = 6.0;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = Debug;
+ };
+ AD740FB9580C1CEF2ABEC380 /* Prod */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ ENABLE_PREVIEWS = YES;
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../Tuist/.build/checkouts/swift-navigation/Sources/UIKitNavigationShim/include",
+ "$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/BookSeries-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/CasePathsMacros#CasePathsMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/ComposableArchitectureMacros#ComposableArchitectureMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/DependenciesMacrosPlugin#DependenciesMacrosPlugin",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/PerceptionMacros#PerceptionMacros",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries;
+ PRODUCT_NAME = BookSeries;
+ SDKROOT = iphoneos;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ TARGETED_DEVICE_FAMILY = 1;
+ };
+ name = Prod;
+ };
+ B054C471144306697DCB9AA7 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ ENABLE_PREVIEWS = YES;
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../Tuist/.build/checkouts/swift-navigation/Sources/UIKitNavigationShim/include",
+ "$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/BookSeries-Prod-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/CasePathsMacros#CasePathsMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/ComposableArchitectureMacros#ComposableArchitectureMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/DependenciesMacrosPlugin#DependenciesMacrosPlugin",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/PerceptionMacros#PerceptionMacros",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries;
+ PRODUCT_NAME = BookSeries_Prod;
+ SDKROOT = iphoneos;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ TARGETED_DEVICE_FAMILY = 1;
+ };
+ name = Release;
+ };
+ B5112BC5CF3F15B907FADA9E /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../Tuist/.build/checkouts/swift-navigation/Sources/UIKitNavigationShim/include",
+ "$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/BookSeriesTests-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/CasePathsMacros#CasePathsMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/ComposableArchitectureMacros#ComposableArchitectureMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/DependenciesMacrosPlugin#DependenciesMacrosPlugin",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/PerceptionMacros#PerceptionMacros",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.BookSeriesTests;
+ PRODUCT_NAME = BookSeriesTests;
+ SDKROOT = iphoneos;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ TARGETED_DEVICE_FAMILY = 1;
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/BookSeries.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/BookSeries";
+ TEST_TARGET_NAME = BookSeries;
+ };
+ name = Release;
+ };
+ BF0620F0464D97A986374CC0 /* Stage */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = ABA5559F85041DED486B795C /* Stage.xcconfig */;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ARCHS = "$(ARCHS_STANDARD)";
+ BACKGROUND_MODES = "remote-notification";
+ CFBundleDevelopmentRegion = ko;
+ CFBundleDisplayName = BookSeries;
+ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ CODE_SIGN_STYLE = Manual;
+ COPY_PHASE_STRIP = NO;
+ CURRENT_PROJECT_VERSION = 10;
+ DEAD_CODE_STRIPPING = YES;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ DEVELOPMENT_TEAM = N94CS4N6VR;
+ ENABLE_BACKGROUND_MODES = YES;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ MARKETING_VERSION = 1.0.0;
+ MTL_ENABLE_DEBUG_INFO = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ OTHER_LDFLAGS = "-ObjC -all_load";
+ PRODUCT_NAME = "BookSeries-Stage";
+ PROVISIONING_PROFILE_SPECIFIER = "match Development io.Roy.BookSeries";
+ SKIP_INSTALL = NO;
+ SWIFT_VERSION = 6.0;
+ VERSIONING_SYSTEM = "apple-generic";
+ };
+ name = Stage;
+ };
+ C2B53F7F63676BE56B7F1C05 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ ENABLE_PREVIEWS = YES;
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../Tuist/.build/checkouts/swift-navigation/Sources/UIKitNavigationShim/include",
+ "$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/BookSeries-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/CasePathsMacros#CasePathsMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/ComposableArchitectureMacros#ComposableArchitectureMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/DependenciesMacrosPlugin#DependenciesMacrosPlugin",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/PerceptionMacros#PerceptionMacros",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries;
+ PRODUCT_NAME = BookSeries;
+ SDKROOT = iphoneos;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ TARGETED_DEVICE_FAMILY = 1;
+ };
+ name = Release;
+ };
+ D29C1DDEC6AAB7967B9096FB /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ ENABLE_PREVIEWS = YES;
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../Tuist/.build/checkouts/swift-navigation/Sources/UIKitNavigationShim/include",
+ "$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/BookSeries-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/CasePathsMacros#CasePathsMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/ComposableArchitectureMacros#ComposableArchitectureMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/DependenciesMacrosPlugin#DependenciesMacrosPlugin",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/PerceptionMacros#PerceptionMacros",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries;
+ PRODUCT_NAME = BookSeries;
+ SDKROOT = iphoneos;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ TARGETED_DEVICE_FAMILY = 1;
+ };
+ name = Debug;
+ };
+ D8C93629A773DEAA3C80B8DE /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ ENABLE_PREVIEWS = YES;
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../Tuist/.build/checkouts/swift-navigation/Sources/UIKitNavigationShim/include",
+ "$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/BookSeries-Debug-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/CasePathsMacros#CasePathsMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/ComposableArchitectureMacros#ComposableArchitectureMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/DependenciesMacrosPlugin#DependenciesMacrosPlugin",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/PerceptionMacros#PerceptionMacros",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries;
+ PRODUCT_NAME = BookSeries_Debug;
+ SDKROOT = iphoneos;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ TARGETED_DEVICE_FAMILY = 1;
+ };
+ name = Release;
+ };
+ DFC2B99877E5418578D57080 /* Stage */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ ENABLE_PREVIEWS = YES;
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../Tuist/.build/checkouts/swift-navigation/Sources/UIKitNavigationShim/include",
+ "$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/BookSeries-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/CasePathsMacros#CasePathsMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/ComposableArchitectureMacros#ComposableArchitectureMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/DependenciesMacrosPlugin#DependenciesMacrosPlugin",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/PerceptionMacros#PerceptionMacros",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries;
+ PRODUCT_NAME = BookSeries;
+ SDKROOT = iphoneos;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ TARGETED_DEVICE_FAMILY = 1;
+ };
+ name = Stage;
+ };
+ F25BECCA059A4AFC53E422BB /* Stage */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../Tuist/.build/checkouts/swift-navigation/Sources/UIKitNavigationShim/include",
+ "$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/BookSeriesTests-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/CasePathsMacros#CasePathsMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/ComposableArchitectureMacros#ComposableArchitectureMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/DependenciesMacrosPlugin#DependenciesMacrosPlugin",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/PerceptionMacros#PerceptionMacros",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.BookSeriesTests;
+ PRODUCT_NAME = BookSeriesTests;
+ SDKROOT = iphoneos;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ TARGETED_DEVICE_FAMILY = 1;
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/BookSeries.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/BookSeries";
+ TEST_TARGET_NAME = BookSeries;
+ };
+ name = Stage;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 245CFD16B6984ED8FE978A93 /* Build configuration list for PBXNativeTarget "BookSeriesTests" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 8C7C702E3E75673035D478AD /* Debug */,
+ 6A00630555F732FD49BD836C /* Prod */,
+ B5112BC5CF3F15B907FADA9E /* Release */,
+ F25BECCA059A4AFC53E422BB /* Stage */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 3A07130DF442245F64DB1DDE /* Build configuration list for PBXNativeTarget "BookSeries" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ D29C1DDEC6AAB7967B9096FB /* Debug */,
+ AD740FB9580C1CEF2ABEC380 /* Prod */,
+ C2B53F7F63676BE56B7F1C05 /* Release */,
+ DFC2B99877E5418578D57080 /* Stage */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 6A81C5C8D60219EB6791BA0A /* Build configuration list for PBXNativeTarget "BookSeries-Debug" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 4D45B87C9EF7A812091DC0B9 /* Debug */,
+ 1A5D9D84C37144D171B17CD6 /* Prod */,
+ D8C93629A773DEAA3C80B8DE /* Release */,
+ 19887325A0265D3A5DAC695F /* Stage */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ ABE3E479BDB0438C07E73073 /* Build configuration list for PBXNativeTarget "BookSeries-Prod" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 275D77FD439D6D7EA4EEDAAE /* Debug */,
+ 63B86951E7925A70613A8F3B /* Prod */,
+ B054C471144306697DCB9AA7 /* Release */,
+ 5D30F6C751892396A7205E2D /* Stage */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ B319598DA86C1E1F724BD5C0 /* Build configuration list for PBXNativeTarget "BookSeries-Stage" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 81E1E1367BB19BFC52A757EB /* Debug */,
+ 4F493C9E663B01E05933AB1C /* Prod */,
+ 8619D03C050E9DB0E946073B /* Release */,
+ 67E90E4E1DAAF4D8EE9F5F15 /* Stage */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ DE58DF874FAC94A17F3A7BE1 /* Build configuration list for PBXProject "BookSeries" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 9F6B1B465F16CECBA99AEBB2 /* Debug */,
+ 263EEB10617ABC53E1AABF55 /* Prod */,
+ 423903480AEDC8066D08285F /* Release */,
+ BF0620F0464D97A986374CC0 /* Stage */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 08AE2D4D6AAA4F9B16AB736E /* Project object */;
+}
diff --git a/Projects/App/BookSeries.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Projects/App/BookSeries.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..919434a
--- /dev/null
+++ b/Projects/App/BookSeries.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/Projects/App/BookSeries.xcodeproj/xcshareddata/xcschemes/BookSeries-Debug.xcscheme b/Projects/App/BookSeries.xcodeproj/xcshareddata/xcschemes/BookSeries-Debug.xcscheme
new file mode 100644
index 0000000..5327a42
--- /dev/null
+++ b/Projects/App/BookSeries.xcodeproj/xcshareddata/xcschemes/BookSeries-Debug.xcscheme
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Projects/App/BookSeries.xcodeproj/xcshareddata/xcschemes/BookSeries-Prod.xcscheme b/Projects/App/BookSeries.xcodeproj/xcshareddata/xcschemes/BookSeries-Prod.xcscheme
new file mode 100644
index 0000000..63d5ab2
--- /dev/null
+++ b/Projects/App/BookSeries.xcodeproj/xcshareddata/xcschemes/BookSeries-Prod.xcscheme
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Projects/App/BookSeries.xcodeproj/xcshareddata/xcschemes/BookSeries-Stage.xcscheme b/Projects/App/BookSeries.xcodeproj/xcshareddata/xcschemes/BookSeries-Stage.xcscheme
new file mode 100644
index 0000000..a8f386a
--- /dev/null
+++ b/Projects/App/BookSeries.xcodeproj/xcshareddata/xcschemes/BookSeries-Stage.xcscheme
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Projects/App/BookSeries.xcodeproj/xcshareddata/xcschemes/BookSeries.xcscheme b/Projects/App/BookSeries.xcodeproj/xcshareddata/xcschemes/BookSeries.xcscheme
new file mode 100644
index 0000000..6ece0bf
--- /dev/null
+++ b/Projects/App/BookSeries.xcodeproj/xcshareddata/xcschemes/BookSeries.xcscheme
@@ -0,0 +1,99 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Projects/App/BookSeriesTests/Sources/AppTest/AppReducerTests.swift b/Projects/App/BookSeriesTests/Sources/AppTest/AppReducerTests.swift
new file mode 100644
index 0000000..59f87c2
--- /dev/null
+++ b/Projects/App/BookSeriesTests/Sources/AppTest/AppReducerTests.swift
@@ -0,0 +1,281 @@
+//
+// AppReducerTests.swift
+// BookSeriesTests
+//
+// Created by Wonji Suh on 9/11/25.
+//
+
+import Testing
+import Foundation
+import ComposableArchitecture
+@testable import BookSeries
+@testable import Presentation
+@testable import Model
+@testable import Repository
+@testable import UseCase
+
+@MainActor
+struct AppReducerTests {
+
+ // MARK: - State Tests
+
+ @Test("초기 상태 테스트", .tags(.tcaReducerTest, .stateManagementTest, .unitTest))
+ func testInitialState() {
+ // Given
+ let state = AppReducer.State()
+
+ // Then
+ switch state {
+ case .bookCoordinator(let coordinatorState):
+ #expect(coordinatorState.path.isEmpty)
+ #expect(coordinatorState.bookList.book.isEmpty)
+ #expect(coordinatorState.bookList.selectedBookIndex == 0)
+ #expect(coordinatorState.bookList.isLoading == false)
+ }
+ }
+
+ // MARK: - View Action Tests
+
+ @Test("BookCoordinator 액션 위임 테스트", .tags(.tcaReducerTest, .actionTest, .viewActionTest))
+ func testBookCoordinatorActionDelegation() async {
+ // Given
+ let store = TestStore(initialState: AppReducer.State()) {
+ AppReducer()
+ } withDependencies: {
+ $0.bookListUseCase = DefaultBookListRepositoryImpl()
+ $0.summaryPersistenceUseCase = DefaultSummaryPersistenceRepository()
+ $0.continuousClock = ImmediateClock()
+ }
+
+ store.exhaustivity = .off
+
+ // When - BookCoordinator onAppear 액션
+ await store.send(.view(.bookCoordinator(.onAppear)))
+
+ // 비동기 작업 완료 대기
+ await store.finish()
+
+ // Then - 최종 상태 검증
+ switch store.state {
+ case .bookCoordinator(let coordinatorState):
+ #expect(coordinatorState.bookList.isLoading == false)
+ }
+ }
+
+ @Test("BookList 액션 처리 테스트", .tags(.tcaReducerTest, .actionTest, .integrationTest))
+ func testBookListActionHandling() async {
+ // Given
+ let store = TestStore(initialState: AppReducer.State()) {
+ AppReducer()
+ }
+
+ store.exhaustivity = .off
+
+ // When - BookList 에러 해제 액션
+ await store.send(.view(.bookCoordinator(.bookList(.view(.errorDismissed)))))
+ }
+
+ @Test("시리즈 선택 액션 테스트", .tags(.tcaReducerTest, .actionTest, .stateManagementTest))
+ func testSeriesSelectionAction() async {
+ // Given
+ let mockBooks = [
+ Book(
+ title: "클린 코드",
+ author: "로버트 C. 마틴",
+ pages: 464,
+ image: "clean_code.jpg",
+ releaseDate: "2013-12-24",
+ dedication: "프로그래밍 장인들에게",
+ summary: "애자일 소프트웨어 장인 정신",
+ wiki: "https://ko.wikipedia.org/wiki/클린_코드",
+ chapters: ["깨끗한 코드", "의미 있는 이름", "함수"]
+ ),
+ Book(
+ title: "이펙티브 자바",
+ author: "조슈아 블로크",
+ pages: 416,
+ image: "effective_java.jpg",
+ releaseDate: "2018-10-26",
+ dedication: "자바 개발자들을 위하여",
+ summary: "자바 플랫폼 모범 사례 78가지",
+ wiki: "https://ko.wikipedia.org/wiki/이펙티브_자바",
+ chapters: ["객체 생성과 파괴", "모든 객체의 공통 메서드"]
+ )
+ ]
+
+ let store = TestStore(initialState: AppReducer.State()) {
+ AppReducer()
+ }
+
+ store.exhaustivity = .off
+
+ // 먼저 책 데이터를 설정
+ await store.send(.view(.bookCoordinator(.bookList(.inner(.bookListResponse(.success(mockBooks)))))))
+
+ // When - 시리즈 선택
+ await store.send(.view(.bookCoordinator(.bookList(.view(.seriesSelected(1))))))
+ }
+
+ // MARK: - Navigation Tests
+
+ @Test("네비게이션 스택 처리 테스트", .tags(.tcaReducerTest, .navigationTest, .actionTest))
+ func testNavigationStackHandling() async {
+ // Given
+ let store = TestStore(initialState: AppReducer.State()) {
+ AppReducer()
+ }
+
+ // When - Path에 새 화면 추가
+ let newBookListState = BookList.State()
+ await store.send(.view(.bookCoordinator(.path(.push(id: 0, state: .bookList(newBookListState)))))) {
+ switch $0 {
+ case .bookCoordinator(var coordinatorState):
+ coordinatorState.path[id: 0] = .bookList(newBookListState)
+ $0 = .bookCoordinator(coordinatorState)
+ }
+ }
+
+ // When - Path에서 화면 제거
+ await store.send(.view(.bookCoordinator(.path(.popFrom(id: 0))))) {
+ switch $0 {
+ case .bookCoordinator(var coordinatorState):
+ coordinatorState.path[id: 0] = nil
+ $0 = .bookCoordinator(coordinatorState)
+ }
+ }
+ }
+
+ // MARK: - Integration Tests
+
+ @Test("전체 앱 플로우 통합 테스트", .tags(.tcaReducerTest, .integrationTest, .effectTest))
+ func testFullAppFlowIntegration() async {
+ // Given
+ let store = TestStore(initialState: AppReducer.State()) {
+ AppReducer()
+ } withDependencies: {
+ $0.bookListUseCase = DefaultBookListRepositoryImpl()
+ $0.summaryPersistenceUseCase = DefaultSummaryPersistenceRepository()
+ $0.continuousClock = ImmediateClock()
+ }
+
+ store.exhaustivity = .off
+
+ // When - 앱 시작
+ await store.send(.view(.bookCoordinator(.onAppear)))
+
+ // 비동기 작업 완료 대기
+ await store.finish()
+ await store.skipReceivedActions()
+
+ // Then - 데이터가 로드됨
+ switch store.state {
+ case .bookCoordinator(let coordinatorState):
+ #expect(coordinatorState.bookList.isLoading == false)
+ #expect(coordinatorState.bookList.book.count == 5)
+ }
+
+ // When - 사용자 인터랙션 (요약 토글)
+ let key = "SummaryExpanded.클린 코드|로버트 C. 마틴"
+ await store.send(.view(.bookCoordinator(.bookList(.view(.summaryToggleTapped(key: key))))))
+ }
+
+ // MARK: - Error Handling Tests
+
+ @Test("에러 상태 처리 테스트", .tags(.tcaReducerTest, .errorHandlingTest, .actionTest))
+ func testErrorStateHandling() async {
+ // Given
+ let errorRepository = DefaultBookListRepositoryImpl()
+ errorRepository.setShouldThrowError(true, error: DefaultBookListRepositoryImpl.MockError.networkError)
+
+ let store = TestStore(initialState: AppReducer.State()) {
+ AppReducer()
+ } withDependencies: {
+ $0.bookListUseCase = errorRepository
+ $0.summaryPersistenceUseCase = DefaultSummaryPersistenceRepository()
+ $0.continuousClock = ImmediateClock()
+ }
+
+ store.exhaustivity = .off
+
+ // When - 앱 시작 (에러 발생 예정)
+ await store.send(.view(.bookCoordinator(.onAppear)))
+
+ // 비동기 작업 완료 대기
+ await store.finish()
+ await store.skipReceivedActions()
+ // Then - 에러 상태 확인
+ switch store.state {
+ case .bookCoordinator(let coordinatorState):
+ #expect(coordinatorState.bookList.isLoading == false)
+ #expect(coordinatorState.bookList.errorMessage == nil)
+ }
+
+ // When - 에러 해제
+ await store.send(.view(.bookCoordinator(.bookList(.view(.errorDismissed)))))
+ }
+
+ // MARK: - State Transition Tests
+
+ @Test("상태 전환 테스트", .tags(.tcaReducerTest, .stateManagementTest, .unitTest))
+ func testStateTransitions() async {
+ // Given
+ let store = TestStore(initialState: AppReducer.State()) {
+ AppReducer()
+ }
+
+ // When - URL 설정
+ await store.send(.view(.bookCoordinator(.bookList(.view(.tapUrl(url: "https://example.com")))))) {
+ switch $0 {
+ case .bookCoordinator(var coordinatorState):
+ coordinatorState.bookList.url = "https://example.com"
+ $0 = .bookCoordinator(coordinatorState)
+ }
+ }
+
+ // Then - 상태가 올바르게 업데이트됨
+ switch store.state {
+ case .bookCoordinator(let coordinatorState):
+ #expect(coordinatorState.bookList.url == "https://example.com")
+ }
+ }
+
+ // MARK: - Default Action Handling Tests
+
+ @Test("기본 액션 처리 테스트", .tags(.tcaReducerTest, .actionTest, .unitTest))
+ func testDefaultActionHandling() async {
+ // Given
+ let store = TestStore(initialState: AppReducer.State()) {
+ AppReducer()
+ }
+
+
+ await store.send(.view(.bookCoordinator(.bookList(.view(.errorDismissed)))))
+ }
+
+ // MARK: - State Consistency Tests
+
+ @Test("앱 상태 일관성 테스트", .tags(.tcaReducerTest, .stateManagementTest, .integrationTest))
+ func testAppStateConsistency() async {
+ // Given
+ let store = TestStore(initialState: AppReducer.State()) {
+ AppReducer()
+ }
+
+ // When - 연속된 액션들
+ await store.send(.view(.bookCoordinator(.bookList(.view(.seriesSelected(0))))))
+ await store.send(.view(.bookCoordinator(.bookList(.view(.tapUrl(url: "https://wiki.com")))))) {
+ switch $0 {
+ case .bookCoordinator(var coordinatorState):
+ coordinatorState.bookList.url = "https://wiki.com"
+ $0 = .bookCoordinator(coordinatorState)
+ }
+ }
+
+ // Then - 상태 일관성 확인
+ switch store.state {
+ case .bookCoordinator(let coordinatorState):
+ #expect(coordinatorState.bookList.selectedBookIndex == 0)
+ #expect(coordinatorState.bookList.url == "https://wiki.com")
+ }
+ }
+}
diff --git a/Projects/App/BookSeriesTests/Sources/AppTest/TestTags.swift b/Projects/App/BookSeriesTests/Sources/AppTest/TestTags.swift
new file mode 100644
index 0000000..5d44abe
--- /dev/null
+++ b/Projects/App/BookSeriesTests/Sources/AppTest/TestTags.swift
@@ -0,0 +1,23 @@
+//
+// TestTags.swift
+// BookSeriesTests
+//
+// Created by Wonji Suh on 9/11/25.
+//
+
+import Testing
+
+extension Tag {
+ @Tag static var tcaReducerTest: Self
+ @Tag static var stateManagementTest: Self
+ @Tag static var effectTest: Self
+ @Tag static var actionTest: Self
+ @Tag static var viewActionTest: Self
+ @Tag static var asyncActionTest: Self
+ @Tag static var innerActionTest: Self
+ @Tag static var navigationTest: Self
+ @Tag static var errorHandlingTest: Self
+ @Tag static var integrationTest: Self
+ @Tag static var unitTest: Self
+ @Tag static var appReducerTest: Self
+}
\ No newline at end of file
diff --git a/Projects/App/BookSeriesTests/Sources/BookSeriesTestPlan.xctestplan b/Projects/App/BookSeriesTests/Sources/BookSeriesTestPlan.xctestplan
new file mode 100644
index 0000000..144ca64
--- /dev/null
+++ b/Projects/App/BookSeriesTests/Sources/BookSeriesTestPlan.xctestplan
@@ -0,0 +1,45 @@
+{
+ "configurations" : [
+ {
+ "id" : "DA07F42A-6A1B-49EA-B617-ECC96B47E239",
+ "name" : "Configuration 1",
+ "options" : {
+
+ }
+ }
+ ],
+ "defaultOptions" : {
+ "testTimeoutsEnabled" : true
+ },
+ "testTargets" : [
+ {
+ "target" : {
+ "containerPath" : "container:..\/Core\/Domain\/UseCase\/UseCase.xcodeproj",
+ "identifier" : "3DF3057AD58FAE5A14CAF9E4",
+ "name" : "UseCaseTests"
+ }
+ },
+ {
+ "target" : {
+ "containerPath" : "container:..\/Core\/Data\/Repository\/Repository.xcodeproj",
+ "identifier" : "E227DA11F88E56EFAEBAD447",
+ "name" : "RepositoryTests"
+ }
+ },
+ {
+ "target" : {
+ "containerPath" : "container:BookSeries.xcodeproj",
+ "identifier" : "357D7C5D53E55B5FA9B01168",
+ "name" : "BookSeriesTests"
+ }
+ },
+ {
+ "target" : {
+ "containerPath" : "container:..\/Presentation\/Presentation\/Presentation.xcodeproj",
+ "identifier" : "4F649FDB9C5521442A78DE10",
+ "name" : "PresentationTests"
+ }
+ }
+ ],
+ "version" : 1
+}
diff --git a/Projects/App/BookSeriesTests/Sources/MultiModuleTemplateTests.swift b/Projects/App/BookSeriesTests/Sources/MultiModuleTemplateTests.swift
new file mode 100644
index 0000000..393bad2
--- /dev/null
+++ b/Projects/App/BookSeriesTests/Sources/MultiModuleTemplateTests.swift
@@ -0,0 +1,8 @@
+import Foundation
+import XCTest
+
+final class MultiModuleTemplateTests: XCTestCase {
+ func test_twoPlusTwo_isFour() {
+ XCTAssertEqual(2+2, 4)
+ }
+}
\ No newline at end of file
diff --git a/Projects/App/Derived/InfoPlists/BookSeries-Debug-Info.plist b/Projects/App/Derived/InfoPlists/BookSeries-Debug-Info.plist
new file mode 100644
index 0000000..3653e45
--- /dev/null
+++ b/Projects/App/Derived/InfoPlists/BookSeries-Debug-Info.plist
@@ -0,0 +1,86 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ ${BUNDLE_DISPLAY_NAME}
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+ 1.0.0
+ CFBundleURLTypes
+
+
+ CFBundleURLSchemes
+
+ ${REVERSED_CLIENT_ID}
+
+
+
+ CFBundleVersion
+ 10
+ ITSAppUsesNonExemptEncryption
+
+ LSRequiresIPhoneOS
+
+ NSAppTransportSecurity
+
+ NSAllowsArbitraryLoads
+
+
+ UIAppFonts
+
+ PretendardVariable.ttf
+
+ UIApplicationSceneManifest
+
+ UIApplicationSupportsMultipleScenes
+
+ UISceneConfigurations
+
+ UIWindowSceneSessionRoleApplication
+
+
+ UISceneConfigurationName
+ Default Configuration
+ UISceneDelegateClassName
+ $(PRODUCT_MODULE_NAME).SceneDelegate
+
+
+
+
+ UILaunchScreens
+
+ UILaunchScreen
+
+ New item
+
+ UIImageName
+
+ UILaunchScreenIdentifier
+
+
+
+
+ UIRequiredDeviceCapabilities
+
+ armv7
+
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ UIUserInterfaceStyle
+ Light
+
+
diff --git a/Projects/App/Derived/InfoPlists/BookSeries-Info.plist b/Projects/App/Derived/InfoPlists/BookSeries-Info.plist
new file mode 100644
index 0000000..3653e45
--- /dev/null
+++ b/Projects/App/Derived/InfoPlists/BookSeries-Info.plist
@@ -0,0 +1,86 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ ${BUNDLE_DISPLAY_NAME}
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+ 1.0.0
+ CFBundleURLTypes
+
+
+ CFBundleURLSchemes
+
+ ${REVERSED_CLIENT_ID}
+
+
+
+ CFBundleVersion
+ 10
+ ITSAppUsesNonExemptEncryption
+
+ LSRequiresIPhoneOS
+
+ NSAppTransportSecurity
+
+ NSAllowsArbitraryLoads
+
+
+ UIAppFonts
+
+ PretendardVariable.ttf
+
+ UIApplicationSceneManifest
+
+ UIApplicationSupportsMultipleScenes
+
+ UISceneConfigurations
+
+ UIWindowSceneSessionRoleApplication
+
+
+ UISceneConfigurationName
+ Default Configuration
+ UISceneDelegateClassName
+ $(PRODUCT_MODULE_NAME).SceneDelegate
+
+
+
+
+ UILaunchScreens
+
+ UILaunchScreen
+
+ New item
+
+ UIImageName
+
+ UILaunchScreenIdentifier
+
+
+
+
+ UIRequiredDeviceCapabilities
+
+ armv7
+
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ UIUserInterfaceStyle
+ Light
+
+
diff --git a/Projects/App/Derived/InfoPlists/BookSeries-Prod-Info.plist b/Projects/App/Derived/InfoPlists/BookSeries-Prod-Info.plist
new file mode 100644
index 0000000..3653e45
--- /dev/null
+++ b/Projects/App/Derived/InfoPlists/BookSeries-Prod-Info.plist
@@ -0,0 +1,86 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ ${BUNDLE_DISPLAY_NAME}
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+ 1.0.0
+ CFBundleURLTypes
+
+
+ CFBundleURLSchemes
+
+ ${REVERSED_CLIENT_ID}
+
+
+
+ CFBundleVersion
+ 10
+ ITSAppUsesNonExemptEncryption
+
+ LSRequiresIPhoneOS
+
+ NSAppTransportSecurity
+
+ NSAllowsArbitraryLoads
+
+
+ UIAppFonts
+
+ PretendardVariable.ttf
+
+ UIApplicationSceneManifest
+
+ UIApplicationSupportsMultipleScenes
+
+ UISceneConfigurations
+
+ UIWindowSceneSessionRoleApplication
+
+
+ UISceneConfigurationName
+ Default Configuration
+ UISceneDelegateClassName
+ $(PRODUCT_MODULE_NAME).SceneDelegate
+
+
+
+
+ UILaunchScreens
+
+ UILaunchScreen
+
+ New item
+
+ UIImageName
+
+ UILaunchScreenIdentifier
+
+
+
+
+ UIRequiredDeviceCapabilities
+
+ armv7
+
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ UIUserInterfaceStyle
+ Light
+
+
diff --git a/Projects/App/Derived/InfoPlists/BookSeries-Stage-Info.plist b/Projects/App/Derived/InfoPlists/BookSeries-Stage-Info.plist
new file mode 100644
index 0000000..3653e45
--- /dev/null
+++ b/Projects/App/Derived/InfoPlists/BookSeries-Stage-Info.plist
@@ -0,0 +1,86 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ ${BUNDLE_DISPLAY_NAME}
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+ 1.0.0
+ CFBundleURLTypes
+
+
+ CFBundleURLSchemes
+
+ ${REVERSED_CLIENT_ID}
+
+
+
+ CFBundleVersion
+ 10
+ ITSAppUsesNonExemptEncryption
+
+ LSRequiresIPhoneOS
+
+ NSAppTransportSecurity
+
+ NSAllowsArbitraryLoads
+
+
+ UIAppFonts
+
+ PretendardVariable.ttf
+
+ UIApplicationSceneManifest
+
+ UIApplicationSupportsMultipleScenes
+
+ UISceneConfigurations
+
+ UIWindowSceneSessionRoleApplication
+
+
+ UISceneConfigurationName
+ Default Configuration
+ UISceneDelegateClassName
+ $(PRODUCT_MODULE_NAME).SceneDelegate
+
+
+
+
+ UILaunchScreens
+
+ UILaunchScreen
+
+ New item
+
+ UIImageName
+
+ UILaunchScreenIdentifier
+
+
+
+
+ UIRequiredDeviceCapabilities
+
+ armv7
+
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ UIUserInterfaceStyle
+ Light
+
+
diff --git a/Projects/App/Derived/InfoPlists/BookSeriesTests-Info.plist b/Projects/App/Derived/InfoPlists/BookSeriesTests-Info.plist
new file mode 100644
index 0000000..6c40a6c
--- /dev/null
+++ b/Projects/App/Derived/InfoPlists/BookSeriesTests-Info.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ BNDL
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/Projects/App/Derived/Sources/TuistAssets+BookSeries.swift b/Projects/App/Derived/Sources/TuistAssets+BookSeries.swift
new file mode 100644
index 0000000..e97fdfe
--- /dev/null
+++ b/Projects/App/Derived/Sources/TuistAssets+BookSeries.swift
@@ -0,0 +1,84 @@
+// swiftlint:disable:this file_name
+// swiftlint:disable all
+// swift-format-ignore-file
+// swiftformat:disable all
+// Generated using tuist — https://github.com/tuist/tuist
+
+#if os(macOS)
+ import AppKit
+#elseif os(iOS)
+ import UIKit
+#elseif os(tvOS) || os(watchOS)
+ import UIKit
+#endif
+#if canImport(SwiftUI)
+ import SwiftUI
+#endif
+
+// MARK: - Asset Catalogs
+
+public enum BookSeriesAsset: Sendable {
+ public enum Assets {
+ public static let accentColor = BookSeriesColors(name: "AccentColor")
+ }
+ public enum PreviewAssets {
+ }
+}
+
+// MARK: - Implementation Details
+
+public final class BookSeriesColors: Sendable {
+ public let name: String
+
+ #if os(macOS)
+ public typealias Color = NSColor
+ #elseif os(iOS) || os(tvOS) || os(watchOS) || os(visionOS)
+ public typealias Color = UIColor
+ #endif
+
+ @available(iOS 11.0, tvOS 11.0, watchOS 4.0, macOS 10.13, visionOS 1.0, *)
+ public var color: Color {
+ guard let color = Color(asset: self) else {
+ fatalError("Unable to load color asset named \(name).")
+ }
+ return color
+ }
+
+ #if canImport(SwiftUI)
+ @available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, visionOS 1.0, *)
+ public var swiftUIColor: SwiftUI.Color {
+ return SwiftUI.Color(asset: self)
+ }
+ #endif
+
+ fileprivate init(name: String) {
+ self.name = name
+ }
+}
+
+public extension BookSeriesColors.Color {
+ @available(iOS 11.0, tvOS 11.0, watchOS 4.0, macOS 10.13, visionOS 1.0, *)
+ convenience init?(asset: BookSeriesColors) {
+ let bundle = Bundle.module
+ #if os(iOS) || os(tvOS) || os(visionOS)
+ self.init(named: asset.name, in: bundle, compatibleWith: nil)
+ #elseif os(macOS)
+ self.init(named: NSColor.Name(asset.name), bundle: bundle)
+ #elseif os(watchOS)
+ self.init(named: asset.name)
+ #endif
+ }
+}
+
+#if canImport(SwiftUI)
+@available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, visionOS 1.0, *)
+public extension SwiftUI.Color {
+ init(asset: BookSeriesColors) {
+ let bundle = Bundle.module
+ self.init(asset.name, bundle: bundle)
+ }
+}
+#endif
+
+// swiftformat:enable all
+// swiftlint:enable all
diff --git a/Projects/App/Derived/Sources/TuistAssets+BookSeriesDebug.swift b/Projects/App/Derived/Sources/TuistAssets+BookSeriesDebug.swift
new file mode 100644
index 0000000..bc7d7b5
--- /dev/null
+++ b/Projects/App/Derived/Sources/TuistAssets+BookSeriesDebug.swift
@@ -0,0 +1,84 @@
+// swiftlint:disable:this file_name
+// swiftlint:disable all
+// swift-format-ignore-file
+// swiftformat:disable all
+// Generated using tuist — https://github.com/tuist/tuist
+
+#if os(macOS)
+ import AppKit
+#elseif os(iOS)
+ import UIKit
+#elseif os(tvOS) || os(watchOS)
+ import UIKit
+#endif
+#if canImport(SwiftUI)
+ import SwiftUI
+#endif
+
+// MARK: - Asset Catalogs
+
+public enum BookSeriesDebugAsset: Sendable {
+ public enum Assets {
+ public static let accentColor = BookSeriesDebugColors(name: "AccentColor")
+ }
+ public enum PreviewAssets {
+ }
+}
+
+// MARK: - Implementation Details
+
+public final class BookSeriesDebugColors: Sendable {
+ public let name: String
+
+ #if os(macOS)
+ public typealias Color = NSColor
+ #elseif os(iOS) || os(tvOS) || os(watchOS) || os(visionOS)
+ public typealias Color = UIColor
+ #endif
+
+ @available(iOS 11.0, tvOS 11.0, watchOS 4.0, macOS 10.13, visionOS 1.0, *)
+ public var color: Color {
+ guard let color = Color(asset: self) else {
+ fatalError("Unable to load color asset named \(name).")
+ }
+ return color
+ }
+
+ #if canImport(SwiftUI)
+ @available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, visionOS 1.0, *)
+ public var swiftUIColor: SwiftUI.Color {
+ return SwiftUI.Color(asset: self)
+ }
+ #endif
+
+ fileprivate init(name: String) {
+ self.name = name
+ }
+}
+
+public extension BookSeriesDebugColors.Color {
+ @available(iOS 11.0, tvOS 11.0, watchOS 4.0, macOS 10.13, visionOS 1.0, *)
+ convenience init?(asset: BookSeriesDebugColors) {
+ let bundle = Bundle.module
+ #if os(iOS) || os(tvOS) || os(visionOS)
+ self.init(named: asset.name, in: bundle, compatibleWith: nil)
+ #elseif os(macOS)
+ self.init(named: NSColor.Name(asset.name), bundle: bundle)
+ #elseif os(watchOS)
+ self.init(named: asset.name)
+ #endif
+ }
+}
+
+#if canImport(SwiftUI)
+@available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, visionOS 1.0, *)
+public extension SwiftUI.Color {
+ init(asset: BookSeriesDebugColors) {
+ let bundle = Bundle.module
+ self.init(asset.name, bundle: bundle)
+ }
+}
+#endif
+
+// swiftformat:enable all
+// swiftlint:enable all
diff --git a/Projects/App/Derived/Sources/TuistAssets+BookSeriesProd.swift b/Projects/App/Derived/Sources/TuistAssets+BookSeriesProd.swift
new file mode 100644
index 0000000..a4c1e50
--- /dev/null
+++ b/Projects/App/Derived/Sources/TuistAssets+BookSeriesProd.swift
@@ -0,0 +1,84 @@
+// swiftlint:disable:this file_name
+// swiftlint:disable all
+// swift-format-ignore-file
+// swiftformat:disable all
+// Generated using tuist — https://github.com/tuist/tuist
+
+#if os(macOS)
+ import AppKit
+#elseif os(iOS)
+ import UIKit
+#elseif os(tvOS) || os(watchOS)
+ import UIKit
+#endif
+#if canImport(SwiftUI)
+ import SwiftUI
+#endif
+
+// MARK: - Asset Catalogs
+
+public enum BookSeriesProdAsset: Sendable {
+ public enum Assets {
+ public static let accentColor = BookSeriesProdColors(name: "AccentColor")
+ }
+ public enum PreviewAssets {
+ }
+}
+
+// MARK: - Implementation Details
+
+public final class BookSeriesProdColors: Sendable {
+ public let name: String
+
+ #if os(macOS)
+ public typealias Color = NSColor
+ #elseif os(iOS) || os(tvOS) || os(watchOS) || os(visionOS)
+ public typealias Color = UIColor
+ #endif
+
+ @available(iOS 11.0, tvOS 11.0, watchOS 4.0, macOS 10.13, visionOS 1.0, *)
+ public var color: Color {
+ guard let color = Color(asset: self) else {
+ fatalError("Unable to load color asset named \(name).")
+ }
+ return color
+ }
+
+ #if canImport(SwiftUI)
+ @available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, visionOS 1.0, *)
+ public var swiftUIColor: SwiftUI.Color {
+ return SwiftUI.Color(asset: self)
+ }
+ #endif
+
+ fileprivate init(name: String) {
+ self.name = name
+ }
+}
+
+public extension BookSeriesProdColors.Color {
+ @available(iOS 11.0, tvOS 11.0, watchOS 4.0, macOS 10.13, visionOS 1.0, *)
+ convenience init?(asset: BookSeriesProdColors) {
+ let bundle = Bundle.module
+ #if os(iOS) || os(tvOS) || os(visionOS)
+ self.init(named: asset.name, in: bundle, compatibleWith: nil)
+ #elseif os(macOS)
+ self.init(named: NSColor.Name(asset.name), bundle: bundle)
+ #elseif os(watchOS)
+ self.init(named: asset.name)
+ #endif
+ }
+}
+
+#if canImport(SwiftUI)
+@available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, visionOS 1.0, *)
+public extension SwiftUI.Color {
+ init(asset: BookSeriesProdColors) {
+ let bundle = Bundle.module
+ self.init(asset.name, bundle: bundle)
+ }
+}
+#endif
+
+// swiftformat:enable all
+// swiftlint:enable all
diff --git a/Projects/App/Derived/Sources/TuistAssets+BookSeriesStage.swift b/Projects/App/Derived/Sources/TuistAssets+BookSeriesStage.swift
new file mode 100644
index 0000000..16d3d21
--- /dev/null
+++ b/Projects/App/Derived/Sources/TuistAssets+BookSeriesStage.swift
@@ -0,0 +1,84 @@
+// swiftlint:disable:this file_name
+// swiftlint:disable all
+// swift-format-ignore-file
+// swiftformat:disable all
+// Generated using tuist — https://github.com/tuist/tuist
+
+#if os(macOS)
+ import AppKit
+#elseif os(iOS)
+ import UIKit
+#elseif os(tvOS) || os(watchOS)
+ import UIKit
+#endif
+#if canImport(SwiftUI)
+ import SwiftUI
+#endif
+
+// MARK: - Asset Catalogs
+
+public enum BookSeriesStageAsset: Sendable {
+ public enum Assets {
+ public static let accentColor = BookSeriesStageColors(name: "AccentColor")
+ }
+ public enum PreviewAssets {
+ }
+}
+
+// MARK: - Implementation Details
+
+public final class BookSeriesStageColors: Sendable {
+ public let name: String
+
+ #if os(macOS)
+ public typealias Color = NSColor
+ #elseif os(iOS) || os(tvOS) || os(watchOS) || os(visionOS)
+ public typealias Color = UIColor
+ #endif
+
+ @available(iOS 11.0, tvOS 11.0, watchOS 4.0, macOS 10.13, visionOS 1.0, *)
+ public var color: Color {
+ guard let color = Color(asset: self) else {
+ fatalError("Unable to load color asset named \(name).")
+ }
+ return color
+ }
+
+ #if canImport(SwiftUI)
+ @available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, visionOS 1.0, *)
+ public var swiftUIColor: SwiftUI.Color {
+ return SwiftUI.Color(asset: self)
+ }
+ #endif
+
+ fileprivate init(name: String) {
+ self.name = name
+ }
+}
+
+public extension BookSeriesStageColors.Color {
+ @available(iOS 11.0, tvOS 11.0, watchOS 4.0, macOS 10.13, visionOS 1.0, *)
+ convenience init?(asset: BookSeriesStageColors) {
+ let bundle = Bundle.module
+ #if os(iOS) || os(tvOS) || os(visionOS)
+ self.init(named: asset.name, in: bundle, compatibleWith: nil)
+ #elseif os(macOS)
+ self.init(named: NSColor.Name(asset.name), bundle: bundle)
+ #elseif os(watchOS)
+ self.init(named: asset.name)
+ #endif
+ }
+}
+
+#if canImport(SwiftUI)
+@available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, visionOS 1.0, *)
+public extension SwiftUI.Color {
+ init(asset: BookSeriesStageColors) {
+ let bundle = Bundle.module
+ self.init(asset.name, bundle: bundle)
+ }
+}
+#endif
+
+// swiftformat:enable all
+// swiftlint:enable all
diff --git a/Projects/App/Derived/Sources/TuistBundle+BookSeries.swift b/Projects/App/Derived/Sources/TuistBundle+BookSeries.swift
new file mode 100644
index 0000000..be9de42
--- /dev/null
+++ b/Projects/App/Derived/Sources/TuistBundle+BookSeries.swift
@@ -0,0 +1,25 @@
+// periphery:ignore:all
+// swiftlint:disable:this file_name
+// swiftlint:disable all
+// swift-format-ignore-file
+// swiftformat:disable all
+#if hasFeature(InternalImportsByDefault)
+public import Foundation
+#else
+import Foundation
+#endif
+// MARK: - Swift Bundle Accessor for Frameworks
+private class BundleFinder {}
+extension Foundation.Bundle {
+/// Since BookSeries is a application, the bundle for classes within this module can be used directly.
+ static let module = Bundle(for: BundleFinder.self)
+}
+// MARK: - Objective-C Bundle Accessor
+@objc
+public class BookSeriesResources: NSObject {
+@objc public class var bundle: Bundle {
+ return .module
+}
+}
+// swiftformat:enable all
+// swiftlint:enable all
\ No newline at end of file
diff --git a/Projects/App/Derived/Sources/TuistBundle+BookSeriesDebug.swift b/Projects/App/Derived/Sources/TuistBundle+BookSeriesDebug.swift
new file mode 100644
index 0000000..3942112
--- /dev/null
+++ b/Projects/App/Derived/Sources/TuistBundle+BookSeriesDebug.swift
@@ -0,0 +1,25 @@
+// periphery:ignore:all
+// swiftlint:disable:this file_name
+// swiftlint:disable all
+// swift-format-ignore-file
+// swiftformat:disable all
+#if hasFeature(InternalImportsByDefault)
+public import Foundation
+#else
+import Foundation
+#endif
+// MARK: - Swift Bundle Accessor for Frameworks
+private class BundleFinder {}
+extension Foundation.Bundle {
+/// Since BookSeries-Debug is a application, the bundle for classes within this module can be used directly.
+ static let module = Bundle(for: BundleFinder.self)
+}
+// MARK: - Objective-C Bundle Accessor
+@objc
+public class BookSeriesDebugResources: NSObject {
+@objc public class var bundle: Bundle {
+ return .module
+}
+}
+// swiftformat:enable all
+// swiftlint:enable all
\ No newline at end of file
diff --git a/Projects/App/Derived/Sources/TuistBundle+BookSeriesProd.swift b/Projects/App/Derived/Sources/TuistBundle+BookSeriesProd.swift
new file mode 100644
index 0000000..3095615
--- /dev/null
+++ b/Projects/App/Derived/Sources/TuistBundle+BookSeriesProd.swift
@@ -0,0 +1,25 @@
+// periphery:ignore:all
+// swiftlint:disable:this file_name
+// swiftlint:disable all
+// swift-format-ignore-file
+// swiftformat:disable all
+#if hasFeature(InternalImportsByDefault)
+public import Foundation
+#else
+import Foundation
+#endif
+// MARK: - Swift Bundle Accessor for Frameworks
+private class BundleFinder {}
+extension Foundation.Bundle {
+/// Since BookSeries-Prod is a application, the bundle for classes within this module can be used directly.
+ static let module = Bundle(for: BundleFinder.self)
+}
+// MARK: - Objective-C Bundle Accessor
+@objc
+public class BookSeriesProdResources: NSObject {
+@objc public class var bundle: Bundle {
+ return .module
+}
+}
+// swiftformat:enable all
+// swiftlint:enable all
\ No newline at end of file
diff --git a/Projects/App/Derived/Sources/TuistBundle+BookSeriesStage.swift b/Projects/App/Derived/Sources/TuistBundle+BookSeriesStage.swift
new file mode 100644
index 0000000..bdffcf2
--- /dev/null
+++ b/Projects/App/Derived/Sources/TuistBundle+BookSeriesStage.swift
@@ -0,0 +1,25 @@
+// periphery:ignore:all
+// swiftlint:disable:this file_name
+// swiftlint:disable all
+// swift-format-ignore-file
+// swiftformat:disable all
+#if hasFeature(InternalImportsByDefault)
+public import Foundation
+#else
+import Foundation
+#endif
+// MARK: - Swift Bundle Accessor for Frameworks
+private class BundleFinder {}
+extension Foundation.Bundle {
+/// Since BookSeries-Stage is a application, the bundle for classes within this module can be used directly.
+ static let module = Bundle(for: BundleFinder.self)
+}
+// MARK: - Objective-C Bundle Accessor
+@objc
+public class BookSeriesStageResources: NSObject {
+@objc public class var bundle: Bundle {
+ return .module
+}
+}
+// swiftformat:enable all
+// swiftlint:enable all
\ No newline at end of file
diff --git a/Projects/App/Derived/Sources/TuistBundle+BookSeriesTests.swift b/Projects/App/Derived/Sources/TuistBundle+BookSeriesTests.swift
new file mode 100644
index 0000000..3278b36
--- /dev/null
+++ b/Projects/App/Derived/Sources/TuistBundle+BookSeriesTests.swift
@@ -0,0 +1,25 @@
+// periphery:ignore:all
+// swiftlint:disable:this file_name
+// swiftlint:disable all
+// swift-format-ignore-file
+// swiftformat:disable all
+#if hasFeature(InternalImportsByDefault)
+public import Foundation
+#else
+import Foundation
+#endif
+// MARK: - Swift Bundle Accessor for Frameworks
+private class BundleFinder {}
+extension Foundation.Bundle {
+/// Since BookSeriesTests is a unit tests, the bundle for classes within this module can be used directly.
+ static let module = Bundle(for: BundleFinder.self)
+}
+// MARK: - Objective-C Bundle Accessor
+@objc
+public class BookSeriesTestsResources: NSObject {
+@objc public class var bundle: Bundle {
+ return .module
+}
+}
+// swiftformat:enable all
+// swiftlint:enable all
\ No newline at end of file
diff --git a/Projects/App/Derived/Sources/TuistFonts+BookSeries.swift b/Projects/App/Derived/Sources/TuistFonts+BookSeries.swift
new file mode 100644
index 0000000..562ea8c
--- /dev/null
+++ b/Projects/App/Derived/Sources/TuistFonts+BookSeries.swift
@@ -0,0 +1,104 @@
+// swiftlint:disable:this file_name
+// swiftlint:disable all
+// swift-format-ignore-file
+// swiftformat:disable all
+// Generated using tuist — https://github.com/tuist/tuist
+
+#if os(macOS)
+ import AppKit.NSFont
+#elseif os(iOS) || os(tvOS) || os(watchOS) || os(visionOS)
+ import UIKit.UIFont
+#endif
+#if canImport(SwiftUI)
+ import SwiftUI
+#endif
+
+// swiftlint:disable superfluous_disable_command
+// swiftlint:disable file_length
+
+// MARK: - Fonts
+
+// swiftlint:disable identifier_name line_length type_body_length
+public enum BookSeriesFontFamily: Sendable {
+ public enum PretendardVariable: Sendable {
+ public static let black = BookSeriesFontConvertible(name: "PretendardVariable-Black", family: "Pretendard Variable", path: "PretendardVariable.ttf")
+ public static let bold = BookSeriesFontConvertible(name: "PretendardVariable-Bold", family: "Pretendard Variable", path: "PretendardVariable.ttf")
+ public static let extraBold = BookSeriesFontConvertible(name: "PretendardVariable-ExtraBold", family: "Pretendard Variable", path: "PretendardVariable.ttf")
+ public static let extraLight = BookSeriesFontConvertible(name: "PretendardVariable-ExtraLight", family: "Pretendard Variable", path: "PretendardVariable.ttf")
+ public static let light = BookSeriesFontConvertible(name: "PretendardVariable-Light", family: "Pretendard Variable", path: "PretendardVariable.ttf")
+ public static let medium = BookSeriesFontConvertible(name: "PretendardVariable-Medium", family: "Pretendard Variable", path: "PretendardVariable.ttf")
+ public static let regular = BookSeriesFontConvertible(name: "PretendardVariable-Regular", family: "Pretendard Variable", path: "PretendardVariable.ttf")
+ public static let semiBold = BookSeriesFontConvertible(name: "PretendardVariable-SemiBold", family: "Pretendard Variable", path: "PretendardVariable.ttf")
+ public static let thin = BookSeriesFontConvertible(name: "PretendardVariable-Thin", family: "Pretendard Variable", path: "PretendardVariable.ttf")
+ public static let all: [BookSeriesFontConvertible] = [black, bold, extraBold, extraLight, light, medium, regular, semiBold, thin]
+ }
+ public static let allCustomFonts: [BookSeriesFontConvertible] = [PretendardVariable.all].flatMap { $0 }
+ public static func registerAllCustomFonts() {
+ allCustomFonts.forEach { $0.register() }
+ }
+}
+// swiftlint:enable identifier_name line_length type_body_length
+
+// MARK: - Implementation Details
+
+public struct BookSeriesFontConvertible: Sendable {
+ public let name: String
+ public let family: String
+ public let path: String
+
+ #if os(macOS)
+ public typealias Font = NSFont
+ #elseif os(iOS) || os(tvOS) || os(watchOS) || os(visionOS)
+ public typealias Font = UIFont
+ #endif
+
+ public func font(size: CGFloat) -> Font {
+ guard let font = Font(font: self, size: size) else {
+ fatalError("Unable to initialize font '\(name)' (\(family))")
+ }
+ return font
+ }
+
+ #if canImport(SwiftUI)
+ @available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, *)
+ public func swiftUIFont(size: CGFloat) -> SwiftUI.Font {
+ guard let font = Font(font: self, size: size) else {
+ fatalError("Unable to initialize font '\(name)' (\(family))")
+ }
+ #if os(macOS)
+ return SwiftUI.Font.custom(font.fontName, size: font.pointSize)
+ #elseif os(iOS) || os(tvOS) || os(watchOS) || os(visionOS)
+ return SwiftUI.Font(font)
+ #endif
+ }
+ #endif
+
+ public func register() {
+ // swiftlint:disable:next conditional_returns_on_newline
+ guard let url = url else { return }
+ CTFontManagerRegisterFontsForURL(url as CFURL, .process, nil)
+ }
+
+ fileprivate var url: URL? {
+ // swiftlint:disable:next implicit_return
+ return Bundle.module.url(forResource: path, withExtension: nil)
+ }
+}
+
+public extension BookSeriesFontConvertible.Font {
+ convenience init?(font: BookSeriesFontConvertible, size: CGFloat) {
+ #if os(iOS) || os(tvOS) || os(watchOS) || os(visionOS)
+ if !UIFont.fontNames(forFamilyName: font.family).contains(font.name) {
+ font.register()
+ }
+ #elseif os(macOS)
+ if let url = font.url, CTFontManagerGetScopeForURL(url as CFURL) == .none {
+ font.register()
+ }
+ #endif
+
+ self.init(name: font.name, size: size)
+ }
+}
+// swiftformat:enable all
+// swiftlint:enable all
diff --git a/Projects/App/Derived/Sources/TuistFonts+BookSeriesDebug.swift b/Projects/App/Derived/Sources/TuistFonts+BookSeriesDebug.swift
new file mode 100644
index 0000000..c0c4517
--- /dev/null
+++ b/Projects/App/Derived/Sources/TuistFonts+BookSeriesDebug.swift
@@ -0,0 +1,104 @@
+// swiftlint:disable:this file_name
+// swiftlint:disable all
+// swift-format-ignore-file
+// swiftformat:disable all
+// Generated using tuist — https://github.com/tuist/tuist
+
+#if os(macOS)
+ import AppKit.NSFont
+#elseif os(iOS) || os(tvOS) || os(watchOS) || os(visionOS)
+ import UIKit.UIFont
+#endif
+#if canImport(SwiftUI)
+ import SwiftUI
+#endif
+
+// swiftlint:disable superfluous_disable_command
+// swiftlint:disable file_length
+
+// MARK: - Fonts
+
+// swiftlint:disable identifier_name line_length type_body_length
+public enum BookSeriesDebugFontFamily: Sendable {
+ public enum PretendardVariable: Sendable {
+ public static let black = BookSeriesDebugFontConvertible(name: "PretendardVariable-Black", family: "Pretendard Variable", path: "PretendardVariable.ttf")
+ public static let bold = BookSeriesDebugFontConvertible(name: "PretendardVariable-Bold", family: "Pretendard Variable", path: "PretendardVariable.ttf")
+ public static let extraBold = BookSeriesDebugFontConvertible(name: "PretendardVariable-ExtraBold", family: "Pretendard Variable", path: "PretendardVariable.ttf")
+ public static let extraLight = BookSeriesDebugFontConvertible(name: "PretendardVariable-ExtraLight", family: "Pretendard Variable", path: "PretendardVariable.ttf")
+ public static let light = BookSeriesDebugFontConvertible(name: "PretendardVariable-Light", family: "Pretendard Variable", path: "PretendardVariable.ttf")
+ public static let medium = BookSeriesDebugFontConvertible(name: "PretendardVariable-Medium", family: "Pretendard Variable", path: "PretendardVariable.ttf")
+ public static let regular = BookSeriesDebugFontConvertible(name: "PretendardVariable-Regular", family: "Pretendard Variable", path: "PretendardVariable.ttf")
+ public static let semiBold = BookSeriesDebugFontConvertible(name: "PretendardVariable-SemiBold", family: "Pretendard Variable", path: "PretendardVariable.ttf")
+ public static let thin = BookSeriesDebugFontConvertible(name: "PretendardVariable-Thin", family: "Pretendard Variable", path: "PretendardVariable.ttf")
+ public static let all: [BookSeriesDebugFontConvertible] = [black, bold, extraBold, extraLight, light, medium, regular, semiBold, thin]
+ }
+ public static let allCustomFonts: [BookSeriesDebugFontConvertible] = [PretendardVariable.all].flatMap { $0 }
+ public static func registerAllCustomFonts() {
+ allCustomFonts.forEach { $0.register() }
+ }
+}
+// swiftlint:enable identifier_name line_length type_body_length
+
+// MARK: - Implementation Details
+
+public struct BookSeriesDebugFontConvertible: Sendable {
+ public let name: String
+ public let family: String
+ public let path: String
+
+ #if os(macOS)
+ public typealias Font = NSFont
+ #elseif os(iOS) || os(tvOS) || os(watchOS) || os(visionOS)
+ public typealias Font = UIFont
+ #endif
+
+ public func font(size: CGFloat) -> Font {
+ guard let font = Font(font: self, size: size) else {
+ fatalError("Unable to initialize font '\(name)' (\(family))")
+ }
+ return font
+ }
+
+ #if canImport(SwiftUI)
+ @available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, *)
+ public func swiftUIFont(size: CGFloat) -> SwiftUI.Font {
+ guard let font = Font(font: self, size: size) else {
+ fatalError("Unable to initialize font '\(name)' (\(family))")
+ }
+ #if os(macOS)
+ return SwiftUI.Font.custom(font.fontName, size: font.pointSize)
+ #elseif os(iOS) || os(tvOS) || os(watchOS) || os(visionOS)
+ return SwiftUI.Font(font)
+ #endif
+ }
+ #endif
+
+ public func register() {
+ // swiftlint:disable:next conditional_returns_on_newline
+ guard let url = url else { return }
+ CTFontManagerRegisterFontsForURL(url as CFURL, .process, nil)
+ }
+
+ fileprivate var url: URL? {
+ // swiftlint:disable:next implicit_return
+ return Bundle.module.url(forResource: path, withExtension: nil)
+ }
+}
+
+public extension BookSeriesDebugFontConvertible.Font {
+ convenience init?(font: BookSeriesDebugFontConvertible, size: CGFloat) {
+ #if os(iOS) || os(tvOS) || os(watchOS) || os(visionOS)
+ if !UIFont.fontNames(forFamilyName: font.family).contains(font.name) {
+ font.register()
+ }
+ #elseif os(macOS)
+ if let url = font.url, CTFontManagerGetScopeForURL(url as CFURL) == .none {
+ font.register()
+ }
+ #endif
+
+ self.init(name: font.name, size: size)
+ }
+}
+// swiftformat:enable all
+// swiftlint:enable all
diff --git a/Projects/App/Derived/Sources/TuistFonts+BookSeriesProd.swift b/Projects/App/Derived/Sources/TuistFonts+BookSeriesProd.swift
new file mode 100644
index 0000000..838616a
--- /dev/null
+++ b/Projects/App/Derived/Sources/TuistFonts+BookSeriesProd.swift
@@ -0,0 +1,104 @@
+// swiftlint:disable:this file_name
+// swiftlint:disable all
+// swift-format-ignore-file
+// swiftformat:disable all
+// Generated using tuist — https://github.com/tuist/tuist
+
+#if os(macOS)
+ import AppKit.NSFont
+#elseif os(iOS) || os(tvOS) || os(watchOS) || os(visionOS)
+ import UIKit.UIFont
+#endif
+#if canImport(SwiftUI)
+ import SwiftUI
+#endif
+
+// swiftlint:disable superfluous_disable_command
+// swiftlint:disable file_length
+
+// MARK: - Fonts
+
+// swiftlint:disable identifier_name line_length type_body_length
+public enum BookSeriesProdFontFamily: Sendable {
+ public enum PretendardVariable: Sendable {
+ public static let black = BookSeriesProdFontConvertible(name: "PretendardVariable-Black", family: "Pretendard Variable", path: "PretendardVariable.ttf")
+ public static let bold = BookSeriesProdFontConvertible(name: "PretendardVariable-Bold", family: "Pretendard Variable", path: "PretendardVariable.ttf")
+ public static let extraBold = BookSeriesProdFontConvertible(name: "PretendardVariable-ExtraBold", family: "Pretendard Variable", path: "PretendardVariable.ttf")
+ public static let extraLight = BookSeriesProdFontConvertible(name: "PretendardVariable-ExtraLight", family: "Pretendard Variable", path: "PretendardVariable.ttf")
+ public static let light = BookSeriesProdFontConvertible(name: "PretendardVariable-Light", family: "Pretendard Variable", path: "PretendardVariable.ttf")
+ public static let medium = BookSeriesProdFontConvertible(name: "PretendardVariable-Medium", family: "Pretendard Variable", path: "PretendardVariable.ttf")
+ public static let regular = BookSeriesProdFontConvertible(name: "PretendardVariable-Regular", family: "Pretendard Variable", path: "PretendardVariable.ttf")
+ public static let semiBold = BookSeriesProdFontConvertible(name: "PretendardVariable-SemiBold", family: "Pretendard Variable", path: "PretendardVariable.ttf")
+ public static let thin = BookSeriesProdFontConvertible(name: "PretendardVariable-Thin", family: "Pretendard Variable", path: "PretendardVariable.ttf")
+ public static let all: [BookSeriesProdFontConvertible] = [black, bold, extraBold, extraLight, light, medium, regular, semiBold, thin]
+ }
+ public static let allCustomFonts: [BookSeriesProdFontConvertible] = [PretendardVariable.all].flatMap { $0 }
+ public static func registerAllCustomFonts() {
+ allCustomFonts.forEach { $0.register() }
+ }
+}
+// swiftlint:enable identifier_name line_length type_body_length
+
+// MARK: - Implementation Details
+
+public struct BookSeriesProdFontConvertible: Sendable {
+ public let name: String
+ public let family: String
+ public let path: String
+
+ #if os(macOS)
+ public typealias Font = NSFont
+ #elseif os(iOS) || os(tvOS) || os(watchOS) || os(visionOS)
+ public typealias Font = UIFont
+ #endif
+
+ public func font(size: CGFloat) -> Font {
+ guard let font = Font(font: self, size: size) else {
+ fatalError("Unable to initialize font '\(name)' (\(family))")
+ }
+ return font
+ }
+
+ #if canImport(SwiftUI)
+ @available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, *)
+ public func swiftUIFont(size: CGFloat) -> SwiftUI.Font {
+ guard let font = Font(font: self, size: size) else {
+ fatalError("Unable to initialize font '\(name)' (\(family))")
+ }
+ #if os(macOS)
+ return SwiftUI.Font.custom(font.fontName, size: font.pointSize)
+ #elseif os(iOS) || os(tvOS) || os(watchOS) || os(visionOS)
+ return SwiftUI.Font(font)
+ #endif
+ }
+ #endif
+
+ public func register() {
+ // swiftlint:disable:next conditional_returns_on_newline
+ guard let url = url else { return }
+ CTFontManagerRegisterFontsForURL(url as CFURL, .process, nil)
+ }
+
+ fileprivate var url: URL? {
+ // swiftlint:disable:next implicit_return
+ return Bundle.module.url(forResource: path, withExtension: nil)
+ }
+}
+
+public extension BookSeriesProdFontConvertible.Font {
+ convenience init?(font: BookSeriesProdFontConvertible, size: CGFloat) {
+ #if os(iOS) || os(tvOS) || os(watchOS) || os(visionOS)
+ if !UIFont.fontNames(forFamilyName: font.family).contains(font.name) {
+ font.register()
+ }
+ #elseif os(macOS)
+ if let url = font.url, CTFontManagerGetScopeForURL(url as CFURL) == .none {
+ font.register()
+ }
+ #endif
+
+ self.init(name: font.name, size: size)
+ }
+}
+// swiftformat:enable all
+// swiftlint:enable all
diff --git a/Projects/App/Derived/Sources/TuistFonts+BookSeriesStage.swift b/Projects/App/Derived/Sources/TuistFonts+BookSeriesStage.swift
new file mode 100644
index 0000000..63801c6
--- /dev/null
+++ b/Projects/App/Derived/Sources/TuistFonts+BookSeriesStage.swift
@@ -0,0 +1,104 @@
+// swiftlint:disable:this file_name
+// swiftlint:disable all
+// swift-format-ignore-file
+// swiftformat:disable all
+// Generated using tuist — https://github.com/tuist/tuist
+
+#if os(macOS)
+ import AppKit.NSFont
+#elseif os(iOS) || os(tvOS) || os(watchOS) || os(visionOS)
+ import UIKit.UIFont
+#endif
+#if canImport(SwiftUI)
+ import SwiftUI
+#endif
+
+// swiftlint:disable superfluous_disable_command
+// swiftlint:disable file_length
+
+// MARK: - Fonts
+
+// swiftlint:disable identifier_name line_length type_body_length
+public enum BookSeriesStageFontFamily: Sendable {
+ public enum PretendardVariable: Sendable {
+ public static let black = BookSeriesStageFontConvertible(name: "PretendardVariable-Black", family: "Pretendard Variable", path: "PretendardVariable.ttf")
+ public static let bold = BookSeriesStageFontConvertible(name: "PretendardVariable-Bold", family: "Pretendard Variable", path: "PretendardVariable.ttf")
+ public static let extraBold = BookSeriesStageFontConvertible(name: "PretendardVariable-ExtraBold", family: "Pretendard Variable", path: "PretendardVariable.ttf")
+ public static let extraLight = BookSeriesStageFontConvertible(name: "PretendardVariable-ExtraLight", family: "Pretendard Variable", path: "PretendardVariable.ttf")
+ public static let light = BookSeriesStageFontConvertible(name: "PretendardVariable-Light", family: "Pretendard Variable", path: "PretendardVariable.ttf")
+ public static let medium = BookSeriesStageFontConvertible(name: "PretendardVariable-Medium", family: "Pretendard Variable", path: "PretendardVariable.ttf")
+ public static let regular = BookSeriesStageFontConvertible(name: "PretendardVariable-Regular", family: "Pretendard Variable", path: "PretendardVariable.ttf")
+ public static let semiBold = BookSeriesStageFontConvertible(name: "PretendardVariable-SemiBold", family: "Pretendard Variable", path: "PretendardVariable.ttf")
+ public static let thin = BookSeriesStageFontConvertible(name: "PretendardVariable-Thin", family: "Pretendard Variable", path: "PretendardVariable.ttf")
+ public static let all: [BookSeriesStageFontConvertible] = [black, bold, extraBold, extraLight, light, medium, regular, semiBold, thin]
+ }
+ public static let allCustomFonts: [BookSeriesStageFontConvertible] = [PretendardVariable.all].flatMap { $0 }
+ public static func registerAllCustomFonts() {
+ allCustomFonts.forEach { $0.register() }
+ }
+}
+// swiftlint:enable identifier_name line_length type_body_length
+
+// MARK: - Implementation Details
+
+public struct BookSeriesStageFontConvertible: Sendable {
+ public let name: String
+ public let family: String
+ public let path: String
+
+ #if os(macOS)
+ public typealias Font = NSFont
+ #elseif os(iOS) || os(tvOS) || os(watchOS) || os(visionOS)
+ public typealias Font = UIFont
+ #endif
+
+ public func font(size: CGFloat) -> Font {
+ guard let font = Font(font: self, size: size) else {
+ fatalError("Unable to initialize font '\(name)' (\(family))")
+ }
+ return font
+ }
+
+ #if canImport(SwiftUI)
+ @available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, *)
+ public func swiftUIFont(size: CGFloat) -> SwiftUI.Font {
+ guard let font = Font(font: self, size: size) else {
+ fatalError("Unable to initialize font '\(name)' (\(family))")
+ }
+ #if os(macOS)
+ return SwiftUI.Font.custom(font.fontName, size: font.pointSize)
+ #elseif os(iOS) || os(tvOS) || os(watchOS) || os(visionOS)
+ return SwiftUI.Font(font)
+ #endif
+ }
+ #endif
+
+ public func register() {
+ // swiftlint:disable:next conditional_returns_on_newline
+ guard let url = url else { return }
+ CTFontManagerRegisterFontsForURL(url as CFURL, .process, nil)
+ }
+
+ fileprivate var url: URL? {
+ // swiftlint:disable:next implicit_return
+ return Bundle.module.url(forResource: path, withExtension: nil)
+ }
+}
+
+public extension BookSeriesStageFontConvertible.Font {
+ convenience init?(font: BookSeriesStageFontConvertible, size: CGFloat) {
+ #if os(iOS) || os(tvOS) || os(watchOS) || os(visionOS)
+ if !UIFont.fontNames(forFamilyName: font.family).contains(font.name) {
+ font.register()
+ }
+ #elseif os(macOS)
+ if let url = font.url, CTFontManagerGetScopeForURL(url as CFURL) == .none {
+ font.register()
+ }
+ #endif
+
+ self.init(name: font.name, size: size)
+ }
+}
+// swiftformat:enable all
+// swiftlint:enable all
diff --git a/Projects/App/Project.swift b/Projects/App/Project.swift
new file mode 100644
index 0000000..7ad9716
--- /dev/null
+++ b/Projects/App/Project.swift
@@ -0,0 +1,22 @@
+import ProjectDescription
+import DependencyPlugin
+import ProjectTemplatePlugin
+import DependencyPackagePlugin
+
+let project = Project.makeAppModule(
+ name: Project.Environment.appName,
+ bundleId: .mainBundleID(),
+ product: .app,
+ settings: .appMainSetting,
+ scripts: [],
+ dependencies: [
+ .Presentation(implements: .Presentation)
+ ],
+ sources: ["Sources/**"],
+ resources: ["Resources/**"],
+ infoPlist: .appInfoPlist,
+ schemes: [
+ Scheme.makeTestPlanScheme(target: .debug, name: Project.Environment.appName)
+ ]
+)
+
diff --git a/Projects/App/Resources/Assets.xcassets/AccentColor.colorset/Contents.json b/Projects/App/Resources/Assets.xcassets/AccentColor.colorset/Contents.json
new file mode 100644
index 0000000..eb87897
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/AccentColor.colorset/Contents.json
@@ -0,0 +1,11 @@
+{
+ "colors" : [
+ {
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 0000000..2305880
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,35 @@
+{
+ "images" : [
+ {
+ "idiom" : "universal",
+ "platform" : "ios",
+ "size" : "1024x1024"
+ },
+ {
+ "appearances" : [
+ {
+ "appearance" : "luminosity",
+ "value" : "dark"
+ }
+ ],
+ "idiom" : "universal",
+ "platform" : "ios",
+ "size" : "1024x1024"
+ },
+ {
+ "appearances" : [
+ {
+ "appearance" : "luminosity",
+ "value" : "tinted"
+ }
+ ],
+ "idiom" : "universal",
+ "platform" : "ios",
+ "size" : "1024x1024"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Projects/App/Resources/Assets.xcassets/Contents.json b/Projects/App/Resources/Assets.xcassets/Contents.json
new file mode 100644
index 0000000..7f73912
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Contents.json
@@ -0,0 +1,9 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "compression-type" : "automatic"
+ }
+}
diff --git a/Projects/App/Resources/FontAsset/PretendardVariable.ttf b/Projects/App/Resources/FontAsset/PretendardVariable.ttf
new file mode 100644
index 0000000..19063ad
Binary files /dev/null and b/Projects/App/Resources/FontAsset/PretendardVariable.ttf differ
diff --git a/Projects/App/Resources/Preview Content/Preview Assets.xcassets/Contents.json b/Projects/App/Resources/Preview Content/Preview Assets.xcassets/Contents.json
new file mode 100644
index 0000000..73c0059
--- /dev/null
+++ b/Projects/App/Resources/Preview Content/Preview Assets.xcassets/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Projects/App/Sources/Application/AppDelegate.swift b/Projects/App/Sources/Application/AppDelegate.swift
new file mode 100644
index 0000000..de18306
--- /dev/null
+++ b/Projects/App/Sources/Application/AppDelegate.swift
@@ -0,0 +1,53 @@
+//
+// AppDelegate.swift
+// BookSeries
+//
+// Created by Wonji Suh on 9/5/25.
+//
+
+import UIKit
+import DiContainer
+
+@main
+class AppDelegate: UIResponder, UIApplicationDelegate {
+
+
+
+ func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
+
+
+ DependencyContainer.bootstrapInTask { _ in
+ await AppDIContainer.shared.registerDefaultDependencies()
+ }
+
+ UnifiedDI.enablePerformanceOptimization()
+
+ Task {
+ let stats = UnifiedDI.getPerformanceStats()
+ print(stats)
+
+ let test: () = UnifiedDI.enablePerformanceOptimization()
+ print(test)
+ }
+
+ return true
+ }
+
+ // MARK: UISceneSession Lifecycle
+
+ func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
+ // Called when a new scene session is being created.
+ // Use this method to select a configuration to create the new scene with.
+ return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
+ }
+
+
+ private func registerDependencies() {
+ Task {
+ await AppDIContainer.shared.registerDefaultDependencies()
+ }
+ }
+
+
+}
+
diff --git a/Projects/App/Sources/Application/MultiModuleTemplateApp.swift b/Projects/App/Sources/Application/MultiModuleTemplateApp.swift
new file mode 100644
index 0000000..5984510
--- /dev/null
+++ b/Projects/App/Sources/Application/MultiModuleTemplateApp.swift
@@ -0,0 +1,10 @@
+import SwiftUI
+
+//@main
+//struct MultiModuleTemplateApp: App {
+// var body: some Scene {
+// WindowGroup {
+// ContentView()
+// }
+// }
+//}
diff --git a/Projects/App/Sources/Application/SceneDelegate.swift b/Projects/App/Sources/Application/SceneDelegate.swift
new file mode 100644
index 0000000..2695b75
--- /dev/null
+++ b/Projects/App/Sources/Application/SceneDelegate.swift
@@ -0,0 +1,33 @@
+//
+// SceneDelegate.swift
+// BookSeries
+//
+// Created by Wonji Suh on 9/5/25.
+//
+
+import UIKit
+import Presentation
+import ComposableArchitecture
+
+class SceneDelegate: UIResponder, UIWindowSceneDelegate {
+
+ var window: UIWindow?
+
+ func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
+ guard let windowScene = scene as? UIWindowScene else { return }
+ let window = UIWindow(windowScene: windowScene)
+ let appStore = Store(initialState: AppReducer.State()) {
+ AppReducer()
+ ._printChanges()
+ }
+
+ let rootVC = AppRootViewController(store: appStore)
+
+ window.rootViewController = rootVC
+ window.makeKeyAndVisible()
+ self.window = window
+
+ }
+}
+
+
diff --git a/Projects/App/Sources/ContentView.swift b/Projects/App/Sources/ContentView.swift
new file mode 100644
index 0000000..6b77545
--- /dev/null
+++ b/Projects/App/Sources/ContentView.swift
@@ -0,0 +1,35 @@
+import SwiftUI
+import Model
+import Core
+import Presentation
+
+public struct ContentView: View {
+ public init() {}
+
+ public var body: some View {
+ VStack {
+ Text("Hello, World!")
+ .padding()
+ }
+ .task {
+// do {
+// let dto = try await JSONManager.parseFromFile(BookDTO.self)
+// let books: [Book] = dto.data.toDomain()
+// print("📚 App 번들에서 로드 성공: \(books) 권")
+// } catch {
+// print("❌ 책 로드 실패: \(error)")
+// }
+ }
+
+ }
+}
+
+
+#Preview {
+ ContentView()
+}
+
+
+
+
+
diff --git a/Projects/App/Sources/DI/Extension+AppDIContainer.swift b/Projects/App/Sources/DI/Extension+AppDIContainer.swift
new file mode 100644
index 0000000..b3f7c7f
--- /dev/null
+++ b/Projects/App/Sources/DI/Extension+AppDIContainer.swift
@@ -0,0 +1,22 @@
+//
+// Extension+AppDIContainer.swift
+// BookSeries
+//
+// Created by Wonji Suh on 9/8/25.
+//
+
+import Foundation
+import DiContainer
+
+extension AppDIContainer {
+ func registerDefaultDependencies() async {
+ await registerDependencies { container in
+ // Repository 먼저 등록
+ let factory = ModuleFactoryManager()
+
+ await factory.registerAll(to: container)
+
+ }
+ }
+}
+
diff --git a/Projects/App/Sources/DI/Extension+RepositoryModuleFactory.swift b/Projects/App/Sources/DI/Extension+RepositoryModuleFactory.swift
new file mode 100644
index 0000000..a923d4e
--- /dev/null
+++ b/Projects/App/Sources/DI/Extension+RepositoryModuleFactory.swift
@@ -0,0 +1,25 @@
+//
+// Extension+RepositoryModuleFactory.swift
+// BookSeries
+//
+// Created by Wonji Suh on 9/8/25.
+//
+
+import Foundation
+
+import Core
+import DiContainer
+import Repository
+
+extension RepositoryModuleFactory {
+ public mutating func registerDefaultDefinitions() {
+ let registerModuleCopy = registerModule
+
+ definitions = {
+ return [
+ registerModuleCopy.bookListRepositoryImplModule,
+ registerModuleCopy.summaryPersistenceRepositoryImplModule
+ ]
+ }()
+ }
+}
diff --git a/Projects/App/Sources/DI/Extension+UseCaseModuleFactory.swift b/Projects/App/Sources/DI/Extension+UseCaseModuleFactory.swift
new file mode 100644
index 0000000..51df803
--- /dev/null
+++ b/Projects/App/Sources/DI/Extension+UseCaseModuleFactory.swift
@@ -0,0 +1,52 @@
+//
+// Extension+UseCaseModuleFactory.swift
+// BookSeries
+//
+// Created by Wonji Suh on 9/8/25.
+//
+
+import Foundation
+
+import Core
+import DiContainer
+
+extension UseCaseModuleFactory {
+ public mutating func registerDefaultDefinitions() {
+ let register = registerModule
+
+ definitions = {
+ return [
+ register.bookListUseCaseImplModule,
+ register.summaryPersistenceUseCaseImplModule,
+ ]
+ }()
+ }
+}
+
+extension ScopeModuleFactory {
+ public mutating func registerDefaultDefinitions() {
+ let register = registerModule
+
+ definitions = {
+ return [
+ // UseCase만 등록 (Repository는 RepositoryModuleFactory에서 등록)
+ register.bookListUseCaseImplModule,
+ register.summaryPersistenceUseCaseImplModule,
+ ]
+ }()
+ }
+}
+
+
+extension ModuleFactoryManager {
+ mutating func registerDefaultDependencies() {
+ // Repository
+ repositoryFactory.registerDefaultDefinitions()
+
+
+ useCaseFactory.registerDefaultDefinitions()
+
+ scopeFactory.registerDefaultDefinitions()
+
+ }
+ }
diff --git a/Projects/App/Sources/Reducer/AppReducer.swift b/Projects/App/Sources/Reducer/AppReducer.swift
new file mode 100644
index 0000000..f96cd92
--- /dev/null
+++ b/Projects/App/Sources/Reducer/AppReducer.swift
@@ -0,0 +1,56 @@
+//
+// AppReducer.swift
+// BookSeries
+//
+// Created by Wonji Suh on 9/8/25.
+//
+
+import ComposableArchitecture
+import Presentation
+
+// 2) AppReducer
+@Reducer
+struct AppReducer {
+
+ @ObservableState
+ @CasePathable
+ enum State: Equatable {
+ case bookCoordinator(BookListCoordinator.State)
+
+ init() {
+ self = .bookCoordinator(.init())
+ }
+ }
+
+ enum Action: ViewAction {
+ case view(View)
+ }
+
+ @CasePathable
+ enum View {
+ case bookCoordinator(BookListCoordinator.Action)
+ }
+
+ var body: some ReducerOf {
+ Reduce { state, action in
+ switch action {
+ case let .view(viewAction):
+ return handleViewAction(&state, action: viewAction)
+ }
+ }
+ .ifCaseLet(\.bookCoordinator, action: \.view.bookCoordinator) {
+ BookListCoordinator()
+ }
+ }
+
+ func handleViewAction(
+ _ state: inout State,
+ action: View
+ ) -> Effect {
+ switch action {
+
+ default:
+ return .none
+ }
+ }
+}
diff --git a/Projects/App/Sources/View/AppRootViewController.swift b/Projects/App/Sources/View/AppRootViewController.swift
new file mode 100644
index 0000000..6afead9
--- /dev/null
+++ b/Projects/App/Sources/View/AppRootViewController.swift
@@ -0,0 +1,82 @@
+//
+// AppRootViewController.swift
+// BookSeries
+//
+// Created by Wonji Suh on 9/8/25.
+//
+
+import UIKit
+import Combine
+
+import Shared
+import Presentation
+
+import ComposableArchitecture
+
+@MainActor
+ final class AppRootViewController: UIViewController {
+ private let store: StoreOf
+ private let viewStore: ViewStoreOf
+ private var cancellables: Set = []
+ private var currentChild: UIViewController?
+
+ init(store: StoreOf) {
+ self.store = store
+ self.viewStore = ViewStore(store, observe: { $0 })
+ super.init(nibName: nil, bundle: nil)
+ }
+ required init?(coder: NSCoder) { fatalError() }
+
+ override func viewDidLoad() {
+ super.viewDidLoad()
+ view.backgroundColor = .systemBackground
+
+ // 최초 반영 & 구독
+ updateChild(for: viewStore.state)
+ viewStore.publisher
+ .removeDuplicates()
+ .sink { [weak self] state in self?.updateChild(for: state) }
+ .store(in: &cancellables)
+ }
+
+ private func updateChild(for state: AppReducer.State) {
+ if let current = currentChild { remove(child: current) }
+ let next = makeViewController(for: state)
+ add(child: next)
+ currentChild = next
+ }
+
+ private func makeViewController(for state: AppReducer.State) -> UIViewController {
+ switch state {
+ case .bookCoordinator:
+ if let scoped = store.scope(
+ state: \.bookCoordinator,
+ action: \.view.bookCoordinator
+ ) {
+ return BookListCoordinatorViewController(appStore: scoped)
+ } else {
+ return FallbackViewController(title: "BookCoordinator store not found")
+ }
+ }
+ }
+
+ private func add(child: UIViewController) {
+ addChild(child)
+ child.view.translatesAutoresizingMaskIntoConstraints = false
+ view.addSubview(child.view)
+ NSLayoutConstraint.activate([
+ child.view.topAnchor.constraint(equalTo: view.topAnchor),
+ child.view.bottomAnchor.constraint(equalTo: view.bottomAnchor),
+ child.view.leadingAnchor.constraint(equalTo: view.leadingAnchor),
+ child.view.trailingAnchor.constraint(equalTo: view.trailingAnchor),
+ ])
+ child.didMove(toParent: self)
+ }
+
+ private func remove(child: UIViewController) {
+ child.willMove(toParent: nil)
+ child.view.removeFromSuperview()
+ child.removeFromParent()
+ }
+}
+
diff --git a/Projects/Core/Core/Core.xcodeproj/project.pbxproj b/Projects/Core/Core/Core.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..e44fe66
--- /dev/null
+++ b/Projects/Core/Core/Core.xcodeproj/project.pbxproj
@@ -0,0 +1,1469 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 55;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 057E6747738EDE1A9D804300 /* CoreExport.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEB3C68C2ED81026636D7F75 /* CoreExport.swift */; };
+ 0741B662DD021EE9DC285449 /* swift-composable-architecture_ComposableArchitecture.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = D965F19D7CDBE741D5E4BC67 /* swift-composable-architecture_ComposableArchitecture.bundle */; };
+ 09AE17653F5CC350E8D3C66C /* IssueReportingPackageSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9297D43D2BEFCC0B514EFC04 /* IssueReportingPackageSupport.framework */; };
+ 0E3385516C1ACCD13A9BA32F /* Service_Service.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 3D9502ABE8C8662DEA57F88E /* Service_Service.bundle */; };
+ 11D6FDD5BA3A2B4D063FC74A /* UseCase.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = DE81E51C38BC7DF49AD255BD /* UseCase.framework */; };
+ 16AE2C1501853432A90AB98B /* Network.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = FD8B6B85F2D6B69FE70C1FBE /* Network.framework */; };
+ 17AFA2F78FF6036B0ED5AE73 /* Sharing1.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 141E57E374A54F7AB6E29DC2 /* Sharing1.framework */; };
+ 1D9F665899C0A1842451814E /* Clocks.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE351E328C333744FEAAACEF /* Clocks.framework */; };
+ 1FA462C1CC95CEB52ADD430F /* UseCase.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = DE81E51C38BC7DF49AD255BD /* UseCase.framework */; };
+ 23403FE6A7A808E7C7370F1E /* ComposableArchitecture.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB18C1565FE3EAC96777EC0F /* ComposableArchitecture.framework */; };
+ 295AF71D3FDBB3AB6A22E218 /* UIKitNavigationShim.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84F99CA60AD1F77541E67E93 /* UIKitNavigationShim.framework */; };
+ 29676669F0AB5BBDC31DFDAC /* Model.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3F9C516A0389461EC9B5D46E /* Model.framework */; };
+ 29941B44EBF2A79BFE016C99 /* UseCase.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE81E51C38BC7DF49AD255BD /* UseCase.framework */; };
+ 3DE1D52265CF97679296909C /* PerceptionCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70750465C5300D484ABA9F60 /* PerceptionCore.framework */; };
+ 41C69034BA561E22EA554F19 /* Utill.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BCC113B61DA21855D30259B1 /* Utill.framework */; };
+ 426E4CA766D090E97D310A06 /* OSLog.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F52A0D92C684C59849570BB /* OSLog.framework */; };
+ 44D3AC095770D7D63DC175F9 /* Test.swift in Resources */ = {isa = PBXBuildFile; fileRef = 8E427963EEC5B2C6424367BB /* Test.swift */; };
+ 4D82B7A696124B1C7EC28857 /* LogMacro.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABF88C39763A84B856476973 /* LogMacro.framework */; };
+ 4E5E7CA23B2FDDE8CB94BB9E /* DiContainer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7EBE4DE9FD75B5368768D93D /* DiContainer.framework */; };
+ 4EFBB932B65FF472590F1C62 /* Network.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = FD8B6B85F2D6B69FE70C1FBE /* Network.framework */; };
+ 5BEF1F499711C03A721FEFB4 /* OrderedCollections.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FC6EA3166EAE3B4E5C3A3655 /* OrderedCollections.framework */; };
+ 5CB29D72D1FE671A3BFE6D7B /* swift-composable-architecture_ComposableArchitecture.bundle in Resources */ = {isa = PBXBuildFile; fileRef = D965F19D7CDBE741D5E4BC67 /* swift-composable-architecture_ComposableArchitecture.bundle */; };
+ 5ECEAC3679704176AEDED160 /* UseCase.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = DE81E51C38BC7DF49AD255BD /* UseCase.framework */; };
+ 61D8EFBE44FD4F7F81A1EB67 /* DomainInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B89ECB181A314C23A60BB911 /* DomainInterface.framework */; };
+ 62746F1C6A885411CC423F9A /* ConcurrencyExtras.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 10C2E0E9FA89653EBA928FFB /* ConcurrencyExtras.framework */; };
+ 66EEEE53E27FAC870E87645E /* UIKitNavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AEC4F1585F46781177064EC7 /* UIKitNavigation.framework */; };
+ 67140FAA3A2E672814649BC9 /* TuistBundle+CoreTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61E3BEA87B5E736B9D20B896 /* TuistBundle+CoreTests.swift */; };
+ 6B3C0EE6CC4023996976A966 /* Dependencies.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB917DE30C69F723BDF65353 /* Dependencies.framework */; };
+ 6B6DDEC8FEBDCA250F66F021 /* Perception.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F8CC6237F3D4AE8F77CAE48 /* Perception.framework */; };
+ 6BCBCE407A28F91FFB46BF99 /* Service.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3ED045ECCC0A0126F7A4BC13 /* Service.framework */; };
+ 6CCB3859BF7263A4050DFE1B /* UseCase.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = DE81E51C38BC7DF49AD255BD /* UseCase.framework */; };
+ 73B227E88875DC723B874A3B /* CasePaths.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 37D454E3D3DEA3106FC5B1D9 /* CasePaths.framework */; };
+ 741A5006FF2D931F1EFAC7E4 /* swift-sharing_Sharing.bundle in Resources */ = {isa = PBXBuildFile; fileRef = B8D5448233F039D5A9089DCB /* swift-sharing_Sharing.bundle */; };
+ 75E08F02FD27FCDFBD2E5A6D /* Service_Service.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 3D9502ABE8C8662DEA57F88E /* Service_Service.bundle */; };
+ 8C3236EDFEFCCD376C0BA993 /* IdentifiedCollections.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DF63D412AA4B009EF483F4BE /* IdentifiedCollections.framework */; };
+ 90F9749BFCF03B4AB847C6B1 /* Test.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E427963EEC5B2C6424367BB /* Test.swift */; };
+ 9444B626F45CA5BE86C46B75 /* Network.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = FD8B6B85F2D6B69FE70C1FBE /* Network.framework */; };
+ 94B984FDB4595C62D67F76D2 /* SwiftUINavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B3F3F8C53FB3A64C8A67E329 /* SwiftUINavigation.framework */; };
+ 979007C1272DFEBD6DBD755F /* Sharing.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4E7A1228CBFFBBC21B6F7108 /* Sharing.framework */; };
+ A7B8C8A10E30EC8A4499A4D7 /* CoreExport.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEB3C68C2ED81026636D7F75 /* CoreExport.swift */; };
+ ACD998D5ED2BDF9CEE159409 /* swift-sharing_Sharing.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = B8D5448233F039D5A9089DCB /* swift-sharing_Sharing.bundle */; };
+ BB166AEB80170DC07A59728A /* Sharing2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2690CFF7D8527FFE80ABE74D /* Sharing2.framework */; };
+ BC8595A1E286E2F5B6EF15C9 /* Core.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B0FA7F85F3573FB522F9478 /* Core.framework */; };
+ BDE61C949D6FB7DC56123B78 /* Network.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FD8B6B85F2D6B69FE70C1FBE /* Network.framework */; };
+ BE4475BE52AA2F4D466CB475 /* CustomDump.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B6739389F41AD55401939AA3 /* CustomDump.framework */; };
+ C4C57DB2F8BD70865359C16C /* InternalCollectionsUtilities.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 12A713B47F2AAA89018EAC9F /* InternalCollectionsUtilities.framework */; };
+ C92658201E234DA6A5F288A7 /* Repository.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A6B638D8DB02624DD45D49E2 /* Repository.framework */; };
+ CE4013A0A1D971EF11B2DE7E /* SwiftNavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 091619AA614A7C59B502D9D5 /* SwiftNavigation.framework */; };
+ CFD8561A3158F0E8D1F37E31 /* CoreExport.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEB3C68C2ED81026636D7F75 /* CoreExport.swift */; };
+ D74AAACA27391970511F0343 /* Network.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = FD8B6B85F2D6B69FE70C1FBE /* Network.framework */; };
+ DF9B3AC64F495F0DD36AA80E /* CombineSchedulers.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED856AD323CCEEC229B2C7F9 /* CombineSchedulers.framework */; };
+ E12AE583572FB769F7ADA3CF /* CasePathsCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3FFF727FDBE22876C8AC9A3D /* CasePathsCore.framework */; };
+ E3D39C532F29323A5E4C06CE /* XCTestDynamicOverlay.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B0E1BE020E6058D897035F31 /* XCTestDynamicOverlay.framework */; };
+ EC65EC98E0FEC2E03E7DADFC /* DependenciesMacros.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C175D576FC2CE0FF66645233 /* DependenciesMacros.framework */; };
+ F39BAB2993A28AD7ACBD628E /* IssueReporting.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03E9AE72F3054B4A5B3FA955 /* IssueReporting.framework */; };
+ F4B05E023463D745BA025CD8 /* CoreExport.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEB3C68C2ED81026636D7F75 /* CoreExport.swift */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+ 3D327B0E74A853E83EF9F7FE /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 83ADD9484DDC11E75E9F182F /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = B90FCF66245CD7327BEE2CBF;
+ remoteInfo = Core;
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ 1E9A2FDAECA90F5696951540 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 2A34CD9447D0001C8C98AEF5 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 2B67707ED35F2DA05F9FFEC7 /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ 4EFBB932B65FF472590F1C62 /* Network.framework in Dependencies */,
+ 1FA462C1CC95CEB52ADD430F /* UseCase.framework in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ 2C70A176FC2F8BBE09A41076 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 787952B97F5276648B9F3258 /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ 0E3385516C1ACCD13A9BA32F /* Service_Service.bundle in Dependencies */,
+ 0741B662DD021EE9DC285449 /* swift-composable-architecture_ComposableArchitecture.bundle in Dependencies */,
+ ACD998D5ED2BDF9CEE159409 /* swift-sharing_Sharing.bundle in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ BDF7A6E43B5BED04E4D93612 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ CA84D05AFEA6D9633EB4BE48 /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ 9444B626F45CA5BE86C46B75 /* Network.framework in Dependencies */,
+ 11D6FDD5BA3A2B4D063FC74A /* UseCase.framework in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ E0CF0C502C89B79E599E0E1D /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ D74AAACA27391970511F0343 /* Network.framework in Dependencies */,
+ 5ECEAC3679704176AEDED160 /* UseCase.framework in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ E66347834B9000A283006EA2 /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ 16AE2C1501853432A90AB98B /* Network.framework in Dependencies */,
+ 6CCB3859BF7263A4050DFE1B /* UseCase.framework in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ F09523A53F8DCAD5A57EF624 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ 03E9AE72F3054B4A5B3FA955 /* IssueReporting.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = IssueReporting.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 091619AA614A7C59B502D9D5 /* SwiftNavigation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftNavigation.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 10C2E0E9FA89653EBA928FFB /* ConcurrencyExtras.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ConcurrencyExtras.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 12A713B47F2AAA89018EAC9F /* InternalCollectionsUtilities.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = InternalCollectionsUtilities.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 141E57E374A54F7AB6E29DC2 /* Sharing1.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Sharing1.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 1F8CC6237F3D4AE8F77CAE48 /* Perception.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Perception.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 22E60B05721CBE85B6C02D7B /* Core-Stage-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Core-Stage-Info.plist"; sourceTree = ""; };
+ 2690CFF7D8527FFE80ABE74D /* Sharing2.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Sharing2.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 26BDD2D3E7FED8CDE9A52F46 /* Core-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Core-Info.plist"; sourceTree = ""; };
+ 2B0FA7F85F3573FB522F9478 /* Core.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Core.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 37D454E3D3DEA3106FC5B1D9 /* CasePaths.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CasePaths.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 3D9502ABE8C8662DEA57F88E /* Service_Service.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Service_Service.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
+ 3E313EC3E53C9ED17660FD3F /* CoreTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = CoreTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+ 3ED045ECCC0A0126F7A4BC13 /* Service.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Service.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 3F9C516A0389461EC9B5D46E /* Model.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Model.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 3FFF727FDBE22876C8AC9A3D /* CasePathsCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CasePathsCore.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 4E7A1228CBFFBBC21B6F7108 /* Sharing.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Sharing.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 4F52A0D92C684C59849570BB /* OSLog.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OSLog.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/OSLog.framework; sourceTree = DEVELOPER_DIR; };
+ 5A90C6A79C8439A9A5D64BA3 /* Core-Debug-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Core-Debug-Info.plist"; sourceTree = ""; };
+ 61E3BEA87B5E736B9D20B896 /* TuistBundle+CoreTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistBundle+CoreTests.swift"; sourceTree = ""; };
+ 70750465C5300D484ABA9F60 /* PerceptionCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PerceptionCore.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 7EBE4DE9FD75B5368768D93D /* DiContainer.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DiContainer.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 84F99CA60AD1F77541E67E93 /* UIKitNavigationShim.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = UIKitNavigationShim.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 8A9DCFA69D5780FF990FEFE1 /* Core_Debug.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Core_Debug.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 8E427963EEC5B2C6424367BB /* Test.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Test.swift; sourceTree = ""; };
+ 9297D43D2BEFCC0B514EFC04 /* IssueReportingPackageSupport.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = IssueReportingPackageSupport.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ A6B638D8DB02624DD45D49E2 /* Repository.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Repository.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ AB917DE30C69F723BDF65353 /* Dependencies.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Dependencies.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ ABF88C39763A84B856476973 /* LogMacro.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = LogMacro.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ AEC4F1585F46781177064EC7 /* UIKitNavigation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = UIKitNavigation.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ B0E1BE020E6058D897035F31 /* XCTestDynamicOverlay.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = XCTestDynamicOverlay.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ B32D5F89E693F7E3F2558610 /* Core-Prod-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Core-Prod-Info.plist"; sourceTree = ""; };
+ B3F3F8C53FB3A64C8A67E329 /* SwiftUINavigation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftUINavigation.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ B6739389F41AD55401939AA3 /* CustomDump.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CustomDump.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ B89ECB181A314C23A60BB911 /* DomainInterface.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DomainInterface.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ B8D5448233F039D5A9089DCB /* swift-sharing_Sharing.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "swift-sharing_Sharing.bundle"; sourceTree = BUILT_PRODUCTS_DIR; };
+ BB18C1565FE3EAC96777EC0F /* ComposableArchitecture.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ComposableArchitecture.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ BCC113B61DA21855D30259B1 /* Utill.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Utill.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ C175D576FC2CE0FF66645233 /* DependenciesMacros.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DependenciesMacros.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ C3B9CE641601ED6073ABDA8E /* Core_Prod.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Core_Prod.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ CA2D4CD69407DE3A95F1B5E7 /* Core_Stage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Core_Stage.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ D81A5985FBB055CC8CA4FAB8 /* CoreTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "CoreTests-Info.plist"; sourceTree = ""; };
+ D965F19D7CDBE741D5E4BC67 /* swift-composable-architecture_ComposableArchitecture.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "swift-composable-architecture_ComposableArchitecture.bundle"; sourceTree = BUILT_PRODUCTS_DIR; };
+ DE351E328C333744FEAAACEF /* Clocks.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Clocks.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ DE81E51C38BC7DF49AD255BD /* UseCase.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = UseCase.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ DEB3C68C2ED81026636D7F75 /* CoreExport.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoreExport.swift; sourceTree = ""; };
+ DF63D412AA4B009EF483F4BE /* IdentifiedCollections.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = IdentifiedCollections.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ ED856AD323CCEEC229B2C7F9 /* CombineSchedulers.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CombineSchedulers.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ FC6EA3166EAE3B4E5C3A3655 /* OrderedCollections.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = OrderedCollections.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ FD8B6B85F2D6B69FE70C1FBE /* Network.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Network.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 53BD653179EC7C334683F5ED /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 6F0BEFA54B77D8AD5CC51C4E /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ BF69E59B74296DB134C1F9E4 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ EAFB5A562EB01EC63021A153 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ F678B080F62A8C8E01BCF980 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 426E4CA766D090E97D310A06 /* OSLog.framework in Frameworks */,
+ 73B227E88875DC723B874A3B /* CasePaths.framework in Frameworks */,
+ E12AE583572FB769F7ADA3CF /* CasePathsCore.framework in Frameworks */,
+ 1D9F665899C0A1842451814E /* Clocks.framework in Frameworks */,
+ DF9B3AC64F495F0DD36AA80E /* CombineSchedulers.framework in Frameworks */,
+ 23403FE6A7A808E7C7370F1E /* ComposableArchitecture.framework in Frameworks */,
+ 62746F1C6A885411CC423F9A /* ConcurrencyExtras.framework in Frameworks */,
+ BC8595A1E286E2F5B6EF15C9 /* Core.framework in Frameworks */,
+ BE4475BE52AA2F4D466CB475 /* CustomDump.framework in Frameworks */,
+ 6B3C0EE6CC4023996976A966 /* Dependencies.framework in Frameworks */,
+ EC65EC98E0FEC2E03E7DADFC /* DependenciesMacros.framework in Frameworks */,
+ 4E5E7CA23B2FDDE8CB94BB9E /* DiContainer.framework in Frameworks */,
+ 61D8EFBE44FD4F7F81A1EB67 /* DomainInterface.framework in Frameworks */,
+ 8C3236EDFEFCCD376C0BA993 /* IdentifiedCollections.framework in Frameworks */,
+ C4C57DB2F8BD70865359C16C /* InternalCollectionsUtilities.framework in Frameworks */,
+ F39BAB2993A28AD7ACBD628E /* IssueReporting.framework in Frameworks */,
+ 09AE17653F5CC350E8D3C66C /* IssueReportingPackageSupport.framework in Frameworks */,
+ 4D82B7A696124B1C7EC28857 /* LogMacro.framework in Frameworks */,
+ 29676669F0AB5BBDC31DFDAC /* Model.framework in Frameworks */,
+ BDE61C949D6FB7DC56123B78 /* Network.framework in Frameworks */,
+ 5BEF1F499711C03A721FEFB4 /* OrderedCollections.framework in Frameworks */,
+ 6B6DDEC8FEBDCA250F66F021 /* Perception.framework in Frameworks */,
+ 3DE1D52265CF97679296909C /* PerceptionCore.framework in Frameworks */,
+ C92658201E234DA6A5F288A7 /* Repository.framework in Frameworks */,
+ 6BCBCE407A28F91FFB46BF99 /* Service.framework in Frameworks */,
+ 979007C1272DFEBD6DBD755F /* Sharing.framework in Frameworks */,
+ 17AFA2F78FF6036B0ED5AE73 /* Sharing1.framework in Frameworks */,
+ BB166AEB80170DC07A59728A /* Sharing2.framework in Frameworks */,
+ CE4013A0A1D971EF11B2DE7E /* SwiftNavigation.framework in Frameworks */,
+ 94B984FDB4595C62D67F76D2 /* SwiftUINavigation.framework in Frameworks */,
+ 66EEEE53E27FAC870E87645E /* UIKitNavigation.framework in Frameworks */,
+ 295AF71D3FDBB3AB6A22E218 /* UIKitNavigationShim.framework in Frameworks */,
+ 29941B44EBF2A79BFE016C99 /* UseCase.framework in Frameworks */,
+ 41C69034BA561E22EA554F19 /* Utill.framework in Frameworks */,
+ E3D39C532F29323A5E4C06CE /* XCTestDynamicOverlay.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 005AF892A3A3BE740783E3C3 /* Exported */ = {
+ isa = PBXGroup;
+ children = (
+ DEB3C68C2ED81026636D7F75 /* CoreExport.swift */,
+ );
+ path = Exported;
+ sourceTree = "";
+ };
+ 0AA7A05CA7B8CE68A00A0D5F /* Sources */ = {
+ isa = PBXGroup;
+ children = (
+ 8E427963EEC5B2C6424367BB /* Test.swift */,
+ );
+ path = Sources;
+ sourceTree = "";
+ };
+ 250C62EE12DB56ECEBB473C3 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 37D454E3D3DEA3106FC5B1D9 /* CasePaths.framework */,
+ 3FFF727FDBE22876C8AC9A3D /* CasePathsCore.framework */,
+ DE351E328C333744FEAAACEF /* Clocks.framework */,
+ ED856AD323CCEEC229B2C7F9 /* CombineSchedulers.framework */,
+ BB18C1565FE3EAC96777EC0F /* ComposableArchitecture.framework */,
+ 10C2E0E9FA89653EBA928FFB /* ConcurrencyExtras.framework */,
+ 8A9DCFA69D5780FF990FEFE1 /* Core_Debug.framework */,
+ C3B9CE641601ED6073ABDA8E /* Core_Prod.framework */,
+ CA2D4CD69407DE3A95F1B5E7 /* Core_Stage.framework */,
+ 2B0FA7F85F3573FB522F9478 /* Core.framework */,
+ 3E313EC3E53C9ED17660FD3F /* CoreTests.xctest */,
+ B6739389F41AD55401939AA3 /* CustomDump.framework */,
+ AB917DE30C69F723BDF65353 /* Dependencies.framework */,
+ C175D576FC2CE0FF66645233 /* DependenciesMacros.framework */,
+ 7EBE4DE9FD75B5368768D93D /* DiContainer.framework */,
+ B89ECB181A314C23A60BB911 /* DomainInterface.framework */,
+ DF63D412AA4B009EF483F4BE /* IdentifiedCollections.framework */,
+ 12A713B47F2AAA89018EAC9F /* InternalCollectionsUtilities.framework */,
+ 03E9AE72F3054B4A5B3FA955 /* IssueReporting.framework */,
+ 9297D43D2BEFCC0B514EFC04 /* IssueReportingPackageSupport.framework */,
+ ABF88C39763A84B856476973 /* LogMacro.framework */,
+ 3F9C516A0389461EC9B5D46E /* Model.framework */,
+ FD8B6B85F2D6B69FE70C1FBE /* Network.framework */,
+ FC6EA3166EAE3B4E5C3A3655 /* OrderedCollections.framework */,
+ 1F8CC6237F3D4AE8F77CAE48 /* Perception.framework */,
+ 70750465C5300D484ABA9F60 /* PerceptionCore.framework */,
+ A6B638D8DB02624DD45D49E2 /* Repository.framework */,
+ 3D9502ABE8C8662DEA57F88E /* Service_Service.bundle */,
+ 3ED045ECCC0A0126F7A4BC13 /* Service.framework */,
+ 4E7A1228CBFFBBC21B6F7108 /* Sharing.framework */,
+ 141E57E374A54F7AB6E29DC2 /* Sharing1.framework */,
+ 2690CFF7D8527FFE80ABE74D /* Sharing2.framework */,
+ D965F19D7CDBE741D5E4BC67 /* swift-composable-architecture_ComposableArchitecture.bundle */,
+ B8D5448233F039D5A9089DCB /* swift-sharing_Sharing.bundle */,
+ 091619AA614A7C59B502D9D5 /* SwiftNavigation.framework */,
+ B3F3F8C53FB3A64C8A67E329 /* SwiftUINavigation.framework */,
+ AEC4F1585F46781177064EC7 /* UIKitNavigation.framework */,
+ 84F99CA60AD1F77541E67E93 /* UIKitNavigationShim.framework */,
+ DE81E51C38BC7DF49AD255BD /* UseCase.framework */,
+ BCC113B61DA21855D30259B1 /* Utill.framework */,
+ B0E1BE020E6058D897035F31 /* XCTestDynamicOverlay.framework */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 39ACB6D6CDBC910D866B189E /* Sources */ = {
+ isa = PBXGroup;
+ children = (
+ 61E3BEA87B5E736B9D20B896 /* TuistBundle+CoreTests.swift */,
+ );
+ path = Sources;
+ sourceTree = "";
+ };
+ 4B97075397CA6D3C7DEE06A1 /* InfoPlists */ = {
+ isa = PBXGroup;
+ children = (
+ 5A90C6A79C8439A9A5D64BA3 /* Core-Debug-Info.plist */,
+ 26BDD2D3E7FED8CDE9A52F46 /* Core-Info.plist */,
+ B32D5F89E693F7E3F2558610 /* Core-Prod-Info.plist */,
+ 22E60B05721CBE85B6C02D7B /* Core-Stage-Info.plist */,
+ D81A5985FBB055CC8CA4FAB8 /* CoreTests-Info.plist */,
+ );
+ path = InfoPlists;
+ sourceTree = "";
+ };
+ 537C7B560A1E929D3714DA76 /* CoreTests */ = {
+ isa = PBXGroup;
+ children = (
+ 0AA7A05CA7B8CE68A00A0D5F /* Sources */,
+ );
+ path = CoreTests;
+ sourceTree = "";
+ };
+ 62824534F75515F48E8114A7 = {
+ isa = PBXGroup;
+ children = (
+ E12816BA35F79D21E0D77318 /* Project */,
+ 250C62EE12DB56ECEBB473C3 /* Products */,
+ 64E34141D18153ACC8D4E5F8 /* Frameworks */,
+ );
+ sourceTree = "";
+ };
+ 64E34141D18153ACC8D4E5F8 /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ 4F52A0D92C684C59849570BB /* OSLog.framework */,
+ );
+ name = Frameworks;
+ sourceTree = "";
+ };
+ 81104ECEC5CD1B0F5111557B /* Sources */ = {
+ isa = PBXGroup;
+ children = (
+ 005AF892A3A3BE740783E3C3 /* Exported */,
+ );
+ path = Sources;
+ sourceTree = "";
+ };
+ E12816BA35F79D21E0D77318 /* Project */ = {
+ isa = PBXGroup;
+ children = (
+ 537C7B560A1E929D3714DA76 /* CoreTests */,
+ F631B3543A0C26BDC2DE72DD /* Derived */,
+ 81104ECEC5CD1B0F5111557B /* Sources */,
+ );
+ name = Project;
+ sourceTree = "";
+ };
+ F631B3543A0C26BDC2DE72DD /* Derived */ = {
+ isa = PBXGroup;
+ children = (
+ 4B97075397CA6D3C7DEE06A1 /* InfoPlists */,
+ 39ACB6D6CDBC910D866B189E /* Sources */,
+ );
+ path = Derived;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 000AEEF88C24746626DCEAF2 /* Core-Debug */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 5A7FE3CDDF6D4B6783FAB144 /* Build configuration list for PBXNativeTarget "Core-Debug" */;
+ buildPhases = (
+ E4D5B6C092EECF9EC1553B75 /* Sources */,
+ 07EAA56C4A3A84EB3B22A329 /* Resources */,
+ 6F0BEFA54B77D8AD5CC51C4E /* Frameworks */,
+ 1E9A2FDAECA90F5696951540 /* Embed Frameworks */,
+ E0CF0C502C89B79E599E0E1D /* Dependencies */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = "Core-Debug";
+ packageProductDependencies = (
+ );
+ productName = Core_Debug;
+ productReference = 8A9DCFA69D5780FF990FEFE1 /* Core_Debug.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+ 53DAF845F29676E49B99B6F8 /* Core-Prod */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 107D6B6A1BA357D6B3D3F5C9 /* Build configuration list for PBXNativeTarget "Core-Prod" */;
+ buildPhases = (
+ 6D4379CFDE19A43AAB116FFD /* Sources */,
+ DB514001747A8838395DE260 /* Resources */,
+ 53BD653179EC7C334683F5ED /* Frameworks */,
+ F09523A53F8DCAD5A57EF624 /* Embed Frameworks */,
+ 2B67707ED35F2DA05F9FFEC7 /* Dependencies */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = "Core-Prod";
+ packageProductDependencies = (
+ );
+ productName = Core_Prod;
+ productReference = C3B9CE641601ED6073ABDA8E /* Core_Prod.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+ 5E32ABE7797DE1E37AEC71CE /* Core-Stage */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 7750E72FFE573919636B8CCB /* Build configuration list for PBXNativeTarget "Core-Stage" */;
+ buildPhases = (
+ 3BC7BF513C7B53315F3A7816 /* Sources */,
+ 77ACEF4C04545869374F3C3D /* Resources */,
+ EAFB5A562EB01EC63021A153 /* Frameworks */,
+ BDF7A6E43B5BED04E4D93612 /* Embed Frameworks */,
+ E66347834B9000A283006EA2 /* Dependencies */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = "Core-Stage";
+ packageProductDependencies = (
+ );
+ productName = Core_Stage;
+ productReference = CA2D4CD69407DE3A95F1B5E7 /* Core_Stage.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+ 73B1A2AD90A7970B7DB39CDC /* CoreTests */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 11AFCF066F41C50436EE1ED4 /* Build configuration list for PBXNativeTarget "CoreTests" */;
+ buildPhases = (
+ 6812F1B21CD10F393796F1D5 /* Sources */,
+ 1D6B11F444EAE21363FF0969 /* Resources */,
+ F678B080F62A8C8E01BCF980 /* Frameworks */,
+ 2C70A176FC2F8BBE09A41076 /* Embed Frameworks */,
+ 787952B97F5276648B9F3258 /* Dependencies */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 7288E21035842319E020F88B /* PBXTargetDependency */,
+ );
+ name = CoreTests;
+ packageProductDependencies = (
+ );
+ productName = CoreTests;
+ productReference = 3E313EC3E53C9ED17660FD3F /* CoreTests.xctest */;
+ productType = "com.apple.product-type.bundle.unit-test";
+ };
+ B90FCF66245CD7327BEE2CBF /* Core */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 98830250AF7B3CEC34690D43 /* Build configuration list for PBXNativeTarget "Core" */;
+ buildPhases = (
+ 68E9A351E4B1C8B9C155F97C /* Sources */,
+ 3FEE3D1A9FD48DDE5D5CDD8B /* Resources */,
+ BF69E59B74296DB134C1F9E4 /* Frameworks */,
+ 2A34CD9447D0001C8C98AEF5 /* Embed Frameworks */,
+ CA84D05AFEA6D9633EB4BE48 /* Dependencies */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = Core;
+ packageProductDependencies = (
+ );
+ productName = Core;
+ productReference = 2B0FA7F85F3573FB522F9478 /* Core.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 83ADD9484DDC11E75E9F182F /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ BuildIndependentTargetsInParallel = YES;
+ TargetAttributes = {
+ };
+ };
+ buildConfigurationList = 4EBE82DE9849E8F47BAECD7B /* Build configuration list for PBXProject "Core" */;
+ compatibilityVersion = "Xcode 14.0";
+ developmentRegion = ko;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ ko,
+ );
+ mainGroup = 62824534F75515F48E8114A7;
+ productRefGroup = 250C62EE12DB56ECEBB473C3 /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ B90FCF66245CD7327BEE2CBF /* Core */,
+ 000AEEF88C24746626DCEAF2 /* Core-Debug */,
+ 53DAF845F29676E49B99B6F8 /* Core-Prod */,
+ 5E32ABE7797DE1E37AEC71CE /* Core-Stage */,
+ 73B1A2AD90A7970B7DB39CDC /* CoreTests */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 07EAA56C4A3A84EB3B22A329 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 1D6B11F444EAE21363FF0969 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 44D3AC095770D7D63DC175F9 /* Test.swift in Resources */,
+ 75E08F02FD27FCDFBD2E5A6D /* Service_Service.bundle in Resources */,
+ 5CB29D72D1FE671A3BFE6D7B /* swift-composable-architecture_ComposableArchitecture.bundle in Resources */,
+ 741A5006FF2D931F1EFAC7E4 /* swift-sharing_Sharing.bundle in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 3FEE3D1A9FD48DDE5D5CDD8B /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 77ACEF4C04545869374F3C3D /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ DB514001747A8838395DE260 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 3BC7BF513C7B53315F3A7816 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ CFD8561A3158F0E8D1F37E31 /* CoreExport.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 6812F1B21CD10F393796F1D5 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 90F9749BFCF03B4AB847C6B1 /* Test.swift in Sources */,
+ 67140FAA3A2E672814649BC9 /* TuistBundle+CoreTests.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 68E9A351E4B1C8B9C155F97C /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A7B8C8A10E30EC8A4499A4D7 /* CoreExport.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 6D4379CFDE19A43AAB116FFD /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 057E6747738EDE1A9D804300 /* CoreExport.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ E4D5B6C092EECF9EC1553B75 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ F4B05E023463D745BA025CD8 /* CoreExport.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+ 7288E21035842319E020F88B /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ name = Core;
+ target = B90FCF66245CD7327BEE2CBF /* Core */;
+ targetProxy = 3D327B0E74A853E83EF9F7FE /* PBXContainerItemProxy */;
+ };
+/* End PBXTargetDependency section */
+
+/* Begin XCBuildConfiguration section */
+ 05F3645B69532A03E3860450 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ DEAD_CODE_STRIPPING = YES;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+ 0DAC5D8B10A8A9A2BB479F20 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../Tuist/.build/checkouts/swift-navigation/Sources/UIKitNavigationShim/include",
+ "$(SRCROOT)/../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/Core-Stage-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-fmodule-map-file=$(SRCROOT)/../../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/CasePathsMacros#CasePathsMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/ComposableArchitectureMacros#ComposableArchitectureMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/DependenciesMacrosPlugin#DependenciesMacrosPlugin",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/PerceptionMacros#PerceptionMacros",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Core;
+ PRODUCT_NAME = Core_Stage;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Debug;
+ };
+ 2CADB9708E4C94F94F0653FA /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../Tuist/.build/checkouts/swift-navigation/Sources/UIKitNavigationShim/include",
+ "$(SRCROOT)/../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/CoreTests-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-fmodule-map-file=$(SRCROOT)/../../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/CasePathsMacros#CasePathsMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/ComposableArchitectureMacros#ComposableArchitectureMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/DependenciesMacrosPlugin#DependenciesMacrosPlugin",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/PerceptionMacros#PerceptionMacros",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Core.CoreTests;
+ PRODUCT_NAME = CoreTests;
+ SDKROOT = iphoneos;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ };
+ name = Release;
+ };
+ 396A4A493C702089267737D3 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../Tuist/.build/checkouts/swift-navigation/Sources/UIKitNavigationShim/include",
+ "$(SRCROOT)/../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/Core-Prod-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-fmodule-map-file=$(SRCROOT)/../../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/CasePathsMacros#CasePathsMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/ComposableArchitectureMacros#ComposableArchitectureMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/DependenciesMacrosPlugin#DependenciesMacrosPlugin",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/PerceptionMacros#PerceptionMacros",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Core;
+ PRODUCT_NAME = Core_Prod;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Debug;
+ };
+ 47BBFBADD1026E38F008AD94 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../Tuist/.build/checkouts/swift-navigation/Sources/UIKitNavigationShim/include",
+ "$(SRCROOT)/../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/Core-Prod-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-fmodule-map-file=$(SRCROOT)/../../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/CasePathsMacros#CasePathsMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/ComposableArchitectureMacros#ComposableArchitectureMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/DependenciesMacrosPlugin#DependenciesMacrosPlugin",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/PerceptionMacros#PerceptionMacros",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Core;
+ PRODUCT_NAME = Core_Prod;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Release;
+ };
+ 67D5FA586B81EFD7F0F0E857 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../Tuist/.build/checkouts/swift-navigation/Sources/UIKitNavigationShim/include",
+ "$(SRCROOT)/../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/Core-Debug-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-fmodule-map-file=$(SRCROOT)/../../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/CasePathsMacros#CasePathsMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/ComposableArchitectureMacros#ComposableArchitectureMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/DependenciesMacrosPlugin#DependenciesMacrosPlugin",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/PerceptionMacros#PerceptionMacros",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Core;
+ PRODUCT_NAME = Core_Debug;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Debug;
+ };
+ 6D1DDB3E66050DB0CC3BF683 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../Tuist/.build/checkouts/swift-navigation/Sources/UIKitNavigationShim/include",
+ "$(SRCROOT)/../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/Core-Debug-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-fmodule-map-file=$(SRCROOT)/../../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/CasePathsMacros#CasePathsMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/ComposableArchitectureMacros#ComposableArchitectureMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/DependenciesMacrosPlugin#DependenciesMacrosPlugin",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/PerceptionMacros#PerceptionMacros",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Core;
+ PRODUCT_NAME = Core_Debug;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Release;
+ };
+ 7E41C2E24C55494B821B7E22 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../Tuist/.build/checkouts/swift-navigation/Sources/UIKitNavigationShim/include",
+ "$(SRCROOT)/../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/CoreTests-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-fmodule-map-file=$(SRCROOT)/../../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/CasePathsMacros#CasePathsMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/ComposableArchitectureMacros#ComposableArchitectureMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/DependenciesMacrosPlugin#DependenciesMacrosPlugin",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/PerceptionMacros#PerceptionMacros",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Core.CoreTests;
+ PRODUCT_NAME = CoreTests;
+ SDKROOT = iphoneos;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ };
+ name = Debug;
+ };
+ B3E6110DD65039BABE6B7C66 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ DEAD_CODE_STRIPPING = YES;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ MTL_ENABLE_DEBUG_INFO = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ };
+ name = Debug;
+ };
+ BCC53001AC403B486150D965 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../Tuist/.build/checkouts/swift-navigation/Sources/UIKitNavigationShim/include",
+ "$(SRCROOT)/../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/Core-Stage-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-fmodule-map-file=$(SRCROOT)/../../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/CasePathsMacros#CasePathsMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/ComposableArchitectureMacros#ComposableArchitectureMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/DependenciesMacrosPlugin#DependenciesMacrosPlugin",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/PerceptionMacros#PerceptionMacros",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Core;
+ PRODUCT_NAME = Core_Stage;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Release;
+ };
+ C6F0DD24793DC9075B33338B /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../Tuist/.build/checkouts/swift-navigation/Sources/UIKitNavigationShim/include",
+ "$(SRCROOT)/../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/Core-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-fmodule-map-file=$(SRCROOT)/../../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/CasePathsMacros#CasePathsMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/ComposableArchitectureMacros#ComposableArchitectureMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/DependenciesMacrosPlugin#DependenciesMacrosPlugin",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/PerceptionMacros#PerceptionMacros",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Core;
+ PRODUCT_NAME = Core;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Debug;
+ };
+ F2BF94242B2654F7A820405E /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../Tuist/.build/checkouts/swift-navigation/Sources/UIKitNavigationShim/include",
+ "$(SRCROOT)/../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/Core-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-fmodule-map-file=$(SRCROOT)/../../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/CasePathsMacros#CasePathsMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/ComposableArchitectureMacros#ComposableArchitectureMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/DependenciesMacrosPlugin#DependenciesMacrosPlugin",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/PerceptionMacros#PerceptionMacros",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Core;
+ PRODUCT_NAME = Core;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 107D6B6A1BA357D6B3D3F5C9 /* Build configuration list for PBXNativeTarget "Core-Prod" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 396A4A493C702089267737D3 /* Debug */,
+ 47BBFBADD1026E38F008AD94 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 11AFCF066F41C50436EE1ED4 /* Build configuration list for PBXNativeTarget "CoreTests" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 7E41C2E24C55494B821B7E22 /* Debug */,
+ 2CADB9708E4C94F94F0653FA /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 4EBE82DE9849E8F47BAECD7B /* Build configuration list for PBXProject "Core" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ B3E6110DD65039BABE6B7C66 /* Debug */,
+ 05F3645B69532A03E3860450 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 5A7FE3CDDF6D4B6783FAB144 /* Build configuration list for PBXNativeTarget "Core-Debug" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 67D5FA586B81EFD7F0F0E857 /* Debug */,
+ 6D1DDB3E66050DB0CC3BF683 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 7750E72FFE573919636B8CCB /* Build configuration list for PBXNativeTarget "Core-Stage" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 0DAC5D8B10A8A9A2BB479F20 /* Debug */,
+ BCC53001AC403B486150D965 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 98830250AF7B3CEC34690D43 /* Build configuration list for PBXNativeTarget "Core" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ C6F0DD24793DC9075B33338B /* Debug */,
+ F2BF94242B2654F7A820405E /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 83ADD9484DDC11E75E9F182F /* Project object */;
+}
diff --git a/Projects/Core/Core/Core.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Projects/Core/Core/Core.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..919434a
--- /dev/null
+++ b/Projects/Core/Core/Core.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/Projects/Core/Core/Core.xcodeproj/xcshareddata/xcschemes/Core-Debug.xcscheme b/Projects/Core/Core/Core.xcodeproj/xcshareddata/xcschemes/Core-Debug.xcscheme
new file mode 100644
index 0000000..6af0149
--- /dev/null
+++ b/Projects/Core/Core/Core.xcodeproj/xcshareddata/xcschemes/Core-Debug.xcscheme
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Projects/Core/Core/Core.xcodeproj/xcshareddata/xcschemes/Core-Prod.xcscheme b/Projects/Core/Core/Core.xcodeproj/xcshareddata/xcschemes/Core-Prod.xcscheme
new file mode 100644
index 0000000..235f135
--- /dev/null
+++ b/Projects/Core/Core/Core.xcodeproj/xcshareddata/xcschemes/Core-Prod.xcscheme
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Projects/Core/Core/Core.xcodeproj/xcshareddata/xcschemes/Core-Stage.xcscheme b/Projects/Core/Core/Core.xcodeproj/xcshareddata/xcschemes/Core-Stage.xcscheme
new file mode 100644
index 0000000..50dd307
--- /dev/null
+++ b/Projects/Core/Core/Core.xcodeproj/xcshareddata/xcschemes/Core-Stage.xcscheme
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Projects/Core/Core/Core.xcodeproj/xcshareddata/xcschemes/Core.xcscheme b/Projects/Core/Core/Core.xcodeproj/xcshareddata/xcschemes/Core.xcscheme
new file mode 100644
index 0000000..e4550b7
--- /dev/null
+++ b/Projects/Core/Core/Core.xcodeproj/xcshareddata/xcschemes/Core.xcscheme
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Projects/Core/Core/CoreTests/Sources/Test.swift b/Projects/Core/Core/CoreTests/Sources/Test.swift
new file mode 100644
index 0000000..a9c810e
--- /dev/null
+++ b/Projects/Core/Core/CoreTests/Sources/Test.swift
@@ -0,0 +1,8 @@
+//
+// base.swift
+// DDDAttendance
+//
+// Created by Roy on 2025-09-04
+// Copyright © 2025 DDD , Ltd. All rights reserved.
+//
+
diff --git a/Projects/Core/Core/Derived/InfoPlists/Core-Debug-Info.plist b/Projects/Core/Core/Derived/InfoPlists/Core-Debug-Info.plist
new file mode 100644
index 0000000..323e5ec
--- /dev/null
+++ b/Projects/Core/Core/Derived/InfoPlists/Core-Debug-Info.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ FMWK
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/Projects/Core/Core/Derived/InfoPlists/Core-Info.plist b/Projects/Core/Core/Derived/InfoPlists/Core-Info.plist
new file mode 100644
index 0000000..323e5ec
--- /dev/null
+++ b/Projects/Core/Core/Derived/InfoPlists/Core-Info.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ FMWK
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/Projects/Core/Core/Derived/InfoPlists/Core-Prod-Info.plist b/Projects/Core/Core/Derived/InfoPlists/Core-Prod-Info.plist
new file mode 100644
index 0000000..323e5ec
--- /dev/null
+++ b/Projects/Core/Core/Derived/InfoPlists/Core-Prod-Info.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ FMWK
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/Projects/Core/Core/Derived/InfoPlists/Core-Stage-Info.plist b/Projects/Core/Core/Derived/InfoPlists/Core-Stage-Info.plist
new file mode 100644
index 0000000..323e5ec
--- /dev/null
+++ b/Projects/Core/Core/Derived/InfoPlists/Core-Stage-Info.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ FMWK
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/Projects/Core/Core/Derived/InfoPlists/CoreTests-Info.plist b/Projects/Core/Core/Derived/InfoPlists/CoreTests-Info.plist
new file mode 100644
index 0000000..6c40a6c
--- /dev/null
+++ b/Projects/Core/Core/Derived/InfoPlists/CoreTests-Info.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ BNDL
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/Projects/Core/Core/Derived/Sources/TuistBundle+CoreTests.swift b/Projects/Core/Core/Derived/Sources/TuistBundle+CoreTests.swift
new file mode 100644
index 0000000..87f4f55
--- /dev/null
+++ b/Projects/Core/Core/Derived/Sources/TuistBundle+CoreTests.swift
@@ -0,0 +1,25 @@
+// periphery:ignore:all
+// swiftlint:disable:this file_name
+// swiftlint:disable all
+// swift-format-ignore-file
+// swiftformat:disable all
+#if hasFeature(InternalImportsByDefault)
+public import Foundation
+#else
+import Foundation
+#endif
+// MARK: - Swift Bundle Accessor for Frameworks
+private class BundleFinder {}
+extension Foundation.Bundle {
+/// Since CoreTests is a unit tests, the bundle for classes within this module can be used directly.
+ static let module = Bundle(for: BundleFinder.self)
+}
+// MARK: - Objective-C Bundle Accessor
+@objc
+public class CoreTestsResources: NSObject {
+@objc public class var bundle: Bundle {
+ return .module
+}
+}
+// swiftformat:enable all
+// swiftlint:enable all
\ No newline at end of file
diff --git a/Projects/Core/Core/Project.swift b/Projects/Core/Core/Project.swift
new file mode 100644
index 0000000..213b805
--- /dev/null
+++ b/Projects/Core/Core/Project.swift
@@ -0,0 +1,18 @@
+import Foundation
+import ProjectDescription
+import DependencyPlugin
+import ProjectTemplatePlugin
+import ProjectTemplatePlugin
+import DependencyPackagePlugin
+
+let project = Project.makeAppModule(
+ name: "Core",
+ bundleId: .appBundleID(name: ".Core"),
+ product: .staticFramework,
+ settings: .settings(),
+ dependencies: [
+ .Domain(implements: .UseCase),
+ .Network(implements: .Network)
+ ],
+ sources: ["Sources/**"]
+)
diff --git a/Projects/Core/Core/Sources/Exported/CoreExport.swift b/Projects/Core/Core/Sources/Exported/CoreExport.swift
new file mode 100644
index 0000000..cbdabed
--- /dev/null
+++ b/Projects/Core/Core/Sources/Exported/CoreExport.swift
@@ -0,0 +1,10 @@
+//
+// CoreExport.swift
+// Core
+//
+// Created by Wonji Suh on 9/5/25.
+//
+
+@_exported import UseCase
+@_exported import Network
+@_exported import Model
diff --git a/Projects/Core/Data/Model/Derived/InfoPlists/Model-Debug-Info.plist b/Projects/Core/Data/Model/Derived/InfoPlists/Model-Debug-Info.plist
new file mode 100644
index 0000000..323e5ec
--- /dev/null
+++ b/Projects/Core/Data/Model/Derived/InfoPlists/Model-Debug-Info.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ FMWK
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/Projects/Core/Data/Model/Derived/InfoPlists/Model-Info.plist b/Projects/Core/Data/Model/Derived/InfoPlists/Model-Info.plist
new file mode 100644
index 0000000..323e5ec
--- /dev/null
+++ b/Projects/Core/Data/Model/Derived/InfoPlists/Model-Info.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ FMWK
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/Projects/Core/Data/Model/Derived/InfoPlists/Model-Prod-Info.plist b/Projects/Core/Data/Model/Derived/InfoPlists/Model-Prod-Info.plist
new file mode 100644
index 0000000..323e5ec
--- /dev/null
+++ b/Projects/Core/Data/Model/Derived/InfoPlists/Model-Prod-Info.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ FMWK
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/Projects/Core/Data/Model/Derived/InfoPlists/Model-Stage-Info.plist b/Projects/Core/Data/Model/Derived/InfoPlists/Model-Stage-Info.plist
new file mode 100644
index 0000000..323e5ec
--- /dev/null
+++ b/Projects/Core/Data/Model/Derived/InfoPlists/Model-Stage-Info.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ FMWK
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/Projects/Core/Data/Model/Derived/InfoPlists/ModelTests-Info.plist b/Projects/Core/Data/Model/Derived/InfoPlists/ModelTests-Info.plist
new file mode 100644
index 0000000..6c40a6c
--- /dev/null
+++ b/Projects/Core/Data/Model/Derived/InfoPlists/ModelTests-Info.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ BNDL
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/Projects/Core/Data/Model/Derived/Sources/TuistBundle+ModelTests.swift b/Projects/Core/Data/Model/Derived/Sources/TuistBundle+ModelTests.swift
new file mode 100644
index 0000000..3306df2
--- /dev/null
+++ b/Projects/Core/Data/Model/Derived/Sources/TuistBundle+ModelTests.swift
@@ -0,0 +1,25 @@
+// periphery:ignore:all
+// swiftlint:disable:this file_name
+// swiftlint:disable all
+// swift-format-ignore-file
+// swiftformat:disable all
+#if hasFeature(InternalImportsByDefault)
+public import Foundation
+#else
+import Foundation
+#endif
+// MARK: - Swift Bundle Accessor for Frameworks
+private class BundleFinder {}
+extension Foundation.Bundle {
+/// Since ModelTests is a unit tests, the bundle for classes within this module can be used directly.
+ static let module = Bundle(for: BundleFinder.self)
+}
+// MARK: - Objective-C Bundle Accessor
+@objc
+public class ModelTestsResources: NSObject {
+@objc public class var bundle: Bundle {
+ return .module
+}
+}
+// swiftformat:enable all
+// swiftlint:enable all
\ No newline at end of file
diff --git a/Projects/Core/Data/Model/Model.xcodeproj/project.pbxproj b/Projects/Core/Data/Model/Model.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..ef7e38a
--- /dev/null
+++ b/Projects/Core/Data/Model/Model.xcodeproj/project.pbxproj
@@ -0,0 +1,1095 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 55;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 1328425B1AEF2968463770AF /* BookDisplayData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B98D7901BCB64EFCBE7E7E5 /* BookDisplayData.swift */; };
+ 1ED12341DA2493886006330E /* BookDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB79875D7008B0F82133E934 /* BookDTO.swift */; };
+ 202DDDD1231CEADAD82EA5A1 /* TuistBundle+ModelTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71F25C5EAFB466A8EF2D8716 /* TuistBundle+ModelTests.swift */; };
+ 2AEC319050A1177A9F9F0850 /* Extension+AttributeDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 264ECCD7E907566F54359A0B /* Extension+AttributeDTO.swift */; };
+ 35F93A080B5B3111C00E6A5D /* Book.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F1ED70DB68857DB2F861EA2 /* Book.swift */; };
+ 3C6AF9989C03F050BBAD45B9 /* BookDisplayData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B98D7901BCB64EFCBE7E7E5 /* BookDisplayData.swift */; };
+ 3E12E2A600B5B91511E5EEC0 /* BookDisplayData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B98D7901BCB64EFCBE7E7E5 /* BookDisplayData.swift */; };
+ 486B7C014AD92F1D846D5BA8 /* BookDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB79875D7008B0F82133E934 /* BookDTO.swift */; };
+ 48855B7877BAB2E120E42540 /* CustomError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FE05754C398769204FE296C /* CustomError.swift */; };
+ 4B419DA0486C48E049FAB10F /* Utill.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = C592D8CB24A1AEC0A3271C98 /* Utill.framework */; };
+ 52BF6AA3D17BA7835CA6D8A1 /* Book.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F1ED70DB68857DB2F861EA2 /* Book.swift */; };
+ 5D3A99ACAAD60C2C3B198646 /* Model.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BD19E51E52BA74F9617F5F81 /* Model.framework */; };
+ 757571B940FD6B3D8F09EA9D /* Extension+AttributeDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 264ECCD7E907566F54359A0B /* Extension+AttributeDTO.swift */; };
+ 76291FCB73DE778B2CF86B3E /* Extension+AttributeDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 264ECCD7E907566F54359A0B /* Extension+AttributeDTO.swift */; };
+ 98DA40A4BB4A05F162DE5FA2 /* Utill.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C592D8CB24A1AEC0A3271C98 /* Utill.framework */; };
+ A901C4FF30CF10B2DD276671 /* Utill.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = C592D8CB24A1AEC0A3271C98 /* Utill.framework */; };
+ AC195E33A8C00FA9FE9D5BE5 /* Book.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F1ED70DB68857DB2F861EA2 /* Book.swift */; };
+ B20A6195AD5A7A9B15FAA0B3 /* Test.swift in Resources */ = {isa = PBXBuildFile; fileRef = 9984A08C45315A297D59E054 /* Test.swift */; };
+ B69D8642ED7AB8211F29CA97 /* Utill.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = C592D8CB24A1AEC0A3271C98 /* Utill.framework */; };
+ BE7B0DA32A08A9F8A1FCE611 /* Book.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F1ED70DB68857DB2F861EA2 /* Book.swift */; };
+ C5C261EDAB27EF48703FD832 /* BookDisplayData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8B98D7901BCB64EFCBE7E7E5 /* BookDisplayData.swift */; };
+ D84F2C260E1DDE7370C83625 /* Utill.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = C592D8CB24A1AEC0A3271C98 /* Utill.framework */; };
+ D9A13A678C5BDC99FDDD49DD /* Extension+AttributeDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 264ECCD7E907566F54359A0B /* Extension+AttributeDTO.swift */; };
+ DA3E3277648350F7941822E5 /* BookDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB79875D7008B0F82133E934 /* BookDTO.swift */; };
+ DBE193B362C078FCB51A0A3D /* BookDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB79875D7008B0F82133E934 /* BookDTO.swift */; };
+ F2280CA090AFD92AE885AF07 /* CustomError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FE05754C398769204FE296C /* CustomError.swift */; };
+ F9E1B4E53E741BE102D9B7CE /* Test.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9984A08C45315A297D59E054 /* Test.swift */; };
+ FC69F129728A4E063A78018A /* CustomError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FE05754C398769204FE296C /* CustomError.swift */; };
+ FE8CC3CF3923AF51D00EE060 /* CustomError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FE05754C398769204FE296C /* CustomError.swift */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+ 25D6B22D82DB3373EE2E13E5 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 1639F33D45FD228C909971DE /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 33067F20CD4A0019779E6C28;
+ remoteInfo = Model;
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ 0191DD759DDC70045BA70EC0 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 162F2359E476B502B8DF9D6F /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 2395FE26C2F0A32F7E7EDB31 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 258A037E938621B8EFFC732D /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ 4B419DA0486C48E049FAB10F /* Utill.framework in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ 4FEC87D6968BF79EF1DBAAF4 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 77BDF2504FDA672E347C5772 /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ B69D8642ED7AB8211F29CA97 /* Utill.framework in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ 7DADF66810EE36FF0578C8EA /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ D84F2C260E1DDE7370C83625 /* Utill.framework in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ 9F864950B9838AB90B6071DF /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ A901C4FF30CF10B2DD276671 /* Utill.framework in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ CA895C68B1089377EC436707 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ 1FE05754C398769204FE296C /* CustomError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomError.swift; sourceTree = ""; };
+ 24E02F902DF503B58B252315 /* Model-Stage-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Model-Stage-Info.plist"; sourceTree = ""; };
+ 264ECCD7E907566F54359A0B /* Extension+AttributeDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Extension+AttributeDTO.swift"; sourceTree = ""; };
+ 3FE96CFA513A488587C33D39 /* Model_Prod.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Model_Prod.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 49959A55B64C07785A4222BD /* Model-Debug-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Model-Debug-Info.plist"; sourceTree = ""; };
+ 645942B12C966E3868832E28 /* Model-Prod-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Model-Prod-Info.plist"; sourceTree = ""; };
+ 6F1ED70DB68857DB2F861EA2 /* Book.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Book.swift; sourceTree = ""; };
+ 71F25C5EAFB466A8EF2D8716 /* TuistBundle+ModelTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistBundle+ModelTests.swift"; sourceTree = ""; };
+ 8B98D7901BCB64EFCBE7E7E5 /* BookDisplayData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookDisplayData.swift; sourceTree = ""; };
+ 9861501D039B06394C2A7E64 /* Model-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Model-Info.plist"; sourceTree = ""; };
+ 9984A08C45315A297D59E054 /* Test.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Test.swift; sourceTree = ""; };
+ AB79875D7008B0F82133E934 /* BookDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookDTO.swift; sourceTree = ""; };
+ AFD27768F488C1D25C3CF526 /* Model_Stage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Model_Stage.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ BCADC68AC8902A5A04015228 /* ModelTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "ModelTests-Info.plist"; sourceTree = ""; };
+ BD19E51E52BA74F9617F5F81 /* Model.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Model.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ C592D8CB24A1AEC0A3271C98 /* Utill.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Utill.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ CBC658CD144D3DD7CE2074AD /* ModelTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ModelTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+ DC4458E47D73A70201CAFF9C /* Model_Debug.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Model_Debug.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 7E005713188BE8A66A347C5B /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B9BB66B30C450A2276FE7E2A /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ DACA114F37F3EDF20CF9365E /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 5D3A99ACAAD60C2C3B198646 /* Model.framework in Frameworks */,
+ 98DA40A4BB4A05F162DE5FA2 /* Utill.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ F25D309C82B1BD75D18D544D /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ FC338554EE1E57C78BA8D6E0 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 007458A5F05E7D0F1B83CE62 /* Project */ = {
+ isa = PBXGroup;
+ children = (
+ D110446C58CE764EF729F7F7 /* Derived */,
+ C25AE2B311B0C10F84FF86E4 /* ModelTests */,
+ BD6D8EACB20C945F687C5726 /* Sources */,
+ );
+ name = Project;
+ sourceTree = "";
+ };
+ 348010ACF650B5DAAD211E1C = {
+ isa = PBXGroup;
+ children = (
+ 007458A5F05E7D0F1B83CE62 /* Project */,
+ 895D64E421C351C3365850F3 /* Products */,
+ );
+ sourceTree = "";
+ };
+ 35125B73A72EC2C362BFBC81 /* BookList */ = {
+ isa = PBXGroup;
+ children = (
+ 62F19E46F465D67D2C9023D7 /* Data */,
+ 9C1066078EBE158B9F55B2F9 /* Domain */,
+ 66E1CDCDB780EC71FA7766E1 /* Error */,
+ D1BEEDA80B38824867F3FBD7 /* Mapper+ */,
+ );
+ path = BookList;
+ sourceTree = "";
+ };
+ 4280CD0EFD74809ED53DAA81 /* InfoPlists */ = {
+ isa = PBXGroup;
+ children = (
+ 49959A55B64C07785A4222BD /* Model-Debug-Info.plist */,
+ 9861501D039B06394C2A7E64 /* Model-Info.plist */,
+ 645942B12C966E3868832E28 /* Model-Prod-Info.plist */,
+ 24E02F902DF503B58B252315 /* Model-Stage-Info.plist */,
+ BCADC68AC8902A5A04015228 /* ModelTests-Info.plist */,
+ );
+ path = InfoPlists;
+ sourceTree = "";
+ };
+ 62F19E46F465D67D2C9023D7 /* Data */ = {
+ isa = PBXGroup;
+ children = (
+ AB79875D7008B0F82133E934 /* BookDTO.swift */,
+ );
+ path = Data;
+ sourceTree = "";
+ };
+ 66E1CDCDB780EC71FA7766E1 /* Error */ = {
+ isa = PBXGroup;
+ children = (
+ 8B98D7901BCB64EFCBE7E7E5 /* BookDisplayData.swift */,
+ 1FE05754C398769204FE296C /* CustomError.swift */,
+ );
+ path = Error;
+ sourceTree = "";
+ };
+ 6E58FDB33C8F13BA486A40F4 /* Sources */ = {
+ isa = PBXGroup;
+ children = (
+ 9984A08C45315A297D59E054 /* Test.swift */,
+ );
+ path = Sources;
+ sourceTree = "";
+ };
+ 895D64E421C351C3365850F3 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ DC4458E47D73A70201CAFF9C /* Model_Debug.framework */,
+ 3FE96CFA513A488587C33D39 /* Model_Prod.framework */,
+ AFD27768F488C1D25C3CF526 /* Model_Stage.framework */,
+ BD19E51E52BA74F9617F5F81 /* Model.framework */,
+ CBC658CD144D3DD7CE2074AD /* ModelTests.xctest */,
+ C592D8CB24A1AEC0A3271C98 /* Utill.framework */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 9C1066078EBE158B9F55B2F9 /* Domain */ = {
+ isa = PBXGroup;
+ children = (
+ 6F1ED70DB68857DB2F861EA2 /* Book.swift */,
+ );
+ path = Domain;
+ sourceTree = "";
+ };
+ BD6D8EACB20C945F687C5726 /* Sources */ = {
+ isa = PBXGroup;
+ children = (
+ 35125B73A72EC2C362BFBC81 /* BookList */,
+ );
+ path = Sources;
+ sourceTree = "";
+ };
+ C25AE2B311B0C10F84FF86E4 /* ModelTests */ = {
+ isa = PBXGroup;
+ children = (
+ 6E58FDB33C8F13BA486A40F4 /* Sources */,
+ );
+ path = ModelTests;
+ sourceTree = "";
+ };
+ D110446C58CE764EF729F7F7 /* Derived */ = {
+ isa = PBXGroup;
+ children = (
+ 4280CD0EFD74809ED53DAA81 /* InfoPlists */,
+ D7498863DE48189486060C4F /* Sources */,
+ );
+ path = Derived;
+ sourceTree = "";
+ };
+ D1BEEDA80B38824867F3FBD7 /* Mapper+ */ = {
+ isa = PBXGroup;
+ children = (
+ 264ECCD7E907566F54359A0B /* Extension+AttributeDTO.swift */,
+ );
+ path = "Mapper+";
+ sourceTree = "";
+ };
+ D7498863DE48189486060C4F /* Sources */ = {
+ isa = PBXGroup;
+ children = (
+ 71F25C5EAFB466A8EF2D8716 /* TuistBundle+ModelTests.swift */,
+ );
+ path = Sources;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 1046BCC1BEE4897A55B9CE96 /* Model-Debug */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 2E7379153ECB0A848C054843 /* Build configuration list for PBXNativeTarget "Model-Debug" */;
+ buildPhases = (
+ 70DE99F0733343297E2B9EE9 /* Sources */,
+ 495806CAE9BDAD188D29117F /* Resources */,
+ F25D309C82B1BD75D18D544D /* Frameworks */,
+ 162F2359E476B502B8DF9D6F /* Embed Frameworks */,
+ 7DADF66810EE36FF0578C8EA /* Dependencies */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = "Model-Debug";
+ packageProductDependencies = (
+ );
+ productName = Model_Debug;
+ productReference = DC4458E47D73A70201CAFF9C /* Model_Debug.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+ 21935AED7607E6182EB15D21 /* Model-Prod */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = FBB02F0E98A859E6E08E060D /* Build configuration list for PBXNativeTarget "Model-Prod" */;
+ buildPhases = (
+ 270FDF0609ED47B52846DF68 /* Sources */,
+ 458BA54C5F12912BF8E06530 /* Resources */,
+ B9BB66B30C450A2276FE7E2A /* Frameworks */,
+ 2395FE26C2F0A32F7E7EDB31 /* Embed Frameworks */,
+ 9F864950B9838AB90B6071DF /* Dependencies */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = "Model-Prod";
+ packageProductDependencies = (
+ );
+ productName = Model_Prod;
+ productReference = 3FE96CFA513A488587C33D39 /* Model_Prod.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+ 33067F20CD4A0019779E6C28 /* Model */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 498A5A7B7EB119891BB24A01 /* Build configuration list for PBXNativeTarget "Model" */;
+ buildPhases = (
+ 222540B004D42E51E4D37A24 /* Sources */,
+ 44EBA9C338426F80E72FFDA1 /* Resources */,
+ FC338554EE1E57C78BA8D6E0 /* Frameworks */,
+ CA895C68B1089377EC436707 /* Embed Frameworks */,
+ 258A037E938621B8EFFC732D /* Dependencies */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = Model;
+ packageProductDependencies = (
+ );
+ productName = Model;
+ productReference = BD19E51E52BA74F9617F5F81 /* Model.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+ 48DE3287DCFA681CD6445474 /* ModelTests */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 048E867AF8E3ED3C8918492D /* Build configuration list for PBXNativeTarget "ModelTests" */;
+ buildPhases = (
+ A4AB0A919F0EB4E3607B1E3C /* Sources */,
+ E656232EB928083951F193C4 /* Resources */,
+ DACA114F37F3EDF20CF9365E /* Frameworks */,
+ 0191DD759DDC70045BA70EC0 /* Embed Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ F3EB6A482F2F9E530A399FE4 /* PBXTargetDependency */,
+ );
+ name = ModelTests;
+ packageProductDependencies = (
+ );
+ productName = ModelTests;
+ productReference = CBC658CD144D3DD7CE2074AD /* ModelTests.xctest */;
+ productType = "com.apple.product-type.bundle.unit-test";
+ };
+ C35A038AE13C197DF28AA668 /* Model-Stage */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 7913D1523BCE062F394B81AD /* Build configuration list for PBXNativeTarget "Model-Stage" */;
+ buildPhases = (
+ EB4230CBD74D200AB1A43D9F /* Sources */,
+ 615D8B27BDB2440A601C1166 /* Resources */,
+ 7E005713188BE8A66A347C5B /* Frameworks */,
+ 4FEC87D6968BF79EF1DBAAF4 /* Embed Frameworks */,
+ 77BDF2504FDA672E347C5772 /* Dependencies */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = "Model-Stage";
+ packageProductDependencies = (
+ );
+ productName = Model_Stage;
+ productReference = AFD27768F488C1D25C3CF526 /* Model_Stage.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 1639F33D45FD228C909971DE /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ BuildIndependentTargetsInParallel = YES;
+ TargetAttributes = {
+ };
+ };
+ buildConfigurationList = E54AD61EE741D56688714B85 /* Build configuration list for PBXProject "Model" */;
+ compatibilityVersion = "Xcode 14.0";
+ developmentRegion = ko;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ ko,
+ );
+ mainGroup = 348010ACF650B5DAAD211E1C;
+ productRefGroup = 895D64E421C351C3365850F3 /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 33067F20CD4A0019779E6C28 /* Model */,
+ 1046BCC1BEE4897A55B9CE96 /* Model-Debug */,
+ 21935AED7607E6182EB15D21 /* Model-Prod */,
+ C35A038AE13C197DF28AA668 /* Model-Stage */,
+ 48DE3287DCFA681CD6445474 /* ModelTests */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 44EBA9C338426F80E72FFDA1 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 458BA54C5F12912BF8E06530 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 495806CAE9BDAD188D29117F /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 615D8B27BDB2440A601C1166 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ E656232EB928083951F193C4 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B20A6195AD5A7A9B15FAA0B3 /* Test.swift in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 222540B004D42E51E4D37A24 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ DBE193B362C078FCB51A0A3D /* BookDTO.swift in Sources */,
+ 52BF6AA3D17BA7835CA6D8A1 /* Book.swift in Sources */,
+ 3C6AF9989C03F050BBAD45B9 /* BookDisplayData.swift in Sources */,
+ 48855B7877BAB2E120E42540 /* CustomError.swift in Sources */,
+ 757571B940FD6B3D8F09EA9D /* Extension+AttributeDTO.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 270FDF0609ED47B52846DF68 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ DA3E3277648350F7941822E5 /* BookDTO.swift in Sources */,
+ BE7B0DA32A08A9F8A1FCE611 /* Book.swift in Sources */,
+ 1328425B1AEF2968463770AF /* BookDisplayData.swift in Sources */,
+ FC69F129728A4E063A78018A /* CustomError.swift in Sources */,
+ 2AEC319050A1177A9F9F0850 /* Extension+AttributeDTO.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 70DE99F0733343297E2B9EE9 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 486B7C014AD92F1D846D5BA8 /* BookDTO.swift in Sources */,
+ AC195E33A8C00FA9FE9D5BE5 /* Book.swift in Sources */,
+ C5C261EDAB27EF48703FD832 /* BookDisplayData.swift in Sources */,
+ F2280CA090AFD92AE885AF07 /* CustomError.swift in Sources */,
+ 76291FCB73DE778B2CF86B3E /* Extension+AttributeDTO.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A4AB0A919F0EB4E3607B1E3C /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 202DDDD1231CEADAD82EA5A1 /* TuistBundle+ModelTests.swift in Sources */,
+ F9E1B4E53E741BE102D9B7CE /* Test.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ EB4230CBD74D200AB1A43D9F /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 1ED12341DA2493886006330E /* BookDTO.swift in Sources */,
+ 35F93A080B5B3111C00E6A5D /* Book.swift in Sources */,
+ 3E12E2A600B5B91511E5EEC0 /* BookDisplayData.swift in Sources */,
+ FE8CC3CF3923AF51D00EE060 /* CustomError.swift in Sources */,
+ D9A13A678C5BDC99FDDD49DD /* Extension+AttributeDTO.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+ F3EB6A482F2F9E530A399FE4 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ name = Model;
+ target = 33067F20CD4A0019779E6C28 /* Model */;
+ targetProxy = 25D6B22D82DB3373EE2E13E5 /* PBXContainerItemProxy */;
+ };
+/* End PBXTargetDependency section */
+
+/* Begin XCBuildConfiguration section */
+ 07D99DEF3B7862D1B0EB3734 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = "Derived/InfoPlists/Model-Prod-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Model;
+ PRODUCT_NAME = Model_Prod;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Debug;
+ };
+ 0B57645786A853CE65D3B90B /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = "Derived/InfoPlists/Model-Stage-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Model;
+ PRODUCT_NAME = Model_Stage;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Debug;
+ };
+ 0F4BFD45F658EAEAECBDD6A2 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = "Derived/InfoPlists/Model-Debug-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Model;
+ PRODUCT_NAME = Model_Debug;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Release;
+ };
+ 0F71717CD3BF39E39751F839 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ DEAD_CODE_STRIPPING = YES;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+ 17759F01B7F6D4D334D14702 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = "Derived/InfoPlists/Model-Debug-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Model;
+ PRODUCT_NAME = Model_Debug;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Debug;
+ };
+ 2E362E27B08B3C9DE71F521F /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = "Derived/InfoPlists/Model-Stage-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Model;
+ PRODUCT_NAME = Model_Stage;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Release;
+ };
+ 41FA40D3F2979475FCA8EE2B /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ DEAD_CODE_STRIPPING = YES;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ MTL_ENABLE_DEBUG_INFO = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ };
+ name = Debug;
+ };
+ 566A14EB55B899883F81F856 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = "Derived/InfoPlists/Model-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Model;
+ PRODUCT_NAME = Model;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Debug;
+ };
+ 5FA1ADA44F91F9AA686910FB /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = "Derived/InfoPlists/Model-Prod-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Model;
+ PRODUCT_NAME = Model_Prod;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Release;
+ };
+ 7EC679B4EC1780A913613DCD /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ INFOPLIST_FILE = "Derived/InfoPlists/ModelTests-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Model.ModelTests;
+ PRODUCT_NAME = ModelTests;
+ SDKROOT = iphoneos;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ };
+ name = Release;
+ };
+ C957D53C675052DC5F543051 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = "Derived/InfoPlists/Model-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Model;
+ PRODUCT_NAME = Model;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Release;
+ };
+ E484CA58E16E1DC75E5FAF39 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ INFOPLIST_FILE = "Derived/InfoPlists/ModelTests-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Model.ModelTests;
+ PRODUCT_NAME = ModelTests;
+ SDKROOT = iphoneos;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ };
+ name = Debug;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 048E867AF8E3ED3C8918492D /* Build configuration list for PBXNativeTarget "ModelTests" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ E484CA58E16E1DC75E5FAF39 /* Debug */,
+ 7EC679B4EC1780A913613DCD /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 2E7379153ECB0A848C054843 /* Build configuration list for PBXNativeTarget "Model-Debug" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 17759F01B7F6D4D334D14702 /* Debug */,
+ 0F4BFD45F658EAEAECBDD6A2 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 498A5A7B7EB119891BB24A01 /* Build configuration list for PBXNativeTarget "Model" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 566A14EB55B899883F81F856 /* Debug */,
+ C957D53C675052DC5F543051 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 7913D1523BCE062F394B81AD /* Build configuration list for PBXNativeTarget "Model-Stage" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 0B57645786A853CE65D3B90B /* Debug */,
+ 2E362E27B08B3C9DE71F521F /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ E54AD61EE741D56688714B85 /* Build configuration list for PBXProject "Model" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 41FA40D3F2979475FCA8EE2B /* Debug */,
+ 0F71717CD3BF39E39751F839 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ FBB02F0E98A859E6E08E060D /* Build configuration list for PBXNativeTarget "Model-Prod" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 07D99DEF3B7862D1B0EB3734 /* Debug */,
+ 5FA1ADA44F91F9AA686910FB /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 1639F33D45FD228C909971DE /* Project object */;
+}
diff --git a/Projects/Core/Data/Model/Model.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Projects/Core/Data/Model/Model.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..919434a
--- /dev/null
+++ b/Projects/Core/Data/Model/Model.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/Projects/Core/Data/Model/Model.xcodeproj/xcshareddata/xcschemes/Model-Debug.xcscheme b/Projects/Core/Data/Model/Model.xcodeproj/xcshareddata/xcschemes/Model-Debug.xcscheme
new file mode 100644
index 0000000..1b96ab5
--- /dev/null
+++ b/Projects/Core/Data/Model/Model.xcodeproj/xcshareddata/xcschemes/Model-Debug.xcscheme
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Projects/Core/Data/Model/Model.xcodeproj/xcshareddata/xcschemes/Model-Prod.xcscheme b/Projects/Core/Data/Model/Model.xcodeproj/xcshareddata/xcschemes/Model-Prod.xcscheme
new file mode 100644
index 0000000..42fef99
--- /dev/null
+++ b/Projects/Core/Data/Model/Model.xcodeproj/xcshareddata/xcschemes/Model-Prod.xcscheme
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Projects/Core/Data/Model/Model.xcodeproj/xcshareddata/xcschemes/Model-Stage.xcscheme b/Projects/Core/Data/Model/Model.xcodeproj/xcshareddata/xcschemes/Model-Stage.xcscheme
new file mode 100644
index 0000000..32622f6
--- /dev/null
+++ b/Projects/Core/Data/Model/Model.xcodeproj/xcshareddata/xcschemes/Model-Stage.xcscheme
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Projects/Core/Data/Model/Model.xcodeproj/xcshareddata/xcschemes/Model.xcscheme b/Projects/Core/Data/Model/Model.xcodeproj/xcshareddata/xcschemes/Model.xcscheme
new file mode 100644
index 0000000..ad9f192
--- /dev/null
+++ b/Projects/Core/Data/Model/Model.xcodeproj/xcshareddata/xcschemes/Model.xcscheme
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Projects/Core/Data/Model/ModelTests/Sources/Test.swift b/Projects/Core/Data/Model/ModelTests/Sources/Test.swift
new file mode 100644
index 0000000..a9c810e
--- /dev/null
+++ b/Projects/Core/Data/Model/ModelTests/Sources/Test.swift
@@ -0,0 +1,8 @@
+//
+// base.swift
+// DDDAttendance
+//
+// Created by Roy on 2025-09-04
+// Copyright © 2025 DDD , Ltd. All rights reserved.
+//
+
diff --git a/Projects/Core/Data/Model/Project.swift b/Projects/Core/Data/Model/Project.swift
new file mode 100644
index 0000000..c97c7f1
--- /dev/null
+++ b/Projects/Core/Data/Model/Project.swift
@@ -0,0 +1,17 @@
+import Foundation
+import ProjectDescription
+import DependencyPlugin
+import ProjectTemplatePlugin
+import ProjectTemplatePlugin
+import DependencyPackagePlugin
+
+let project = Project.makeAppModule(
+ name: "Model",
+ bundleId: .appBundleID(name: ".Model"),
+ product: .staticFramework,
+ settings: .settings(),
+ dependencies: [
+ .Shared(implements: .Utill)
+ ],
+ sources: ["Sources/**"]
+)
diff --git a/Projects/Core/Data/Model/Sources/BookList/Data/BookDTO.swift b/Projects/Core/Data/Model/Sources/BookList/Data/BookDTO.swift
new file mode 100644
index 0000000..de4d220
--- /dev/null
+++ b/Projects/Core/Data/Model/Sources/BookList/Data/BookDTO.swift
@@ -0,0 +1,74 @@
+//
+// BookDTO.swift
+// Model
+//
+// Created by Wonji Suh on 9/5/25.
+//
+
+import Foundation
+import Utill
+
+public struct BookDTO: Decodable, Sendable {
+ public let data: [BookDatRespnseDTO]
+}
+
+public struct BookDatRespnseDTO: Decodable, Sendable {
+ let attributes: AttributesDTO
+}
+
+public struct AttributesDTO: Decodable, Sendable {
+ let title: String
+ let author: String
+ let pages: Int
+ let releaseDate: String?
+ let dedication: String
+ let summary: String
+ let wiki: String
+ let image: String
+ let chapters: [ChapterDTO]
+
+ private enum CodingKeys: String, CodingKey {
+ case title, author, pages, dedication, summary, wiki, chapters, image
+ case release_date // 정상 snake_case
+ case releaseDateCamel = "releaseDate" // camelCase 변형
+ case released_date = "released_date" // 변형/오타 대비
+ case reasle_date = "reasle_date" // 오타 대비
+ }
+
+ // releaseDate로 인정할 키 우선순위
+ private static let releaseDateKeys: [CodingKeys] = [
+ .release_date, .releaseDateCamel, .released_date, .reasle_date
+ ]
+
+ public init(from decoder: Decoder) throws {
+ let codingKey = try decoder.container(keyedBy: CodingKeys.self)
+
+ title = try codingKey.decode(String.self, forKey: .title)
+ author = try codingKey.decode(String.self, forKey: .author)
+ pages = try codingKey.decode(Int.self, forKey: .pages)
+ dedication = try codingKey.decode(String.self, forKey: .dedication)
+ summary = try codingKey.decode(String.self, forKey: .summary)
+ wiki = try codingKey.decode(String.self, forKey: .wiki)
+ chapters = try codingKey.decode([ChapterDTO].self, forKey: .chapters)
+ image = try codingKey.decode(String.self, forKey: .image)
+
+ let raw = try codingKey.decodeFirstIfPresent(String.self, for: Self.releaseDateKeys)
+ releaseDate = raw?.normalizedYMD() // "yyyy-M-d" → "yyyy-MM-dd"
+ }
+}
+
+// MARK: - Helpers
+struct ChapterDTO: Decodable, Sendable {
+ let title: String
+}
+
+private extension KeyedDecodingContainer {
+ /// 주어진 키 배열에서 **처음으로 존재하는** 키의 값을 디코딩
+ func decodeFirstIfPresent(_ type: T.Type, for keys: [K]) throws -> T? {
+ for key in keys where contains(key) {
+ return try decodeIfPresent(type, forKey: key)
+ }
+ return nil
+ }
+}
+
diff --git a/Projects/Core/Data/Model/Sources/BookList/Domain/Book.swift b/Projects/Core/Data/Model/Sources/BookList/Domain/Book.swift
new file mode 100644
index 0000000..781932f
--- /dev/null
+++ b/Projects/Core/Data/Model/Sources/BookList/Domain/Book.swift
@@ -0,0 +1,44 @@
+//
+// Book.swift
+// Model
+//
+// Created by Wonji Suh on 9/5/25.
+//
+
+import Foundation
+
+
+public struct Book: Equatable {
+ public let title: String
+ public let author: String
+ public let pages: Int
+ public let image: String
+ public let releaseDate: String
+ public let dedication: String
+ public let summary: String
+ public let wiki: String
+ public let chapters: [String]
+
+ public init(
+ title: String,
+ author: String,
+ pages: Int,
+ image: String,
+ releaseDate: String,
+ dedication: String,
+ summary: String,
+ wiki: String,
+ chapters: [String]
+ ) {
+ self.title = title
+ self.author = author
+ self.pages = pages
+ self.image = image
+ self.releaseDate = releaseDate
+ self.dedication = dedication
+ self.summary = summary
+ self.wiki = wiki
+ self.chapters = chapters
+ }
+}
+
diff --git a/Projects/Core/Data/Model/Sources/BookList/Error/BookDisplayData.swift b/Projects/Core/Data/Model/Sources/BookList/Error/BookDisplayData.swift
new file mode 100644
index 0000000..afc3012
--- /dev/null
+++ b/Projects/Core/Data/Model/Sources/BookList/Error/BookDisplayData.swift
@@ -0,0 +1,27 @@
+//
+// BookDisplayData.swift
+// Model
+//
+// Created by Wonji Suh on 9/10/25.
+//
+
+import Foundation
+
+public struct BookDisplayData: Equatable {
+ public let book: Book
+ public let seriesNumber: Int
+ public let totalSeries: Int
+ public let isSummaryExpanded: Bool
+
+ public init(
+ book: Book,
+ seriesNumber: Int,
+ totalSeries: Int,
+ isSummaryExpanded: Bool
+ ) {
+ self.book = book
+ self.seriesNumber = seriesNumber
+ self.totalSeries = totalSeries
+ self.isSummaryExpanded = isSummaryExpanded
+ }
+}
diff --git a/Projects/Core/Data/Model/Sources/BookList/Error/CustomError.swift b/Projects/Core/Data/Model/Sources/BookList/Error/CustomError.swift
new file mode 100644
index 0000000..7708199
--- /dev/null
+++ b/Projects/Core/Data/Model/Sources/BookList/Error/CustomError.swift
@@ -0,0 +1,91 @@
+//
+// CustomError.swift
+// Model
+//
+// Created by Wonji Suh on 9/8/25.
+//
+
+import Foundation
+
+public enum CustomError: Error, Equatable {
+ case wrongQueryType
+ case networkDisconnected
+ case unAuthorized
+ case internalServer
+ case responseBodyEmpty
+ case decodeFailed
+ case invalidURL
+ case invalidEventId
+ case unknownError(String)
+ case firestoreError(String)
+ case encodingError(String)
+ case none
+}
+
+extension CustomError: LocalizedError {
+ public var errorDescription: String? {
+ switch self {
+ case .wrongQueryType:
+ return "잘못된 요청입니다"
+ case .networkDisconnected:
+ return "네트워크 상태가 원활하지 않습니다"
+ case .unAuthorized:
+ return "알 수 없는 사용자입니다"
+ case .internalServer:
+ return "서버 에러 발생"
+ case .responseBodyEmpty:
+ return "내부 에러 발생"
+ case .decodeFailed:
+ return "내부 에러 발생"
+ case .invalidURL:
+ return "잘못된 접근입니다"
+ case .invalidEventId:
+ return "알 수 없는 eventId 입니다"
+ case .unknownError:
+ return "원인을 알 수 없는 에러 발생"
+ case .firestoreError(let message):
+ return "파이어 베이스 에러 발생: \(message)"
+ case .encodingError(let message):
+ return "파이어 인코딩 에러 발생: \(message)"
+ case .none:
+ return nil
+ }
+ }
+
+ public var recoverySuggestion: String? {
+ switch self {
+ case .wrongQueryType:
+ return "다시 시도해주세요"
+ case .networkDisconnected:
+ return "Wi-Fi 혹은 데이터 확인 후 다시 시도해주세요"
+ case .unAuthorized:
+ return "로그인 정보를 다시 확인해주세요"
+ case .internalServer:
+ return "개발팀에게 문의해주세요"
+ case .responseBodyEmpty:
+ return "개발팀에게 문의해주세요"
+ case .decodeFailed:
+ return "개발팀에게 문의해주세요"
+ case .invalidURL:
+ return "개발팀에게 문의해주세요"
+ case .invalidEventId:
+ return "개발팀에게 문의해주세요"
+ case .unknownError:
+ return "개발팀에게 문의해주세요"
+ case .firestoreError(_):
+ return "개발팀에게 문의해주세요"
+ case .encodingError(_):
+ return "개발팀에게 문의해주세요"
+ case .none:
+ return nil
+ }
+ }
+
+ public static func map(_ error: Error) -> CustomError {
+ if let customError = error as? CustomError {
+ return customError
+ }
+
+ return .unknownError(error.localizedDescription)
+ }
+}
diff --git a/Projects/Core/Data/Model/Sources/BookList/Mapper+/Extension+AttributeDTO.swift b/Projects/Core/Data/Model/Sources/BookList/Mapper+/Extension+AttributeDTO.swift
new file mode 100644
index 0000000..8a7ef04
--- /dev/null
+++ b/Projects/Core/Data/Model/Sources/BookList/Mapper+/Extension+AttributeDTO.swift
@@ -0,0 +1,30 @@
+//
+// Extension+AttributeDTO.swift
+// Model
+//
+// Created by Wonji Suh on 9/5/25.
+//
+
+import Foundation
+
+public extension AttributesDTO {
+ func toDomain() -> Book {
+ return Book(
+ title: title,
+ author: author,
+ pages: pages,
+ image: image,
+ releaseDate: releaseDate ?? "",
+ dedication: dedication,
+ summary: summary,
+ wiki: wiki,
+ chapters: chapters.map { $0.title }
+ )
+ }
+}
+
+public extension Array where Element == BookDatRespnseDTO {
+ func toDomain() -> [Book] {
+ map { $0.attributes.toDomain() }
+ }
+}
diff --git a/Projects/Core/Data/Repository/Derived/InfoPlists/Repository-Debug-Info.plist b/Projects/Core/Data/Repository/Derived/InfoPlists/Repository-Debug-Info.plist
new file mode 100644
index 0000000..323e5ec
--- /dev/null
+++ b/Projects/Core/Data/Repository/Derived/InfoPlists/Repository-Debug-Info.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ FMWK
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/Projects/Core/Data/Repository/Derived/InfoPlists/Repository-Info.plist b/Projects/Core/Data/Repository/Derived/InfoPlists/Repository-Info.plist
new file mode 100644
index 0000000..323e5ec
--- /dev/null
+++ b/Projects/Core/Data/Repository/Derived/InfoPlists/Repository-Info.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ FMWK
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/Projects/Core/Data/Repository/Derived/InfoPlists/Repository-Prod-Info.plist b/Projects/Core/Data/Repository/Derived/InfoPlists/Repository-Prod-Info.plist
new file mode 100644
index 0000000..323e5ec
--- /dev/null
+++ b/Projects/Core/Data/Repository/Derived/InfoPlists/Repository-Prod-Info.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ FMWK
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/Projects/Core/Data/Repository/Derived/InfoPlists/Repository-Stage-Info.plist b/Projects/Core/Data/Repository/Derived/InfoPlists/Repository-Stage-Info.plist
new file mode 100644
index 0000000..323e5ec
--- /dev/null
+++ b/Projects/Core/Data/Repository/Derived/InfoPlists/Repository-Stage-Info.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ FMWK
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/Projects/Core/Data/Repository/Derived/InfoPlists/RepositoryTests-Info.plist b/Projects/Core/Data/Repository/Derived/InfoPlists/RepositoryTests-Info.plist
new file mode 100644
index 0000000..6c40a6c
--- /dev/null
+++ b/Projects/Core/Data/Repository/Derived/InfoPlists/RepositoryTests-Info.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ BNDL
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/Projects/Core/Data/Repository/Derived/Sources/TuistBundle+RepositoryTests.swift b/Projects/Core/Data/Repository/Derived/Sources/TuistBundle+RepositoryTests.swift
new file mode 100644
index 0000000..02a19fa
--- /dev/null
+++ b/Projects/Core/Data/Repository/Derived/Sources/TuistBundle+RepositoryTests.swift
@@ -0,0 +1,25 @@
+// periphery:ignore:all
+// swiftlint:disable:this file_name
+// swiftlint:disable all
+// swift-format-ignore-file
+// swiftformat:disable all
+#if hasFeature(InternalImportsByDefault)
+public import Foundation
+#else
+import Foundation
+#endif
+// MARK: - Swift Bundle Accessor for Frameworks
+private class BundleFinder {}
+extension Foundation.Bundle {
+/// Since RepositoryTests is a unit tests, the bundle for classes within this module can be used directly.
+ static let module = Bundle(for: BundleFinder.self)
+}
+// MARK: - Objective-C Bundle Accessor
+@objc
+public class RepositoryTestsResources: NSObject {
+@objc public class var bundle: Bundle {
+ return .module
+}
+}
+// swiftformat:enable all
+// swiftlint:enable all
\ No newline at end of file
diff --git a/Projects/Core/Data/Repository/Project.swift b/Projects/Core/Data/Repository/Project.swift
new file mode 100644
index 0000000..5757ac7
--- /dev/null
+++ b/Projects/Core/Data/Repository/Project.swift
@@ -0,0 +1,20 @@
+import Foundation
+import ProjectDescription
+import DependencyPlugin
+import ProjectTemplatePlugin
+import ProjectTemplatePlugin
+import DependencyPackagePlugin
+
+let project = Project.makeAppModule(
+ name: "Repository",
+ bundleId: .appBundleID(name: ".Repository"),
+ product: .staticFramework,
+ settings: .settings(),
+ dependencies: [
+ .Domain(implements: .DomainInterface),
+ .Network(implements: .Service),
+ .SPM.diContainer
+
+ ],
+ sources: ["Sources/**"]
+)
diff --git a/Projects/Core/Data/Repository/Repository.xcodeproj/project.pbxproj b/Projects/Core/Data/Repository/Repository.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..628edc5
--- /dev/null
+++ b/Projects/Core/Data/Repository/Repository.xcodeproj/project.pbxproj
@@ -0,0 +1,1279 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 55;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 01145525389F24D9CA763E87 /* DiContainer.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 221F2402E035C0A10B0C816D /* DiContainer.framework */; };
+ 065CDD9E3F159CCEC6E1A6C0 /* Repository.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03D39D8FFA6B36EC82B3C778 /* Repository.framework */; };
+ 0B3A76AD60A6CB76E72EFBE0 /* BookListRepositoryImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C59F3B38928EAC23B9AB1B7 /* BookListRepositoryImpl.swift */; };
+ 10F17259F446EE6A880770ED /* TestTags.swift in Sources */ = {isa = PBXBuildFile; fileRef = 97745ECBC297A4B299AC00D6 /* TestTags.swift */; };
+ 18C2CD6B70E5FF30ECBD55A0 /* DomainInterface.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 1C0DAF15F0E90042DAD3E4C7 /* DomainInterface.framework */; };
+ 19C775917BD20CEB27B664B0 /* Utill.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 41B5B2BB4E6A768C353D66BC /* Utill.framework */; };
+ 19E087F33525DD097677C8CE /* MockBookListRepositoryImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62B81DC06405DCB90288AEF1 /* MockBookListRepositoryImpl.swift */; };
+ 2293F8A0E6829ECB43CEC449 /* DefaultSummaryPersistenceRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13C7F30EB1139E9BCDC23CED /* DefaultSummaryPersistenceRepository.swift */; };
+ 238B0D2223946ECAA82874E1 /* SummaryPersistenceRepositoryImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = E45FEF503DD7CBFE586EC8CB /* SummaryPersistenceRepositoryImpl.swift */; };
+ 2C23766DA5EC5A267DB2DE38 /* Service.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 549C82A8C41E9EBA4FDC62C7 /* Service.framework */; };
+ 3219A995648C8F76E46FD041 /* DiContainer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 221F2402E035C0A10B0C816D /* DiContainer.framework */; };
+ 51B80C6AA807515291900C55 /* SummaryPersistenceRepositoryImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = E45FEF503DD7CBFE586EC8CB /* SummaryPersistenceRepositoryImpl.swift */; };
+ 556137B923E9F25D7C03B110 /* BookListRepositoryImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C59F3B38928EAC23B9AB1B7 /* BookListRepositoryImpl.swift */; };
+ 58EBA9BB76D0DD8E52CA2496 /* MockBookListRepositoryImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62B81DC06405DCB90288AEF1 /* MockBookListRepositoryImpl.swift */; };
+ 5AFC0835DAE7D78047F177F7 /* DefaultSummaryPersistenceRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13C7F30EB1139E9BCDC23CED /* DefaultSummaryPersistenceRepository.swift */; };
+ 61587588E9B052B4292E34E9 /* DefaultSummaryPersistenceRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13C7F30EB1139E9BCDC23CED /* DefaultSummaryPersistenceRepository.swift */; };
+ 6A1A9FEA4B6B516726D88CFF /* DiContainer.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 221F2402E035C0A10B0C816D /* DiContainer.framework */; };
+ 6E4B21742A0CCE482D2450A1 /* BookListRepositoryImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C59F3B38928EAC23B9AB1B7 /* BookListRepositoryImpl.swift */; };
+ 728DC01FD8A786C9A1A80315 /* DomainInterface.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 1C0DAF15F0E90042DAD3E4C7 /* DomainInterface.framework */; };
+ 73AF9A7D49853C745765FED9 /* SummaryPersistenceRepositoryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4335C5F1B4229CB5FC98C1D /* SummaryPersistenceRepositoryTests.swift */; };
+ 7ACC00A7B1ED2A6EB7300BFD /* MockBookListRepositoryImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62B81DC06405DCB90288AEF1 /* MockBookListRepositoryImpl.swift */; };
+ 7C159382486CFF03695674BC /* MockBookListRepositoryImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62B81DC06405DCB90288AEF1 /* MockBookListRepositoryImpl.swift */; };
+ 7E63C28A03F1AD3A287F85A3 /* DomainInterface.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 1C0DAF15F0E90042DAD3E4C7 /* DomainInterface.framework */; };
+ 87597AEFB792796EC7EC1BD9 /* TestTags.swift in Resources */ = {isa = PBXBuildFile; fileRef = 97745ECBC297A4B299AC00D6 /* TestTags.swift */; };
+ 882F70ACF1C0B9E395F04D2A /* BookListRepositoryTests.swift in Resources */ = {isa = PBXBuildFile; fileRef = 70CDCDB015BFE50B62D67575 /* BookListRepositoryTests.swift */; };
+ 8B39D82BC09BDBF112C31516 /* BookListRepositoryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70CDCDB015BFE50B62D67575 /* BookListRepositoryTests.swift */; };
+ 8D3EE4A12A835297EA66F043 /* Model.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B001E4EB12F1B31552843EC8 /* Model.framework */; };
+ 9147F077F2652E83E0A4BDA5 /* DiContainer.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 221F2402E035C0A10B0C816D /* DiContainer.framework */; };
+ 93E926E96B2FE5F49248A1A2 /* SummaryPersistenceRepositoryImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = E45FEF503DD7CBFE586EC8CB /* SummaryPersistenceRepositoryImpl.swift */; };
+ 95CFB05A618505B31732BBA6 /* DomainInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1C0DAF15F0E90042DAD3E4C7 /* DomainInterface.framework */; };
+ A770DE82742A8B6ECC308EC5 /* SummaryPersistenceRepositoryTests.swift in Resources */ = {isa = PBXBuildFile; fileRef = F4335C5F1B4229CB5FC98C1D /* SummaryPersistenceRepositoryTests.swift */; };
+ A7FF4EC22712B99E0094507D /* DomainInterface.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 1C0DAF15F0E90042DAD3E4C7 /* DomainInterface.framework */; };
+ B32FCE1596C400339441732E /* DefaultSummaryPersistenceRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13C7F30EB1139E9BCDC23CED /* DefaultSummaryPersistenceRepository.swift */; };
+ BC3E81878EF9E2A2651B2F87 /* LogMacro.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B6CD10CD4A587CB9F328BD12 /* LogMacro.framework */; };
+ C1271844DE5B9D13E9E7CBC0 /* Service.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 549C82A8C41E9EBA4FDC62C7 /* Service.framework */; };
+ CB02AB758693F81C65872FA1 /* Service_Service.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = E8C20D4E047970824C7581BF /* Service_Service.bundle */; };
+ CD59907F5FF407743514DB95 /* Service.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 549C82A8C41E9EBA4FDC62C7 /* Service.framework */; };
+ D40D07E40818669B3EFF7A25 /* TuistBundle+RepositoryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81204029280D13DA4D483086 /* TuistBundle+RepositoryTests.swift */; };
+ D50A82DCA7A813DBD3EAC394 /* Service_Service.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E8C20D4E047970824C7581BF /* Service_Service.bundle */; };
+ DCD884BEF59149765121ADBC /* Service.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 549C82A8C41E9EBA4FDC62C7 /* Service.framework */; };
+ E1C5B928ADFF155EFD07FC43 /* SummaryPersistenceRepositoryImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = E45FEF503DD7CBFE586EC8CB /* SummaryPersistenceRepositoryImpl.swift */; };
+ E3B07C5281726FE5EFA47795 /* Service.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 549C82A8C41E9EBA4FDC62C7 /* Service.framework */; };
+ E4BC4D14B4BDBEE586BCD85C /* DiContainer.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 221F2402E035C0A10B0C816D /* DiContainer.framework */; };
+ F6485DD8D3DF35B1124BBC93 /* BookListRepositoryImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4C59F3B38928EAC23B9AB1B7 /* BookListRepositoryImpl.swift */; };
+ FD0FCD7CCB8F7E01AA5683F1 /* OSLog.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C2B6D597B16E9CDDB21DA680 /* OSLog.framework */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+ 4E116046ECD9E7E0E00E27AA /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = D776D4FCF51BF7CA8714C709 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 1D2AB1734E89DD04E08514BF;
+ remoteInfo = Repository;
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ 2C4A286AB5DA4946D832CFFF /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 40F1B57B9AB1628D70BD01D4 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 4398F88D03D5A186F12B0475 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 477416B92ACB7AB002B53595 /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ 9147F077F2652E83E0A4BDA5 /* DiContainer.framework in Dependencies */,
+ A7FF4EC22712B99E0094507D /* DomainInterface.framework in Dependencies */,
+ 2C23766DA5EC5A267DB2DE38 /* Service.framework in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ 582EDBFD84504A8728435A54 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 6262AF5C39AFA9F1F33CBA3C /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ CB02AB758693F81C65872FA1 /* Service_Service.bundle in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ 91EE5845A923942DC21F97E3 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ C8B0C06415756485596D2B30 /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ 6A1A9FEA4B6B516726D88CFF /* DiContainer.framework in Dependencies */,
+ 7E63C28A03F1AD3A287F85A3 /* DomainInterface.framework in Dependencies */,
+ DCD884BEF59149765121ADBC /* Service.framework in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ C93B16EDF20DCCB679FCBE16 /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ 01145525389F24D9CA763E87 /* DiContainer.framework in Dependencies */,
+ 728DC01FD8A786C9A1A80315 /* DomainInterface.framework in Dependencies */,
+ CD59907F5FF407743514DB95 /* Service.framework in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ F74FDD83F5AD40B82D185E33 /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ E4BC4D14B4BDBEE586BCD85C /* DiContainer.framework in Dependencies */,
+ 18C2CD6B70E5FF30ECBD55A0 /* DomainInterface.framework in Dependencies */,
+ E3B07C5281726FE5EFA47795 /* Service.framework in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ 03D39D8FFA6B36EC82B3C778 /* Repository.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Repository.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 132E678FD0ADA70C08C1A39A /* Repository-Debug-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Repository-Debug-Info.plist"; sourceTree = ""; };
+ 13C7F30EB1139E9BCDC23CED /* DefaultSummaryPersistenceRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DefaultSummaryPersistenceRepository.swift; sourceTree = ""; };
+ 18618E5B5CE8E0BEE5F43988 /* RepositoryTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RepositoryTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+ 18BF0EEF04EAE24831B86985 /* Repository-Prod-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Repository-Prod-Info.plist"; sourceTree = ""; };
+ 1C0DAF15F0E90042DAD3E4C7 /* DomainInterface.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DomainInterface.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 221F2402E035C0A10B0C816D /* DiContainer.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DiContainer.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 34E66E9088F97B1F320BF8B4 /* Repository_Stage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Repository_Stage.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 4131E6C825DB8588F94C2088 /* Repository_Prod.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Repository_Prod.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 41B5B2BB4E6A768C353D66BC /* Utill.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Utill.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 4C59F3B38928EAC23B9AB1B7 /* BookListRepositoryImpl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookListRepositoryImpl.swift; sourceTree = ""; };
+ 549C82A8C41E9EBA4FDC62C7 /* Service.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Service.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 62B81DC06405DCB90288AEF1 /* MockBookListRepositoryImpl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockBookListRepositoryImpl.swift; sourceTree = ""; };
+ 67D7E950058188008115D32D /* Repository_Debug.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Repository_Debug.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 70CDCDB015BFE50B62D67575 /* BookListRepositoryTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookListRepositoryTests.swift; sourceTree = ""; };
+ 7DB3288BD804BE671D5A9E6C /* RepositoryTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "RepositoryTests-Info.plist"; sourceTree = ""; };
+ 81204029280D13DA4D483086 /* TuistBundle+RepositoryTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistBundle+RepositoryTests.swift"; sourceTree = ""; };
+ 8434724C7BDFEA2B4A08E1DC /* Repository-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Repository-Info.plist"; sourceTree = ""; };
+ 97745ECBC297A4B299AC00D6 /* TestTags.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestTags.swift; sourceTree = ""; };
+ 9EE453BD6A8A16DC688113B4 /* Repository-Stage-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Repository-Stage-Info.plist"; sourceTree = ""; };
+ B001E4EB12F1B31552843EC8 /* Model.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Model.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ B6CD10CD4A587CB9F328BD12 /* LogMacro.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = LogMacro.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ C2B6D597B16E9CDDB21DA680 /* OSLog.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OSLog.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/OSLog.framework; sourceTree = DEVELOPER_DIR; };
+ E45FEF503DD7CBFE586EC8CB /* SummaryPersistenceRepositoryImpl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SummaryPersistenceRepositoryImpl.swift; sourceTree = ""; };
+ E8C20D4E047970824C7581BF /* Service_Service.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Service_Service.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
+ F4335C5F1B4229CB5FC98C1D /* SummaryPersistenceRepositoryTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SummaryPersistenceRepositoryTests.swift; sourceTree = ""; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 0FB70FF4FEA1761F17FE1173 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 19D6DFE3260C52297FB305E1 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 38FFD09AE8882DA767050547 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ FD0FCD7CCB8F7E01AA5683F1 /* OSLog.framework in Frameworks */,
+ 3219A995648C8F76E46FD041 /* DiContainer.framework in Frameworks */,
+ 95CFB05A618505B31732BBA6 /* DomainInterface.framework in Frameworks */,
+ BC3E81878EF9E2A2651B2F87 /* LogMacro.framework in Frameworks */,
+ 8D3EE4A12A835297EA66F043 /* Model.framework in Frameworks */,
+ 065CDD9E3F159CCEC6E1A6C0 /* Repository.framework in Frameworks */,
+ C1271844DE5B9D13E9E7CBC0 /* Service.framework in Frameworks */,
+ 19C775917BD20CEB27B664B0 /* Utill.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 9CD5486EB2DB2E60C9E68725 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ D85A6EEFE2D9D1FEEAE4808A /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 280ACB745E0A714E9FEB0344 /* Sources */ = {
+ isa = PBXGroup;
+ children = (
+ 70CDCDB015BFE50B62D67575 /* BookListRepositoryTests.swift */,
+ F4335C5F1B4229CB5FC98C1D /* SummaryPersistenceRepositoryTests.swift */,
+ 97745ECBC297A4B299AC00D6 /* TestTags.swift */,
+ );
+ path = Sources;
+ sourceTree = "";
+ };
+ 2A81942EBE921C2DE57092A4 /* BookList */ = {
+ isa = PBXGroup;
+ children = (
+ 4C59F3B38928EAC23B9AB1B7 /* BookListRepositoryImpl.swift */,
+ 13C7F30EB1139E9BCDC23CED /* DefaultSummaryPersistenceRepository.swift */,
+ 62B81DC06405DCB90288AEF1 /* MockBookListRepositoryImpl.swift */,
+ E45FEF503DD7CBFE586EC8CB /* SummaryPersistenceRepositoryImpl.swift */,
+ );
+ path = BookList;
+ sourceTree = "";
+ };
+ 2D734AC98FF0BE5BAB8E93F5 /* Sources */ = {
+ isa = PBXGroup;
+ children = (
+ 2A81942EBE921C2DE57092A4 /* BookList */,
+ );
+ path = Sources;
+ sourceTree = "";
+ };
+ 40D2E54445243144004079D1 /* Derived */ = {
+ isa = PBXGroup;
+ children = (
+ D7DB4D9797325E8956FD46BB /* InfoPlists */,
+ 595C2CDAD23E1F556EEBEA2A /* Sources */,
+ );
+ path = Derived;
+ sourceTree = "";
+ };
+ 4CBA9A858B0C70334F132096 /* Project */ = {
+ isa = PBXGroup;
+ children = (
+ 40D2E54445243144004079D1 /* Derived */,
+ E3A8829A46AD7054E2A63358 /* RepositoryTests */,
+ 2D734AC98FF0BE5BAB8E93F5 /* Sources */,
+ );
+ name = Project;
+ sourceTree = "";
+ };
+ 595C2CDAD23E1F556EEBEA2A /* Sources */ = {
+ isa = PBXGroup;
+ children = (
+ 81204029280D13DA4D483086 /* TuistBundle+RepositoryTests.swift */,
+ );
+ path = Sources;
+ sourceTree = "";
+ };
+ 5DD9E0D03C122068948E3C8D = {
+ isa = PBXGroup;
+ children = (
+ 4CBA9A858B0C70334F132096 /* Project */,
+ B9E40665B322982A6453CC4E /* Products */,
+ AAE649489D78DD6539EEB5FF /* Frameworks */,
+ );
+ sourceTree = "";
+ };
+ AAE649489D78DD6539EEB5FF /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ C2B6D597B16E9CDDB21DA680 /* OSLog.framework */,
+ );
+ name = Frameworks;
+ sourceTree = "";
+ };
+ B9E40665B322982A6453CC4E /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 221F2402E035C0A10B0C816D /* DiContainer.framework */,
+ 1C0DAF15F0E90042DAD3E4C7 /* DomainInterface.framework */,
+ B6CD10CD4A587CB9F328BD12 /* LogMacro.framework */,
+ B001E4EB12F1B31552843EC8 /* Model.framework */,
+ 67D7E950058188008115D32D /* Repository_Debug.framework */,
+ 4131E6C825DB8588F94C2088 /* Repository_Prod.framework */,
+ 34E66E9088F97B1F320BF8B4 /* Repository_Stage.framework */,
+ 03D39D8FFA6B36EC82B3C778 /* Repository.framework */,
+ 18618E5B5CE8E0BEE5F43988 /* RepositoryTests.xctest */,
+ E8C20D4E047970824C7581BF /* Service_Service.bundle */,
+ 549C82A8C41E9EBA4FDC62C7 /* Service.framework */,
+ 41B5B2BB4E6A768C353D66BC /* Utill.framework */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ D7DB4D9797325E8956FD46BB /* InfoPlists */ = {
+ isa = PBXGroup;
+ children = (
+ 132E678FD0ADA70C08C1A39A /* Repository-Debug-Info.plist */,
+ 8434724C7BDFEA2B4A08E1DC /* Repository-Info.plist */,
+ 18BF0EEF04EAE24831B86985 /* Repository-Prod-Info.plist */,
+ 9EE453BD6A8A16DC688113B4 /* Repository-Stage-Info.plist */,
+ 7DB3288BD804BE671D5A9E6C /* RepositoryTests-Info.plist */,
+ );
+ path = InfoPlists;
+ sourceTree = "";
+ };
+ E3A8829A46AD7054E2A63358 /* RepositoryTests */ = {
+ isa = PBXGroup;
+ children = (
+ 280ACB745E0A714E9FEB0344 /* Sources */,
+ );
+ path = RepositoryTests;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 1D2AB1734E89DD04E08514BF /* Repository */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = D3D537516A62B1120ED0BF47 /* Build configuration list for PBXNativeTarget "Repository" */;
+ buildPhases = (
+ 9E07F934F5242885DDEE70C1 /* Sources */,
+ AE11C0459D6E006BEEFBCC7B /* Resources */,
+ 0FB70FF4FEA1761F17FE1173 /* Frameworks */,
+ 40F1B57B9AB1628D70BD01D4 /* Embed Frameworks */,
+ C8B0C06415756485596D2B30 /* Dependencies */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = Repository;
+ packageProductDependencies = (
+ );
+ productName = Repository;
+ productReference = 03D39D8FFA6B36EC82B3C778 /* Repository.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+ 9559FC24EC53D8D0BD338554 /* Repository-Prod */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 1EF76F579EE9B85C9BA1C987 /* Build configuration list for PBXNativeTarget "Repository-Prod" */;
+ buildPhases = (
+ 9CA6631E3B325FF49042FB9F /* Sources */,
+ 5BBDD249C6E26BDED0656D81 /* Resources */,
+ 19D6DFE3260C52297FB305E1 /* Frameworks */,
+ 2C4A286AB5DA4946D832CFFF /* Embed Frameworks */,
+ F74FDD83F5AD40B82D185E33 /* Dependencies */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = "Repository-Prod";
+ packageProductDependencies = (
+ );
+ productName = Repository_Prod;
+ productReference = 4131E6C825DB8588F94C2088 /* Repository_Prod.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+ DB67058516DD24A3B236CF98 /* Repository-Stage */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 8B065261D334C3AA5D3FECDC /* Build configuration list for PBXNativeTarget "Repository-Stage" */;
+ buildPhases = (
+ 4AA835A49C3A5671D2B60669 /* Sources */,
+ 2A04FB2303D12C22932DE6A9 /* Resources */,
+ 9CD5486EB2DB2E60C9E68725 /* Frameworks */,
+ 4398F88D03D5A186F12B0475 /* Embed Frameworks */,
+ 477416B92ACB7AB002B53595 /* Dependencies */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = "Repository-Stage";
+ packageProductDependencies = (
+ );
+ productName = Repository_Stage;
+ productReference = 34E66E9088F97B1F320BF8B4 /* Repository_Stage.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+ E227DA11F88E56EFAEBAD447 /* RepositoryTests */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 3DA6B3319816C335CB014CC5 /* Build configuration list for PBXNativeTarget "RepositoryTests" */;
+ buildPhases = (
+ A8A9C3444CF567EF2CB598FD /* Sources */,
+ 6D03AC647552D7EADB48606C /* Resources */,
+ 38FFD09AE8882DA767050547 /* Frameworks */,
+ 91EE5845A923942DC21F97E3 /* Embed Frameworks */,
+ 6262AF5C39AFA9F1F33CBA3C /* Dependencies */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ DB292DB2F9379AEE25A91680 /* PBXTargetDependency */,
+ );
+ name = RepositoryTests;
+ packageProductDependencies = (
+ );
+ productName = RepositoryTests;
+ productReference = 18618E5B5CE8E0BEE5F43988 /* RepositoryTests.xctest */;
+ productType = "com.apple.product-type.bundle.unit-test";
+ };
+ EF8A7113879EAA16C97ED006 /* Repository-Debug */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 3B940F7202A60DE417E68CFF /* Build configuration list for PBXNativeTarget "Repository-Debug" */;
+ buildPhases = (
+ 3F18D07AD2DB2AC6A58E1998 /* Sources */,
+ 12285FC2BAE5689EBAC960C1 /* Resources */,
+ D85A6EEFE2D9D1FEEAE4808A /* Frameworks */,
+ 582EDBFD84504A8728435A54 /* Embed Frameworks */,
+ C93B16EDF20DCCB679FCBE16 /* Dependencies */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = "Repository-Debug";
+ packageProductDependencies = (
+ );
+ productName = Repository_Debug;
+ productReference = 67D7E950058188008115D32D /* Repository_Debug.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ D776D4FCF51BF7CA8714C709 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ BuildIndependentTargetsInParallel = YES;
+ TargetAttributes = {
+ };
+ };
+ buildConfigurationList = DAEAABCA4F1BDA57B6C50343 /* Build configuration list for PBXProject "Repository" */;
+ compatibilityVersion = "Xcode 14.0";
+ developmentRegion = ko;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ ko,
+ );
+ mainGroup = 5DD9E0D03C122068948E3C8D;
+ productRefGroup = B9E40665B322982A6453CC4E /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 1D2AB1734E89DD04E08514BF /* Repository */,
+ EF8A7113879EAA16C97ED006 /* Repository-Debug */,
+ 9559FC24EC53D8D0BD338554 /* Repository-Prod */,
+ DB67058516DD24A3B236CF98 /* Repository-Stage */,
+ E227DA11F88E56EFAEBAD447 /* RepositoryTests */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 12285FC2BAE5689EBAC960C1 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 2A04FB2303D12C22932DE6A9 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 5BBDD249C6E26BDED0656D81 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 6D03AC647552D7EADB48606C /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 882F70ACF1C0B9E395F04D2A /* BookListRepositoryTests.swift in Resources */,
+ A770DE82742A8B6ECC308EC5 /* SummaryPersistenceRepositoryTests.swift in Resources */,
+ 87597AEFB792796EC7EC1BD9 /* TestTags.swift in Resources */,
+ D50A82DCA7A813DBD3EAC394 /* Service_Service.bundle in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ AE11C0459D6E006BEEFBCC7B /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 3F18D07AD2DB2AC6A58E1998 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 556137B923E9F25D7C03B110 /* BookListRepositoryImpl.swift in Sources */,
+ B32FCE1596C400339441732E /* DefaultSummaryPersistenceRepository.swift in Sources */,
+ 19E087F33525DD097677C8CE /* MockBookListRepositoryImpl.swift in Sources */,
+ 93E926E96B2FE5F49248A1A2 /* SummaryPersistenceRepositoryImpl.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 4AA835A49C3A5671D2B60669 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 6E4B21742A0CCE482D2450A1 /* BookListRepositoryImpl.swift in Sources */,
+ 2293F8A0E6829ECB43CEC449 /* DefaultSummaryPersistenceRepository.swift in Sources */,
+ 58EBA9BB76D0DD8E52CA2496 /* MockBookListRepositoryImpl.swift in Sources */,
+ 51B80C6AA807515291900C55 /* SummaryPersistenceRepositoryImpl.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 9CA6631E3B325FF49042FB9F /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 0B3A76AD60A6CB76E72EFBE0 /* BookListRepositoryImpl.swift in Sources */,
+ 61587588E9B052B4292E34E9 /* DefaultSummaryPersistenceRepository.swift in Sources */,
+ 7ACC00A7B1ED2A6EB7300BFD /* MockBookListRepositoryImpl.swift in Sources */,
+ 238B0D2223946ECAA82874E1 /* SummaryPersistenceRepositoryImpl.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 9E07F934F5242885DDEE70C1 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ F6485DD8D3DF35B1124BBC93 /* BookListRepositoryImpl.swift in Sources */,
+ 5AFC0835DAE7D78047F177F7 /* DefaultSummaryPersistenceRepository.swift in Sources */,
+ 7C159382486CFF03695674BC /* MockBookListRepositoryImpl.swift in Sources */,
+ E1C5B928ADFF155EFD07FC43 /* SummaryPersistenceRepositoryImpl.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A8A9C3444CF567EF2CB598FD /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ D40D07E40818669B3EFF7A25 /* TuistBundle+RepositoryTests.swift in Sources */,
+ 8B39D82BC09BDBF112C31516 /* BookListRepositoryTests.swift in Sources */,
+ 73AF9A7D49853C745765FED9 /* SummaryPersistenceRepositoryTests.swift in Sources */,
+ 10F17259F446EE6A880770ED /* TestTags.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+ DB292DB2F9379AEE25A91680 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ name = Repository;
+ target = 1D2AB1734E89DD04E08514BF /* Repository */;
+ targetProxy = 4E116046ECD9E7E0E00E27AA /* PBXContainerItemProxy */;
+ };
+/* End PBXTargetDependency section */
+
+/* Begin XCBuildConfiguration section */
+ 0C6A620A4C8E345E889E938A /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/RepositoryTests-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Repository.RepositoryTests;
+ PRODUCT_NAME = RepositoryTests;
+ SDKROOT = iphoneos;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ };
+ name = Release;
+ };
+ 2AF0B99F7786470DD3276693 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/Repository-Stage-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Repository;
+ PRODUCT_NAME = Repository_Stage;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Release;
+ };
+ 55A8832240E0065CAB1C16A3 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/Repository-Prod-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Repository;
+ PRODUCT_NAME = Repository_Prod;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Debug;
+ };
+ 717DD2455B155951F8956208 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/Repository-Debug-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Repository;
+ PRODUCT_NAME = Repository_Debug;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Release;
+ };
+ 7BF05A91624E3A8B5F7AB44F /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/Repository-Prod-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Repository;
+ PRODUCT_NAME = Repository_Prod;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Release;
+ };
+ 83B18C5CDD1A1C8F2A36E6F2 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/RepositoryTests-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Repository.RepositoryTests;
+ PRODUCT_NAME = RepositoryTests;
+ SDKROOT = iphoneos;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ };
+ name = Debug;
+ };
+ 8A8C5921ED469D6D4673BC6C /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/Repository-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Repository;
+ PRODUCT_NAME = Repository;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Release;
+ };
+ AF4E2F5CF7E62C9331290AE5 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/Repository-Debug-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Repository;
+ PRODUCT_NAME = Repository_Debug;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Debug;
+ };
+ B0AE0914A75CE5EC79444A8B /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/Repository-Stage-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Repository;
+ PRODUCT_NAME = Repository_Stage;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Debug;
+ };
+ CA3FE08D945806877F69B4FC /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ DEAD_CODE_STRIPPING = YES;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ MTL_ENABLE_DEBUG_INFO = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ };
+ name = Debug;
+ };
+ CC8001B666D8100D543BE79C /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ DEAD_CODE_STRIPPING = YES;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+ DFA7F6136B4271C0218EC53C /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/Repository-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Repository;
+ PRODUCT_NAME = Repository;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Debug;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 1EF76F579EE9B85C9BA1C987 /* Build configuration list for PBXNativeTarget "Repository-Prod" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 55A8832240E0065CAB1C16A3 /* Debug */,
+ 7BF05A91624E3A8B5F7AB44F /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 3B940F7202A60DE417E68CFF /* Build configuration list for PBXNativeTarget "Repository-Debug" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ AF4E2F5CF7E62C9331290AE5 /* Debug */,
+ 717DD2455B155951F8956208 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 3DA6B3319816C335CB014CC5 /* Build configuration list for PBXNativeTarget "RepositoryTests" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 83B18C5CDD1A1C8F2A36E6F2 /* Debug */,
+ 0C6A620A4C8E345E889E938A /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 8B065261D334C3AA5D3FECDC /* Build configuration list for PBXNativeTarget "Repository-Stage" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ B0AE0914A75CE5EC79444A8B /* Debug */,
+ 2AF0B99F7786470DD3276693 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ D3D537516A62B1120ED0BF47 /* Build configuration list for PBXNativeTarget "Repository" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ DFA7F6136B4271C0218EC53C /* Debug */,
+ 8A8C5921ED469D6D4673BC6C /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ DAEAABCA4F1BDA57B6C50343 /* Build configuration list for PBXProject "Repository" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ CA3FE08D945806877F69B4FC /* Debug */,
+ CC8001B666D8100D543BE79C /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = D776D4FCF51BF7CA8714C709 /* Project object */;
+}
diff --git a/Projects/Core/Data/Repository/Repository.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Projects/Core/Data/Repository/Repository.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..919434a
--- /dev/null
+++ b/Projects/Core/Data/Repository/Repository.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/Projects/Core/Data/Repository/Repository.xcodeproj/xcshareddata/xcschemes/Repository-Debug.xcscheme b/Projects/Core/Data/Repository/Repository.xcodeproj/xcshareddata/xcschemes/Repository-Debug.xcscheme
new file mode 100644
index 0000000..817cbb3
--- /dev/null
+++ b/Projects/Core/Data/Repository/Repository.xcodeproj/xcshareddata/xcschemes/Repository-Debug.xcscheme
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Projects/Core/Data/Repository/Repository.xcodeproj/xcshareddata/xcschemes/Repository-Prod.xcscheme b/Projects/Core/Data/Repository/Repository.xcodeproj/xcshareddata/xcschemes/Repository-Prod.xcscheme
new file mode 100644
index 0000000..d7d792e
--- /dev/null
+++ b/Projects/Core/Data/Repository/Repository.xcodeproj/xcshareddata/xcschemes/Repository-Prod.xcscheme
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Projects/Core/Data/Repository/Repository.xcodeproj/xcshareddata/xcschemes/Repository-Stage.xcscheme b/Projects/Core/Data/Repository/Repository.xcodeproj/xcshareddata/xcschemes/Repository-Stage.xcscheme
new file mode 100644
index 0000000..d5da14e
--- /dev/null
+++ b/Projects/Core/Data/Repository/Repository.xcodeproj/xcshareddata/xcschemes/Repository-Stage.xcscheme
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Projects/Core/Data/Repository/Repository.xcodeproj/xcshareddata/xcschemes/Repository.xcscheme b/Projects/Core/Data/Repository/Repository.xcodeproj/xcshareddata/xcschemes/Repository.xcscheme
new file mode 100644
index 0000000..c38d1b2
--- /dev/null
+++ b/Projects/Core/Data/Repository/Repository.xcodeproj/xcshareddata/xcschemes/Repository.xcscheme
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Projects/Core/Data/Repository/RepositoryTests/Sources/BookListRepositoryTests.swift b/Projects/Core/Data/Repository/RepositoryTests/Sources/BookListRepositoryTests.swift
new file mode 100644
index 0000000..7fd5fd5
--- /dev/null
+++ b/Projects/Core/Data/Repository/RepositoryTests/Sources/BookListRepositoryTests.swift
@@ -0,0 +1,207 @@
+//
+// BookListRepositoryTests.swift
+// RepositoryTests
+//
+// Created by Wonji Suh on 9/11/25.
+//
+
+import Testing
+import Foundation
+@testable import Repository
+@testable import DomainInterface
+@testable import Model
+
+@MainActor
+struct BookListRepositoryTests {
+
+ // MARK: - Mock Data
+
+ private let mockBooks = [
+ Book(
+ title: "클린 코드",
+ author: "로버트 C. 마틴",
+ pages: 464,
+ image: "clean_code.jpg",
+ releaseDate: "2013-12-24",
+ dedication: "프로그래밍 장인들에게",
+ summary: "애자일 소프트웨어 장인 정신",
+ wiki: "https://ko.wikipedia.org/wiki/클린_코드",
+ chapters: ["깨끗한 코드", "의미 있는 이름", "함수", "주석", "형식 맞추기"]
+ ),
+ Book(
+ title: "이펙티브 자바",
+ author: "조슈아 블로크",
+ pages: 416,
+ image: "effective_java.jpg",
+ releaseDate: "2018-10-26",
+ dedication: "자바 개발자들을 위하여",
+ summary: "자바 플랫폼 모범 사례 78가지",
+ wiki: "https://ko.wikipedia.org/wiki/이펙티브_자바",
+ chapters: ["객체 생성과 파괴", "모든 객체의 공통 메서드", "클래스와 인터페이스"]
+ ),
+ Book(
+ title: "스위프트 프로그래밍",
+ author: "야곰",
+ pages: 792,
+ image: "swift_programming.jpg",
+ releaseDate: "2019-10-10",
+ dedication: "스위프트를 사랑하는 모든 개발자들에게",
+ summary: "Swift 5를 다루는 기본서의 바이블",
+ wiki: "https://ko.wikipedia.org/wiki/스위프트_(프로그래밍_언어)",
+ chapters: ["스위프트 기초", "데이터 타입", "연산자", "흐름 제어", "함수"]
+ )
+ ]
+
+ // MARK: - Tests
+
+ @Test("BookListRepositoryImpl 초기화 테스트", .tags(.repositoryTest, .bookListTest, .realImplementationTest))
+ func testBookListRepositoryInitialization() {
+ // When
+ let repository = BookListRepositoryImpl()
+
+ // Then
+ #expect(repository != nil)
+ }
+
+ @Test("DefaultBookListRepositoryImpl 초기화 테스트", .tags(.repositoryTest, .bookListTest, .defaultImplementationTest))
+ func testDefaultBookListRepositoryInitialization() {
+ // When
+ let repository = DefaultBookListRepositoryImpl()
+
+ // Then
+ #expect(repository != nil)
+ }
+
+ @Test("DefaultBookListRepositoryImpl 북 리스트 조회 테스트", .tags(.repositoryTest, .bookListTest, .defaultImplementationTest))
+ func testDefaultRepositoryGetBookList() async throws {
+ // Given
+ let repository = DefaultBookListRepositoryImpl()
+
+ // When
+ let result = try await repository.getBookList()
+
+ // Then
+ #expect(result.count == 5)
+ #expect(result[0].title == "클린 코드")
+ #expect(result[1].title == "이펙티브 자바")
+ #expect(result[2].title == "스위프트 프로그래밍")
+ }
+
+ @Test("DefaultBookListRepositoryImpl 여러 번 호출 일관성 테스트", .tags(.repositoryTest, .bookListTest, .defaultImplementationTest))
+ func testDefaultRepositoryConsistency() async throws {
+ // Given
+ let repository = DefaultBookListRepositoryImpl()
+
+ // When
+ let result1 = try await repository.getBookList()
+ let result2 = try await repository.getBookList()
+ let result3 = try await repository.getBookList()
+
+ // Then
+ #expect(result1 == result2)
+ #expect(result2 == result3)
+ #expect(result1.count == 5)
+ #expect(result1[0].title == "클린 코드")
+ }
+
+ @Test("BookListInterface 프로토콜 준수 테스트", .tags(.repositoryTest, .bookListTest))
+ func testBookListInterfaceConformance() {
+ // Given
+ let defaultRepo: BookListInterface = DefaultBookListRepositoryImpl()
+ let realRepo: BookListInterface = BookListRepositoryImpl()
+
+ // Then
+ #expect(defaultRepo != nil)
+ #expect(realRepo != nil)
+ }
+
+ @Test("Book 모델 구조 검증 테스트", .tags(.modelTest, .dataValidationTest))
+ func testBookModelStructure() {
+ // Given
+ let book = mockBooks[0]
+
+ // Then
+ #expect(book.title == "클린 코드")
+ #expect(book.author == "로버트 C. 마틴")
+ #expect(book.pages == 464)
+ #expect(book.image == "clean_code.jpg")
+ #expect(book.releaseDate == "2013-12-24")
+ #expect(book.dedication == "프로그래밍 장인들에게")
+ #expect(book.summary == "애자일 소프트웨어 장인 정신")
+ #expect(book.wiki == "https://ko.wikipedia.org/wiki/클린_코드")
+ #expect(book.chapters.count == 5)
+ #expect(book.chapters.contains("깨끗한 코드"))
+ }
+
+ @Test("Book 모델 Equatable 테스트", .tags(.modelTest, .dataValidationTest))
+ func testBookEquatable() {
+ // Given
+ let book1 = mockBooks[0]
+ let book2 = Book(
+ title: "클린 코드",
+ author: "로버트 C. 마틴",
+ pages: 464,
+ image: "clean_code.jpg",
+ releaseDate: "2013-12-24",
+ dedication: "프로그래밍 장인들에게",
+ summary: "애자일 소프트웨어 장인 정신",
+ wiki: "https://ko.wikipedia.org/wiki/클린_코드",
+ chapters: ["깨끗한 코드", "의미 있는 이름", "함수", "주석", "형식 맞추기"]
+ )
+ let book3 = mockBooks[1]
+
+ // Then
+ #expect(book1 == book2)
+ #expect(book1 != book3)
+ }
+
+ @Test("여러 책 데이터 검증 테스트", .tags(.modelTest, .dataValidationTest))
+ func testMultipleBooksData() {
+ // Given
+ let books = mockBooks
+
+ // Then
+ #expect(books.count == 3)
+ #expect(books[0].author == "로버트 C. 마틴")
+ #expect(books[1].author == "조슈아 블로크")
+ #expect(books[2].author == "야곰")
+
+ // 모든 책이 고유한 제목을 가지는지 확인
+ let titles = Set(books.map { $0.title })
+ #expect(titles.count == books.count)
+ }
+
+ @Test("Book 배열 정렬 테스트", .tags(.modelTest, .performanceTest))
+ func testBookArraySorting() {
+ // Given
+ let books = mockBooks
+
+ // When
+ let sortedByTitle = books.sorted { $0.title < $1.title }
+ let sortedByAuthor = books.sorted { $0.author < $1.author }
+ let sortedByPages = books.sorted { $0.pages < $1.pages }
+
+ // Then
+ #expect(sortedByTitle[0].title == "스위프트 프로그래밍")
+ #expect(sortedByAuthor[0].author == "로버트 C. 마틴")
+ #expect(sortedByPages[0].pages == 416)
+ #expect(sortedByPages[2].pages == 792)
+ }
+
+ @Test("Book 필터링 테스트", .tags(.modelTest, .performanceTest))
+ func testBookFiltering() {
+ // Given
+ let books = mockBooks
+
+ // When
+ let longBooks = books.filter { $0.pages > 500 }
+ let koreanAuthors = books.filter { $0.author.contains("한글") || $0.author == "야곰" }
+ let booksWithManyChapters = books.filter { $0.chapters.count > 4 }
+
+ // Then
+ #expect(longBooks.count == 1)
+ #expect(longBooks[0].title == "스위프트 프로그래밍")
+ #expect(koreanAuthors.count == 1)
+ #expect(booksWithManyChapters.count == 2)
+ }
+}
diff --git a/Projects/Core/Data/Repository/RepositoryTests/Sources/SummaryPersistenceRepositoryTests.swift b/Projects/Core/Data/Repository/RepositoryTests/Sources/SummaryPersistenceRepositoryTests.swift
new file mode 100644
index 0000000..581058b
--- /dev/null
+++ b/Projects/Core/Data/Repository/RepositoryTests/Sources/SummaryPersistenceRepositoryTests.swift
@@ -0,0 +1,249 @@
+//
+// SummaryPersistenceRepositoryTests.swift
+// RepositoryTests
+//
+// Created by Wonji Suh on 9/11/25.
+//
+
+import Testing
+import Foundation
+@testable import Repository
+@testable import DomainInterface
+
+struct SummaryPersistenceRepositoryTests {
+
+ // MARK: - Mock Data
+
+ private let mockBooks = [
+ ("클린 코드", "로버트 C. 마틴"),
+ ("이펙티브 자바", "조슈아 블로크"),
+ ("스위프트 프로그래밍", "야곰"),
+ ("디자인 패턴", "GoF"),
+ ("리팩토링", "마틴 파울러")
+ ]
+
+ // MARK: - Tests
+
+ @Test("SummaryPersistenceRepositoryImpl 초기화 테스트", .tags(.repositoryTest, .summaryPersistenceTest, .realImplementationTest))
+ func testSummaryPersistenceRepositoryInitialization() {
+ // When
+ let repository = SummaryPersistenceRepositoryImpl()
+
+ // Then
+ #expect(repository != nil)
+ }
+
+ @Test("DefaultSummaryPersistenceRepository 초기화 테스트", .tags(.repositoryTest, .summaryPersistenceTest, .defaultImplementationTest))
+ func testDefaultSummaryPersistenceRepositoryInitialization() {
+ // When
+ let repository = DefaultSummaryPersistenceRepository()
+
+ // Then
+ #expect(repository != nil)
+ }
+
+ @Test("DefaultSummaryPersistenceRepository 로드 테스트", .tags(.repositoryTest, .summaryPersistenceTest, .defaultImplementationTest))
+ func testDefaultRepositoryLoad() {
+ // Given
+ let repository = DefaultSummaryPersistenceRepository()
+
+ // When & Then (미리 설정된 목데이터 확인)
+ let cleanCodeResult = repository.loadSummaryExpanded(for: "클린 코드", author: "로버트 C. 마틴")
+ let effectiveJavaResult = repository.loadSummaryExpanded(for: "이펙티브 자바", author: "조슈아 블로크")
+ let swiftResult = repository.loadSummaryExpanded(for: "스위프트 프로그래밍", author: "야곰")
+
+ #expect(cleanCodeResult == true)
+ #expect(effectiveJavaResult == false)
+ #expect(swiftResult == true)
+
+ // 설정되지 않은 책은 false 반환
+ let unknownResult = repository.loadSummaryExpanded(for: "알 수 없는 책", author: "알 수 없는 작가")
+ #expect(unknownResult == false)
+ }
+
+ @Test("DefaultSummaryPersistenceRepository 저장 테스트", .tags(.repositoryTest, .summaryPersistenceTest, .defaultImplementationTest))
+ func testDefaultRepositorySave() {
+ // Given
+ let repository = DefaultSummaryPersistenceRepository()
+
+ // When & Then (예외가 발생하지 않으면 성공)
+ for (title, author) in mockBooks {
+ repository.saveSummaryExpanded(true, for: title, author: author)
+ repository.saveSummaryExpanded(false, for: title, author: author)
+ }
+ }
+
+ @Test("SummaryPersistenceRepositoryImpl UserDefaults 기본 테스트", .tags(.repositoryTest, .summaryPersistenceTest, .userDefaultsTest, .realImplementationTest))
+ func testRealRepositoryUserDefaults() {
+ // Given
+ let repository = SummaryPersistenceRepositoryImpl()
+ let (title, author) = mockBooks[0]
+
+ // When
+ repository.saveSummaryExpanded(true, for: title, author: author)
+ let result1 = repository.loadSummaryExpanded(for: title, author: author)
+
+ repository.saveSummaryExpanded(false, for: title, author: author)
+ let result2 = repository.loadSummaryExpanded(for: title, author: author)
+
+ // Then
+ #expect(result1 == true)
+ #expect(result2 == false)
+
+ // Cleanup
+ UserDefaults.standard.removeObject(forKey: "SummaryExpanded.\(title)|\(author)")
+ }
+
+ @Test("여러 책의 독립적인 상태 관리 테스트", .tags(.repositoryTest, .summaryPersistenceTest, .userDefaultsTest, .realImplementationTest))
+ func testMultipleBooksIndependentState() {
+ // Given
+ let testDefaults = UserDefaults(suiteName: "SummaryPersistenceTests")!
+ testDefaults.removePersistentDomain(forName: "SummaryPersistenceTests")
+
+ let repository = SummaryPersistenceRepositoryImpl(userDefaults: testDefaults)
+ let testStates = [true, false, true, false, true]
+
+ // When
+ for (index, (title, author)) in mockBooks.enumerated() {
+ repository.saveSummaryExpanded(testStates[index], for: title, author: author)
+ }
+
+ // Then
+ for (index, (title, author)) in mockBooks.enumerated() {
+ let result = repository.loadSummaryExpanded(for: title, author: author)
+ #expect(result == testStates[index], "Expected \(testStates[index]) for \(title) by \(author), but got \(result)")
+ }
+
+ // Cleanup
+ testDefaults.removePersistentDomain(forName: "SummaryPersistenceTests")
+ }
+
+ @Test("상태 변경 추적 테스트", .tags(.repositoryTest, .summaryPersistenceTest, .userDefaultsTest, .realImplementationTest))
+ func testStateChangeTracking() {
+ // Given
+ let repository = SummaryPersistenceRepositoryImpl()
+ let (title, author) = mockBooks[1]
+
+ // When & Then
+ let states = [false, true, false, true, true, false]
+
+ for state in states {
+ repository.saveSummaryExpanded(state, for: title, author: author)
+ let currentState = repository.loadSummaryExpanded(for: title, author: author)
+ #expect(currentState == state)
+ }
+
+ // Cleanup
+ UserDefaults.standard.removeObject(forKey: "SummaryExpanded.\(title)|\(author)")
+ }
+
+ @Test("SummaryPersistenceRepositoryInterface 프로토콜 준수 테스트", .tags(.repositoryTest, .summaryPersistenceTest))
+ func testSummaryPersistenceInterfaceConformance() {
+ // Given
+ let defaultRepo: SummaryPersistenceRepositoryInterface = DefaultSummaryPersistenceRepository()
+ let realRepo: SummaryPersistenceRepositoryInterface = SummaryPersistenceRepositoryImpl()
+
+ // Then
+ #expect(defaultRepo != nil)
+ #expect(realRepo != nil)
+ }
+
+ @Test("Key 생성 일관성 테스트", .tags(.repositoryTest, .summaryPersistenceTest, .userDefaultsTest, .realImplementationTest))
+ func testKeyGenerationConsistency() {
+ // Given
+ let repository = SummaryPersistenceRepositoryImpl()
+ let (title, author) = mockBooks[2]
+
+ // When
+ repository.saveSummaryExpanded(true, for: title, author: author)
+ let result1 = repository.loadSummaryExpanded(for: title, author: author)
+ let result2 = repository.loadSummaryExpanded(for: title, author: author)
+ let result3 = repository.loadSummaryExpanded(for: title, author: author)
+
+ // Then
+ #expect(result1 == result2)
+ #expect(result2 == result3)
+ #expect(result1 == true)
+
+ // Cleanup
+ UserDefaults.standard.removeObject(forKey: "SummaryExpanded.\(title)|\(author)")
+ }
+
+ @Test("특수 문자가 포함된 제목과 작가 테스트", .tags(.repositoryTest, .summaryPersistenceTest, .dataValidationTest, .userDefaultsTest))
+ func testSpecialCharactersInTitleAndAuthor() {
+ // Given
+ let repository = SummaryPersistenceRepositoryImpl()
+ let specialCases = [
+ ("Special!@#$%^&*()", "Author한글テスト"),
+ ("Title with spaces and numbers 123", "Author with 中文"),
+ ("", ""),
+ ("Title|With|Pipes", "Author:With:Colons"),
+ ("Very Long Title That Contains Many Characters And Numbers 123456789", "Very Long Author Name With Special Characters !@#$%^&*()")
+ ]
+
+ // When & Then
+ for (title, author) in specialCases {
+ repository.saveSummaryExpanded(true, for: title, author: author)
+ let result = repository.loadSummaryExpanded(for: title, author: author)
+ #expect(result == true)
+
+ // Cleanup
+ UserDefaults.standard.removeObject(forKey: "SummaryExpanded.\(title)|\(author)")
+ }
+ }
+
+ @Test("빈 문자열 처리 테스트", .tags(.repositoryTest, .summaryPersistenceTest, .dataValidationTest, .userDefaultsTest))
+ func testEmptyStringHandling() {
+ // Given (테스트 전용 UserDefaults 권장)
+ let defaults = UserDefaults(suiteName: "SummaryPersistenceTests")!
+ defaults.removePersistentDomain(forName: "SummaryPersistenceTests")
+ let repository = SummaryPersistenceRepositoryImpl(userDefaults: defaults)
+
+ let testCases = [
+ ("", ""),
+ ("Title", ""),
+ ("", "Author"),
+ ("Normal Title", "Normal Author")
+ ]
+
+ // When & Then
+ for (title, author) in testCases {
+ repository.saveSummaryExpanded(true, for: title, author: author)
+ let result = repository.loadSummaryExpanded(for: title, author: author)
+ #expect(result == true, "(\(title)|\(author)) but got \(result)")
+ }
+
+ // Cleanup
+ defaults.removePersistentDomain(forName: "SummaryPersistenceTests")
+ }
+
+ @Test("대량 데이터 처리 테스트", .tags(.repositoryTest, .summaryPersistenceTest, .performanceTest, .userDefaultsTest))
+ func testLargeDataHandling() {
+ // Given
+ let repository = SummaryPersistenceRepositoryImpl()
+ let bookCount = 100
+ var testBooks: [(String, String)] = []
+
+ for i in 0.. [Book] {
+ let bookData = try await JSONManager.parseFromFile(
+ BookDTO.self,
+ fileName: "BookListData", // 실제 파일명 확실히
+ bundle: ServiceBundle.bundle
+ )
+ return bookData.data.toDomain()
+ }
+}
+
+public extension RegisterModule {
+ var bookListRepositoryImplModule: () -> Module {
+ makeDependencyImproved(BookListInterface.self) {
+ BookListRepositoryImpl()
+ }
+ }
+}
+
diff --git a/Projects/Core/Data/Repository/Sources/BookList/DefaultSummaryPersistenceRepository.swift b/Projects/Core/Data/Repository/Sources/BookList/DefaultSummaryPersistenceRepository.swift
new file mode 100644
index 0000000..b4b46e4
--- /dev/null
+++ b/Projects/Core/Data/Repository/Sources/BookList/DefaultSummaryPersistenceRepository.swift
@@ -0,0 +1,74 @@
+//
+// DefaultSummaryPersistenceRepository.swift
+// Repository
+//
+// Created by Wonji Suh on 9/10/25.
+//
+
+import DomainInterface
+import Model
+import Combine
+
+public final class DefaultSummaryPersistenceRepository: SummaryPersistenceRepositoryInterface {
+
+ private var storage: [String: Bool] = [:]
+ private var loadCallCount = 0
+ private var saveCallCount = 0
+
+ public init() {
+ setupMockData()
+ }
+
+ private func setupMockData() {
+ storage["SummaryExpanded.클린 코드|로버트 C. 마틴"] = true
+ storage["SummaryExpanded.이펙티브 자바|조슈아 블로크"] = false
+ storage["SummaryExpanded.스위프트 프로그래밍|야곰"] = true
+ storage["SummaryExpanded.디자인 패턴|GoF"] = false
+ storage["SummaryExpanded.리팩토링|마틴 파울러"] = true
+ }
+
+ public func loadSummaryExpanded(for title: String, author: String) -> Bool {
+ loadCallCount += 1
+ let key = generateKey(for: title, author: author)
+ return storage[key] ?? false
+ }
+
+ public func saveSummaryExpanded(_ expanded: Bool, for title: String, author: String) {
+ saveCallCount += 1
+ let key = generateKey(for: title, author: author)
+ storage[key] = expanded
+ }
+
+ private func generateKey(for title: String, author: String) -> String {
+ return "SummaryExpanded.\(title)|\(author)"
+ }
+
+ // MARK: - Test Helper Methods
+
+ public func getLoadCallCount() -> Int {
+ return loadCallCount
+ }
+
+ public func getSaveCallCount() -> Int {
+ return saveCallCount
+ }
+
+ public func getAllStoredData() -> [String: Bool] {
+ return storage
+ }
+
+ public func setStoredData(_ data: [String: Bool]) {
+ storage = data
+ }
+
+ public func reset() {
+ storage.removeAll()
+ loadCallCount = 0
+ saveCallCount = 0
+ setupMockData()
+ }
+
+ public func clearStorage() {
+ storage.removeAll()
+ }
+}
diff --git a/Projects/Core/Data/Repository/Sources/BookList/MockBookListRepositoryImpl.swift b/Projects/Core/Data/Repository/Sources/BookList/MockBookListRepositoryImpl.swift
new file mode 100644
index 0000000..48adc03
--- /dev/null
+++ b/Projects/Core/Data/Repository/Sources/BookList/MockBookListRepositoryImpl.swift
@@ -0,0 +1,119 @@
+//
+// DefaultBookListRepositoryImpl.swift
+// Repository
+//
+// Created by Wonji Suh on 9/8/25.
+//
+
+import DomainInterface
+import Model
+
+final public class DefaultBookListRepositoryImpl: BookListInterface {
+
+ public enum MockError: Error {
+ case networkError
+ case parseError
+ case notFound
+ }
+
+ private var mockBooks: [Book] = []
+ private var shouldThrowError = false
+ private var errorToThrow: Error = MockError.networkError
+ private var callCount = 0
+
+ public init() {
+ setupDefaultBooks()
+ }
+
+ private func setupDefaultBooks() {
+ mockBooks = [
+ Book(
+ title: "클린 코드",
+ author: "로버트 C. 마틴",
+ pages: 464,
+ image: "clean_code.jpg",
+ releaseDate: "2013-12-24",
+ dedication: "프로그래밍 장인들에게",
+ summary: "애자일 소프트웨어 장인 정신",
+ wiki: "https://ko.wikipedia.org/wiki/클린_코드",
+ chapters: ["깨끗한 코드", "의미 있는 이름", "함수", "주석", "형식 맞추기"]
+ ),
+ Book(
+ title: "이펙티브 자바",
+ author: "조슈아 블로크",
+ pages: 416,
+ image: "effective_java.jpg",
+ releaseDate: "2018-10-26",
+ dedication: "자바 개발자들을 위하여",
+ summary: "자바 플랫폼 모범 사례 78가지",
+ wiki: "https://ko.wikipedia.org/wiki/이펙티브_자바",
+ chapters: ["객체 생성과 파괴", "모든 객체의 공통 메서드", "클래스와 인터페이스"]
+ ),
+ Book(
+ title: "스위프트 프로그래밍",
+ author: "야곰",
+ pages: 792,
+ image: "swift_programming.jpg",
+ releaseDate: "2019-10-10",
+ dedication: "스위프트를 사랑하는 모든 개발자들에게",
+ summary: "Swift 5를 다루는 기본서의 바이블",
+ wiki: "https://ko.wikipedia.org/wiki/스위프트_(프로그래밍_언어)",
+ chapters: ["스위프트 기초", "데이터 타입", "연산자", "흐름 제어", "함수"]
+ ),
+ Book(
+ title: "디자인 패턴",
+ author: "GoF",
+ pages: 395,
+ image: "design_patterns.jpg",
+ releaseDate: "1994-10-31",
+ dedication: "객체지향 설계를 위하여",
+ summary: "재사용 가능한 객체지향 소프트웨어의 핵심 요소",
+ wiki: "https://ko.wikipedia.org/wiki/디자인_패턴",
+ chapters: ["생성 패턴", "구조 패턴", "행위 패턴"]
+ ),
+ Book(
+ title: "리팩토링",
+ author: "마틴 파울러",
+ pages: 418,
+ image: "refactoring.jpg",
+ releaseDate: "2018-11-23",
+ dedication: "코드 품질 향상을 위하여",
+ summary: "기존 코드를 안전하게 개선하는 방법",
+ wiki: "https://ko.wikipedia.org/wiki/리팩토링",
+ chapters: ["리팩토링 원칙", "코드에서 나는 악취", "테스트 구축"]
+ )
+ ]
+ }
+
+ public func getBookList() async throws -> [Book] {
+ callCount += 1
+
+ if shouldThrowError {
+ throw errorToThrow
+ }
+
+ return mockBooks
+ }
+
+ // MARK: - Test Helper Methods
+
+ public func setMockBooks(_ books: [Book]) {
+ self.mockBooks = books
+ }
+
+ public func setShouldThrowError(_ shouldThrow: Bool, error: Error = MockError.networkError) {
+ self.shouldThrowError = shouldThrow
+ self.errorToThrow = error
+ }
+
+ public func getCallCount() -> Int {
+ return callCount
+ }
+
+ public func reset() {
+ setupDefaultBooks()
+ shouldThrowError = false
+ errorToThrow = MockError.networkError
+ callCount = 0
+ }
+}
diff --git a/Projects/Core/Data/Repository/Sources/BookList/SummaryPersistenceRepositoryImpl.swift b/Projects/Core/Data/Repository/Sources/BookList/SummaryPersistenceRepositoryImpl.swift
new file mode 100644
index 0000000..6777861
--- /dev/null
+++ b/Projects/Core/Data/Repository/Sources/BookList/SummaryPersistenceRepositoryImpl.swift
@@ -0,0 +1,32 @@
+//
+// SummaryPersistenceRepository.swift
+// Repository
+//
+// Created by Wonji Suh on 9/10/25.
+//
+
+import Foundation
+import DomainInterface
+
+@Observable
+public final class SummaryPersistenceRepositoryImpl: SummaryPersistenceRepositoryInterface, Observable {
+ private let userDefaults: UserDefaults
+
+ public init(userDefaults: UserDefaults = .standard) {
+ self.userDefaults = userDefaults
+ }
+
+ public func loadSummaryExpanded(for title: String, author: String) -> Bool {
+ let key = generateKey(for: title, author: author)
+ return userDefaults.bool(forKey: key)
+ }
+
+ public func saveSummaryExpanded(_ expanded: Bool, for title: String, author: String) {
+ let key = generateKey(for: title, author: author)
+ userDefaults.set(expanded, forKey: key)
+ }
+
+ private func generateKey(for title: String, author: String) -> String {
+ return "SummaryExpanded.\(title)|\(author)"
+ }
+}
diff --git a/Projects/Core/Domain/DomainInterface/Derived/InfoPlists/DomainInterface-Debug-Info.plist b/Projects/Core/Domain/DomainInterface/Derived/InfoPlists/DomainInterface-Debug-Info.plist
new file mode 100644
index 0000000..323e5ec
--- /dev/null
+++ b/Projects/Core/Domain/DomainInterface/Derived/InfoPlists/DomainInterface-Debug-Info.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ FMWK
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/Projects/Core/Domain/DomainInterface/Derived/InfoPlists/DomainInterface-Info.plist b/Projects/Core/Domain/DomainInterface/Derived/InfoPlists/DomainInterface-Info.plist
new file mode 100644
index 0000000..323e5ec
--- /dev/null
+++ b/Projects/Core/Domain/DomainInterface/Derived/InfoPlists/DomainInterface-Info.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ FMWK
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/Projects/Core/Domain/DomainInterface/Derived/InfoPlists/DomainInterface-Prod-Info.plist b/Projects/Core/Domain/DomainInterface/Derived/InfoPlists/DomainInterface-Prod-Info.plist
new file mode 100644
index 0000000..323e5ec
--- /dev/null
+++ b/Projects/Core/Domain/DomainInterface/Derived/InfoPlists/DomainInterface-Prod-Info.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ FMWK
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/Projects/Core/Domain/DomainInterface/Derived/InfoPlists/DomainInterface-Stage-Info.plist b/Projects/Core/Domain/DomainInterface/Derived/InfoPlists/DomainInterface-Stage-Info.plist
new file mode 100644
index 0000000..323e5ec
--- /dev/null
+++ b/Projects/Core/Domain/DomainInterface/Derived/InfoPlists/DomainInterface-Stage-Info.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ FMWK
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/Projects/Core/Domain/DomainInterface/Derived/InfoPlists/DomainInterfaceTests-Info.plist b/Projects/Core/Domain/DomainInterface/Derived/InfoPlists/DomainInterfaceTests-Info.plist
new file mode 100644
index 0000000..6c40a6c
--- /dev/null
+++ b/Projects/Core/Domain/DomainInterface/Derived/InfoPlists/DomainInterfaceTests-Info.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ BNDL
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/Projects/Core/Domain/DomainInterface/Derived/Sources/TuistBundle+DomainInterfaceTests.swift b/Projects/Core/Domain/DomainInterface/Derived/Sources/TuistBundle+DomainInterfaceTests.swift
new file mode 100644
index 0000000..b8cdc50
--- /dev/null
+++ b/Projects/Core/Domain/DomainInterface/Derived/Sources/TuistBundle+DomainInterfaceTests.swift
@@ -0,0 +1,25 @@
+// periphery:ignore:all
+// swiftlint:disable:this file_name
+// swiftlint:disable all
+// swift-format-ignore-file
+// swiftformat:disable all
+#if hasFeature(InternalImportsByDefault)
+public import Foundation
+#else
+import Foundation
+#endif
+// MARK: - Swift Bundle Accessor for Frameworks
+private class BundleFinder {}
+extension Foundation.Bundle {
+/// Since DomainInterfaceTests is a unit tests, the bundle for classes within this module can be used directly.
+ static let module = Bundle(for: BundleFinder.self)
+}
+// MARK: - Objective-C Bundle Accessor
+@objc
+public class DomainInterfaceTestsResources: NSObject {
+@objc public class var bundle: Bundle {
+ return .module
+}
+}
+// swiftformat:enable all
+// swiftlint:enable all
\ No newline at end of file
diff --git a/Projects/Core/Domain/DomainInterface/DomainInterface.xcodeproj/project.pbxproj b/Projects/Core/Domain/DomainInterface/DomainInterface.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..960c1e4
--- /dev/null
+++ b/Projects/Core/Domain/DomainInterface/DomainInterface.xcodeproj/project.pbxproj
@@ -0,0 +1,1045 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 55;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 1C5D4F2707BE97523DA3627D /* SummaryPersistenceRepositoryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF5C79E6A5EABF2478B69A9C /* SummaryPersistenceRepositoryInterface.swift */; };
+ 2954264D8209B83994DAFDFA /* SummaryPersistenceRepositoryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF5C79E6A5EABF2478B69A9C /* SummaryPersistenceRepositoryInterface.swift */; };
+ 3081EFEA9CFF0DBD87FE81CC /* BookListInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = 809A051BD9D115DD41FB0365 /* BookListInterface.swift */; };
+ 32F96CC4681C564A878EDBF1 /* Model.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = D6EEC0400C29FD0B52020310 /* Model.framework */; };
+ 353BF1AD56F4CC357E19D719 /* Test.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C8C9CF1C2E1A74CF11222B2 /* Test.swift */; };
+ 57E5E0940F81FC8D1DFD045E /* DomainInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 35D56B0B55DD9F93D8170AD5 /* DomainInterface.framework */; };
+ 7A7FB85390A2933C5CF18C9F /* Model.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = D6EEC0400C29FD0B52020310 /* Model.framework */; };
+ 8594C675638CBAF1515D0449 /* SummaryPersistenceRepositoryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF5C79E6A5EABF2478B69A9C /* SummaryPersistenceRepositoryInterface.swift */; };
+ 888B43BDDCEB71003BF1B604 /* Model.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = D6EEC0400C29FD0B52020310 /* Model.framework */; };
+ 975EC4F42E1D9BD2ADB90328 /* BookListInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = 809A051BD9D115DD41FB0365 /* BookListInterface.swift */; };
+ B14154C06C5D5795D4CF4DCA /* SummaryPersistenceRepositoryInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = DF5C79E6A5EABF2478B69A9C /* SummaryPersistenceRepositoryInterface.swift */; };
+ B81443FC67132B7AE60DB9AA /* Test.swift in Resources */ = {isa = PBXBuildFile; fileRef = 5C8C9CF1C2E1A74CF11222B2 /* Test.swift */; };
+ BFBAF15A95765D14E651E821 /* Utill.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 842230AB83AFB9912D3B1764 /* Utill.framework */; };
+ D69D0AA905D57FF8464C9BAB /* Model.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = D6EEC0400C29FD0B52020310 /* Model.framework */; };
+ DAB51F6E2E459BD7B68EE67C /* TuistBundle+DomainInterfaceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9C755E2FBA6364D48AF69FF /* TuistBundle+DomainInterfaceTests.swift */; };
+ E4AABB01B336AEE6F79825BA /* BookListInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = 809A051BD9D115DD41FB0365 /* BookListInterface.swift */; };
+ E570C44DD9E1B0204C10CB30 /* BookListInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = 809A051BD9D115DD41FB0365 /* BookListInterface.swift */; };
+ EB129ED46F27E04F8A934272 /* Model.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D6EEC0400C29FD0B52020310 /* Model.framework */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+ 353EA9013F32DCED6C594A5E /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 3899C4EE9C64BE0C992DD989 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 839C9EE981896FC849B4AB14;
+ remoteInfo = DomainInterface;
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ 2DC14040DEB620BCDE1BAB4F /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 53C7081312662314E2BBF6EA /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 687EC422302A10040B95481D /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 798B9E5851C0CD2C76474029 /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ 32F96CC4681C564A878EDBF1 /* Model.framework in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ 7C86E4889A3A378B3D4D7F89 /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ D69D0AA905D57FF8464C9BAB /* Model.framework in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ 9D79E02ED2CC309DCC94DC6F /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ AF6B28E70C99AE2595357816 /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ 888B43BDDCEB71003BF1B604 /* Model.framework in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ CD0B5B3B0D3D07140CBA60DE /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ F0A12337EB5C5B9811017A1B /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ 7A7FB85390A2933C5CF18C9F /* Model.framework in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ 1294C06A2C0D6B4FB46B28E6 /* DomainInterface-Debug-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "DomainInterface-Debug-Info.plist"; sourceTree = ""; };
+ 2052C0678571EA088B536278 /* DomainInterface_Prod.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DomainInterface_Prod.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 276BFC70D11B277656C925C7 /* DomainInterface_Debug.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DomainInterface_Debug.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 35D56B0B55DD9F93D8170AD5 /* DomainInterface.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DomainInterface.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 5C8C9CF1C2E1A74CF11222B2 /* Test.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Test.swift; sourceTree = ""; };
+ 809A051BD9D115DD41FB0365 /* BookListInterface.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookListInterface.swift; sourceTree = ""; };
+ 842230AB83AFB9912D3B1764 /* Utill.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Utill.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ AC3A341CE5DE046E57E6FA49 /* DomainInterface-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "DomainInterface-Info.plist"; sourceTree = ""; };
+ C6834A89F3FE887DA1691EBA /* DomainInterface_Stage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DomainInterface_Stage.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ C9C755E2FBA6364D48AF69FF /* TuistBundle+DomainInterfaceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistBundle+DomainInterfaceTests.swift"; sourceTree = ""; };
+ D5C8C2D4A69E6BEA71EEC953 /* DomainInterface-Stage-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "DomainInterface-Stage-Info.plist"; sourceTree = ""; };
+ D6EEC0400C29FD0B52020310 /* Model.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Model.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ D88D9EC758647A9B9DC71766 /* DomainInterface-Prod-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "DomainInterface-Prod-Info.plist"; sourceTree = ""; };
+ DF5C79E6A5EABF2478B69A9C /* SummaryPersistenceRepositoryInterface.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SummaryPersistenceRepositoryInterface.swift; sourceTree = ""; };
+ DFB2548120357952CE45DE62 /* DomainInterfaceTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DomainInterfaceTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+ E9AE163D3AF166D0DDCB02F4 /* DomainInterfaceTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "DomainInterfaceTests-Info.plist"; sourceTree = ""; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 6D6C17804B3AEBB1E5BCB21B /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 7DB7EC98D82A0B74B1DDEC52 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 57E5E0940F81FC8D1DFD045E /* DomainInterface.framework in Frameworks */,
+ EB129ED46F27E04F8A934272 /* Model.framework in Frameworks */,
+ BFBAF15A95765D14E651E821 /* Utill.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 88735A2EDF5C472EB4CA9C4B /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ C648580FD00AC596A51289B6 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ C75A23A70B6EAB0F7CE475CC /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 16A279ABC858DC9C4E22743D /* Sources */ = {
+ isa = PBXGroup;
+ children = (
+ 5C8C9CF1C2E1A74CF11222B2 /* Test.swift */,
+ );
+ path = Sources;
+ sourceTree = "";
+ };
+ 2E723A99008A1583433860A9 /* Derived */ = {
+ isa = PBXGroup;
+ children = (
+ 330D2A371643578D00DB3561 /* InfoPlists */,
+ 887068620E8CA32540BBCE9B /* Sources */,
+ );
+ path = Derived;
+ sourceTree = "";
+ };
+ 330D2A371643578D00DB3561 /* InfoPlists */ = {
+ isa = PBXGroup;
+ children = (
+ 1294C06A2C0D6B4FB46B28E6 /* DomainInterface-Debug-Info.plist */,
+ AC3A341CE5DE046E57E6FA49 /* DomainInterface-Info.plist */,
+ D88D9EC758647A9B9DC71766 /* DomainInterface-Prod-Info.plist */,
+ D5C8C2D4A69E6BEA71EEC953 /* DomainInterface-Stage-Info.plist */,
+ E9AE163D3AF166D0DDCB02F4 /* DomainInterfaceTests-Info.plist */,
+ );
+ path = InfoPlists;
+ sourceTree = "";
+ };
+ 37D2247B8BDFE21862C18A65 /* BookList */ = {
+ isa = PBXGroup;
+ children = (
+ 809A051BD9D115DD41FB0365 /* BookListInterface.swift */,
+ );
+ path = BookList;
+ sourceTree = "";
+ };
+ 5A91569CFD4755E126E97B73 = {
+ isa = PBXGroup;
+ children = (
+ C32475A41FA66402C790E18F /* Project */,
+ FDB270B9210143B24A99DBC5 /* Products */,
+ );
+ sourceTree = "";
+ };
+ 887068620E8CA32540BBCE9B /* Sources */ = {
+ isa = PBXGroup;
+ children = (
+ C9C755E2FBA6364D48AF69FF /* TuistBundle+DomainInterfaceTests.swift */,
+ );
+ path = Sources;
+ sourceTree = "";
+ };
+ B2B38387967AB9B481D75DC1 /* DomainInterfaceTests */ = {
+ isa = PBXGroup;
+ children = (
+ 16A279ABC858DC9C4E22743D /* Sources */,
+ );
+ path = DomainInterfaceTests;
+ sourceTree = "";
+ };
+ C32475A41FA66402C790E18F /* Project */ = {
+ isa = PBXGroup;
+ children = (
+ 2E723A99008A1583433860A9 /* Derived */,
+ B2B38387967AB9B481D75DC1 /* DomainInterfaceTests */,
+ D5F4384B64B2AC2E7BFC4AB1 /* Sources */,
+ );
+ name = Project;
+ sourceTree = "";
+ };
+ D1393EE7189CBDD8223F3A68 /* Repository */ = {
+ isa = PBXGroup;
+ children = (
+ DF5C79E6A5EABF2478B69A9C /* SummaryPersistenceRepositoryInterface.swift */,
+ );
+ path = Repository;
+ sourceTree = "";
+ };
+ D5F4384B64B2AC2E7BFC4AB1 /* Sources */ = {
+ isa = PBXGroup;
+ children = (
+ 37D2247B8BDFE21862C18A65 /* BookList */,
+ D1393EE7189CBDD8223F3A68 /* Repository */,
+ );
+ path = Sources;
+ sourceTree = "";
+ };
+ FDB270B9210143B24A99DBC5 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 276BFC70D11B277656C925C7 /* DomainInterface_Debug.framework */,
+ 2052C0678571EA088B536278 /* DomainInterface_Prod.framework */,
+ C6834A89F3FE887DA1691EBA /* DomainInterface_Stage.framework */,
+ 35D56B0B55DD9F93D8170AD5 /* DomainInterface.framework */,
+ DFB2548120357952CE45DE62 /* DomainInterfaceTests.xctest */,
+ D6EEC0400C29FD0B52020310 /* Model.framework */,
+ 842230AB83AFB9912D3B1764 /* Utill.framework */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 03D903CD4D01BDA717836266 /* DomainInterfaceTests */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = E43340EDD31D30B7AEAEF9EE /* Build configuration list for PBXNativeTarget "DomainInterfaceTests" */;
+ buildPhases = (
+ 5F880DFC855BBBA448CEFFAF /* Sources */,
+ 884296C072D9176969675A96 /* Resources */,
+ 7DB7EC98D82A0B74B1DDEC52 /* Frameworks */,
+ CD0B5B3B0D3D07140CBA60DE /* Embed Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 78B5DE7DF892750606451702 /* PBXTargetDependency */,
+ );
+ name = DomainInterfaceTests;
+ packageProductDependencies = (
+ );
+ productName = DomainInterfaceTests;
+ productReference = DFB2548120357952CE45DE62 /* DomainInterfaceTests.xctest */;
+ productType = "com.apple.product-type.bundle.unit-test";
+ };
+ 839C9EE981896FC849B4AB14 /* DomainInterface */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 3A75F39EC0AFC7779B7934DF /* Build configuration list for PBXNativeTarget "DomainInterface" */;
+ buildPhases = (
+ 6B983841FBF528FC83DF4AAF /* Sources */,
+ 8CEB595AAE7E4EB32BB3299E /* Resources */,
+ 88735A2EDF5C472EB4CA9C4B /* Frameworks */,
+ 687EC422302A10040B95481D /* Embed Frameworks */,
+ 7C86E4889A3A378B3D4D7F89 /* Dependencies */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = DomainInterface;
+ packageProductDependencies = (
+ );
+ productName = DomainInterface;
+ productReference = 35D56B0B55DD9F93D8170AD5 /* DomainInterface.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+ 9A0CB47143FE264631F67098 /* DomainInterface-Prod */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 15313381A5F81D03769D0562 /* Build configuration list for PBXNativeTarget "DomainInterface-Prod" */;
+ buildPhases = (
+ 0D5578929DCA0A184018D694 /* Sources */,
+ E01008495EA84D1DBFF4CCC5 /* Resources */,
+ 6D6C17804B3AEBB1E5BCB21B /* Frameworks */,
+ 53C7081312662314E2BBF6EA /* Embed Frameworks */,
+ AF6B28E70C99AE2595357816 /* Dependencies */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = "DomainInterface-Prod";
+ packageProductDependencies = (
+ );
+ productName = DomainInterface_Prod;
+ productReference = 2052C0678571EA088B536278 /* DomainInterface_Prod.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+ BDC23C39FEEEF1C3DEBE176D /* DomainInterface-Stage */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 6B131048FDDDC47D0D8D9C0D /* Build configuration list for PBXNativeTarget "DomainInterface-Stage" */;
+ buildPhases = (
+ 9C9620AB6B8FD94BCD117EAF /* Sources */,
+ AEB7ABE96530385979B3F7D6 /* Resources */,
+ C75A23A70B6EAB0F7CE475CC /* Frameworks */,
+ 2DC14040DEB620BCDE1BAB4F /* Embed Frameworks */,
+ F0A12337EB5C5B9811017A1B /* Dependencies */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = "DomainInterface-Stage";
+ packageProductDependencies = (
+ );
+ productName = DomainInterface_Stage;
+ productReference = C6834A89F3FE887DA1691EBA /* DomainInterface_Stage.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+ FC34637ACAF070FF5B3BEA7F /* DomainInterface-Debug */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 6F9271788C0E75177A80BA70 /* Build configuration list for PBXNativeTarget "DomainInterface-Debug" */;
+ buildPhases = (
+ E425F7DA326BE0EFDE6950BD /* Sources */,
+ 7388B2A88535304E0DF5D587 /* Resources */,
+ C648580FD00AC596A51289B6 /* Frameworks */,
+ 9D79E02ED2CC309DCC94DC6F /* Embed Frameworks */,
+ 798B9E5851C0CD2C76474029 /* Dependencies */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = "DomainInterface-Debug";
+ packageProductDependencies = (
+ );
+ productName = DomainInterface_Debug;
+ productReference = 276BFC70D11B277656C925C7 /* DomainInterface_Debug.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 3899C4EE9C64BE0C992DD989 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ BuildIndependentTargetsInParallel = YES;
+ TargetAttributes = {
+ };
+ };
+ buildConfigurationList = A6A33577101613ED4870CAD3 /* Build configuration list for PBXProject "DomainInterface" */;
+ compatibilityVersion = "Xcode 14.0";
+ developmentRegion = ko;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ ko,
+ );
+ mainGroup = 5A91569CFD4755E126E97B73;
+ productRefGroup = FDB270B9210143B24A99DBC5 /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ 839C9EE981896FC849B4AB14 /* DomainInterface */,
+ FC34637ACAF070FF5B3BEA7F /* DomainInterface-Debug */,
+ 9A0CB47143FE264631F67098 /* DomainInterface-Prod */,
+ BDC23C39FEEEF1C3DEBE176D /* DomainInterface-Stage */,
+ 03D903CD4D01BDA717836266 /* DomainInterfaceTests */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 7388B2A88535304E0DF5D587 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 884296C072D9176969675A96 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B81443FC67132B7AE60DB9AA /* Test.swift in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 8CEB595AAE7E4EB32BB3299E /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ AEB7ABE96530385979B3F7D6 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ E01008495EA84D1DBFF4CCC5 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 0D5578929DCA0A184018D694 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 975EC4F42E1D9BD2ADB90328 /* BookListInterface.swift in Sources */,
+ 8594C675638CBAF1515D0449 /* SummaryPersistenceRepositoryInterface.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 5F880DFC855BBBA448CEFFAF /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ DAB51F6E2E459BD7B68EE67C /* TuistBundle+DomainInterfaceTests.swift in Sources */,
+ 353BF1AD56F4CC357E19D719 /* Test.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 6B983841FBF528FC83DF4AAF /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ E570C44DD9E1B0204C10CB30 /* BookListInterface.swift in Sources */,
+ 1C5D4F2707BE97523DA3627D /* SummaryPersistenceRepositoryInterface.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 9C9620AB6B8FD94BCD117EAF /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ E4AABB01B336AEE6F79825BA /* BookListInterface.swift in Sources */,
+ B14154C06C5D5795D4CF4DCA /* SummaryPersistenceRepositoryInterface.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ E425F7DA326BE0EFDE6950BD /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 3081EFEA9CFF0DBD87FE81CC /* BookListInterface.swift in Sources */,
+ 2954264D8209B83994DAFDFA /* SummaryPersistenceRepositoryInterface.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+ 78B5DE7DF892750606451702 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ name = DomainInterface;
+ target = 839C9EE981896FC849B4AB14 /* DomainInterface */;
+ targetProxy = 353EA9013F32DCED6C594A5E /* PBXContainerItemProxy */;
+ };
+/* End PBXTargetDependency section */
+
+/* Begin XCBuildConfiguration section */
+ 0116796396DD7D835A02D51A /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = "Derived/InfoPlists/DomainInterface-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.DomainInterface;
+ PRODUCT_NAME = DomainInterface;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Release;
+ };
+ 02E9043ADCF230B6B8D0DDA0 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = "Derived/InfoPlists/DomainInterface-Prod-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.DomainInterface;
+ PRODUCT_NAME = DomainInterface_Prod;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Release;
+ };
+ 0A111F74B02E6BDF2F17729B /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = "Derived/InfoPlists/DomainInterface-Debug-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.DomainInterface;
+ PRODUCT_NAME = DomainInterface_Debug;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Debug;
+ };
+ 30ECE638497EE5E404167A77 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = "Derived/InfoPlists/DomainInterface-Debug-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.DomainInterface;
+ PRODUCT_NAME = DomainInterface_Debug;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Release;
+ };
+ 3B5E81D53E7D35413CA62C18 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ DEAD_CODE_STRIPPING = YES;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ MTL_ENABLE_DEBUG_INFO = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ };
+ name = Debug;
+ };
+ 496909BB4F4928F0C6D5F1C7 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = "Derived/InfoPlists/DomainInterface-Stage-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.DomainInterface;
+ PRODUCT_NAME = DomainInterface_Stage;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Release;
+ };
+ 730538010EBB1B4A12581DB3 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ INFOPLIST_FILE = "Derived/InfoPlists/DomainInterfaceTests-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.DomainInterface.DomainInterfaceTests;
+ PRODUCT_NAME = DomainInterfaceTests;
+ SDKROOT = iphoneos;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ };
+ name = Release;
+ };
+ 88D03CA9BEF2E2864324A10D /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = "Derived/InfoPlists/DomainInterface-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.DomainInterface;
+ PRODUCT_NAME = DomainInterface;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Debug;
+ };
+ 8D40BA094187381421A12D9A /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = "Derived/InfoPlists/DomainInterface-Stage-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.DomainInterface;
+ PRODUCT_NAME = DomainInterface_Stage;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Debug;
+ };
+ B5014195EA93A8D3F3984D6A /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ INFOPLIST_FILE = "Derived/InfoPlists/DomainInterfaceTests-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.DomainInterface.DomainInterfaceTests;
+ PRODUCT_NAME = DomainInterfaceTests;
+ SDKROOT = iphoneos;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ };
+ name = Debug;
+ };
+ C684A1DC9A2B6999CC882072 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ INFOPLIST_FILE = "Derived/InfoPlists/DomainInterface-Prod-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.DomainInterface;
+ PRODUCT_NAME = DomainInterface_Prod;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Debug;
+ };
+ E59C4B29046D5CCE341C3635 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ DEAD_CODE_STRIPPING = YES;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 15313381A5F81D03769D0562 /* Build configuration list for PBXNativeTarget "DomainInterface-Prod" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ C684A1DC9A2B6999CC882072 /* Debug */,
+ 02E9043ADCF230B6B8D0DDA0 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 3A75F39EC0AFC7779B7934DF /* Build configuration list for PBXNativeTarget "DomainInterface" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 88D03CA9BEF2E2864324A10D /* Debug */,
+ 0116796396DD7D835A02D51A /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 6B131048FDDDC47D0D8D9C0D /* Build configuration list for PBXNativeTarget "DomainInterface-Stage" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 8D40BA094187381421A12D9A /* Debug */,
+ 496909BB4F4928F0C6D5F1C7 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 6F9271788C0E75177A80BA70 /* Build configuration list for PBXNativeTarget "DomainInterface-Debug" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 0A111F74B02E6BDF2F17729B /* Debug */,
+ 30ECE638497EE5E404167A77 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ A6A33577101613ED4870CAD3 /* Build configuration list for PBXProject "DomainInterface" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 3B5E81D53E7D35413CA62C18 /* Debug */,
+ E59C4B29046D5CCE341C3635 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ E43340EDD31D30B7AEAEF9EE /* Build configuration list for PBXNativeTarget "DomainInterfaceTests" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ B5014195EA93A8D3F3984D6A /* Debug */,
+ 730538010EBB1B4A12581DB3 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 3899C4EE9C64BE0C992DD989 /* Project object */;
+}
diff --git a/Projects/Core/Domain/DomainInterface/DomainInterface.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Projects/Core/Domain/DomainInterface/DomainInterface.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..919434a
--- /dev/null
+++ b/Projects/Core/Domain/DomainInterface/DomainInterface.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/Projects/Core/Domain/DomainInterface/DomainInterface.xcodeproj/xcshareddata/xcschemes/DomainInterface-Debug.xcscheme b/Projects/Core/Domain/DomainInterface/DomainInterface.xcodeproj/xcshareddata/xcschemes/DomainInterface-Debug.xcscheme
new file mode 100644
index 0000000..5720ef2
--- /dev/null
+++ b/Projects/Core/Domain/DomainInterface/DomainInterface.xcodeproj/xcshareddata/xcschemes/DomainInterface-Debug.xcscheme
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Projects/Core/Domain/DomainInterface/DomainInterface.xcodeproj/xcshareddata/xcschemes/DomainInterface-Prod.xcscheme b/Projects/Core/Domain/DomainInterface/DomainInterface.xcodeproj/xcshareddata/xcschemes/DomainInterface-Prod.xcscheme
new file mode 100644
index 0000000..ea43078
--- /dev/null
+++ b/Projects/Core/Domain/DomainInterface/DomainInterface.xcodeproj/xcshareddata/xcschemes/DomainInterface-Prod.xcscheme
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Projects/Core/Domain/DomainInterface/DomainInterface.xcodeproj/xcshareddata/xcschemes/DomainInterface-Stage.xcscheme b/Projects/Core/Domain/DomainInterface/DomainInterface.xcodeproj/xcshareddata/xcschemes/DomainInterface-Stage.xcscheme
new file mode 100644
index 0000000..f30ffd9
--- /dev/null
+++ b/Projects/Core/Domain/DomainInterface/DomainInterface.xcodeproj/xcshareddata/xcschemes/DomainInterface-Stage.xcscheme
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Projects/Core/Domain/DomainInterface/DomainInterface.xcodeproj/xcshareddata/xcschemes/DomainInterface.xcscheme b/Projects/Core/Domain/DomainInterface/DomainInterface.xcodeproj/xcshareddata/xcschemes/DomainInterface.xcscheme
new file mode 100644
index 0000000..725be61
--- /dev/null
+++ b/Projects/Core/Domain/DomainInterface/DomainInterface.xcodeproj/xcshareddata/xcschemes/DomainInterface.xcscheme
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Projects/Core/Domain/DomainInterface/DomainInterface.xcodeproj/xcshareddata/xcschemes/DomainInterfaceTests.xcscheme b/Projects/Core/Domain/DomainInterface/DomainInterface.xcodeproj/xcshareddata/xcschemes/DomainInterfaceTests.xcscheme
new file mode 100644
index 0000000..8f0df5c
--- /dev/null
+++ b/Projects/Core/Domain/DomainInterface/DomainInterface.xcodeproj/xcshareddata/xcschemes/DomainInterfaceTests.xcscheme
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Projects/Core/Domain/DomainInterface/DomainInterfaceTests/Sources/Test.swift b/Projects/Core/Domain/DomainInterface/DomainInterfaceTests/Sources/Test.swift
new file mode 100644
index 0000000..a9c810e
--- /dev/null
+++ b/Projects/Core/Domain/DomainInterface/DomainInterfaceTests/Sources/Test.swift
@@ -0,0 +1,8 @@
+//
+// base.swift
+// DDDAttendance
+//
+// Created by Roy on 2025-09-04
+// Copyright © 2025 DDD , Ltd. All rights reserved.
+//
+
diff --git a/Projects/Core/Domain/DomainInterface/Project.swift b/Projects/Core/Domain/DomainInterface/Project.swift
new file mode 100644
index 0000000..a093f16
--- /dev/null
+++ b/Projects/Core/Domain/DomainInterface/Project.swift
@@ -0,0 +1,17 @@
+import Foundation
+import ProjectDescription
+import DependencyPlugin
+import ProjectTemplatePlugin
+import ProjectTemplatePlugin
+import DependencyPackagePlugin
+
+let project = Project.makeAppModule(
+ name: "DomainInterface",
+ bundleId: .appBundleID(name: ".DomainInterface"),
+ product: .staticFramework,
+ settings: .settings(),
+ dependencies: [
+ .Data(implements: .Model)
+ ],
+ sources: ["Sources/**"]
+)
diff --git a/Projects/Core/Domain/DomainInterface/Sources/BookList/BookListInterface.swift b/Projects/Core/Domain/DomainInterface/Sources/BookList/BookListInterface.swift
new file mode 100644
index 0000000..025aae0
--- /dev/null
+++ b/Projects/Core/Domain/DomainInterface/Sources/BookList/BookListInterface.swift
@@ -0,0 +1,13 @@
+//
+// BookListInterface.swift
+// DomainInterface
+//
+// Created by Wonji Suh on 9/8/25.
+//
+
+import Foundation
+import Model
+
+public protocol BookListInterface {
+ func getBookList() async throws -> [Book]
+}
diff --git a/Projects/Core/Domain/DomainInterface/Sources/Repository/SummaryPersistenceRepositoryInterface.swift b/Projects/Core/Domain/DomainInterface/Sources/Repository/SummaryPersistenceRepositoryInterface.swift
new file mode 100644
index 0000000..d989e06
--- /dev/null
+++ b/Projects/Core/Domain/DomainInterface/Sources/Repository/SummaryPersistenceRepositoryInterface.swift
@@ -0,0 +1,16 @@
+//
+// SummaryPersistenceRepositoryInterface.swift
+// DomainInterface
+//
+// Created by Wonji Suh on 9/10/25.
+//
+
+import Foundation
+
+public protocol SummaryPersistenceRepositoryInterface {
+ /// 책 요약의 펼침 상태 로드
+ func loadSummaryExpanded(for title: String, author: String) -> Bool
+
+ /// 책 요약의 펼침 상태 저장
+ func saveSummaryExpanded(_ expanded: Bool, for title: String, author: String)
+}
\ No newline at end of file
diff --git a/Projects/Core/Domain/UseCase/Derived/InfoPlists/UseCase-Debug-Info.plist b/Projects/Core/Domain/UseCase/Derived/InfoPlists/UseCase-Debug-Info.plist
new file mode 100644
index 0000000..323e5ec
--- /dev/null
+++ b/Projects/Core/Domain/UseCase/Derived/InfoPlists/UseCase-Debug-Info.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ FMWK
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/Projects/Core/Domain/UseCase/Derived/InfoPlists/UseCase-Info.plist b/Projects/Core/Domain/UseCase/Derived/InfoPlists/UseCase-Info.plist
new file mode 100644
index 0000000..323e5ec
--- /dev/null
+++ b/Projects/Core/Domain/UseCase/Derived/InfoPlists/UseCase-Info.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ FMWK
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/Projects/Core/Domain/UseCase/Derived/InfoPlists/UseCase-Prod-Info.plist b/Projects/Core/Domain/UseCase/Derived/InfoPlists/UseCase-Prod-Info.plist
new file mode 100644
index 0000000..323e5ec
--- /dev/null
+++ b/Projects/Core/Domain/UseCase/Derived/InfoPlists/UseCase-Prod-Info.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ FMWK
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/Projects/Core/Domain/UseCase/Derived/InfoPlists/UseCase-Stage-Info.plist b/Projects/Core/Domain/UseCase/Derived/InfoPlists/UseCase-Stage-Info.plist
new file mode 100644
index 0000000..323e5ec
--- /dev/null
+++ b/Projects/Core/Domain/UseCase/Derived/InfoPlists/UseCase-Stage-Info.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ FMWK
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/Projects/Core/Domain/UseCase/Derived/InfoPlists/UseCaseTests-Info.plist b/Projects/Core/Domain/UseCase/Derived/InfoPlists/UseCaseTests-Info.plist
new file mode 100644
index 0000000..6c40a6c
--- /dev/null
+++ b/Projects/Core/Domain/UseCase/Derived/InfoPlists/UseCaseTests-Info.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ BNDL
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/Projects/Core/Domain/UseCase/Derived/Sources/TuistBundle+UseCaseTests.swift b/Projects/Core/Domain/UseCase/Derived/Sources/TuistBundle+UseCaseTests.swift
new file mode 100644
index 0000000..854c5e9
--- /dev/null
+++ b/Projects/Core/Domain/UseCase/Derived/Sources/TuistBundle+UseCaseTests.swift
@@ -0,0 +1,25 @@
+// periphery:ignore:all
+// swiftlint:disable:this file_name
+// swiftlint:disable all
+// swift-format-ignore-file
+// swiftformat:disable all
+#if hasFeature(InternalImportsByDefault)
+public import Foundation
+#else
+import Foundation
+#endif
+// MARK: - Swift Bundle Accessor for Frameworks
+private class BundleFinder {}
+extension Foundation.Bundle {
+/// Since UseCaseTests is a unit tests, the bundle for classes within this module can be used directly.
+ static let module = Bundle(for: BundleFinder.self)
+}
+// MARK: - Objective-C Bundle Accessor
+@objc
+public class UseCaseTestsResources: NSObject {
+@objc public class var bundle: Bundle {
+ return .module
+}
+}
+// swiftformat:enable all
+// swiftlint:enable all
\ No newline at end of file
diff --git a/Projects/Core/Domain/UseCase/Project.swift b/Projects/Core/Domain/UseCase/Project.swift
new file mode 100644
index 0000000..024f84a
--- /dev/null
+++ b/Projects/Core/Domain/UseCase/Project.swift
@@ -0,0 +1,21 @@
+import Foundation
+import ProjectDescription
+import DependencyPlugin
+import ProjectTemplatePlugin
+import ProjectTemplatePlugin
+import DependencyPackagePlugin
+
+let project = Project.makeAppModule(
+ name: "UseCase",
+ bundleId: .appBundleID(name: ".UseCase"),
+ product: .staticFramework,
+ settings: .settings(),
+ dependencies: [
+ .Data(implements: .Repository),
+ .Domain(implements: .DomainInterface),
+ .SPM.composableArchitecture,
+ .SPM.diContainer
+
+ ],
+ sources: ["Sources/**"]
+)
diff --git a/Projects/Core/Domain/UseCase/Sources/BookList/BookListUseCaseImpl.swift b/Projects/Core/Domain/UseCase/Sources/BookList/BookListUseCaseImpl.swift
new file mode 100644
index 0000000..875f2af
--- /dev/null
+++ b/Projects/Core/Domain/UseCase/Sources/BookList/BookListUseCaseImpl.swift
@@ -0,0 +1,76 @@
+//
+// BookListUseCaseImpl.swift
+// UseCase
+//
+// Created by Wonji Suh on 9/8/25.
+//
+
+import DomainInterface
+import Model
+import Repository
+
+import ComposableArchitecture
+import DiContainer
+import Foundation
+
+public struct BookListUseCaseImpl: BookListInterface {
+
+ private let repository: BookListInterface
+
+ public init(repository: BookListInterface) {
+ self.repository = repository
+ }
+
+ // MARK: - 전체 북 리스트 조회
+ public func getBookList() async throws -> [Book] {
+ return try await repository.getBookList()
+ }
+}
+
+extension DependencyContainer {
+ var bookListInterface: BookListInterface? {
+ resolve(BookListInterface.self)
+ }
+}
+
+extension BookListUseCaseImpl: DependencyKey {
+
+ public static var liveValue: BookListInterface = {
+ let repository = UnifiedDI.register(\.bookListInterface) {
+ BookListRepositoryImpl()
+ }
+ return BookListUseCaseImpl(repository: repository)
+ }()
+
+ public static var testValue: BookListInterface = DefaultBookListRepositoryImpl()
+}
+
+public extension DependencyValues {
+ var bookListUseCase: BookListInterface {
+ get { self[BookListUseCaseImpl.self] }
+ set { self[BookListUseCaseImpl.self] = newValue }
+ }
+}
+
+
+public extension RegisterModule {
+
+ var bookListUseCaseImplModule: () -> Module {
+ makeUseCaseWithRepository(
+ BookListInterface.self,
+ repositoryProtocol: BookListInterface.self,
+ repositoryFallback: DefaultBookListRepositoryImpl()) { repo in
+ BookListUseCaseImpl(repository: repo)
+ }
+ }
+
+ var bookListModules: [() -> Module] {
+ return interface(
+ BookListInterface.self,
+ repository: { BookListRepositoryImpl() },
+ useCase: { repo in BookListUseCaseImpl(repository: repo) },
+ fallback: { DefaultBookListRepositoryImpl() }
+ )
+ }
+
+}
diff --git a/Projects/Core/Domain/UseCase/Sources/BookList/SummaryPersistenceUseCaseImpl.swift b/Projects/Core/Domain/UseCase/Sources/BookList/SummaryPersistenceUseCaseImpl.swift
new file mode 100644
index 0000000..d734cae
--- /dev/null
+++ b/Projects/Core/Domain/UseCase/Sources/BookList/SummaryPersistenceUseCaseImpl.swift
@@ -0,0 +1,77 @@
+//
+// SummaryPersistenceUseCaseImpl.swift
+// UseCase
+//
+// Created by Wonji Suh on 9/10/25.
+//
+
+import DomainInterface
+import Repository
+
+import ComposableArchitecture
+import DiContainer
+
+public struct SummaryPersistenceUseCaseImpl: SummaryPersistenceRepositoryInterface {
+
+ private let repository: SummaryPersistenceRepositoryInterface
+
+ public init(repository: SummaryPersistenceRepositoryInterface) {
+ self.repository = repository
+ }
+
+
+ public func loadSummaryExpanded(for title: String, author: String) -> Bool {
+ repository.loadSummaryExpanded(for: title, author: author)
+ }
+
+ public func saveSummaryExpanded(_ expanded: Bool, for title: String, author: String) {
+ repository.saveSummaryExpanded(expanded, for: title, author: author)
+ }
+}
+
+extension DependencyContainer {
+ var summaryPersistenceInterface: SummaryPersistenceRepositoryInterface? {
+ resolve(SummaryPersistenceRepositoryInterface.self)
+ }
+}
+
+extension SummaryPersistenceUseCaseImpl: DependencyKey {
+
+ public static var liveValue: SummaryPersistenceRepositoryInterface = {
+ let repository = UnifiedDI.register(\.summaryPersistenceInterface) {
+ SummaryPersistenceRepositoryImpl()
+ }
+ return SummaryPersistenceUseCaseImpl(repository: repository)
+ }()
+
+ public static var testValue: SummaryPersistenceRepositoryInterface = DefaultSummaryPersistenceRepository()
+}
+
+public extension DependencyValues {
+ var summaryPersistenceUseCase: SummaryPersistenceRepositoryInterface {
+ get { self[SummaryPersistenceUseCaseImpl.self] }
+ set { self[SummaryPersistenceUseCaseImpl.self] = newValue }
+ }
+}
+
+
+public extension RegisterModule {
+
+ var summaryPersistenceUseCaseImplModule: () -> Module {
+ makeUseCaseWithRepository(
+ SummaryPersistenceUseCaseImpl.self,
+ repositoryProtocol: SummaryPersistenceRepositoryInterface.self,
+ repositoryFallback: DefaultSummaryPersistenceRepository(),
+ factory: { repo in
+ SummaryPersistenceUseCaseImpl(repository: repo)
+ }
+ )
+ }
+
+
+ var summaryPersistenceRepositoryImplModule: () -> Module {
+ makeDependency(SummaryPersistenceRepositoryInterface.self) {
+ SummaryPersistenceRepositoryImpl()
+ }
+ }
+}
diff --git a/Projects/Core/Domain/UseCase/UseCase.xcodeproj/project.pbxproj b/Projects/Core/Domain/UseCase/UseCase.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..6995494
--- /dev/null
+++ b/Projects/Core/Domain/UseCase/UseCase.xcodeproj/project.pbxproj
@@ -0,0 +1,1499 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 55;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 00DFC76D5E73EFAACB117244 /* IdentifiedCollections.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F2E0EC679FC135E5CEC0A9AD /* IdentifiedCollections.framework */; };
+ 014438C30E3FBCFDF9D90E75 /* swift-composable-architecture_ComposableArchitecture.bundle in Resources */ = {isa = PBXBuildFile; fileRef = A733A7597F14F4728F8A5C0C /* swift-composable-architecture_ComposableArchitecture.bundle */; };
+ 039F640F54A3DEE46842069F /* ConcurrencyExtras.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B60FF119A6FEF6D0D51AE5B /* ConcurrencyExtras.framework */; };
+ 03B706DEBBD0E4F94AEBD367 /* ComposableArchitecture.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = A06ABB2F1523CED2E74B4851 /* ComposableArchitecture.framework */; };
+ 03FBCA67E2B3EF24B2772029 /* SummaryPersistenceUseCaseTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D925C09B23D80D9DBE44FF4 /* SummaryPersistenceUseCaseTests.swift */; };
+ 067A96199616613C26346247 /* DomainInterface.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = FB9702202A42059A564824B3 /* DomainInterface.framework */; };
+ 071B981F0D2DF826183B79CB /* UIKitNavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D748E68EDF03BA484791AC0E /* UIKitNavigation.framework */; };
+ 0A936314C0600F81E5A0F920 /* DiContainer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 46C58245B58D94734381D720 /* DiContainer.framework */; };
+ 0C6CB5A62B5FC3DBD9068817 /* SummaryPersistenceUseCaseImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05700E1472D79B766A823846 /* SummaryPersistenceUseCaseImpl.swift */; };
+ 10E27092E86026FC59BFF7F0 /* BookListUseCaseImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = A397733F0151591AE4A2EC73 /* BookListUseCaseImpl.swift */; };
+ 13D48166F46D9317D55B2CF3 /* Clocks.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6AA0797B504174C847E8FE95 /* Clocks.framework */; };
+ 13F542F658B74B5A78AC8A97 /* TestTags.swift in Resources */ = {isa = PBXBuildFile; fileRef = 89507EFE5D61336E2067E811 /* TestTags.swift */; };
+ 160B51D2DFC89B04828176AF /* BookListUseCaseImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = A397733F0151591AE4A2EC73 /* BookListUseCaseImpl.swift */; };
+ 1F52B4C183ED7440BB0008C5 /* ComposableArchitecture.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = A06ABB2F1523CED2E74B4851 /* ComposableArchitecture.framework */; };
+ 225CEFCE42B0B52EADC274BD /* CombineSchedulers.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8A7443ABF2BF970A68F68C39 /* CombineSchedulers.framework */; };
+ 253ADD154E0636AA70F8D743 /* BookListUseCaseTests.swift in Resources */ = {isa = PBXBuildFile; fileRef = 23850C81320E0E138428EB23 /* BookListUseCaseTests.swift */; };
+ 27452DD39E58781771F321B6 /* DiContainer.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 46C58245B58D94734381D720 /* DiContainer.framework */; };
+ 27BC664E66CCF74669CFCB4A /* UIKitNavigationShim.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 44D709557E90FBEF8A8A4305 /* UIKitNavigationShim.framework */; };
+ 3696CAAADA1E28F46E5B26AC /* SummaryPersistenceUseCaseImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05700E1472D79B766A823846 /* SummaryPersistenceUseCaseImpl.swift */; };
+ 3AD9817DB1EA153D26CA1169 /* DomainInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FB9702202A42059A564824B3 /* DomainInterface.framework */; };
+ 48DA391227237D97718D845F /* DiContainer.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 46C58245B58D94734381D720 /* DiContainer.framework */; };
+ 4DEF70A10ABBC302AF66D19B /* Repository.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 6C51192BCDE8A7E9252657C2 /* Repository.framework */; };
+ 4E3980C565E43304F0F1E101 /* BookListUseCaseImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = A397733F0151591AE4A2EC73 /* BookListUseCaseImpl.swift */; };
+ 4FA5872040E01A8D68F66F8E /* ComposableArchitecture.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = A06ABB2F1523CED2E74B4851 /* ComposableArchitecture.framework */; };
+ 4FE880D0FA6D000F747022CE /* TuistBundle+UseCaseTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51567EE2D436C6B64DB1FD25 /* TuistBundle+UseCaseTests.swift */; };
+ 532676483F2C2203F76AB474 /* XCTestDynamicOverlay.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 008DF05C3439EA6B9FDCF073 /* XCTestDynamicOverlay.framework */; };
+ 541697140A6418A997A49C8E /* UseCase.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 981DA49FF8FB5D20F6052CD5 /* UseCase.framework */; };
+ 546C4C7902FF0E1EBD659ED0 /* PerceptionCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 85FEAEF231E31B0754B21769 /* PerceptionCore.framework */; };
+ 564AF4027E28E369E437A7C3 /* ComposableArchitecture.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = A06ABB2F1523CED2E74B4851 /* ComposableArchitecture.framework */; };
+ 590FEB1E79C95045C0168D21 /* DomainInterface.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = FB9702202A42059A564824B3 /* DomainInterface.framework */; };
+ 5EBB8D1D64C397045A54E614 /* Repository.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 6C51192BCDE8A7E9252657C2 /* Repository.framework */; };
+ 5EDB47A27CE022305A0209FB /* OrderedCollections.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 275036982500E63F980B08D3 /* OrderedCollections.framework */; };
+ 639F5DA2F5E386011A7ACD8D /* CasePaths.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 319E89CCC442C21B32EE3C8A /* CasePaths.framework */; };
+ 63B46E3496550345E580995C /* Utill.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 61E565246F1A023C52E9EA20 /* Utill.framework */; };
+ 657EB28029C3DF0D4B44A8EE /* Repository.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 6C51192BCDE8A7E9252657C2 /* Repository.framework */; };
+ 6F8C0740809FF4FA4ECB5419 /* OSLog.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA48A0D2804DC03C431C9190 /* OSLog.framework */; };
+ 75D5489B5B030315F847CEC7 /* Sharing.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DCE5B4C0845929AAD691396C /* Sharing.framework */; };
+ 78240A3908E9339EC75DBEE2 /* TestTags.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89507EFE5D61336E2067E811 /* TestTags.swift */; };
+ 7874D2A6F947BE1620225121 /* SummaryPersistenceUseCaseImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05700E1472D79B766A823846 /* SummaryPersistenceUseCaseImpl.swift */; };
+ 7877E1D2F0708E6B8BA5DCD1 /* BookListUseCaseImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = A397733F0151591AE4A2EC73 /* BookListUseCaseImpl.swift */; };
+ 7AC6377C2F512F8932492065 /* ComposableArchitecture.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A06ABB2F1523CED2E74B4851 /* ComposableArchitecture.framework */; };
+ 7B1209328E7ADC1A97880918 /* BookListUseCaseTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23850C81320E0E138428EB23 /* BookListUseCaseTests.swift */; };
+ 811408EB3DD885E082C14AB0 /* SummaryPersistenceUseCaseImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 05700E1472D79B766A823846 /* SummaryPersistenceUseCaseImpl.swift */; };
+ 8D33245E18919C5183CF8240 /* Sharing2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EF32355A546906AD16B4026C /* Sharing2.framework */; };
+ 937A580AE4C073DC1A3135BF /* swift-composable-architecture_ComposableArchitecture.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = A733A7597F14F4728F8A5C0C /* swift-composable-architecture_ComposableArchitecture.bundle */; };
+ 981D811B08EC3109C187940B /* SwiftNavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 28B28AE28B75F4A08064786E /* SwiftNavigation.framework */; };
+ 9A865777262F57D1BDDF8DEF /* Perception.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83C1C4DE45683C912C8DC2B4 /* Perception.framework */; };
+ 9B3F71E2ABFA6606C67EE581 /* DomainInterface.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = FB9702202A42059A564824B3 /* DomainInterface.framework */; };
+ 9ED63A365BFC65C3A4B25256 /* DiContainer.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 46C58245B58D94734381D720 /* DiContainer.framework */; };
+ A07982755EA4DF29D50BF560 /* Service_Service.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 3B16AB3C68361FD16199A1DF /* Service_Service.bundle */; };
+ A1C2AEADA890142CC5638C31 /* Repository.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 6C51192BCDE8A7E9252657C2 /* Repository.framework */; };
+ A705971F0A7C3227E903D5B6 /* LogMacro.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B922F6F0A84360198FB6043A /* LogMacro.framework */; };
+ AD9C424DD9EB3BBDF51C7E00 /* IssueReporting.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B930A91712C71F045FA71426 /* IssueReporting.framework */; };
+ B2AF891D2D2481ADFD0D1400 /* Model.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 491B7F0EBCB2B579DEE44331 /* Model.framework */; };
+ B2F7FE5C423A39A4565F0F84 /* Service_Service.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 3B16AB3C68361FD16199A1DF /* Service_Service.bundle */; };
+ B3D82FA785BA33FDEE677930 /* swift-sharing_Sharing.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 4031F1BD9A9E73F69501493A /* swift-sharing_Sharing.bundle */; };
+ B56BA2CAB8E95C0B318816C5 /* CasePathsCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 077022AC51917B06E9B06B85 /* CasePathsCore.framework */; };
+ B9C9A498E023667DA2DBE6E9 /* Dependencies.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 506286633FC4DF9633A2E0FD /* Dependencies.framework */; };
+ BB5DA4B960E719E9BC9438A5 /* Repository.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C51192BCDE8A7E9252657C2 /* Repository.framework */; };
+ C8A1008E7C9BE0F37975B6F9 /* DiContainer.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 46C58245B58D94734381D720 /* DiContainer.framework */; };
+ C94613A52F9BFA9FB4F53709 /* InternalCollectionsUtilities.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 24F1526402401DBFF6736037 /* InternalCollectionsUtilities.framework */; };
+ CAA123A29015605C00B054B0 /* CustomDump.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BDC4D3A9CC2456F59785C311 /* CustomDump.framework */; };
+ CC74BCA440F81BB53F9FA992 /* SummaryPersistenceUseCaseTests.swift in Resources */ = {isa = PBXBuildFile; fileRef = 1D925C09B23D80D9DBE44FF4 /* SummaryPersistenceUseCaseTests.swift */; };
+ D5393DB4DF93417EF9EE85BB /* Sharing1.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 48BCB17D9732330186A8333E /* Sharing1.framework */; };
+ DE5D7645FE62EEC5E0714F4E /* Service.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D7D106A44F676A3F66DBD268 /* Service.framework */; };
+ EE69B862A9856B56F0FF9AAC /* IssueReportingPackageSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 38354F5D61ADD2C05EFA3A60 /* IssueReportingPackageSupport.framework */; };
+ EFF173319EFF0293CFD30604 /* swift-sharing_Sharing.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 4031F1BD9A9E73F69501493A /* swift-sharing_Sharing.bundle */; };
+ F2ECBEB3C9CF423819541589 /* SwiftUINavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1C2FD116C7A6B0F966929543 /* SwiftUINavigation.framework */; };
+ F32D7317FB04E2F6B2BDF1EC /* DomainInterface.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = FB9702202A42059A564824B3 /* DomainInterface.framework */; };
+ FB5F5B5975EA6EFA6DBB7A9F /* DependenciesMacros.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B903EEF70DF0FB080EFC7B9B /* DependenciesMacros.framework */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+ 994080C900D3F2225E8352B3 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 6BDC2ECB7C69CEDB1C1402B3 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = F7ABD5E2347ED8B12FE2AABD;
+ remoteInfo = UseCase;
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ 06E71EF9542AC4B578DCA5A3 /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ 564AF4027E28E369E437A7C3 /* ComposableArchitecture.framework in Dependencies */,
+ 48DA391227237D97718D845F /* DiContainer.framework in Dependencies */,
+ 590FEB1E79C95045C0168D21 /* DomainInterface.framework in Dependencies */,
+ 4DEF70A10ABBC302AF66D19B /* Repository.framework in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ 1264FD7FB19BA1E456552A7D /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ A07982755EA4DF29D50BF560 /* Service_Service.bundle in Dependencies */,
+ 937A580AE4C073DC1A3135BF /* swift-composable-architecture_ComposableArchitecture.bundle in Dependencies */,
+ EFF173319EFF0293CFD30604 /* swift-sharing_Sharing.bundle in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ 1785EF16E2B179422726EDF2 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 248619F5A5BDEA2FB3124ADD /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 43A5087052C526A9D7C83DD8 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 72B388F9D5D07EF7DDE9B7FC /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 823654538862A5D1C4A11C8C /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ 1F52B4C183ED7440BB0008C5 /* ComposableArchitecture.framework in Dependencies */,
+ C8A1008E7C9BE0F37975B6F9 /* DiContainer.framework in Dependencies */,
+ 067A96199616613C26346247 /* DomainInterface.framework in Dependencies */,
+ 657EB28029C3DF0D4B44A8EE /* Repository.framework in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ D514C67A05A62184CDD19868 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ D67561678CE965A74FF5140F /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ 4FA5872040E01A8D68F66F8E /* ComposableArchitecture.framework in Dependencies */,
+ 27452DD39E58781771F321B6 /* DiContainer.framework in Dependencies */,
+ F32D7317FB04E2F6B2BDF1EC /* DomainInterface.framework in Dependencies */,
+ A1C2AEADA890142CC5638C31 /* Repository.framework in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ FD401F535FD0F0B19E45FF4B /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ 03B706DEBBD0E4F94AEBD367 /* ComposableArchitecture.framework in Dependencies */,
+ 9ED63A365BFC65C3A4B25256 /* DiContainer.framework in Dependencies */,
+ 9B3F71E2ABFA6606C67EE581 /* DomainInterface.framework in Dependencies */,
+ 5EBB8D1D64C397045A54E614 /* Repository.framework in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ 008DF05C3439EA6B9FDCF073 /* XCTestDynamicOverlay.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = XCTestDynamicOverlay.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 05700E1472D79B766A823846 /* SummaryPersistenceUseCaseImpl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SummaryPersistenceUseCaseImpl.swift; sourceTree = ""; };
+ 077022AC51917B06E9B06B85 /* CasePathsCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CasePathsCore.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 156620DF42B5B603B36FFC4D /* UseCase-Stage-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "UseCase-Stage-Info.plist"; sourceTree = ""; };
+ 1C2FD116C7A6B0F966929543 /* SwiftUINavigation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftUINavigation.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 1D925C09B23D80D9DBE44FF4 /* SummaryPersistenceUseCaseTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SummaryPersistenceUseCaseTests.swift; sourceTree = ""; };
+ 23850C81320E0E138428EB23 /* BookListUseCaseTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookListUseCaseTests.swift; sourceTree = ""; };
+ 24F1526402401DBFF6736037 /* InternalCollectionsUtilities.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = InternalCollectionsUtilities.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 275036982500E63F980B08D3 /* OrderedCollections.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = OrderedCollections.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 28B28AE28B75F4A08064786E /* SwiftNavigation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftNavigation.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 2B60FF119A6FEF6D0D51AE5B /* ConcurrencyExtras.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ConcurrencyExtras.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 319E89CCC442C21B32EE3C8A /* CasePaths.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CasePaths.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 38354F5D61ADD2C05EFA3A60 /* IssueReportingPackageSupport.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = IssueReportingPackageSupport.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 3B16AB3C68361FD16199A1DF /* Service_Service.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Service_Service.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
+ 4031F1BD9A9E73F69501493A /* swift-sharing_Sharing.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "swift-sharing_Sharing.bundle"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 44D709557E90FBEF8A8A4305 /* UIKitNavigationShim.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = UIKitNavigationShim.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 46C58245B58D94734381D720 /* DiContainer.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DiContainer.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 48BCB17D9732330186A8333E /* Sharing1.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Sharing1.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 491B7F0EBCB2B579DEE44331 /* Model.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Model.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 506286633FC4DF9633A2E0FD /* Dependencies.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Dependencies.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 51567EE2D436C6B64DB1FD25 /* TuistBundle+UseCaseTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistBundle+UseCaseTests.swift"; sourceTree = ""; };
+ 61E565246F1A023C52E9EA20 /* Utill.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Utill.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 6AA0797B504174C847E8FE95 /* Clocks.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Clocks.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 6C51192BCDE8A7E9252657C2 /* Repository.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Repository.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 765D2D0CA936BA6ADB4F5CE8 /* UseCase_Stage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = UseCase_Stage.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 83C1C4DE45683C912C8DC2B4 /* Perception.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Perception.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 85FEAEF231E31B0754B21769 /* PerceptionCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PerceptionCore.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 89507EFE5D61336E2067E811 /* TestTags.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestTags.swift; sourceTree = ""; };
+ 8A7443ABF2BF970A68F68C39 /* CombineSchedulers.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CombineSchedulers.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 8D8A2D9DA49513C777029E76 /* UseCase_Debug.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = UseCase_Debug.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 9508B8EA67CFEB36EF508AF4 /* UseCase-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "UseCase-Info.plist"; sourceTree = ""; };
+ 981DA49FF8FB5D20F6052CD5 /* UseCase.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = UseCase.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 9D1B8C349D40AC2EE01758FF /* UseCase-Debug-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "UseCase-Debug-Info.plist"; sourceTree = ""; };
+ A06ABB2F1523CED2E74B4851 /* ComposableArchitecture.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ComposableArchitecture.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ A397733F0151591AE4A2EC73 /* BookListUseCaseImpl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookListUseCaseImpl.swift; sourceTree = ""; };
+ A733A7597F14F4728F8A5C0C /* swift-composable-architecture_ComposableArchitecture.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "swift-composable-architecture_ComposableArchitecture.bundle"; sourceTree = BUILT_PRODUCTS_DIR; };
+ A751B0F38C9C2575198515CF /* UseCaseTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = UseCaseTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+ B903EEF70DF0FB080EFC7B9B /* DependenciesMacros.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DependenciesMacros.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ B922F6F0A84360198FB6043A /* LogMacro.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = LogMacro.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ B930A91712C71F045FA71426 /* IssueReporting.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = IssueReporting.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ BDC4D3A9CC2456F59785C311 /* CustomDump.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CustomDump.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ C4016988238AD435EC070B51 /* UseCaseTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "UseCaseTests-Info.plist"; sourceTree = ""; };
+ D6FD9521226B13200DEB8FED /* UseCase-Prod-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "UseCase-Prod-Info.plist"; sourceTree = ""; };
+ D748E68EDF03BA484791AC0E /* UIKitNavigation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = UIKitNavigation.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ D7D106A44F676A3F66DBD268 /* Service.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Service.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ DCE5B4C0845929AAD691396C /* Sharing.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Sharing.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ EF32355A546906AD16B4026C /* Sharing2.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Sharing2.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ F2E0EC679FC135E5CEC0A9AD /* IdentifiedCollections.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = IdentifiedCollections.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ F9761AA31A39E2CCF29043E7 /* UseCase_Prod.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = UseCase_Prod.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ FA48A0D2804DC03C431C9190 /* OSLog.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OSLog.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/OSLog.framework; sourceTree = DEVELOPER_DIR; };
+ FB9702202A42059A564824B3 /* DomainInterface.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DomainInterface.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 12F97892778F09B5E8D51281 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 49F0FCDB682DDD17456E6781 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 6F8C0740809FF4FA4ECB5419 /* OSLog.framework in Frameworks */,
+ 639F5DA2F5E386011A7ACD8D /* CasePaths.framework in Frameworks */,
+ B56BA2CAB8E95C0B318816C5 /* CasePathsCore.framework in Frameworks */,
+ 13D48166F46D9317D55B2CF3 /* Clocks.framework in Frameworks */,
+ 225CEFCE42B0B52EADC274BD /* CombineSchedulers.framework in Frameworks */,
+ 7AC6377C2F512F8932492065 /* ComposableArchitecture.framework in Frameworks */,
+ 039F640F54A3DEE46842069F /* ConcurrencyExtras.framework in Frameworks */,
+ CAA123A29015605C00B054B0 /* CustomDump.framework in Frameworks */,
+ B9C9A498E023667DA2DBE6E9 /* Dependencies.framework in Frameworks */,
+ FB5F5B5975EA6EFA6DBB7A9F /* DependenciesMacros.framework in Frameworks */,
+ 0A936314C0600F81E5A0F920 /* DiContainer.framework in Frameworks */,
+ 3AD9817DB1EA153D26CA1169 /* DomainInterface.framework in Frameworks */,
+ 00DFC76D5E73EFAACB117244 /* IdentifiedCollections.framework in Frameworks */,
+ C94613A52F9BFA9FB4F53709 /* InternalCollectionsUtilities.framework in Frameworks */,
+ AD9C424DD9EB3BBDF51C7E00 /* IssueReporting.framework in Frameworks */,
+ EE69B862A9856B56F0FF9AAC /* IssueReportingPackageSupport.framework in Frameworks */,
+ A705971F0A7C3227E903D5B6 /* LogMacro.framework in Frameworks */,
+ B2AF891D2D2481ADFD0D1400 /* Model.framework in Frameworks */,
+ 5EDB47A27CE022305A0209FB /* OrderedCollections.framework in Frameworks */,
+ 9A865777262F57D1BDDF8DEF /* Perception.framework in Frameworks */,
+ 546C4C7902FF0E1EBD659ED0 /* PerceptionCore.framework in Frameworks */,
+ BB5DA4B960E719E9BC9438A5 /* Repository.framework in Frameworks */,
+ DE5D7645FE62EEC5E0714F4E /* Service.framework in Frameworks */,
+ 75D5489B5B030315F847CEC7 /* Sharing.framework in Frameworks */,
+ D5393DB4DF93417EF9EE85BB /* Sharing1.framework in Frameworks */,
+ 8D33245E18919C5183CF8240 /* Sharing2.framework in Frameworks */,
+ 981D811B08EC3109C187940B /* SwiftNavigation.framework in Frameworks */,
+ F2ECBEB3C9CF423819541589 /* SwiftUINavigation.framework in Frameworks */,
+ 071B981F0D2DF826183B79CB /* UIKitNavigation.framework in Frameworks */,
+ 27BC664E66CCF74669CFCB4A /* UIKitNavigationShim.framework in Frameworks */,
+ 541697140A6418A997A49C8E /* UseCase.framework in Frameworks */,
+ 63B46E3496550345E580995C /* Utill.framework in Frameworks */,
+ 532676483F2C2203F76AB474 /* XCTestDynamicOverlay.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 7A94753229BCF2CE97845D6C /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ CAD044BB9155462C25D33791 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ FCCC3C31F925818E03CD87CA /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 01A38EA67589DF84A3F218AA /* Sources */ = {
+ isa = PBXGroup;
+ children = (
+ 51567EE2D436C6B64DB1FD25 /* TuistBundle+UseCaseTests.swift */,
+ );
+ path = Sources;
+ sourceTree = "";
+ };
+ 24C485C2264AA4D53285980D /* Sources */ = {
+ isa = PBXGroup;
+ children = (
+ 3A33EB1ACBFC2F6877318199 /* BookList */,
+ );
+ path = Sources;
+ sourceTree = "";
+ };
+ 3A33EB1ACBFC2F6877318199 /* BookList */ = {
+ isa = PBXGroup;
+ children = (
+ A397733F0151591AE4A2EC73 /* BookListUseCaseImpl.swift */,
+ 05700E1472D79B766A823846 /* SummaryPersistenceUseCaseImpl.swift */,
+ );
+ path = BookList;
+ sourceTree = "";
+ };
+ 69D9351C275C988F76520280 /* Project */ = {
+ isa = PBXGroup;
+ children = (
+ 7BA79317E36A34446201C028 /* Derived */,
+ 24C485C2264AA4D53285980D /* Sources */,
+ 78A591603ED90C5371A925D1 /* UseCaseTests */,
+ );
+ name = Project;
+ sourceTree = "";
+ };
+ 728FE43A312D21FFBB68E006 = {
+ isa = PBXGroup;
+ children = (
+ 69D9351C275C988F76520280 /* Project */,
+ BF0062FA29B274A2F9F0E5D9 /* Products */,
+ C4FA0D0A6E006082621144E3 /* Frameworks */,
+ );
+ sourceTree = "";
+ };
+ 78A591603ED90C5371A925D1 /* UseCaseTests */ = {
+ isa = PBXGroup;
+ children = (
+ AA59CE1FEA8A06FD9F2BEE42 /* Sources */,
+ );
+ path = UseCaseTests;
+ sourceTree = "";
+ };
+ 7BA79317E36A34446201C028 /* Derived */ = {
+ isa = PBXGroup;
+ children = (
+ B689C96CF7E0ED0FEEF513C1 /* InfoPlists */,
+ 01A38EA67589DF84A3F218AA /* Sources */,
+ );
+ path = Derived;
+ sourceTree = "";
+ };
+ AA59CE1FEA8A06FD9F2BEE42 /* Sources */ = {
+ isa = PBXGroup;
+ children = (
+ 23850C81320E0E138428EB23 /* BookListUseCaseTests.swift */,
+ 1D925C09B23D80D9DBE44FF4 /* SummaryPersistenceUseCaseTests.swift */,
+ 89507EFE5D61336E2067E811 /* TestTags.swift */,
+ );
+ path = Sources;
+ sourceTree = "";
+ };
+ B689C96CF7E0ED0FEEF513C1 /* InfoPlists */ = {
+ isa = PBXGroup;
+ children = (
+ 9D1B8C349D40AC2EE01758FF /* UseCase-Debug-Info.plist */,
+ 9508B8EA67CFEB36EF508AF4 /* UseCase-Info.plist */,
+ D6FD9521226B13200DEB8FED /* UseCase-Prod-Info.plist */,
+ 156620DF42B5B603B36FFC4D /* UseCase-Stage-Info.plist */,
+ C4016988238AD435EC070B51 /* UseCaseTests-Info.plist */,
+ );
+ path = InfoPlists;
+ sourceTree = "";
+ };
+ BF0062FA29B274A2F9F0E5D9 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 319E89CCC442C21B32EE3C8A /* CasePaths.framework */,
+ 077022AC51917B06E9B06B85 /* CasePathsCore.framework */,
+ 6AA0797B504174C847E8FE95 /* Clocks.framework */,
+ 8A7443ABF2BF970A68F68C39 /* CombineSchedulers.framework */,
+ A06ABB2F1523CED2E74B4851 /* ComposableArchitecture.framework */,
+ 2B60FF119A6FEF6D0D51AE5B /* ConcurrencyExtras.framework */,
+ BDC4D3A9CC2456F59785C311 /* CustomDump.framework */,
+ 506286633FC4DF9633A2E0FD /* Dependencies.framework */,
+ B903EEF70DF0FB080EFC7B9B /* DependenciesMacros.framework */,
+ 46C58245B58D94734381D720 /* DiContainer.framework */,
+ FB9702202A42059A564824B3 /* DomainInterface.framework */,
+ F2E0EC679FC135E5CEC0A9AD /* IdentifiedCollections.framework */,
+ 24F1526402401DBFF6736037 /* InternalCollectionsUtilities.framework */,
+ B930A91712C71F045FA71426 /* IssueReporting.framework */,
+ 38354F5D61ADD2C05EFA3A60 /* IssueReportingPackageSupport.framework */,
+ B922F6F0A84360198FB6043A /* LogMacro.framework */,
+ 491B7F0EBCB2B579DEE44331 /* Model.framework */,
+ 275036982500E63F980B08D3 /* OrderedCollections.framework */,
+ 83C1C4DE45683C912C8DC2B4 /* Perception.framework */,
+ 85FEAEF231E31B0754B21769 /* PerceptionCore.framework */,
+ 6C51192BCDE8A7E9252657C2 /* Repository.framework */,
+ 3B16AB3C68361FD16199A1DF /* Service_Service.bundle */,
+ D7D106A44F676A3F66DBD268 /* Service.framework */,
+ DCE5B4C0845929AAD691396C /* Sharing.framework */,
+ 48BCB17D9732330186A8333E /* Sharing1.framework */,
+ EF32355A546906AD16B4026C /* Sharing2.framework */,
+ A733A7597F14F4728F8A5C0C /* swift-composable-architecture_ComposableArchitecture.bundle */,
+ 4031F1BD9A9E73F69501493A /* swift-sharing_Sharing.bundle */,
+ 28B28AE28B75F4A08064786E /* SwiftNavigation.framework */,
+ 1C2FD116C7A6B0F966929543 /* SwiftUINavigation.framework */,
+ D748E68EDF03BA484791AC0E /* UIKitNavigation.framework */,
+ 44D709557E90FBEF8A8A4305 /* UIKitNavigationShim.framework */,
+ 8D8A2D9DA49513C777029E76 /* UseCase_Debug.framework */,
+ F9761AA31A39E2CCF29043E7 /* UseCase_Prod.framework */,
+ 765D2D0CA936BA6ADB4F5CE8 /* UseCase_Stage.framework */,
+ 981DA49FF8FB5D20F6052CD5 /* UseCase.framework */,
+ A751B0F38C9C2575198515CF /* UseCaseTests.xctest */,
+ 61E565246F1A023C52E9EA20 /* Utill.framework */,
+ 008DF05C3439EA6B9FDCF073 /* XCTestDynamicOverlay.framework */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ C4FA0D0A6E006082621144E3 /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ FA48A0D2804DC03C431C9190 /* OSLog.framework */,
+ );
+ name = Frameworks;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 3DF3057AD58FAE5A14CAF9E4 /* UseCaseTests */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = A52EED1EFE544898B4337FD6 /* Build configuration list for PBXNativeTarget "UseCaseTests" */;
+ buildPhases = (
+ 24DD98DB5A42EF7357D9D619 /* Sources */,
+ D4AFB39E700AE8B1FD97CFB1 /* Resources */,
+ 49F0FCDB682DDD17456E6781 /* Frameworks */,
+ 1785EF16E2B179422726EDF2 /* Embed Frameworks */,
+ 1264FD7FB19BA1E456552A7D /* Dependencies */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ BA41CC8FD9AE153EDC4B9481 /* PBXTargetDependency */,
+ );
+ name = UseCaseTests;
+ packageProductDependencies = (
+ );
+ productName = UseCaseTests;
+ productReference = A751B0F38C9C2575198515CF /* UseCaseTests.xctest */;
+ productType = "com.apple.product-type.bundle.unit-test";
+ };
+ 8C65047FBC2F2D1C1DEF93C0 /* UseCase-Debug */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 4C9F1943A5D5780A954F0765 /* Build configuration list for PBXNativeTarget "UseCase-Debug" */;
+ buildPhases = (
+ 64AEEE20ECB8BF08B3F91071 /* Sources */,
+ B3F3468A62B00010F0C244D1 /* Resources */,
+ CAD044BB9155462C25D33791 /* Frameworks */,
+ D514C67A05A62184CDD19868 /* Embed Frameworks */,
+ D67561678CE965A74FF5140F /* Dependencies */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = "UseCase-Debug";
+ packageProductDependencies = (
+ );
+ productName = UseCase_Debug;
+ productReference = 8D8A2D9DA49513C777029E76 /* UseCase_Debug.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+ C5E5699E683D790D1BF5560E /* UseCase-Prod */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 146B70523CFCCD314A72B48F /* Build configuration list for PBXNativeTarget "UseCase-Prod" */;
+ buildPhases = (
+ 82D558C881C80001E2252C86 /* Sources */,
+ 29F80BD4780FD8354F542133 /* Resources */,
+ FCCC3C31F925818E03CD87CA /* Frameworks */,
+ 72B388F9D5D07EF7DDE9B7FC /* Embed Frameworks */,
+ 06E71EF9542AC4B578DCA5A3 /* Dependencies */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = "UseCase-Prod";
+ packageProductDependencies = (
+ );
+ productName = UseCase_Prod;
+ productReference = F9761AA31A39E2CCF29043E7 /* UseCase_Prod.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+ E9771ABDD23E7E423EDDA20B /* UseCase-Stage */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 946D7DFCDF034D49A19E16D8 /* Build configuration list for PBXNativeTarget "UseCase-Stage" */;
+ buildPhases = (
+ 815BD39EEE74CD6B7317E1F4 /* Sources */,
+ 6BAEA7C9FE602A86F0745E65 /* Resources */,
+ 12F97892778F09B5E8D51281 /* Frameworks */,
+ 248619F5A5BDEA2FB3124ADD /* Embed Frameworks */,
+ 823654538862A5D1C4A11C8C /* Dependencies */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = "UseCase-Stage";
+ packageProductDependencies = (
+ );
+ productName = UseCase_Stage;
+ productReference = 765D2D0CA936BA6ADB4F5CE8 /* UseCase_Stage.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+ F7ABD5E2347ED8B12FE2AABD /* UseCase */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 40567AD739C47708EF00BE71 /* Build configuration list for PBXNativeTarget "UseCase" */;
+ buildPhases = (
+ 74EDD284A907393A4CEFBF6F /* Sources */,
+ 15AED2C5C8127884EC254682 /* Resources */,
+ 7A94753229BCF2CE97845D6C /* Frameworks */,
+ 43A5087052C526A9D7C83DD8 /* Embed Frameworks */,
+ FD401F535FD0F0B19E45FF4B /* Dependencies */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = UseCase;
+ packageProductDependencies = (
+ );
+ productName = UseCase;
+ productReference = 981DA49FF8FB5D20F6052CD5 /* UseCase.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 6BDC2ECB7C69CEDB1C1402B3 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ BuildIndependentTargetsInParallel = YES;
+ TargetAttributes = {
+ };
+ };
+ buildConfigurationList = 457FF1DD029A472E8F5461F7 /* Build configuration list for PBXProject "UseCase" */;
+ compatibilityVersion = "Xcode 14.0";
+ developmentRegion = ko;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ ko,
+ );
+ mainGroup = 728FE43A312D21FFBB68E006;
+ productRefGroup = BF0062FA29B274A2F9F0E5D9 /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ F7ABD5E2347ED8B12FE2AABD /* UseCase */,
+ 8C65047FBC2F2D1C1DEF93C0 /* UseCase-Debug */,
+ C5E5699E683D790D1BF5560E /* UseCase-Prod */,
+ E9771ABDD23E7E423EDDA20B /* UseCase-Stage */,
+ 3DF3057AD58FAE5A14CAF9E4 /* UseCaseTests */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 15AED2C5C8127884EC254682 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 29F80BD4780FD8354F542133 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 6BAEA7C9FE602A86F0745E65 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B3F3468A62B00010F0C244D1 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ D4AFB39E700AE8B1FD97CFB1 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 253ADD154E0636AA70F8D743 /* BookListUseCaseTests.swift in Resources */,
+ CC74BCA440F81BB53F9FA992 /* SummaryPersistenceUseCaseTests.swift in Resources */,
+ 13F542F658B74B5A78AC8A97 /* TestTags.swift in Resources */,
+ B2F7FE5C423A39A4565F0F84 /* Service_Service.bundle in Resources */,
+ 014438C30E3FBCFDF9D90E75 /* swift-composable-architecture_ComposableArchitecture.bundle in Resources */,
+ B3D82FA785BA33FDEE677930 /* swift-sharing_Sharing.bundle in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 24DD98DB5A42EF7357D9D619 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 4FE880D0FA6D000F747022CE /* TuistBundle+UseCaseTests.swift in Sources */,
+ 7B1209328E7ADC1A97880918 /* BookListUseCaseTests.swift in Sources */,
+ 03FBCA67E2B3EF24B2772029 /* SummaryPersistenceUseCaseTests.swift in Sources */,
+ 78240A3908E9339EC75DBEE2 /* TestTags.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 64AEEE20ECB8BF08B3F91071 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 160B51D2DFC89B04828176AF /* BookListUseCaseImpl.swift in Sources */,
+ 3696CAAADA1E28F46E5B26AC /* SummaryPersistenceUseCaseImpl.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 74EDD284A907393A4CEFBF6F /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 4E3980C565E43304F0F1E101 /* BookListUseCaseImpl.swift in Sources */,
+ 7874D2A6F947BE1620225121 /* SummaryPersistenceUseCaseImpl.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 815BD39EEE74CD6B7317E1F4 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 7877E1D2F0708E6B8BA5DCD1 /* BookListUseCaseImpl.swift in Sources */,
+ 0C6CB5A62B5FC3DBD9068817 /* SummaryPersistenceUseCaseImpl.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 82D558C881C80001E2252C86 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 10E27092E86026FC59BFF7F0 /* BookListUseCaseImpl.swift in Sources */,
+ 811408EB3DD885E082C14AB0 /* SummaryPersistenceUseCaseImpl.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+ BA41CC8FD9AE153EDC4B9481 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ name = UseCase;
+ target = F7ABD5E2347ED8B12FE2AABD /* UseCase */;
+ targetProxy = 994080C900D3F2225E8352B3 /* PBXContainerItemProxy */;
+ };
+/* End PBXTargetDependency section */
+
+/* Begin XCBuildConfiguration section */
+ 0F2351BA83A11087724D90D2 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-navigation/Sources/UIKitNavigationShim/include",
+ "$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/UseCase-Stage-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/CasePathsMacros#CasePathsMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/ComposableArchitectureMacros#ComposableArchitectureMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/DependenciesMacrosPlugin#DependenciesMacrosPlugin",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/PerceptionMacros#PerceptionMacros",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.UseCase;
+ PRODUCT_NAME = UseCase_Stage;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Release;
+ };
+ 13B1968A302FF8831A5B3761 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-navigation/Sources/UIKitNavigationShim/include",
+ "$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/UseCase-Stage-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/CasePathsMacros#CasePathsMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/ComposableArchitectureMacros#ComposableArchitectureMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/DependenciesMacrosPlugin#DependenciesMacrosPlugin",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/PerceptionMacros#PerceptionMacros",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.UseCase;
+ PRODUCT_NAME = UseCase_Stage;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Debug;
+ };
+ 1D21FF1BD6A4A1FE2F46B135 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ DEAD_CODE_STRIPPING = YES;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+ 29C64D7B3638AF1CF6758EF9 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-navigation/Sources/UIKitNavigationShim/include",
+ "$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/UseCaseTests-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/CasePathsMacros#CasePathsMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/ComposableArchitectureMacros#ComposableArchitectureMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/DependenciesMacrosPlugin#DependenciesMacrosPlugin",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/PerceptionMacros#PerceptionMacros",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.UseCase.UseCaseTests;
+ PRODUCT_NAME = UseCaseTests;
+ SDKROOT = iphoneos;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ };
+ name = Debug;
+ };
+ 48111A59F459FF616EFC7CFF /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-navigation/Sources/UIKitNavigationShim/include",
+ "$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/UseCase-Prod-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/CasePathsMacros#CasePathsMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/ComposableArchitectureMacros#ComposableArchitectureMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/DependenciesMacrosPlugin#DependenciesMacrosPlugin",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/PerceptionMacros#PerceptionMacros",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.UseCase;
+ PRODUCT_NAME = UseCase_Prod;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Debug;
+ };
+ 56E3444FE06A0693B12DBC80 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-navigation/Sources/UIKitNavigationShim/include",
+ "$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/UseCase-Prod-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/CasePathsMacros#CasePathsMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/ComposableArchitectureMacros#ComposableArchitectureMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/DependenciesMacrosPlugin#DependenciesMacrosPlugin",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/PerceptionMacros#PerceptionMacros",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.UseCase;
+ PRODUCT_NAME = UseCase_Prod;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Release;
+ };
+ 95B76B7F46E3B797E745EBB4 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-navigation/Sources/UIKitNavigationShim/include",
+ "$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/UseCase-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/CasePathsMacros#CasePathsMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/ComposableArchitectureMacros#ComposableArchitectureMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/DependenciesMacrosPlugin#DependenciesMacrosPlugin",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/PerceptionMacros#PerceptionMacros",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.UseCase;
+ PRODUCT_NAME = UseCase;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Release;
+ };
+ A2EFE8438F07C858FC1E0EB0 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-navigation/Sources/UIKitNavigationShim/include",
+ "$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/UseCase-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/CasePathsMacros#CasePathsMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/ComposableArchitectureMacros#ComposableArchitectureMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/DependenciesMacrosPlugin#DependenciesMacrosPlugin",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/PerceptionMacros#PerceptionMacros",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.UseCase;
+ PRODUCT_NAME = UseCase;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Debug;
+ };
+ A66A532BD64AE2C75EBC32D1 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-navigation/Sources/UIKitNavigationShim/include",
+ "$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/UseCaseTests-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/CasePathsMacros#CasePathsMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/ComposableArchitectureMacros#ComposableArchitectureMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/DependenciesMacrosPlugin#DependenciesMacrosPlugin",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/PerceptionMacros#PerceptionMacros",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.UseCase.UseCaseTests;
+ PRODUCT_NAME = UseCaseTests;
+ SDKROOT = iphoneos;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ };
+ name = Release;
+ };
+ C05B9ADA11AAC3819AF6182A /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-navigation/Sources/UIKitNavigationShim/include",
+ "$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/UseCase-Debug-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/CasePathsMacros#CasePathsMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/ComposableArchitectureMacros#ComposableArchitectureMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/DependenciesMacrosPlugin#DependenciesMacrosPlugin",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/PerceptionMacros#PerceptionMacros",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.UseCase;
+ PRODUCT_NAME = UseCase_Debug;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Release;
+ };
+ E5C47F2B5F4AF20DC2D80193 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-navigation/Sources/UIKitNavigationShim/include",
+ "$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/UseCase-Debug-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/tuist-derived/UIKitNavigationShim/UIKitNavigationShim.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/CasePathsMacros#CasePathsMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/ComposableArchitectureMacros#ComposableArchitectureMacros",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/DependenciesMacrosPlugin#DependenciesMacrosPlugin",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/PerceptionMacros#PerceptionMacros",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.UseCase;
+ PRODUCT_NAME = UseCase_Debug;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Debug;
+ };
+ E72544F8ABBEF08750AE1E0C /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ DEAD_CODE_STRIPPING = YES;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ MTL_ENABLE_DEBUG_INFO = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ };
+ name = Debug;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 146B70523CFCCD314A72B48F /* Build configuration list for PBXNativeTarget "UseCase-Prod" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 48111A59F459FF616EFC7CFF /* Debug */,
+ 56E3444FE06A0693B12DBC80 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 40567AD739C47708EF00BE71 /* Build configuration list for PBXNativeTarget "UseCase" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ A2EFE8438F07C858FC1E0EB0 /* Debug */,
+ 95B76B7F46E3B797E745EBB4 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 457FF1DD029A472E8F5461F7 /* Build configuration list for PBXProject "UseCase" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ E72544F8ABBEF08750AE1E0C /* Debug */,
+ 1D21FF1BD6A4A1FE2F46B135 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 4C9F1943A5D5780A954F0765 /* Build configuration list for PBXNativeTarget "UseCase-Debug" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ E5C47F2B5F4AF20DC2D80193 /* Debug */,
+ C05B9ADA11AAC3819AF6182A /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 946D7DFCDF034D49A19E16D8 /* Build configuration list for PBXNativeTarget "UseCase-Stage" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 13B1968A302FF8831A5B3761 /* Debug */,
+ 0F2351BA83A11087724D90D2 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ A52EED1EFE544898B4337FD6 /* Build configuration list for PBXNativeTarget "UseCaseTests" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 29C64D7B3638AF1CF6758EF9 /* Debug */,
+ A66A532BD64AE2C75EBC32D1 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 6BDC2ECB7C69CEDB1C1402B3 /* Project object */;
+}
diff --git a/Projects/Core/Domain/UseCase/UseCase.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Projects/Core/Domain/UseCase/UseCase.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..919434a
--- /dev/null
+++ b/Projects/Core/Domain/UseCase/UseCase.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/Projects/Core/Domain/UseCase/UseCase.xcodeproj/xcshareddata/xcschemes/UseCase-Debug.xcscheme b/Projects/Core/Domain/UseCase/UseCase.xcodeproj/xcshareddata/xcschemes/UseCase-Debug.xcscheme
new file mode 100644
index 0000000..a04bfa2
--- /dev/null
+++ b/Projects/Core/Domain/UseCase/UseCase.xcodeproj/xcshareddata/xcschemes/UseCase-Debug.xcscheme
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Projects/Core/Domain/UseCase/UseCase.xcodeproj/xcshareddata/xcschemes/UseCase-Prod.xcscheme b/Projects/Core/Domain/UseCase/UseCase.xcodeproj/xcshareddata/xcschemes/UseCase-Prod.xcscheme
new file mode 100644
index 0000000..4d24ea2
--- /dev/null
+++ b/Projects/Core/Domain/UseCase/UseCase.xcodeproj/xcshareddata/xcschemes/UseCase-Prod.xcscheme
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Projects/Core/Domain/UseCase/UseCase.xcodeproj/xcshareddata/xcschemes/UseCase-Stage.xcscheme b/Projects/Core/Domain/UseCase/UseCase.xcodeproj/xcshareddata/xcschemes/UseCase-Stage.xcscheme
new file mode 100644
index 0000000..b8b4288
--- /dev/null
+++ b/Projects/Core/Domain/UseCase/UseCase.xcodeproj/xcshareddata/xcschemes/UseCase-Stage.xcscheme
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Projects/Core/Domain/UseCase/UseCase.xcodeproj/xcshareddata/xcschemes/UseCase.xcscheme b/Projects/Core/Domain/UseCase/UseCase.xcodeproj/xcshareddata/xcschemes/UseCase.xcscheme
new file mode 100644
index 0000000..d3bf17c
--- /dev/null
+++ b/Projects/Core/Domain/UseCase/UseCase.xcodeproj/xcshareddata/xcschemes/UseCase.xcscheme
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Projects/Core/Domain/UseCase/UseCaseTests/Sources/BookListUseCaseTests.swift b/Projects/Core/Domain/UseCase/UseCaseTests/Sources/BookListUseCaseTests.swift
new file mode 100644
index 0000000..bef5d86
--- /dev/null
+++ b/Projects/Core/Domain/UseCase/UseCaseTests/Sources/BookListUseCaseTests.swift
@@ -0,0 +1,177 @@
+//
+// BookListUseCaseTests.swift
+// UseCaseTests
+//
+// Created by Wonji Suh on 9/11/25.
+//
+
+import Testing
+import Foundation
+@testable import UseCase
+@testable import DomainInterface
+@testable import Model
+@testable import Repository
+
+@MainActor
+struct BookListUseCaseTests {
+
+ // MARK: - Tests
+
+ @Test("목데이터를 사용한 북 리스트 조회 성공 테스트", .tags(.useCaseTest, .bookListTest, .mockDataTest))
+ func testGetBookListSuccessWithMockData() async throws {
+ // Given
+ let mockRepository = DefaultBookListRepositoryImpl()
+ let useCase = BookListUseCaseImpl(repository: mockRepository)
+
+ // When
+ let result = try await useCase.getBookList()
+
+ // Then
+ #expect(result.count == 5)
+ #expect(mockRepository.getCallCount() == 1)
+ #expect(result[0].title == "클린 코드")
+ #expect(result[1].title == "이펙티브 자바")
+ #expect(result[2].title == "스위프트 프로그래밍")
+ #expect(result[3].title == "디자인 패턴")
+ #expect(result[4].title == "리팩토링")
+ }
+
+ @Test("빈 북 리스트 조회 테스트", .tags(.useCaseTest, .bookListTest, .unitTest))
+ func testGetEmptyBookList() async throws {
+ // Given
+ let mockRepository = DefaultBookListRepositoryImpl()
+ mockRepository.setMockBooks([])
+ let useCase = BookListUseCaseImpl(repository: mockRepository)
+
+ // When
+ let result = try await useCase.getBookList()
+
+ // Then
+ #expect(result.isEmpty)
+ #expect(mockRepository.getCallCount() == 1)
+ }
+
+ @Test("북 리스트 조회 실패 테스트", .tags(.useCaseTest, .bookListTest, .errorHandlingTest))
+ func testGetBookListFailure() async throws {
+ // Given
+ let mockRepository = DefaultBookListRepositoryImpl()
+ mockRepository.setShouldThrowError(true, error: DefaultBookListRepositoryImpl.MockError.networkError)
+ let useCase = BookListUseCaseImpl(repository: mockRepository)
+
+ // When & Then
+ await #expect(throws: DefaultBookListRepositoryImpl.MockError.self) {
+ try await useCase.getBookList()
+ }
+
+ #expect(mockRepository.getCallCount() == 1)
+ }
+
+ @Test("여러 번 호출 테스트", .tags(.useCaseTest, .bookListTest, .integrationTest))
+ func testMultipleCallsToGetBookList() async throws {
+ // Given
+ let mockRepository = DefaultBookListRepositoryImpl()
+ let useCase = BookListUseCaseImpl(repository: mockRepository)
+
+ // When
+ let result1 = try await useCase.getBookList()
+ let result2 = try await useCase.getBookList()
+ let result3 = try await useCase.getBookList()
+
+ // Then
+ #expect(result1 == result2)
+ #expect(result2 == result3)
+ #expect(result1.count == 5)
+ #expect(mockRepository.getCallCount() == 3)
+ }
+
+ @Test("단일 책 조회 테스트", .tags(.useCaseTest, .bookListTest, .unitTest))
+ func testGetSingleBookList() async throws {
+ // Given
+ let mockRepository = DefaultBookListRepositoryImpl()
+ let singleBook = [Book(
+ title: "테스트 책",
+ author: "테스트 작가",
+ pages: 300,
+ image: "test.jpg",
+ releaseDate: "2023-01-01",
+ dedication: "테스트",
+ summary: "테스트 요약",
+ wiki: "https://test.com",
+ chapters: ["테스트 챕터"]
+ )]
+ mockRepository.setMockBooks(singleBook)
+ let useCase = BookListUseCaseImpl(repository: mockRepository)
+
+ // When
+ let result = try await useCase.getBookList()
+
+ // Then
+ #expect(result.count == 1)
+ #expect(result[0].title == "테스트 책")
+ #expect(result[0].author == "테스트 작가")
+ #expect(result[0].pages == 300)
+ }
+
+ @Test("DefaultRepository를 사용한 테스트", .tags(.useCaseTest, .bookListTest, .defaultImplementationTest))
+ func testWithDefaultRepository() async throws {
+ // Given
+ let defaultRepository = DefaultBookListRepositoryImpl()
+ let useCase = BookListUseCaseImpl(repository: defaultRepository)
+
+ // When
+ let result = try await useCase.getBookList()
+
+ // Then
+ #expect(result.count == 5)
+ #expect(result[0].title == "클린 코드")
+ #expect(result[1].title == "이펙티브 자바")
+ #expect(result[2].title == "스위프트 프로그래밍")
+ #expect(result[3].title == "디자인 패턴")
+ #expect(result[4].title == "리팩토링")
+ }
+
+ @Test("UseCase 초기화 테스트", .tags(.useCaseTest, .unitTest))
+ func testUseCaseInitialization() {
+ // Given
+ let repository = DefaultBookListRepositoryImpl()
+
+ // When
+ let testUseCase = BookListUseCaseImpl(repository: repository)
+
+ // Then
+ #expect(testUseCase != nil)
+ }
+
+ @Test("Repository 호출 횟수 추적 테스트", .tags(.useCaseTest, .bookListTest, .integrationTest))
+ func testRepositoryCallCountTracking() async throws {
+ // Given
+ let mockRepository = DefaultBookListRepositoryImpl()
+ let useCase = BookListUseCaseImpl(repository: mockRepository)
+
+ // When
+ _ = try await useCase.getBookList()
+ _ = try await useCase.getBookList()
+ _ = try await useCase.getBookList()
+
+ // Then
+ #expect(mockRepository.getCallCount() == 3)
+ }
+
+ @Test("Repository 리셋 기능 테스트", .tags(.useCaseTest, .bookListTest, .unitTest))
+ func testRepositoryReset() async throws {
+ // Given
+ let mockRepository = DefaultBookListRepositoryImpl()
+ let useCase = BookListUseCaseImpl(repository: mockRepository)
+
+ // When
+ _ = try await useCase.getBookList()
+ #expect(mockRepository.getCallCount() == 1)
+
+ mockRepository.reset()
+
+ // Then
+ #expect(mockRepository.getCallCount() == 0)
+ let result = try await useCase.getBookList()
+ #expect(result.count == 5) // 기본 책 목록이 복원됨
+ }
+}
diff --git a/Projects/Core/Domain/UseCase/UseCaseTests/Sources/SummaryPersistenceUseCaseTests.swift b/Projects/Core/Domain/UseCase/UseCaseTests/Sources/SummaryPersistenceUseCaseTests.swift
new file mode 100644
index 0000000..1fbdec7
--- /dev/null
+++ b/Projects/Core/Domain/UseCase/UseCaseTests/Sources/SummaryPersistenceUseCaseTests.swift
@@ -0,0 +1,202 @@
+//
+// SummaryPersistenceUseCaseTests.swift
+// UseCaseTests
+//
+// Created by Wonji Suh on 9/11/25.
+//
+
+import Testing
+import Foundation
+@testable import UseCase
+@testable import DomainInterface
+@testable import Repository
+
+@MainActor
+struct SummaryPersistenceUseCaseTests {
+
+ // MARK: - Tests
+
+ @Test("목 저장소를 사용한 요약 상태 저장 및 로드 테스트", .tags(.useCaseTest, .summaryPersistenceTest, .mockDataTest))
+ func testSaveAndLoadWithMockRepository() {
+ // Given
+ let mockRepository = DefaultSummaryPersistenceRepository()
+ let useCase = SummaryPersistenceUseCaseImpl(repository: mockRepository)
+ let title = "클린 코드"
+ let author = "로버트 C. 마틴"
+
+ // When
+ let initialState = useCase.loadSummaryExpanded(for: title, author: author)
+ useCase.saveSummaryExpanded(false, for: title, author: author)
+ let changedState = useCase.loadSummaryExpanded(for: title, author: author)
+ useCase.saveSummaryExpanded(true, for: title, author: author)
+ let finalState = useCase.loadSummaryExpanded(for: title, author: author)
+
+ // Then
+ #expect(initialState == true) // 기본값으로 설정됨
+ #expect(changedState == false)
+ #expect(finalState == true)
+ #expect(mockRepository.getLoadCallCount() == 3)
+ #expect(mockRepository.getSaveCallCount() == 2)
+ }
+
+ @Test("여러 책의 요약 상태 독립적 관리 테스트", .tags(.useCaseTest, .summaryPersistenceTest, .integrationTest))
+ func testMultipleBooksIndependentState() {
+ // Given
+ let mockRepository = DefaultSummaryPersistenceRepository()
+ let useCase = SummaryPersistenceUseCaseImpl(repository: mockRepository)
+ let testBooks = [
+ ("클린 코드", "로버트 C. 마틴"),
+ ("이펙티브 자바", "조슈아 블로크"),
+ ("스위프트 프로그래밍", "야곰"),
+ ("새로운 책", "새로운 작가")
+ ]
+
+ // When
+ useCase.saveSummaryExpanded(true, for: testBooks[0].0, author: testBooks[0].1)
+ useCase.saveSummaryExpanded(false, for: testBooks[1].0, author: testBooks[1].1)
+ useCase.saveSummaryExpanded(true, for: testBooks[2].0, author: testBooks[2].1)
+ useCase.saveSummaryExpanded(false, for: testBooks[3].0, author: testBooks[3].1)
+
+ let result1 = useCase.loadSummaryExpanded(for: testBooks[0].0, author: testBooks[0].1)
+ let result2 = useCase.loadSummaryExpanded(for: testBooks[1].0, author: testBooks[1].1)
+ let result3 = useCase.loadSummaryExpanded(for: testBooks[2].0, author: testBooks[2].1)
+ let result4 = useCase.loadSummaryExpanded(for: testBooks[3].0, author: testBooks[3].1)
+
+ // Then
+ #expect(result1 == true)
+ #expect(result2 == false)
+ #expect(result3 == true)
+ #expect(result4 == false)
+ #expect(mockRepository.getSaveCallCount() == 4)
+ #expect(mockRepository.getLoadCallCount() == 4)
+ }
+
+ @Test("상태 변경 이력 테스트", .tags(.useCaseTest, .summaryPersistenceTest, .integrationTest))
+ func testStateChangeHistory() {
+ // Given
+ let mockRepository = DefaultSummaryPersistenceRepository()
+ let useCase = SummaryPersistenceUseCaseImpl(repository: mockRepository)
+ let title = "리팩토링"
+ let author = "마틴 파울러"
+
+ // When & Then
+ let states = [false, true, false, true, true, false]
+
+ for state in states {
+ useCase.saveSummaryExpanded(state, for: title, author: author)
+ let currentState = useCase.loadSummaryExpanded(for: title, author: author)
+ #expect(currentState == state)
+ }
+
+ #expect(mockRepository.getSaveCallCount() == 6)
+ #expect(mockRepository.getLoadCallCount() == 6)
+ }
+
+ @Test("특수 문자가 포함된 제목과 작가 테스트", .tags(.useCaseTest, .summaryPersistenceTest, .dataValidationTest))
+ func testSpecialCharactersInTitleAndAuthor() {
+ // Given
+ let mockRepository = DefaultSummaryPersistenceRepository()
+ let useCase = SummaryPersistenceUseCaseImpl(repository: mockRepository)
+ let specialCases = [
+ ("Special!@#$%^&*()", "Author한글テスト"),
+ ("", ""),
+ ("Very Long Title That Contains Many Characters", "Very Long Author Name")
+ ]
+
+ // When & Then
+ for (title, author) in specialCases {
+ useCase.saveSummaryExpanded(true, for: title, author: author)
+ let result = useCase.loadSummaryExpanded(for: title, author: author)
+ #expect(result == true)
+ }
+ }
+
+ @Test("DefaultRepository를 사용한 테스트", .tags(.useCaseTest, .summaryPersistenceTest, .defaultImplementationTest))
+ func testWithDefaultRepository() {
+ // Given
+ let defaultRepository = DefaultSummaryPersistenceRepository()
+ let useCase = SummaryPersistenceUseCaseImpl(repository: defaultRepository)
+
+ // When & Then (미리 설정된 목데이터 확인)
+ let cleanCodeExpanded = useCase.loadSummaryExpanded(for: "클린 코드", author: "로버트 C. 마틴")
+ let effectiveJavaExpanded = useCase.loadSummaryExpanded(for: "이펙티브 자바", author: "조슈아 블로크")
+ let swiftExpanded = useCase.loadSummaryExpanded(for: "스위프트 프로그래밍", author: "야곰")
+ let designPatternExpanded = useCase.loadSummaryExpanded(for: "디자인 패턴", author: "GoF")
+ let refactoringExpanded = useCase.loadSummaryExpanded(for: "리팩토링", author: "마틴 파울러")
+
+ #expect(cleanCodeExpanded == true)
+ #expect(effectiveJavaExpanded == false)
+ #expect(swiftExpanded == true)
+ #expect(designPatternExpanded == false)
+ #expect(refactoringExpanded == true)
+
+ // 새로운 책 저장 테스트
+ useCase.saveSummaryExpanded(true, for: "새로운 책", author: "새로운 작가")
+ let newBookExpanded = useCase.loadSummaryExpanded(for: "새로운 책", author: "새로운 작가")
+ #expect(newBookExpanded == true)
+ }
+
+ @Test("UseCase 초기화 테스트", .tags(.useCaseTest, .unitTest))
+ func testUseCaseInitialization() {
+ // Given
+ let repository = DefaultSummaryPersistenceRepository()
+
+ // When
+ let testUseCase = SummaryPersistenceUseCaseImpl(repository: repository)
+
+ // Then
+ #expect(testUseCase != nil)
+ }
+
+ @Test("빈 제목과 작가로 테스트", .tags(.useCaseTest, .summaryPersistenceTest, .dataValidationTest))
+ func testEmptyTitleAndAuthor() {
+ // Given
+ let mockRepository = DefaultSummaryPersistenceRepository()
+ let useCase = SummaryPersistenceUseCaseImpl(repository: mockRepository)
+
+ // When
+ useCase.saveSummaryExpanded(true, for: "", author: "")
+ let result = useCase.loadSummaryExpanded(for: "", author: "")
+
+ // Then
+ #expect(result == true)
+ }
+
+ @Test("Repository 호출 횟수 추적 테스트", .tags(.useCaseTest, .summaryPersistenceTest, .integrationTest))
+ func testRepositoryCallCountTracking() {
+ // Given
+ let mockRepository = DefaultSummaryPersistenceRepository()
+ let useCase = SummaryPersistenceUseCaseImpl(repository: mockRepository)
+
+ // When
+ _ = useCase.loadSummaryExpanded(for: "책1", author: "작가1")
+ _ = useCase.loadSummaryExpanded(for: "책2", author: "작가2")
+ useCase.saveSummaryExpanded(true, for: "책3", author: "작가3")
+ useCase.saveSummaryExpanded(false, for: "책4", author: "작가4")
+
+ // Then
+ #expect(mockRepository.getLoadCallCount() == 2)
+ #expect(mockRepository.getSaveCallCount() == 2)
+ }
+
+ @Test("Repository 리셋 기능 테스트", .tags(.useCaseTest, .summaryPersistenceTest, .unitTest))
+ func testRepositoryReset() {
+ // Given
+ let mockRepository = DefaultSummaryPersistenceRepository()
+ let useCase = SummaryPersistenceUseCaseImpl(repository: mockRepository)
+
+ // When
+ useCase.saveSummaryExpanded(false, for: "클린 코드", author: "로버트 C. 마틴")
+ #expect(mockRepository.getSaveCallCount() == 1)
+
+ mockRepository.reset()
+
+ // Then
+ #expect(mockRepository.getSaveCallCount() == 0)
+ #expect(mockRepository.getLoadCallCount() == 0)
+
+ // 리셋 후 기본값 확인
+ let result = useCase.loadSummaryExpanded(for: "클린 코드", author: "로버트 C. 마틴")
+ #expect(result == true) // 기본값으로 복원됨
+ }
+}
diff --git a/Projects/Core/Domain/UseCase/UseCaseTests/Sources/TestTags.swift b/Projects/Core/Domain/UseCase/UseCaseTests/Sources/TestTags.swift
new file mode 100644
index 0000000..a00734c
--- /dev/null
+++ b/Projects/Core/Domain/UseCase/UseCaseTests/Sources/TestTags.swift
@@ -0,0 +1,26 @@
+//
+// TestTags.swift
+// UseCaseTests
+//
+// Created by Wonji Suh on 9/11/25.
+//
+
+import Testing
+
+extension Tag {
+ @Tag static var useCaseTest: Self
+ @Tag static var repositoryTest: Self
+ @Tag static var mockDataTest: Self
+ @Tag static var integrationTest: Self
+ @Tag static var unitTest: Self
+ @Tag static var bookListTest: Self
+ @Tag static var summaryPersistenceTest: Self
+ @Tag static var defaultImplementationTest: Self
+ @Tag static var realImplementationTest: Self
+ @Tag static var errorHandlingTest: Self
+ @Tag static var dataValidationTest: Self
+ @Tag static var tcaReducerTest: Self
+ @Tag static var stateManagementTest: Self
+ @Tag static var effectTest: Self
+ @Tag static var actionTest: Self
+}
diff --git a/Projects/Core/Network/Network/Derived/InfoPlists/Network-Debug-Info.plist b/Projects/Core/Network/Network/Derived/InfoPlists/Network-Debug-Info.plist
new file mode 100644
index 0000000..323e5ec
--- /dev/null
+++ b/Projects/Core/Network/Network/Derived/InfoPlists/Network-Debug-Info.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ FMWK
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/Projects/Core/Network/Network/Derived/InfoPlists/Network-Info.plist b/Projects/Core/Network/Network/Derived/InfoPlists/Network-Info.plist
new file mode 100644
index 0000000..323e5ec
--- /dev/null
+++ b/Projects/Core/Network/Network/Derived/InfoPlists/Network-Info.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ FMWK
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/Projects/Core/Network/Network/Derived/InfoPlists/Network-Prod-Info.plist b/Projects/Core/Network/Network/Derived/InfoPlists/Network-Prod-Info.plist
new file mode 100644
index 0000000..323e5ec
--- /dev/null
+++ b/Projects/Core/Network/Network/Derived/InfoPlists/Network-Prod-Info.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ FMWK
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/Projects/Core/Network/Network/Derived/InfoPlists/Network-Stage-Info.plist b/Projects/Core/Network/Network/Derived/InfoPlists/Network-Stage-Info.plist
new file mode 100644
index 0000000..323e5ec
--- /dev/null
+++ b/Projects/Core/Network/Network/Derived/InfoPlists/Network-Stage-Info.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ FMWK
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/Projects/Core/Network/Network/Derived/InfoPlists/NetworkTests-Info.plist b/Projects/Core/Network/Network/Derived/InfoPlists/NetworkTests-Info.plist
new file mode 100644
index 0000000..6c40a6c
--- /dev/null
+++ b/Projects/Core/Network/Network/Derived/InfoPlists/NetworkTests-Info.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ BNDL
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/Projects/Core/Network/Network/Derived/Sources/TuistBundle+NetworkTests.swift b/Projects/Core/Network/Network/Derived/Sources/TuistBundle+NetworkTests.swift
new file mode 100644
index 0000000..13a503d
--- /dev/null
+++ b/Projects/Core/Network/Network/Derived/Sources/TuistBundle+NetworkTests.swift
@@ -0,0 +1,25 @@
+// periphery:ignore:all
+// swiftlint:disable:this file_name
+// swiftlint:disable all
+// swift-format-ignore-file
+// swiftformat:disable all
+#if hasFeature(InternalImportsByDefault)
+public import Foundation
+#else
+import Foundation
+#endif
+// MARK: - Swift Bundle Accessor for Frameworks
+private class BundleFinder {}
+extension Foundation.Bundle {
+/// Since NetworkTests is a unit tests, the bundle for classes within this module can be used directly.
+ static let module = Bundle(for: BundleFinder.self)
+}
+// MARK: - Objective-C Bundle Accessor
+@objc
+public class NetworkTestsResources: NSObject {
+@objc public class var bundle: Bundle {
+ return .module
+}
+}
+// swiftformat:enable all
+// swiftlint:enable all
\ No newline at end of file
diff --git a/Projects/Core/Network/Network/Network.xcodeproj/project.pbxproj b/Projects/Core/Network/Network/Network.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..9a82499
--- /dev/null
+++ b/Projects/Core/Network/Network/Network.xcodeproj/project.pbxproj
@@ -0,0 +1,1205 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 55;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 12BE36DE51D19B0992A4B3BE /* TuistBundle+NetworkTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB47E1AA2438271F4793A2F9 /* TuistBundle+NetworkTests.swift */; };
+ 18AB896F757E0535ACA6FD26 /* Service_Service.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 49406A72315BCF291C602908 /* Service_Service.bundle */; };
+ 1DC778FE3FA9D1C081547EDD /* NetworkExported.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3903D8FBFE4D8119C66B0F2B /* NetworkExported.swift */; };
+ 50EABD122806F7EC080A852C /* NetworkExported.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3903D8FBFE4D8119C66B0F2B /* NetworkExported.swift */; };
+ 64C4D0CFECFDC64E2A129A6E /* OSLog.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5074976D52FE8899CA90F60F /* OSLog.framework */; };
+ 6DCBBA1942C6B7AB33E35773 /* NetworkExported.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3903D8FBFE4D8119C66B0F2B /* NetworkExported.swift */; };
+ 83D39C6F26D8FA847A31EB63 /* Service.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 51AF163666CF102C5BF2CE72 /* Service.framework */; };
+ 9A753FFAB773966348ECE11E /* Service_Service.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 49406A72315BCF291C602908 /* Service_Service.bundle */; };
+ B74A8D04CAA062AD0DDE2155 /* NetworkExported.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3903D8FBFE4D8119C66B0F2B /* NetworkExported.swift */; };
+ C8293340A10FEE0836B12AEB /* LogMacro.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7DA6E9B7E2615630432C0F2C /* LogMacro.framework */; };
+ C8FC09ADD2F6D78402623EBD /* Service.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 51AF163666CF102C5BF2CE72 /* Service.framework */; };
+ D2ECB33866D2E29CBBF8CE34 /* Test.swift in Resources */ = {isa = PBXBuildFile; fileRef = BCF79038850EED254B1A7A09 /* Test.swift */; };
+ D4F516F66478DC837D5BFDC6 /* Test.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCF79038850EED254B1A7A09 /* Test.swift */; };
+ ED0100CD5A239567D08311E5 /* Service.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 51AF163666CF102C5BF2CE72 /* Service.framework */; };
+ EFB3BF708A14FDE66C8B09D9 /* Network.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9E27ED4FA2CB56FEC39887EA /* Network.framework */; };
+ F65DF7C41597A0718C3F58EE /* Service.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 51AF163666CF102C5BF2CE72 /* Service.framework */; };
+ FF7B29FBA6EC58308F92B62F /* Service.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 51AF163666CF102C5BF2CE72 /* Service.framework */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+ 74921912F3A49DD393D752BE /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = CE30DA66E8F9024F4E5F5F22 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = A1AEBE67F28FC7607B2C411E;
+ remoteInfo = Network;
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ 1854DF020C1544F96D7445BF /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 25CC73EFCBFA850690E82C35 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 2A7097576C6F0F0F60A2FFB7 /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ ED0100CD5A239567D08311E5 /* Service.framework in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ 30178E1D9AC2F09E6B29BA88 /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ 18AB896F757E0535ACA6FD26 /* Service_Service.bundle in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ 3720E0854436FBB35A7CB8D8 /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ F65DF7C41597A0718C3F58EE /* Service.framework in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ 5F7DE942DA11C46A4E2B8327 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 6EC07E05FDB1B9377664371A /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 994F8AD746C2E643D548E0E9 /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ C8FC09ADD2F6D78402623EBD /* Service.framework in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ A9DAD2FDA421E01ED4AB64B3 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ DFF7A131409C8513E098E6CD /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ FF7B29FBA6EC58308F92B62F /* Service.framework in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ 3903D8FBFE4D8119C66B0F2B /* NetworkExported.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkExported.swift; sourceTree = ""; };
+ 3BD0D12F048608411611DEF7 /* Network_Stage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Network_Stage.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 49406A72315BCF291C602908 /* Service_Service.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Service_Service.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
+ 4B1D54DB865340F89331FF8C /* Network-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Network-Info.plist"; sourceTree = ""; };
+ 5015E5D95CF8667CDAC6B4AA /* NetworkTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "NetworkTests-Info.plist"; sourceTree = ""; };
+ 5074976D52FE8899CA90F60F /* OSLog.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OSLog.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/OSLog.framework; sourceTree = DEVELOPER_DIR; };
+ 51AF163666CF102C5BF2CE72 /* Service.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Service.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 6E6E7E19DBAA6BA963797B37 /* Network-Stage-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Network-Stage-Info.plist"; sourceTree = ""; };
+ 7DA6E9B7E2615630432C0F2C /* LogMacro.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = LogMacro.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 9E27ED4FA2CB56FEC39887EA /* Network.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Network.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ B2A3994F6C2D02B5B6D91420 /* Network_Debug.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Network_Debug.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ B605577BB7128159085947AD /* Network_Prod.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Network_Prod.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ BCF79038850EED254B1A7A09 /* Test.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Test.swift; sourceTree = ""; };
+ CB47E1AA2438271F4793A2F9 /* TuistBundle+NetworkTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistBundle+NetworkTests.swift"; sourceTree = ""; };
+ F4C8609A220725072BEA3D4C /* Network-Prod-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Network-Prod-Info.plist"; sourceTree = ""; };
+ FC0BE7642877FE64F6A9236D /* Network-Debug-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Network-Debug-Info.plist"; sourceTree = ""; };
+ FEF8D6A1F2989443BD0A2218 /* NetworkTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NetworkTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 255DE93DF334B444C510828B /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 437591BC673FB1CC3BC2CEBC /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 7ED7BCFB0AD314A2DD1E161F /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ D349EE7DE02EB335DB0DBD6A /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ D4E73BBAFF38C9F70CF753D6 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 64C4D0CFECFDC64E2A129A6E /* OSLog.framework in Frameworks */,
+ C8293340A10FEE0836B12AEB /* LogMacro.framework in Frameworks */,
+ EFB3BF708A14FDE66C8B09D9 /* Network.framework in Frameworks */,
+ 83D39C6F26D8FA847A31EB63 /* Service.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 02580DB793A4AF93A42AA00C /* Sources */ = {
+ isa = PBXGroup;
+ children = (
+ CB47E1AA2438271F4793A2F9 /* TuistBundle+NetworkTests.swift */,
+ );
+ path = Sources;
+ sourceTree = "";
+ };
+ 25424697649C9F66AF152A0F /* Derived */ = {
+ isa = PBXGroup;
+ children = (
+ 486DDB1D159A94152A9C90BF /* InfoPlists */,
+ 02580DB793A4AF93A42AA00C /* Sources */,
+ );
+ path = Derived;
+ sourceTree = "";
+ };
+ 3EF1BC247FB98DFA111C501D /* Exorted */ = {
+ isa = PBXGroup;
+ children = (
+ 3903D8FBFE4D8119C66B0F2B /* NetworkExported.swift */,
+ );
+ path = Exorted;
+ sourceTree = "";
+ };
+ 45136B8DDE2D542E43FEAB3B = {
+ isa = PBXGroup;
+ children = (
+ DA2A7B178B1FAD113C3DC944 /* Project */,
+ B02A4899222D2A1DA3F4A4FA /* Products */,
+ E28E2C8DB194E60CF4C5EA44 /* Frameworks */,
+ );
+ sourceTree = "";
+ };
+ 486DDB1D159A94152A9C90BF /* InfoPlists */ = {
+ isa = PBXGroup;
+ children = (
+ FC0BE7642877FE64F6A9236D /* Network-Debug-Info.plist */,
+ 4B1D54DB865340F89331FF8C /* Network-Info.plist */,
+ F4C8609A220725072BEA3D4C /* Network-Prod-Info.plist */,
+ 6E6E7E19DBAA6BA963797B37 /* Network-Stage-Info.plist */,
+ 5015E5D95CF8667CDAC6B4AA /* NetworkTests-Info.plist */,
+ );
+ path = InfoPlists;
+ sourceTree = "";
+ };
+ 86EE5E83306F6D80F93AB42F /* Sources */ = {
+ isa = PBXGroup;
+ children = (
+ 3EF1BC247FB98DFA111C501D /* Exorted */,
+ );
+ path = Sources;
+ sourceTree = "";
+ };
+ 8C8ECC8C998479D16F8BBEAF /* NetworkTests */ = {
+ isa = PBXGroup;
+ children = (
+ D5E7F1B97381EE52F5509AF5 /* Sources */,
+ );
+ path = NetworkTests;
+ sourceTree = "";
+ };
+ B02A4899222D2A1DA3F4A4FA /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 7DA6E9B7E2615630432C0F2C /* LogMacro.framework */,
+ B2A3994F6C2D02B5B6D91420 /* Network_Debug.framework */,
+ B605577BB7128159085947AD /* Network_Prod.framework */,
+ 3BD0D12F048608411611DEF7 /* Network_Stage.framework */,
+ 9E27ED4FA2CB56FEC39887EA /* Network.framework */,
+ FEF8D6A1F2989443BD0A2218 /* NetworkTests.xctest */,
+ 49406A72315BCF291C602908 /* Service_Service.bundle */,
+ 51AF163666CF102C5BF2CE72 /* Service.framework */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ D5E7F1B97381EE52F5509AF5 /* Sources */ = {
+ isa = PBXGroup;
+ children = (
+ BCF79038850EED254B1A7A09 /* Test.swift */,
+ );
+ path = Sources;
+ sourceTree = "";
+ };
+ DA2A7B178B1FAD113C3DC944 /* Project */ = {
+ isa = PBXGroup;
+ children = (
+ 25424697649C9F66AF152A0F /* Derived */,
+ 8C8ECC8C998479D16F8BBEAF /* NetworkTests */,
+ 86EE5E83306F6D80F93AB42F /* Sources */,
+ );
+ name = Project;
+ sourceTree = "";
+ };
+ E28E2C8DB194E60CF4C5EA44 /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ 5074976D52FE8899CA90F60F /* OSLog.framework */,
+ );
+ name = Frameworks;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 657C8AD31748F53CAAEA4BFB /* Network-Prod */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 337C43067ACDF407C9B29C67 /* Build configuration list for PBXNativeTarget "Network-Prod" */;
+ buildPhases = (
+ 65C8294E334437B3FBD2BD44 /* Sources */,
+ 37A03958D3E5E9806194C159 /* Resources */,
+ 7ED7BCFB0AD314A2DD1E161F /* Frameworks */,
+ 5F7DE942DA11C46A4E2B8327 /* Embed Frameworks */,
+ 2A7097576C6F0F0F60A2FFB7 /* Dependencies */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = "Network-Prod";
+ packageProductDependencies = (
+ );
+ productName = Network_Prod;
+ productReference = B605577BB7128159085947AD /* Network_Prod.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+ 802E8B11362B1C5C00136DF4 /* NetworkTests */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 379CEDB68CA75D0691C9BE7E /* Build configuration list for PBXNativeTarget "NetworkTests" */;
+ buildPhases = (
+ C165DA99FCC1F49503359338 /* Sources */,
+ A7D53FE4853B57BE7FC2A40F /* Resources */,
+ D4E73BBAFF38C9F70CF753D6 /* Frameworks */,
+ 25CC73EFCBFA850690E82C35 /* Embed Frameworks */,
+ 30178E1D9AC2F09E6B29BA88 /* Dependencies */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 60EE529F107346FB590F83E5 /* PBXTargetDependency */,
+ );
+ name = NetworkTests;
+ packageProductDependencies = (
+ );
+ productName = NetworkTests;
+ productReference = FEF8D6A1F2989443BD0A2218 /* NetworkTests.xctest */;
+ productType = "com.apple.product-type.bundle.unit-test";
+ };
+ 8779CB6E7E2253FDBBC64E76 /* Network-Stage */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = D6F8404E921C30AF5A1E6992 /* Build configuration list for PBXNativeTarget "Network-Stage" */;
+ buildPhases = (
+ 2F091C9890391114B12D3787 /* Sources */,
+ D98E293DF4BB0A17C4E9413C /* Resources */,
+ D349EE7DE02EB335DB0DBD6A /* Frameworks */,
+ 6EC07E05FDB1B9377664371A /* Embed Frameworks */,
+ 3720E0854436FBB35A7CB8D8 /* Dependencies */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = "Network-Stage";
+ packageProductDependencies = (
+ );
+ productName = Network_Stage;
+ productReference = 3BD0D12F048608411611DEF7 /* Network_Stage.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+ A1AEBE67F28FC7607B2C411E /* Network */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = AAE8D133E507755E98BE4D27 /* Build configuration list for PBXNativeTarget "Network" */;
+ buildPhases = (
+ 172C8586A0850CD6189763C2 /* Sources */,
+ C03F7BC015EBF76D352BD749 /* Resources */,
+ 437591BC673FB1CC3BC2CEBC /* Frameworks */,
+ 1854DF020C1544F96D7445BF /* Embed Frameworks */,
+ DFF7A131409C8513E098E6CD /* Dependencies */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = Network;
+ packageProductDependencies = (
+ );
+ productName = Network;
+ productReference = 9E27ED4FA2CB56FEC39887EA /* Network.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+ B9925BBD6007507EDDA98C2F /* Network-Debug */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 729B38D65226926BDC2E54C4 /* Build configuration list for PBXNativeTarget "Network-Debug" */;
+ buildPhases = (
+ 03703D87821C1E09EE83FED7 /* Sources */,
+ 3DA066F5135C775339358927 /* Resources */,
+ 255DE93DF334B444C510828B /* Frameworks */,
+ A9DAD2FDA421E01ED4AB64B3 /* Embed Frameworks */,
+ 994F8AD746C2E643D548E0E9 /* Dependencies */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = "Network-Debug";
+ packageProductDependencies = (
+ );
+ productName = Network_Debug;
+ productReference = B2A3994F6C2D02B5B6D91420 /* Network_Debug.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ CE30DA66E8F9024F4E5F5F22 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ BuildIndependentTargetsInParallel = YES;
+ TargetAttributes = {
+ };
+ };
+ buildConfigurationList = EB691E6AAD04B88F092CB587 /* Build configuration list for PBXProject "Network" */;
+ compatibilityVersion = "Xcode 14.0";
+ developmentRegion = ko;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ ko,
+ );
+ mainGroup = 45136B8DDE2D542E43FEAB3B;
+ productRefGroup = B02A4899222D2A1DA3F4A4FA /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ A1AEBE67F28FC7607B2C411E /* Network */,
+ B9925BBD6007507EDDA98C2F /* Network-Debug */,
+ 657C8AD31748F53CAAEA4BFB /* Network-Prod */,
+ 8779CB6E7E2253FDBBC64E76 /* Network-Stage */,
+ 802E8B11362B1C5C00136DF4 /* NetworkTests */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 37A03958D3E5E9806194C159 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 3DA066F5135C775339358927 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A7D53FE4853B57BE7FC2A40F /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ D2ECB33866D2E29CBBF8CE34 /* Test.swift in Resources */,
+ 9A753FFAB773966348ECE11E /* Service_Service.bundle in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ C03F7BC015EBF76D352BD749 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ D98E293DF4BB0A17C4E9413C /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 03703D87821C1E09EE83FED7 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 1DC778FE3FA9D1C081547EDD /* NetworkExported.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 172C8586A0850CD6189763C2 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 6DCBBA1942C6B7AB33E35773 /* NetworkExported.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 2F091C9890391114B12D3787 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B74A8D04CAA062AD0DDE2155 /* NetworkExported.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 65C8294E334437B3FBD2BD44 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 50EABD122806F7EC080A852C /* NetworkExported.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ C165DA99FCC1F49503359338 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 12BE36DE51D19B0992A4B3BE /* TuistBundle+NetworkTests.swift in Sources */,
+ D4F516F66478DC837D5BFDC6 /* Test.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+ 60EE529F107346FB590F83E5 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ name = Network;
+ target = A1AEBE67F28FC7607B2C411E /* Network */;
+ targetProxy = 74921912F3A49DD393D752BE /* PBXContainerItemProxy */;
+ };
+/* End PBXTargetDependency section */
+
+/* Begin XCBuildConfiguration section */
+ 04F3E82E7E9FD1D398CED439 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/Network-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Network;
+ PRODUCT_NAME = Network;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Debug;
+ };
+ 1D1388190647ED043AE809CC /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/NetworkTests-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Network.NetworkTests;
+ PRODUCT_NAME = NetworkTests;
+ SDKROOT = iphoneos;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ };
+ name = Release;
+ };
+ 6B970470D05BD43AB109FD11 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/Network-Debug-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Network;
+ PRODUCT_NAME = Network_Debug;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Release;
+ };
+ 947635D771C90F79A6697310 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/Network-Prod-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Network;
+ PRODUCT_NAME = Network_Prod;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Release;
+ };
+ 987000026A357A040D135D18 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/Network-Stage-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Network;
+ PRODUCT_NAME = Network_Stage;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Release;
+ };
+ C0FC0233689340BAEE7828EF /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/Network-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Network;
+ PRODUCT_NAME = Network;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Release;
+ };
+ E003F887272A2101EBD29D1F /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/NetworkTests-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Network.NetworkTests;
+ PRODUCT_NAME = NetworkTests;
+ SDKROOT = iphoneos;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ };
+ name = Debug;
+ };
+ E13E6846176A9773EDAD6E9B /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/Network-Debug-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Network;
+ PRODUCT_NAME = Network_Debug;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Debug;
+ };
+ E4C55A3B172E7422839CE6F1 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/Network-Stage-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Network;
+ PRODUCT_NAME = Network_Stage;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Debug;
+ };
+ EC1CDA88B25D7972DF99B786 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ DEAD_CODE_STRIPPING = YES;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ MTL_ENABLE_DEBUG_INFO = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ };
+ name = Debug;
+ };
+ F7289CD4700EAB402DCE2DAD /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ DEAD_CODE_STRIPPING = YES;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+ FFB99DC51AE7B2CF9C6F0989 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/Network-Prod-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Network;
+ PRODUCT_NAME = Network_Prod;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Debug;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 337C43067ACDF407C9B29C67 /* Build configuration list for PBXNativeTarget "Network-Prod" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ FFB99DC51AE7B2CF9C6F0989 /* Debug */,
+ 947635D771C90F79A6697310 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 379CEDB68CA75D0691C9BE7E /* Build configuration list for PBXNativeTarget "NetworkTests" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ E003F887272A2101EBD29D1F /* Debug */,
+ 1D1388190647ED043AE809CC /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 729B38D65226926BDC2E54C4 /* Build configuration list for PBXNativeTarget "Network-Debug" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ E13E6846176A9773EDAD6E9B /* Debug */,
+ 6B970470D05BD43AB109FD11 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ AAE8D133E507755E98BE4D27 /* Build configuration list for PBXNativeTarget "Network" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 04F3E82E7E9FD1D398CED439 /* Debug */,
+ C0FC0233689340BAEE7828EF /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ D6F8404E921C30AF5A1E6992 /* Build configuration list for PBXNativeTarget "Network-Stage" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ E4C55A3B172E7422839CE6F1 /* Debug */,
+ 987000026A357A040D135D18 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ EB691E6AAD04B88F092CB587 /* Build configuration list for PBXProject "Network" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ EC1CDA88B25D7972DF99B786 /* Debug */,
+ F7289CD4700EAB402DCE2DAD /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = CE30DA66E8F9024F4E5F5F22 /* Project object */;
+}
diff --git a/Projects/Core/Network/Network/Network.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Projects/Core/Network/Network/Network.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..919434a
--- /dev/null
+++ b/Projects/Core/Network/Network/Network.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/Projects/Core/Network/Network/Network.xcodeproj/xcshareddata/xcschemes/Network-Debug.xcscheme b/Projects/Core/Network/Network/Network.xcodeproj/xcshareddata/xcschemes/Network-Debug.xcscheme
new file mode 100644
index 0000000..58f5593
--- /dev/null
+++ b/Projects/Core/Network/Network/Network.xcodeproj/xcshareddata/xcschemes/Network-Debug.xcscheme
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Projects/Core/Network/Network/Network.xcodeproj/xcshareddata/xcschemes/Network-Prod.xcscheme b/Projects/Core/Network/Network/Network.xcodeproj/xcshareddata/xcschemes/Network-Prod.xcscheme
new file mode 100644
index 0000000..984e2ef
--- /dev/null
+++ b/Projects/Core/Network/Network/Network.xcodeproj/xcshareddata/xcschemes/Network-Prod.xcscheme
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Projects/Core/Network/Network/Network.xcodeproj/xcshareddata/xcschemes/Network-Stage.xcscheme b/Projects/Core/Network/Network/Network.xcodeproj/xcshareddata/xcschemes/Network-Stage.xcscheme
new file mode 100644
index 0000000..ed9e20d
--- /dev/null
+++ b/Projects/Core/Network/Network/Network.xcodeproj/xcshareddata/xcschemes/Network-Stage.xcscheme
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Projects/Core/Network/Network/Network.xcodeproj/xcshareddata/xcschemes/Network.xcscheme b/Projects/Core/Network/Network/Network.xcodeproj/xcshareddata/xcschemes/Network.xcscheme
new file mode 100644
index 0000000..abdc83d
--- /dev/null
+++ b/Projects/Core/Network/Network/Network.xcodeproj/xcshareddata/xcschemes/Network.xcscheme
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Projects/Core/Network/Network/NetworkTests/Sources/Test.swift b/Projects/Core/Network/Network/NetworkTests/Sources/Test.swift
new file mode 100644
index 0000000..a9c810e
--- /dev/null
+++ b/Projects/Core/Network/Network/NetworkTests/Sources/Test.swift
@@ -0,0 +1,8 @@
+//
+// base.swift
+// DDDAttendance
+//
+// Created by Roy on 2025-09-04
+// Copyright © 2025 DDD , Ltd. All rights reserved.
+//
+
diff --git a/Projects/Core/Network/Network/Project.swift b/Projects/Core/Network/Network/Project.swift
new file mode 100644
index 0000000..2d05f51
--- /dev/null
+++ b/Projects/Core/Network/Network/Project.swift
@@ -0,0 +1,17 @@
+import Foundation
+import ProjectDescription
+import DependencyPlugin
+import ProjectTemplatePlugin
+import ProjectTemplatePlugin
+import DependencyPackagePlugin
+
+let project = Project.makeAppModule(
+ name: "Network",
+ bundleId: .appBundleID(name: ".Network"),
+ product: .staticFramework,
+ settings: .settings(),
+ dependencies: [
+ .Network(implements: .Service)
+ ],
+ sources: ["Sources/**"]
+)
diff --git a/Projects/Core/Network/Network/Sources/Exorted/NetworkExported.swift b/Projects/Core/Network/Network/Sources/Exorted/NetworkExported.swift
new file mode 100644
index 0000000..38c6094
--- /dev/null
+++ b/Projects/Core/Network/Network/Sources/Exorted/NetworkExported.swift
@@ -0,0 +1,8 @@
+//
+// NetworkExported.swift
+// Network
+//
+// Created by Wonji Suh on 9/5/25.
+//
+
+@_exported import Service
diff --git a/Projects/Core/Network/Service/Derived/InfoPlists/Service-Debug-Info.plist b/Projects/Core/Network/Service/Derived/InfoPlists/Service-Debug-Info.plist
new file mode 100644
index 0000000..323e5ec
--- /dev/null
+++ b/Projects/Core/Network/Service/Derived/InfoPlists/Service-Debug-Info.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ FMWK
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/Projects/Core/Network/Service/Derived/InfoPlists/Service-Info.plist b/Projects/Core/Network/Service/Derived/InfoPlists/Service-Info.plist
new file mode 100644
index 0000000..323e5ec
--- /dev/null
+++ b/Projects/Core/Network/Service/Derived/InfoPlists/Service-Info.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ FMWK
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/Projects/Core/Network/Service/Derived/InfoPlists/Service-Prod-Info.plist b/Projects/Core/Network/Service/Derived/InfoPlists/Service-Prod-Info.plist
new file mode 100644
index 0000000..323e5ec
--- /dev/null
+++ b/Projects/Core/Network/Service/Derived/InfoPlists/Service-Prod-Info.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ FMWK
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/Projects/Core/Network/Service/Derived/InfoPlists/Service-Stage-Info.plist b/Projects/Core/Network/Service/Derived/InfoPlists/Service-Stage-Info.plist
new file mode 100644
index 0000000..323e5ec
--- /dev/null
+++ b/Projects/Core/Network/Service/Derived/InfoPlists/Service-Stage-Info.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ FMWK
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/Projects/Core/Network/Service/Derived/InfoPlists/ServiceTests-Info.plist b/Projects/Core/Network/Service/Derived/InfoPlists/ServiceTests-Info.plist
new file mode 100644
index 0000000..6c40a6c
--- /dev/null
+++ b/Projects/Core/Network/Service/Derived/InfoPlists/ServiceTests-Info.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ BNDL
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/Projects/Core/Network/Service/Derived/InfoPlists/Service_Service-Info.plist b/Projects/Core/Network/Service/Derived/InfoPlists/Service_Service-Info.plist
new file mode 100644
index 0000000..04ffbaa
--- /dev/null
+++ b/Projects/Core/Network/Service/Derived/InfoPlists/Service_Service-Info.plist
@@ -0,0 +1,20 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ BNDL
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/Projects/Core/Network/Service/Derived/InfoPlists/Service_Service_Debug-Info.plist b/Projects/Core/Network/Service/Derived/InfoPlists/Service_Service_Debug-Info.plist
new file mode 100644
index 0000000..04ffbaa
--- /dev/null
+++ b/Projects/Core/Network/Service/Derived/InfoPlists/Service_Service_Debug-Info.plist
@@ -0,0 +1,20 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ BNDL
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/Projects/Core/Network/Service/Derived/InfoPlists/Service_Service_Prod-Info.plist b/Projects/Core/Network/Service/Derived/InfoPlists/Service_Service_Prod-Info.plist
new file mode 100644
index 0000000..04ffbaa
--- /dev/null
+++ b/Projects/Core/Network/Service/Derived/InfoPlists/Service_Service_Prod-Info.plist
@@ -0,0 +1,20 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ BNDL
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/Projects/Core/Network/Service/Derived/InfoPlists/Service_Service_Stage-Info.plist b/Projects/Core/Network/Service/Derived/InfoPlists/Service_Service_Stage-Info.plist
new file mode 100644
index 0000000..04ffbaa
--- /dev/null
+++ b/Projects/Core/Network/Service/Derived/InfoPlists/Service_Service_Stage-Info.plist
@@ -0,0 +1,20 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ BNDL
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/Projects/Core/Network/Service/Derived/Sources/TuistBundle+Service.swift b/Projects/Core/Network/Service/Derived/Sources/TuistBundle+Service.swift
new file mode 100644
index 0000000..7277170
--- /dev/null
+++ b/Projects/Core/Network/Service/Derived/Sources/TuistBundle+Service.swift
@@ -0,0 +1,64 @@
+// periphery:ignore:all
+// swiftlint:disable:this file_name
+// swiftlint:disable all
+// swift-format-ignore-file
+// swiftformat:disable all
+#if hasFeature(InternalImportsByDefault)
+public import Foundation
+#else
+import Foundation
+#endif
+// MARK: - Swift Bundle Accessor - for SPM
+private class BundleFinder {}
+extension Foundation.Bundle {
+/// Since Service is a static framework, the bundle containing the resources is copied into the final product.
+ static let module: Bundle = {
+ let bundleName = "Service_Service"
+ let bundleFinderResourceURL = Bundle(for: BundleFinder.self).resourceURL
+ var candidates = [
+ Bundle.main.resourceURL,
+ bundleFinderResourceURL,
+ Bundle.main.bundleURL,
+ ]
+ // This is a fix to make Previews work with bundled resources.
+ // Logic here is taken from SPM's generated `resource_bundle_accessors.swift` file,
+ // which is located under the derived data directory after building the project.
+ if let override = ProcessInfo.processInfo.environment["PACKAGE_RESOURCE_BUNDLE_PATH"] {
+ candidates.append(URL(fileURLWithPath: override))
+ // Deleting derived data and not rebuilding the frameworks containing resources may result in a state
+ // where the bundles are only available in the framework's directory that is actively being previewed.
+ // Since we don't know which framework this is, we also need to look in all the framework subpaths.
+ if let subpaths = try? Foundation.FileManager.default.contentsOfDirectory(atPath: override) {
+ for subpath in subpaths {
+ if subpath.hasSuffix(".framework") {
+ candidates.append(URL(fileURLWithPath: override + "/" + subpath))
+ }
+ }
+ }
+ }
+
+ // This is a fix to make unit tests work with bundled resources.
+ // Making this change allows unit tests to search one directory up for a bundle.
+ // More context can be found in this PR: https://github.com/tuist/tuist/pull/6895
+ #if canImport(XCTest)
+ candidates.append(bundleFinderResourceURL?.appendingPathComponent(".."))
+ #endif
+
+ for candidate in candidates {
+ let bundlePath = candidate?.appendingPathComponent(bundleName + ".bundle")
+ if let bundle = bundlePath.flatMap(Bundle.init(url:)) {
+ return bundle
+ }
+ }
+ fatalError("unable to find bundle named Service_Service")
+ }()
+}
+// MARK: - Objective-C Bundle Accessor
+@objc
+public class ServiceResources: NSObject {
+@objc public class var bundle: Bundle {
+ return .module
+}
+}
+// swiftformat:enable all
+// swiftlint:enable all
\ No newline at end of file
diff --git a/Projects/Core/Network/Service/Derived/Sources/TuistBundle+ServiceDebug.swift b/Projects/Core/Network/Service/Derived/Sources/TuistBundle+ServiceDebug.swift
new file mode 100644
index 0000000..7fee533
--- /dev/null
+++ b/Projects/Core/Network/Service/Derived/Sources/TuistBundle+ServiceDebug.swift
@@ -0,0 +1,64 @@
+// periphery:ignore:all
+// swiftlint:disable:this file_name
+// swiftlint:disable all
+// swift-format-ignore-file
+// swiftformat:disable all
+#if hasFeature(InternalImportsByDefault)
+public import Foundation
+#else
+import Foundation
+#endif
+// MARK: - Swift Bundle Accessor - for SPM
+private class BundleFinder {}
+extension Foundation.Bundle {
+/// Since Service-Debug is a static framework, the bundle containing the resources is copied into the final product.
+ static let module: Bundle = {
+ let bundleName = "Service_Service_Debug"
+ let bundleFinderResourceURL = Bundle(for: BundleFinder.self).resourceURL
+ var candidates = [
+ Bundle.main.resourceURL,
+ bundleFinderResourceURL,
+ Bundle.main.bundleURL,
+ ]
+ // This is a fix to make Previews work with bundled resources.
+ // Logic here is taken from SPM's generated `resource_bundle_accessors.swift` file,
+ // which is located under the derived data directory after building the project.
+ if let override = ProcessInfo.processInfo.environment["PACKAGE_RESOURCE_BUNDLE_PATH"] {
+ candidates.append(URL(fileURLWithPath: override))
+ // Deleting derived data and not rebuilding the frameworks containing resources may result in a state
+ // where the bundles are only available in the framework's directory that is actively being previewed.
+ // Since we don't know which framework this is, we also need to look in all the framework subpaths.
+ if let subpaths = try? Foundation.FileManager.default.contentsOfDirectory(atPath: override) {
+ for subpath in subpaths {
+ if subpath.hasSuffix(".framework") {
+ candidates.append(URL(fileURLWithPath: override + "/" + subpath))
+ }
+ }
+ }
+ }
+
+ // This is a fix to make unit tests work with bundled resources.
+ // Making this change allows unit tests to search one directory up for a bundle.
+ // More context can be found in this PR: https://github.com/tuist/tuist/pull/6895
+ #if canImport(XCTest)
+ candidates.append(bundleFinderResourceURL?.appendingPathComponent(".."))
+ #endif
+
+ for candidate in candidates {
+ let bundlePath = candidate?.appendingPathComponent(bundleName + ".bundle")
+ if let bundle = bundlePath.flatMap(Bundle.init(url:)) {
+ return bundle
+ }
+ }
+ fatalError("unable to find bundle named Service_Service_Debug")
+ }()
+}
+// MARK: - Objective-C Bundle Accessor
+@objc
+public class ServiceDebugResources: NSObject {
+@objc public class var bundle: Bundle {
+ return .module
+}
+}
+// swiftformat:enable all
+// swiftlint:enable all
\ No newline at end of file
diff --git a/Projects/Core/Network/Service/Derived/Sources/TuistBundle+ServiceProd.swift b/Projects/Core/Network/Service/Derived/Sources/TuistBundle+ServiceProd.swift
new file mode 100644
index 0000000..5d29deb
--- /dev/null
+++ b/Projects/Core/Network/Service/Derived/Sources/TuistBundle+ServiceProd.swift
@@ -0,0 +1,64 @@
+// periphery:ignore:all
+// swiftlint:disable:this file_name
+// swiftlint:disable all
+// swift-format-ignore-file
+// swiftformat:disable all
+#if hasFeature(InternalImportsByDefault)
+public import Foundation
+#else
+import Foundation
+#endif
+// MARK: - Swift Bundle Accessor - for SPM
+private class BundleFinder {}
+extension Foundation.Bundle {
+/// Since Service-Prod is a static framework, the bundle containing the resources is copied into the final product.
+ static let module: Bundle = {
+ let bundleName = "Service_Service_Prod"
+ let bundleFinderResourceURL = Bundle(for: BundleFinder.self).resourceURL
+ var candidates = [
+ Bundle.main.resourceURL,
+ bundleFinderResourceURL,
+ Bundle.main.bundleURL,
+ ]
+ // This is a fix to make Previews work with bundled resources.
+ // Logic here is taken from SPM's generated `resource_bundle_accessors.swift` file,
+ // which is located under the derived data directory after building the project.
+ if let override = ProcessInfo.processInfo.environment["PACKAGE_RESOURCE_BUNDLE_PATH"] {
+ candidates.append(URL(fileURLWithPath: override))
+ // Deleting derived data and not rebuilding the frameworks containing resources may result in a state
+ // where the bundles are only available in the framework's directory that is actively being previewed.
+ // Since we don't know which framework this is, we also need to look in all the framework subpaths.
+ if let subpaths = try? Foundation.FileManager.default.contentsOfDirectory(atPath: override) {
+ for subpath in subpaths {
+ if subpath.hasSuffix(".framework") {
+ candidates.append(URL(fileURLWithPath: override + "/" + subpath))
+ }
+ }
+ }
+ }
+
+ // This is a fix to make unit tests work with bundled resources.
+ // Making this change allows unit tests to search one directory up for a bundle.
+ // More context can be found in this PR: https://github.com/tuist/tuist/pull/6895
+ #if canImport(XCTest)
+ candidates.append(bundleFinderResourceURL?.appendingPathComponent(".."))
+ #endif
+
+ for candidate in candidates {
+ let bundlePath = candidate?.appendingPathComponent(bundleName + ".bundle")
+ if let bundle = bundlePath.flatMap(Bundle.init(url:)) {
+ return bundle
+ }
+ }
+ fatalError("unable to find bundle named Service_Service_Prod")
+ }()
+}
+// MARK: - Objective-C Bundle Accessor
+@objc
+public class ServiceProdResources: NSObject {
+@objc public class var bundle: Bundle {
+ return .module
+}
+}
+// swiftformat:enable all
+// swiftlint:enable all
\ No newline at end of file
diff --git a/Projects/Core/Network/Service/Derived/Sources/TuistBundle+ServiceStage.swift b/Projects/Core/Network/Service/Derived/Sources/TuistBundle+ServiceStage.swift
new file mode 100644
index 0000000..777ecf1
--- /dev/null
+++ b/Projects/Core/Network/Service/Derived/Sources/TuistBundle+ServiceStage.swift
@@ -0,0 +1,64 @@
+// periphery:ignore:all
+// swiftlint:disable:this file_name
+// swiftlint:disable all
+// swift-format-ignore-file
+// swiftformat:disable all
+#if hasFeature(InternalImportsByDefault)
+public import Foundation
+#else
+import Foundation
+#endif
+// MARK: - Swift Bundle Accessor - for SPM
+private class BundleFinder {}
+extension Foundation.Bundle {
+/// Since Service-Stage is a static framework, the bundle containing the resources is copied into the final product.
+ static let module: Bundle = {
+ let bundleName = "Service_Service_Stage"
+ let bundleFinderResourceURL = Bundle(for: BundleFinder.self).resourceURL
+ var candidates = [
+ Bundle.main.resourceURL,
+ bundleFinderResourceURL,
+ Bundle.main.bundleURL,
+ ]
+ // This is a fix to make Previews work with bundled resources.
+ // Logic here is taken from SPM's generated `resource_bundle_accessors.swift` file,
+ // which is located under the derived data directory after building the project.
+ if let override = ProcessInfo.processInfo.environment["PACKAGE_RESOURCE_BUNDLE_PATH"] {
+ candidates.append(URL(fileURLWithPath: override))
+ // Deleting derived data and not rebuilding the frameworks containing resources may result in a state
+ // where the bundles are only available in the framework's directory that is actively being previewed.
+ // Since we don't know which framework this is, we also need to look in all the framework subpaths.
+ if let subpaths = try? Foundation.FileManager.default.contentsOfDirectory(atPath: override) {
+ for subpath in subpaths {
+ if subpath.hasSuffix(".framework") {
+ candidates.append(URL(fileURLWithPath: override + "/" + subpath))
+ }
+ }
+ }
+ }
+
+ // This is a fix to make unit tests work with bundled resources.
+ // Making this change allows unit tests to search one directory up for a bundle.
+ // More context can be found in this PR: https://github.com/tuist/tuist/pull/6895
+ #if canImport(XCTest)
+ candidates.append(bundleFinderResourceURL?.appendingPathComponent(".."))
+ #endif
+
+ for candidate in candidates {
+ let bundlePath = candidate?.appendingPathComponent(bundleName + ".bundle")
+ if let bundle = bundlePath.flatMap(Bundle.init(url:)) {
+ return bundle
+ }
+ }
+ fatalError("unable to find bundle named Service_Service_Stage")
+ }()
+}
+// MARK: - Objective-C Bundle Accessor
+@objc
+public class ServiceStageResources: NSObject {
+@objc public class var bundle: Bundle {
+ return .module
+}
+}
+// swiftformat:enable all
+// swiftlint:enable all
\ No newline at end of file
diff --git a/Projects/Core/Network/Service/Derived/Sources/TuistBundle+ServiceTests.swift b/Projects/Core/Network/Service/Derived/Sources/TuistBundle+ServiceTests.swift
new file mode 100644
index 0000000..14d6e96
--- /dev/null
+++ b/Projects/Core/Network/Service/Derived/Sources/TuistBundle+ServiceTests.swift
@@ -0,0 +1,25 @@
+// periphery:ignore:all
+// swiftlint:disable:this file_name
+// swiftlint:disable all
+// swift-format-ignore-file
+// swiftformat:disable all
+#if hasFeature(InternalImportsByDefault)
+public import Foundation
+#else
+import Foundation
+#endif
+// MARK: - Swift Bundle Accessor for Frameworks
+private class BundleFinder {}
+extension Foundation.Bundle {
+/// Since ServiceTests is a unit tests, the bundle for classes within this module can be used directly.
+ static let module = Bundle(for: BundleFinder.self)
+}
+// MARK: - Objective-C Bundle Accessor
+@objc
+public class ServiceTestsResources: NSObject {
+@objc public class var bundle: Bundle {
+ return .module
+}
+}
+// swiftformat:enable all
+// swiftlint:enable all
\ No newline at end of file
diff --git a/Projects/Core/Network/Service/Project.swift b/Projects/Core/Network/Service/Project.swift
new file mode 100644
index 0000000..5d87a65
--- /dev/null
+++ b/Projects/Core/Network/Service/Project.swift
@@ -0,0 +1,20 @@
+import Foundation
+import ProjectDescription
+import DependencyPlugin
+import ProjectTemplatePlugin
+import ProjectTemplatePlugin
+import DependencyPackagePlugin
+
+let project = Project.makeAppModule(
+ name: "Service",
+ bundleId: .appBundleID(name: ".Service"),
+ product: .staticFramework,
+ settings: .settings(),
+ dependencies: [
+ .SPM.logMacro
+ ],
+ sources: ["Sources/**"],
+ resources: [
+ .glob(pattern: "Resources/**")
+ ]
+)
diff --git a/Projects/Core/Network/Service/Resources/BookListData.json b/Projects/Core/Network/Service/Resources/BookListData.json
new file mode 100644
index 0000000..052fb7c
--- /dev/null
+++ b/Projects/Core/Network/Service/Resources/BookListData.json
@@ -0,0 +1,699 @@
+{
+ "data": [
+ {
+ "attributes": {
+ "title": "Harry Potter and the Philosopher's Stone",
+ "author": "J. K. Rowling",
+ "image": "harrypotter1",
+ "pages": 223,
+ "release_date": "1997-06-26",
+ "dedication": "For Jessica, who loves stories, for Anne, who loved them too, and for Di, who heard this one first",
+ "summary": "Harry Potter has never even heard of Hogwarts when the letters start dropping on the doormat at number four, Privet Drive. Addressed in green ink on yellowish parchment with a purple seal, they are swiftly confiscated by his grisly aunt and uncle. Then, on Harry's eleventh birthday, a great beetle-eyed giant of a man called Rubeus Hagrid bursts in with some astonishing news: Harry Potter is a wizard, and he has a place at Hogwarts School of Witchcraft and Wizardry. An incredible adventure is about to begin!",
+ "wiki": "https://harrypotter.fandom.com/wiki/Harry_Potter_and_the_Philosopher's_Stone",
+ "chapters": [
+ {
+ "title": "1. The Boy Who Lived"
+ },
+ {
+ "title": "2. The Vanishing Glass"
+ },
+ {
+ "title": "3. The Letter from No One"
+ },
+ {
+ "title": "4. The Keeper of the Keys"
+ },
+ {
+ "title": "5. Diagon Alley"
+ },
+ {
+ "title": "6. The Journey from Platform Nine and Three-Quarters"
+ },
+ {
+ "title": "7. The Sorting Hat"
+ },
+ {
+ "title": "8. The Potions Master"
+ },
+ {
+ "title": "9. The Midnight Duel"
+ },
+ {
+ "title": "10. Hallowe'en"
+ },
+ {
+ "title": "11. Quidditch"
+ },
+ {
+ "title": "12. The Mirror of Erised"
+ },
+ {
+ "title": "13. Nicolas Flamel"
+ },
+ {
+ "title": "14. Norbert the Norwegian Ridgeback"
+ },
+ {
+ "title": "15. The Forbidden Forest"
+ },
+ {
+ "title": "16. Through the Trapdoor"
+ },
+ {
+ "title": "17. The Man with Two Faces"
+ }
+ ]
+ }
+ },
+ {
+ "attributes": {
+ "title": "Harry Potter and the Chamber of Secrets",
+ "author": "J. K. Rowling",
+ "pages": 251,
+ "image": "harrypotter2",
+ "release_date": "1998-07-02",
+ "dedication": "For S챕an P. F. Harris, getaway driver and foul-weather friend",
+ "summary": "Harry Potter's summer has included the worst birthday ever, doomy warnings from a house-elf called Dobby, and rescue from the Dursleys by his friend Ron Weasley in a magical flying car! Back at Hogwarts School of Witchcraft And Wizardry for his second year, Harry hears strange whispers echo through empty corridors �� and then the attacks start. Students are found as though turned to stone... Dobby's sinister predictions seem to be coming true.",
+ "wiki": "https://harrypotter.fandom.com/wiki/Harry_Potter_and_the_Chamber_of_Secrets",
+ "chapters": [
+ {
+ "title": "1. The Worst Birthday"
+ },
+ {
+ "title": "2. Dobby's Warning"
+ },
+ {
+ "title": "3. The Burrow"
+ },
+ {
+ "title": "4. At Flourish and Blotts"
+ },
+ {
+ "title": "5. The Whomping Willow"
+ },
+ {
+ "title": "6. Gilderoy Lockhart"
+ },
+ {
+ "title": "7. Mudbloods And Murmurs"
+ },
+ {
+ "title": "8. The Deathday Party"
+ },
+ {
+ "title": "9. The Writing on the Wall"
+ },
+ {
+ "title": "10. The Rogue Bludger"
+ },
+ {
+ "title": "11. The Duelling Club"
+ },
+ {
+ "title": "12. The Polyjuice Potion"
+ },
+ {
+ "title": "13. The Very Secret Diary"
+ },
+ {
+ "title": "14. Cornelius Fudge"
+ },
+ {
+ "title": "15. Aragog"
+ },
+ {
+ "title": "16. The Chamber of Secrets"
+ },
+ {
+ "title": "17. The Heir of Slytherin"
+ },
+ {
+ "title": "18. Dobby's Reward"
+ }
+ ]
+ }
+ },
+ {
+ "attributes": {
+ "title": "Harry Potter and the Prisoner of Azkaban",
+ "author": "J. K. Rowling",
+ "pages": 317,
+ "image": "harrypotter3",
+ "release_date": "1999-07-08",
+ "dedication": "To Jill Prewett and Aine Kiely, the Godmothers of Swing",
+ "summary": "When the Knight Bus crashes through the darkness and screeches to a halt in front of him, it's the start of another far from ordinary year at Hogwarts for Harry Potter. Sirius Black, escaped mass-murderer and follower of Lord Voldemort, is on the run �� and they say he is coming after Harry. In his first ever Divination class, Professor Trelawney sees an omen of death in Harry's tea leaves... But perhaps most terrifying of all are the Dementors patrolling the school grounds, with their soul-sucking kiss.",
+ "wiki": "https://harrypotter.fandom.com/wiki/Harry_Potter_and_the_Prisoner_of_Azkaban",
+ "chapters": [
+ {
+ "title": "1. Owl Post"
+ },
+ {
+ "title": "2. Aunt Marge's Big Mistake"
+ },
+ {
+ "title": "3. The Knight Bus"
+ },
+ {
+ "title": "4. The Leaky Cauldron"
+ },
+ {
+ "title": "5. The Dementor"
+ },
+ {
+ "title": "6. Talons and Tea Leaves"
+ },
+ {
+ "title": "7. The Boggart in the Wardrobe"
+ },
+ {
+ "title": "8. Flight of the Fat Lady"
+ },
+ {
+ "title": "9. Grim Defeat"
+ },
+ {
+ "title": "10. The Marauder's Map"
+ },
+ {
+ "title": "11. The Firebolt"
+ },
+ {
+ "title": "12. The Patronus"
+ },
+ {
+ "title": "13. Gryffindor versus Ravenclaw"
+ },
+ {
+ "title": "14. Snape's Grudge"
+ },
+ {
+ "title": "15. The Quidditch Final"
+ },
+ {
+ "title": "16. Professor Trelawney's Prediction"
+ },
+ {
+ "title": "17. Cat, Rat and Dog"
+ },
+ {
+ "title": "18. Moony, Wormtail, Padfoot and Prongs"
+ },
+ {
+ "title": "19. The Servant of Lord Voldemort"
+ },
+ {
+ "title": "20. The Dementor's Kiss"
+ },
+ {
+ "title": "21. Hermione's Secret"
+ },
+ {
+ "title": "22. Owl Post Again"
+ }
+ ]
+ }
+ },
+ {
+ "attributes": {
+ "title": "Harry Potter and the Goblet of Firen",
+ "author": "J. K. Rowling",
+ "pages": 636,
+ "image": "harrypotter4",
+ "release_date": "2000-07-08",
+ "dedication": "To Peter Rowling, in memory of Mr Ridley and to Susan Sladden, who helped Harry out of his cupboard",
+ "summary": "The Triwizard Tournament is to be held at Hogwarts. Only wizards who are over seventeen are allowed to enter �� but that doesn't stop Harry dreaming that he will win the competition. Then at Hallowe'en, when the Goblet of Fire makes its selection, Harry is amazed to find his name is one of those that the magical cup picks out. He will face death-defying tasks, dragons and Dark wizards, but with the help of his best friends, Ron and Hermione, he might just make it through �� alive!",
+ "wiki": "https://harrypotter.fandom.com/wiki/Harry_Potter_and_the_Goblet_of_Fire",
+ "chapters": [
+ {
+ "title": "1. The Riddle House"
+ },
+ {
+ "title": "2. The Scar"
+ },
+ {
+ "title": "3. The Invitation"
+ },
+ {
+ "title": "4. Back to The Burrow"
+ },
+ {
+ "title": "5. Weasley's Wizard Wheezes"
+ },
+ {
+ "title": "6. The Portkey"
+ },
+ {
+ "title": "7. Bagman and Crouch"
+ },
+ {
+ "title": "8. The Quidditch World Cup"
+ },
+ {
+ "title": "9. The Dark Mark"
+ },
+ {
+ "title": "10. Mayhem at the Ministry"
+ },
+ {
+ "title": "11. Aboard the Hogwarts Express"
+ },
+ {
+ "title": "12. The Triwizard Tournament"
+ },
+ {
+ "title": "13. Mad-Eye Moody"
+ },
+ {
+ "title": "14. The Unforgivable Curses"
+ },
+ {
+ "title": "15. Beauxbatons and Durmstrang"
+ },
+ {
+ "title": "16. The Goblet of Fire"
+ },
+ {
+ "title": "17. The Four Champions"
+ },
+ {
+ "title": "18. The Weighing of the Wands"
+ },
+ {
+ "title": "19. The Hungarian Horntail"
+ },
+ {
+ "title": "20. The First Task"
+ },
+ {
+ "title": "21. The House-Elf Liberation Front"
+ },
+ {
+ "title": "22. The Unexpected Task"
+ },
+ {
+ "title": "23. The Yule Ball"
+ },
+ {
+ "title": "24. Rita Skeeter's Scoop"
+ },
+ {
+ "title": "25. The Egg and the Eye"
+ },
+ {
+ "title": "26. The Second Task"
+ },
+ {
+ "title": "27. Padfoot Returns"
+ },
+ {
+ "title": "28. The Madness of Mr Crouch"
+ },
+ {
+ "title": "29. The Dream"
+ },
+ {
+ "title": "30. The Pensieveg"
+ },
+ {
+ "title": "31. The Third Task"
+ },
+ {
+ "title": "32. Flesh, Blood and Bone"
+ },
+ {
+ "title": "33. The Death Eaters"
+ },
+ {
+ "title": "34. Priori Incantatem"
+ },
+ {
+ "title": "35. Veritaserum"
+ },
+ {
+ "title": "36. The Parting of the Ways"
+ },
+ {
+ "title": "37. The Beginning"
+ }
+ ]
+ }
+ },
+ {
+ "attributes": {
+ "title": "Harry Potter and the Order of the Phoenix",
+ "author": "J. K. Rowling",
+ "pages": 766,
+ "image": "harrypotter5",
+ "release_date": "2003-06-21",
+ "dedication": "To Neil, Jessica and David, who make my world magical",
+ "summary": "Dark times have come to Hogwarts. After the Dementors' attack on his cousin Dudley, Harry Potter knows that Voldemort will stop at nothing to find him. There are many who deny the Dark Lord's return, but Harry is not alone: a secret Order gathers at Grimmauld Place to fight against the Dark forces. Harry must allow Professor Snape to teach him how to protect himself from Voldemort's savage assaults on his mind. But they are growing stronger by the day and Harry is running out of time.",
+ "wiki": "https://harrypotter.fandom.com/wiki/Harry_Potter_and_the_Order_of_the_Phoenix",
+ "chapters": [
+ {
+ "title": "1. Dudley Demented"
+ },
+ {
+ "title": "2. A Peck of Owls"
+ },
+ {
+ "title": "3. The Advance Guard"
+ },
+ {
+ "title": "4. Number Twelve Grimmauld Place"
+ },
+ {
+ "title": "5. The Order of the Phoenix"
+ },
+ {
+ "title": "6. The Noble and Most Ancient House of Black"
+ },
+ {
+ "title": "7. The Ministry of Magic"
+ },
+ {
+ "title": "8. The Hearing"
+ },
+ {
+ "title": "9. The Woes of Mrs Weasley"
+ },
+ {
+ "title": "10. Luna Lovegood"
+ },
+ {
+ "title": "11. The Sorting Hat's New Song"
+ },
+ {
+ "title": "12. Professor Umbridge"
+ },
+ {
+ "title": "13. Detention with Dolores"
+ },
+ {
+ "title": "14. Percy and Padfoot"
+ },
+ {
+ "title": "15. The Hogwarts High Inquisitor"
+ },
+ {
+ "title": "16. In The Hog's Head"
+ },
+ {
+ "title": "17. Educational Decree Number Twenty-Four"
+ },
+ {
+ "title": "18. Dumbledore's Army"
+ },
+ {
+ "title": "19. The Lion and the Serpent"
+ },
+ {
+ "title": "20. Hagrid's Tale"
+ },
+ {
+ "title": "21. The Eye of the Snake"
+ },
+ {
+ "title": "22. St Mungo's Hospital for Magical Maladies and Injuries"
+ },
+ {
+ "title": "23. Christmas on the Closed Ward"
+ },
+ {
+ "title": "24. Occlumency"
+ },
+ {
+ "title": "25. The Beetle at Bay"
+ },
+ {
+ "title": "26. Seen and Unforeseen"
+ },
+ {
+ "title": "27. The Centaur and the Sneak"
+ },
+ {
+ "title": "28. Snape's Worst Memory"
+ },
+ {
+ "title": "29. Careers Advice"
+ },
+ {
+ "title": "30. Grawp"
+ },
+ {
+ "title": "31. O.W.L.s"
+ },
+ {
+ "title": "32. Out of the Fire"
+ },
+ {
+ "title": "33. Fight and Flight"
+ },
+ {
+ "title": "34. The Department of Mysteries"
+ },
+ {
+ "title": "35. Beyond the Veil"
+ },
+ {
+ "title": "36. The Only One He Ever Feared"
+ },
+ {
+ "title": "37. The Lost Prophecy"
+ },
+ {
+ "title": "38. The Second War Begins"
+ }
+ ]
+ }
+ },
+ {
+ "attributes": {
+ "title": "Harry Potter and the Half-Blood Prince",
+ "author": "J. K. Rowling",
+ "pages": 607,
+ "image": "harrypotter6",
+ "release_date": "2005-07-16",
+ "dedication": "To Mackenzie, My beautiful daughter, I dedicate Her ink-and-paper twin.",
+ "summary": "When Dumbledore arrives at Privet Drive one summer night to collect Harry Potter, his wand hand is blackened and shrivelled, but he does not reveal why. Secrets and suspicion are spreading through the wizarding world, and Hogwarts itself is not safe. Harry is convinced that Malfoy bears the Dark Mark: there is a Death Eater amongst them. Harry will need powerful magic and true friends as he explores Voldemort's darkest secrets, and Dumbledore prepares him to face his destiny.",
+ "wiki": "https://harrypotter.fandom.com/wiki/Harry_Potter_and_the_Half-Blood_Prince",
+ "chapters": [
+ {
+ "title": "1. The Other Minister"
+ },
+ {
+ "title": "2. Spinner's End"
+ },
+ {
+ "title": "3. Will and Won't"
+ },
+ {
+ "title": "4. Horace Slughorn"
+ },
+ {
+ "title": "5. An Excess of Phlegm"
+ },
+ {
+ "title": "6. Draco's Detour"
+ },
+ {
+ "title": "7. The Slug Club"
+ },
+ {
+ "title": "8. Snape Victorious"
+ },
+ {
+ "title": "9. The Half-Blood Prince"
+ },
+ {
+ "title": "10. The House of Gaunt"
+ },
+ {
+ "title": "11. Hermione's Helping Hand"
+ },
+ {
+ "title": "12. Silver and Opals"
+ },
+ {
+ "title": "13. The Secret Riddle"
+ },
+ {
+ "title": "14. Felix Felicis"
+ },
+ {
+ "title": "15. The Unbreakable Vow"
+ },
+ {
+ "title": "16. A Very Frosty Christmas"
+ },
+ {
+ "title": "17. A Sluggish Memory"
+ },
+ {
+ "title": "18. Birthday Surprises"
+ },
+ {
+ "title": "19. Elf Tails"
+ },
+ {
+ "title": "20. Lord Voldemort's Request"
+ },
+ {
+ "title": "21. The Unknowable Room"
+ },
+ {
+ "title": "22. After the Burial"
+ },
+ {
+ "title": "23. Horcruxes"
+ },
+ {
+ "title": "24. Sectumsempra"
+ },
+ {
+ "title": "25. The Seer Overheard"
+ },
+ {
+ "title": "26. The Cave"
+ },
+ {
+ "title": "27. The Lightning-Struck Tower"
+ },
+ {
+ "title": "28. Flight of the Prince"
+ },
+ {
+ "title": "29. The Phoenix Lament"
+ },
+ {
+ "title": "30. The White Tomb"
+ }
+ ]
+ }
+ },
+ {
+ "attributes": {
+ "title": "Harry Potter and the Deathly Hallows",
+ "author": "J. K. Rowling",
+ "pages": 610,
+ "image": "harrypotter7",
+ "release_date": "2007-07-2",
+ "dedication": "To Neil, To Jessica, To David, To Kenzie, To Di, To Anne, And to You If you have stuck with Harry until the very end.",
+ "summary": "As he climbs into the sidecar of Hagrid's motorbike and takes to the skies, leaving Privet Drive for the last time, Harry Potter knows that Lord Voldemort and the Death Eaters are not far behind. The protective charm that has kept Harry safe until now is broken, but he cannot keep hiding. The Dark Lord is breathing fear into everything Harry loves, and to stop him Harry will have to find and destroy the remaining Horcruxes. The final battle must begin �� Harry must stand and face his enemy.",
+ "wiki": "https://harrypotter.fandom.com/wiki/Harry_Potter_and_the_Deathly_Hallows",
+ "chapters": [
+ {
+ "title": "1. The Dark Lord Ascending"
+ },
+ {
+ "title": "2. In Memoriam"
+ },
+ {
+ "title": "3. The Dursleys Departing"
+ },
+ {
+ "title": "4. The Seven Potters"
+ },
+ {
+ "title": "5. Fallen Warrior"
+ },
+ {
+ "title": "6. The Ghoul in Pyjamas"
+ },
+ {
+ "title": "7. The Will of Albus Dumbledore"
+ },
+ {
+ "title": "8. The Wedding"
+ },
+ {
+ "title": "9. A Place to Hide"
+ },
+ {
+ "title": "10. Kreacher's Tale"
+ },
+ {
+ "title": "11. The Bribe"
+ },
+ {
+ "title": "12. Magic is Might"
+ },
+ {
+ "title": "13. The Muggle-Born Registration Commission"
+ },
+ {
+ "title": "14. The Thief"
+ },
+ {
+ "title": "15. The Goblin's Revenge"
+ },
+ {
+ "title": "16. Godric's Hollow"
+ },
+ {
+ "title": "17. Bathilda's Secret"
+ },
+ {
+ "title": "18. The Life and Lies of Albus Dumbledore"
+ },
+ {
+ "title": "19. The Silver Doe"
+ },
+ {
+ "title": "20. Xenophilius Lovegoodt"
+ },
+ {
+ "title": "21. The Tale of the Three Brothers"
+ },
+ {
+ "title": "22. The Deathly Hallows"
+ },
+ {
+ "title": "23. Malfoy Manor"
+ },
+ {
+ "title": "24. The Wandmaker"
+ },
+ {
+ "title": "25. Shell Cottage"
+ },
+ {
+ "title": "26. Gringotts"
+ },
+ {
+ "title": "27. The Final Hiding Place"
+ },
+ {
+ "title": "28. The Missing Mirror"
+ },
+ {
+ "title": "29. The Lost Diadem"
+ },
+ {
+ "title": "30. The Sacking of Severus Snape"
+ },
+ {
+ "title": "31. The Battle of Hogwarts"
+ },
+ {
+ "title": "32. The Elder Wand"
+ },
+ {
+ "title": "33. The Prince's Tale"
+ },
+ {
+ "title": "34. The Forest Again"
+ },
+ {
+ "title": "35. King's Cross"
+ },
+ {
+ "title": "36. The Flaw in the Plan"
+ },
+ {
+ "title": "37. Nineteen Years Later"
+ }
+ ]
+ }
+ }
+ ]
+}
diff --git a/Projects/Core/Network/Service/Service.xcodeproj/project.pbxproj b/Projects/Core/Network/Service/Service.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..727b1b2
--- /dev/null
+++ b/Projects/Core/Network/Service/Service.xcodeproj/project.pbxproj
@@ -0,0 +1,1807 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 55;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 00B80E5E7E6E83B4BF0A00A0 /* Extension+Data.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B5254AD3F20CE754E235259 /* Extension+Data.swift */; };
+ 027C1403A68473B4502DA34C /* JSONInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAFFF25D1A493FD9E7BDF34E /* JSONInput.swift */; };
+ 04C97B4464187C784C56D14C /* JSONFileLookupError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70D502676A8279CF1629D293 /* JSONFileLookupError.swift */; };
+ 0E003D50F662B94A1FA6972E /* BookListData.json in Resources */ = {isa = PBXBuildFile; fileRef = 16454F219F40A7D4B35E971B /* BookListData.json */; };
+ 1845B3F428E60BB968AE077D /* JSONParsingError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A584D9766B165E0F8297A63 /* JSONParsingError.swift */; };
+ 1896A8D24CE7CC46D3839461 /* ServiceBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD982233B883C525299CBCE5 /* ServiceBundle.swift */; };
+ 1B884DFFF4808FB4B567B140 /* LogMacro.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 27118BD665B186D6882DF66A /* LogMacro.framework */; };
+ 2F3F58735CFFCB30ECE8B8D5 /* Extension+Data.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B5254AD3F20CE754E235259 /* Extension+Data.swift */; };
+ 33BB39CF1033B80F2281ED11 /* JSONManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E1D95A8A48185CC46DBFAB4 /* JSONManager.swift */; };
+ 38F789F29CEB1BA472A8443D /* Extension+Data.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B5254AD3F20CE754E235259 /* Extension+Data.swift */; };
+ 3903D99EEBCAD524F3D1682F /* JSONManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E1D95A8A48185CC46DBFAB4 /* JSONManager.swift */; };
+ 3C3DA87E8BECAB9DDB4BCB5D /* Service.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7EDFE229DFD7957E8AC64F6F /* Service.framework */; };
+ 3E7CAE206C12A26C588BFD4D /* JSONInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAFFF25D1A493FD9E7BDF34E /* JSONInput.swift */; };
+ 3FB677F4B44A522627248B2D /* ServiceBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD982233B883C525299CBCE5 /* ServiceBundle.swift */; };
+ 4076084473C31650E202BE04 /* LogMacro.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 27118BD665B186D6882DF66A /* LogMacro.framework */; };
+ 40C4E01464D530E5F10547C2 /* JSONParsingError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A584D9766B165E0F8297A63 /* JSONParsingError.swift */; };
+ 42D6E165FDF98E60B36B348A /* LogMacro.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 27118BD665B186D6882DF66A /* LogMacro.framework */; };
+ 44E779CE63C9667E976FD190 /* Service_Service.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 37A05F6FE55F2D51ADC8DF61 /* Service_Service.bundle */; };
+ 462A14D4DE10CF18E4A0A64F /* ServiceBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD982233B883C525299CBCE5 /* ServiceBundle.swift */; };
+ 52AF4B7A3A86D5CDA6C521B5 /* JSONParsingError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A584D9766B165E0F8297A63 /* JSONParsingError.swift */; };
+ 52E04384F69285AE201D6813 /* BookListData.json in Resources */ = {isa = PBXBuildFile; fileRef = 16454F219F40A7D4B35E971B /* BookListData.json */; };
+ 69819D61CEDB456AE2839A78 /* TuistBundle+ServiceStage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 978FAF24D817F081FD46CE08 /* TuistBundle+ServiceStage.swift */; };
+ 7298E7D825DB78334F3728E9 /* JSONInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAFFF25D1A493FD9E7BDF34E /* JSONInput.swift */; };
+ 7C3BCFBA6E292CFF52C25F8E /* JSONParsingError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A584D9766B165E0F8297A63 /* JSONParsingError.swift */; };
+ 7CCC2AF836AA226F43D96D69 /* OSLog.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8EBD9486798A0D863BB013E5 /* OSLog.framework */; };
+ 7D4DFF7298A47E8E07629107 /* TuistBundle+ServiceProd.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17FB50B51F92BE26BE37AB1A /* TuistBundle+ServiceProd.swift */; };
+ 8279A0344BCCCB23F8D07ADA /* Test.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA233B5E4422F71B1E2790B8 /* Test.swift */; };
+ 8530C925A773A34D38648EB2 /* Service_Service.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 37A05F6FE55F2D51ADC8DF61 /* Service_Service.bundle */; };
+ 8BA6C5812D97167D5065A3D7 /* Extension+Data.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B5254AD3F20CE754E235259 /* Extension+Data.swift */; };
+ 99F90699DD2251898FB90B7D /* TuistBundle+ServiceDebug.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50EC0E5BDDE841964C004659 /* TuistBundle+ServiceDebug.swift */; };
+ A7EA51756CE571F964AD2D48 /* Test.swift in Resources */ = {isa = PBXBuildFile; fileRef = BA233B5E4422F71B1E2790B8 /* Test.swift */; };
+ A970C4596E49412243506FBB /* TuistBundle+ServiceTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8100514859327A19F58AA7C9 /* TuistBundle+ServiceTests.swift */; };
+ B3F7E32E4ACC78FF0D7C2CFE /* BookListData.json in Resources */ = {isa = PBXBuildFile; fileRef = 16454F219F40A7D4B35E971B /* BookListData.json */; };
+ B66A37E632260C4C76194F80 /* JSONInput.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAFFF25D1A493FD9E7BDF34E /* JSONInput.swift */; };
+ B9E2A4D48E191A2A2C7F9DFA /* JSONFileLookupError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70D502676A8279CF1629D293 /* JSONFileLookupError.swift */; };
+ C45DEF8DEE8619A956D482D1 /* JSONManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E1D95A8A48185CC46DBFAB4 /* JSONManager.swift */; };
+ D467FC54AABD6D164B211DEC /* TuistBundle+Service.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9FBEDD97322E5668E4A375BA /* TuistBundle+Service.swift */; };
+ D7483758EE956D72B993EFF9 /* JSONFileLookupError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70D502676A8279CF1629D293 /* JSONFileLookupError.swift */; };
+ E2FE6F08169C7EB1919A971A /* JSONManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E1D95A8A48185CC46DBFAB4 /* JSONManager.swift */; };
+ E77434FFF00DA577C82B0BE7 /* LogMacro.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 27118BD665B186D6882DF66A /* LogMacro.framework */; };
+ F292557B00326D632B7D15F9 /* LogMacro.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 27118BD665B186D6882DF66A /* LogMacro.framework */; };
+ F400E460AAE432BC8E4193A3 /* ServiceBundle.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD982233B883C525299CBCE5 /* ServiceBundle.swift */; };
+ FEC8EA5D9A76D705BD74F8CC /* JSONFileLookupError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 70D502676A8279CF1629D293 /* JSONFileLookupError.swift */; };
+ FF5803238610ABEFD7B7D205 /* BookListData.json in Resources */ = {isa = PBXBuildFile; fileRef = 16454F219F40A7D4B35E971B /* BookListData.json */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+ 406CAEE35D99E7CA675D5BD6 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 2387D8980C051CCC13E9F55A /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 9024C9D1379BD62ECD230F4C;
+ remoteInfo = Service_Service_Prod;
+ };
+ 654FCE51FB4C83CBEEEA62B2 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 2387D8980C051CCC13E9F55A /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = FACA0FCDB2428D388FD9FB36;
+ remoteInfo = Service_Service_Debug;
+ };
+ B81CF6B98AC838E66B5A3A92 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 2387D8980C051CCC13E9F55A /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = D1AEAC67256C578A4A7E5C5D;
+ remoteInfo = Service_Service_Stage;
+ };
+ E6E9DF8F0EEA2CFC49A3B0CB /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 2387D8980C051CCC13E9F55A /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = F2B641F230465A1CF012FDED;
+ remoteInfo = Service;
+ };
+ FB742409F973D4DFAD91DC35 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 2387D8980C051CCC13E9F55A /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 0D95F23BDD78B958BFDF1825;
+ remoteInfo = Service_Service;
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ 11D2D814492A2F170FB62D24 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 2E2613D1F1E4C4DEE2BD94FF /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ 44E779CE63C9667E976FD190 /* Service_Service.bundle in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ 43672DB00161FEA57F65B408 /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ E77434FFF00DA577C82B0BE7 /* LogMacro.framework in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ 5A4B9E41609D6261A34EF004 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 5B36A939A245B5A27F657AD1 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 74E72B4A47E1B9C20EA7CF7C /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 7916ECC01EDD8BCB71C5F2CE /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 7B31AB9DAB84DF68E142679F /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ 1B884DFFF4808FB4B567B140 /* LogMacro.framework in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ 9FACACDFA5587DCF39E4A956 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A3463DE417218A21D807821A /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ C547269B996A1C608E65B640 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ D2E9552C3D1506E8E42EB8ED /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ 42D6E165FDF98E60B36B348A /* LogMacro.framework in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ E135B70B4BAD281F11E29459 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ E9A743867ABF14264AA4F46D /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ F292557B00326D632B7D15F9 /* LogMacro.framework in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ 00FFF298924B1BF14FBF4331 /* Service-Prod-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Service-Prod-Info.plist"; sourceTree = ""; };
+ 14800A98B51295BA67B4BD8D /* Service_Service_Debug-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Service_Service_Debug-Info.plist"; sourceTree = ""; };
+ 16454F219F40A7D4B35E971B /* BookListData.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = BookListData.json; sourceTree = ""; };
+ 17FB50B51F92BE26BE37AB1A /* TuistBundle+ServiceProd.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistBundle+ServiceProd.swift"; sourceTree = ""; };
+ 259ABF995B5D27470E829C10 /* ServiceTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ServiceTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+ 27118BD665B186D6882DF66A /* LogMacro.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = LogMacro.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 2B5254AD3F20CE754E235259 /* Extension+Data.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Extension+Data.swift"; sourceTree = ""; };
+ 34D19142035B122118FB9153 /* ServiceTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "ServiceTests-Info.plist"; sourceTree = ""; };
+ 37A05F6FE55F2D51ADC8DF61 /* Service_Service.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Service_Service.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
+ 396A6ABC6985DD88B827B9A7 /* Service_Service_Prod-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Service_Service_Prod-Info.plist"; sourceTree = ""; };
+ 49AE8778D00783FC72E9C397 /* Service_Debug.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Service_Debug.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 50EC0E5BDDE841964C004659 /* TuistBundle+ServiceDebug.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistBundle+ServiceDebug.swift"; sourceTree = ""; };
+ 5668A6213AA486D0A62D58C9 /* Service_Service_Stage-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Service_Service_Stage-Info.plist"; sourceTree = ""; };
+ 5A584D9766B165E0F8297A63 /* JSONParsingError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JSONParsingError.swift; sourceTree = ""; };
+ 656243C0336CD9A5FB069256 /* Service_Prod.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Service_Prod.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 6E1D95A8A48185CC46DBFAB4 /* JSONManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JSONManager.swift; sourceTree = ""; };
+ 70D502676A8279CF1629D293 /* JSONFileLookupError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JSONFileLookupError.swift; sourceTree = ""; };
+ 74A1B62620FE2F19FABD7BF1 /* Service-Debug-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Service-Debug-Info.plist"; sourceTree = ""; };
+ 79814A227CE0F11AA0C03131 /* Service-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Service-Info.plist"; sourceTree = ""; };
+ 7EDFE229DFD7957E8AC64F6F /* Service.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Service.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 8100514859327A19F58AA7C9 /* TuistBundle+ServiceTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistBundle+ServiceTests.swift"; sourceTree = ""; };
+ 8EBD9486798A0D863BB013E5 /* OSLog.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OSLog.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/OSLog.framework; sourceTree = DEVELOPER_DIR; };
+ 952C3CF5CEC7B12E8011DE4C /* Service_Service-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Service_Service-Info.plist"; sourceTree = ""; };
+ 978FAF24D817F081FD46CE08 /* TuistBundle+ServiceStage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistBundle+ServiceStage.swift"; sourceTree = ""; };
+ 9FBEDD97322E5668E4A375BA /* TuistBundle+Service.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistBundle+Service.swift"; sourceTree = ""; };
+ B2E1FF37DA42FED72544D739 /* Service_Service_Debug.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Service_Service_Debug.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
+ B432785FB9ED34C4A18C0C4C /* Service_Stage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Service_Stage.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ B93EA41018E0C851FC1843BB /* Service_Service_Stage.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Service_Service_Stage.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
+ BA233B5E4422F71B1E2790B8 /* Test.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Test.swift; sourceTree = ""; };
+ BCA3077A29DFF2CDF9D94692 /* Service_Service_Prod.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Service_Service_Prod.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
+ BD982233B883C525299CBCE5 /* ServiceBundle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServiceBundle.swift; sourceTree = ""; };
+ D066B46F236811258B579745 /* Service-Stage-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Service-Stage-Info.plist"; sourceTree = ""; };
+ DAFFF25D1A493FD9E7BDF34E /* JSONInput.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = JSONInput.swift; sourceTree = ""; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 28084E2E488F1A047E9698AE /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 34B55B2B9613E5178446EFC1 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 4E5B44339E15D9D7286508BD /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 920ECF1853DB12C3E03D6201 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B9E255F78ED125E38CFE6433 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ E46B5D6AB1628CA99D638546 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ E510C23C2A125768DFDF4F17 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ ED4007158FAD7C7CFF0D3491 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 7CCC2AF836AA226F43D96D69 /* OSLog.framework in Frameworks */,
+ 4076084473C31650E202BE04 /* LogMacro.framework in Frameworks */,
+ 3C3DA87E8BECAB9DDB4BCB5D /* Service.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ FF23CCB5E958A308933185DE /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 01E7B0917FC1B1B4BE0F85CE /* Sources */ = {
+ isa = PBXGroup;
+ children = (
+ 9FBEDD97322E5668E4A375BA /* TuistBundle+Service.swift */,
+ 50EC0E5BDDE841964C004659 /* TuistBundle+ServiceDebug.swift */,
+ 17FB50B51F92BE26BE37AB1A /* TuistBundle+ServiceProd.swift */,
+ 978FAF24D817F081FD46CE08 /* TuistBundle+ServiceStage.swift */,
+ 8100514859327A19F58AA7C9 /* TuistBundle+ServiceTests.swift */,
+ );
+ path = Sources;
+ sourceTree = "";
+ };
+ 38169642E05B36E0AEF61F24 /* Derived */ = {
+ isa = PBXGroup;
+ children = (
+ 7683298B0B11468C8351D5CF /* InfoPlists */,
+ 01E7B0917FC1B1B4BE0F85CE /* Sources */,
+ );
+ path = Derived;
+ sourceTree = "";
+ };
+ 57FF25C92193FDC6FC2E9956 /* Sources */ = {
+ isa = PBXGroup;
+ children = (
+ FF40BCF8690B7928C85F6A51 /* Extension */,
+ B53270F66A980E0970A616FF /* JSONManager */,
+ );
+ path = Sources;
+ sourceTree = "";
+ };
+ 6EF9FDD21B7717FD4262395A /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 27118BD665B186D6882DF66A /* LogMacro.framework */,
+ 49AE8778D00783FC72E9C397 /* Service_Debug.framework */,
+ 656243C0336CD9A5FB069256 /* Service_Prod.framework */,
+ B2E1FF37DA42FED72544D739 /* Service_Service_Debug.bundle */,
+ BCA3077A29DFF2CDF9D94692 /* Service_Service_Prod.bundle */,
+ B93EA41018E0C851FC1843BB /* Service_Service_Stage.bundle */,
+ 37A05F6FE55F2D51ADC8DF61 /* Service_Service.bundle */,
+ B432785FB9ED34C4A18C0C4C /* Service_Stage.framework */,
+ 7EDFE229DFD7957E8AC64F6F /* Service.framework */,
+ 259ABF995B5D27470E829C10 /* ServiceTests.xctest */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ 7683298B0B11468C8351D5CF /* InfoPlists */ = {
+ isa = PBXGroup;
+ children = (
+ 14800A98B51295BA67B4BD8D /* Service_Service_Debug-Info.plist */,
+ 396A6ABC6985DD88B827B9A7 /* Service_Service_Prod-Info.plist */,
+ 5668A6213AA486D0A62D58C9 /* Service_Service_Stage-Info.plist */,
+ 952C3CF5CEC7B12E8011DE4C /* Service_Service-Info.plist */,
+ 74A1B62620FE2F19FABD7BF1 /* Service-Debug-Info.plist */,
+ 79814A227CE0F11AA0C03131 /* Service-Info.plist */,
+ 00FFF298924B1BF14FBF4331 /* Service-Prod-Info.plist */,
+ D066B46F236811258B579745 /* Service-Stage-Info.plist */,
+ 34D19142035B122118FB9153 /* ServiceTests-Info.plist */,
+ );
+ path = InfoPlists;
+ sourceTree = "";
+ };
+ 77697C0CADA34648DBF804D8 /* Sources */ = {
+ isa = PBXGroup;
+ children = (
+ BA233B5E4422F71B1E2790B8 /* Test.swift */,
+ );
+ path = Sources;
+ sourceTree = "";
+ };
+ 7D2A1FAC224A4161D0DD025B /* Project */ = {
+ isa = PBXGroup;
+ children = (
+ 38169642E05B36E0AEF61F24 /* Derived */,
+ 984389C5E1B772AC737206DD /* Resources */,
+ 97CFFBEEA2425324063A8623 /* ServiceTests */,
+ 57FF25C92193FDC6FC2E9956 /* Sources */,
+ );
+ name = Project;
+ sourceTree = "";
+ };
+ 951DAE26418A9AE539BF6194 /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ 8EBD9486798A0D863BB013E5 /* OSLog.framework */,
+ );
+ name = Frameworks;
+ sourceTree = "";
+ };
+ 97CFFBEEA2425324063A8623 /* ServiceTests */ = {
+ isa = PBXGroup;
+ children = (
+ 77697C0CADA34648DBF804D8 /* Sources */,
+ );
+ path = ServiceTests;
+ sourceTree = "";
+ };
+ 984389C5E1B772AC737206DD /* Resources */ = {
+ isa = PBXGroup;
+ children = (
+ 16454F219F40A7D4B35E971B /* BookListData.json */,
+ );
+ path = Resources;
+ sourceTree = "";
+ };
+ B53270F66A980E0970A616FF /* JSONManager */ = {
+ isa = PBXGroup;
+ children = (
+ 70D502676A8279CF1629D293 /* JSONFileLookupError.swift */,
+ DAFFF25D1A493FD9E7BDF34E /* JSONInput.swift */,
+ 6E1D95A8A48185CC46DBFAB4 /* JSONManager.swift */,
+ 5A584D9766B165E0F8297A63 /* JSONParsingError.swift */,
+ BD982233B883C525299CBCE5 /* ServiceBundle.swift */,
+ );
+ path = JSONManager;
+ sourceTree = "";
+ };
+ D07C34F9592EC2D78588BE04 = {
+ isa = PBXGroup;
+ children = (
+ 7D2A1FAC224A4161D0DD025B /* Project */,
+ 6EF9FDD21B7717FD4262395A /* Products */,
+ 951DAE26418A9AE539BF6194 /* Frameworks */,
+ );
+ sourceTree = "";
+ };
+ FF40BCF8690B7928C85F6A51 /* Extension */ = {
+ isa = PBXGroup;
+ children = (
+ 2B5254AD3F20CE754E235259 /* Extension+Data.swift */,
+ );
+ path = Extension;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 0D95F23BDD78B958BFDF1825 /* Service_Service */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = F3CAD64C7EC184AEA6C0ADF2 /* Build configuration list for PBXNativeTarget "Service_Service" */;
+ buildPhases = (
+ EBF53E5CB7110DEA1663DED7 /* Sources */,
+ 1FFBBED62BB347A64BB8DE45 /* Resources */,
+ FF23CCB5E958A308933185DE /* Frameworks */,
+ 74E72B4A47E1B9C20EA7CF7C /* Embed Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = Service_Service;
+ packageProductDependencies = (
+ );
+ productName = Service_Service;
+ productReference = 37A05F6FE55F2D51ADC8DF61 /* Service_Service.bundle */;
+ productType = "com.apple.product-type.bundle";
+ };
+ 4D77B3747602ABAB4CDEEAE5 /* Service-Debug */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 4AE20AEBB3804FE2DFF45499 /* Build configuration list for PBXNativeTarget "Service-Debug" */;
+ buildPhases = (
+ 4AD85F700EA608274BF8E71E /* Sources */,
+ A2AA66D5428A52814A8CF2E2 /* Resources */,
+ 4E5B44339E15D9D7286508BD /* Frameworks */,
+ 5A4B9E41609D6261A34EF004 /* Embed Frameworks */,
+ 43672DB00161FEA57F65B408 /* Dependencies */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 136DEE285CB83817CECDA7A4 /* PBXTargetDependency */,
+ );
+ name = "Service-Debug";
+ packageProductDependencies = (
+ );
+ productName = Service_Debug;
+ productReference = 49AE8778D00783FC72E9C397 /* Service_Debug.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+ 4F05B98A978D0CCF22F7E153 /* Service-Prod */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 7B5FE70ED73C9186D9C86451 /* Build configuration list for PBXNativeTarget "Service-Prod" */;
+ buildPhases = (
+ 262CDC2DFB2F08CAA66E8074 /* Sources */,
+ 220D40C297E32C07E0E4144B /* Resources */,
+ B9E255F78ED125E38CFE6433 /* Frameworks */,
+ 7916ECC01EDD8BCB71C5F2CE /* Embed Frameworks */,
+ 7B31AB9DAB84DF68E142679F /* Dependencies */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ D992D41947002451EA3F1E9D /* PBXTargetDependency */,
+ );
+ name = "Service-Prod";
+ packageProductDependencies = (
+ );
+ productName = Service_Prod;
+ productReference = 656243C0336CD9A5FB069256 /* Service_Prod.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+ 9024C9D1379BD62ECD230F4C /* Service_Service_Prod */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 706D8A497CA3AA58E8BB6778 /* Build configuration list for PBXNativeTarget "Service_Service_Prod" */;
+ buildPhases = (
+ 7202730CEDFC338E29898DD9 /* Sources */,
+ EEFC6004A791A64F6E74507D /* Resources */,
+ 920ECF1853DB12C3E03D6201 /* Frameworks */,
+ C547269B996A1C608E65B640 /* Embed Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = Service_Service_Prod;
+ packageProductDependencies = (
+ );
+ productName = Service_Service_Prod;
+ productReference = BCA3077A29DFF2CDF9D94692 /* Service_Service_Prod.bundle */;
+ productType = "com.apple.product-type.bundle";
+ };
+ BC16F4EC08A28EAA48363D3F /* ServiceTests */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 2061AE01CD20C06F343CE3DE /* Build configuration list for PBXNativeTarget "ServiceTests" */;
+ buildPhases = (
+ FEFA0B3C65A0E88A4F11A9F4 /* Sources */,
+ DBB59024C51A6B1A99F072A5 /* Resources */,
+ ED4007158FAD7C7CFF0D3491 /* Frameworks */,
+ E135B70B4BAD281F11E29459 /* Embed Frameworks */,
+ 2E2613D1F1E4C4DEE2BD94FF /* Dependencies */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ E9B114F085A8E58F492A2524 /* PBXTargetDependency */,
+ );
+ name = ServiceTests;
+ packageProductDependencies = (
+ );
+ productName = ServiceTests;
+ productReference = 259ABF995B5D27470E829C10 /* ServiceTests.xctest */;
+ productType = "com.apple.product-type.bundle.unit-test";
+ };
+ D1AEAC67256C578A4A7E5C5D /* Service_Service_Stage */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = F517DBD336F17104FB89B851 /* Build configuration list for PBXNativeTarget "Service_Service_Stage" */;
+ buildPhases = (
+ 3AD9279FB90A753C541D8E2E /* Sources */,
+ 7DC067AE06FC609CC63EE68F /* Resources */,
+ E510C23C2A125768DFDF4F17 /* Frameworks */,
+ A3463DE417218A21D807821A /* Embed Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = Service_Service_Stage;
+ packageProductDependencies = (
+ );
+ productName = Service_Service_Stage;
+ productReference = B93EA41018E0C851FC1843BB /* Service_Service_Stage.bundle */;
+ productType = "com.apple.product-type.bundle";
+ };
+ D6E0EDD309910261BA164618 /* Service-Stage */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 8A672D2435F864E61BC030CD /* Build configuration list for PBXNativeTarget "Service-Stage" */;
+ buildPhases = (
+ 68FD6384534887A583C925B2 /* Sources */,
+ 099BBED0A3D302533934CC25 /* Resources */,
+ 34B55B2B9613E5178446EFC1 /* Frameworks */,
+ 11D2D814492A2F170FB62D24 /* Embed Frameworks */,
+ E9A743867ABF14264AA4F46D /* Dependencies */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 79B0BAB26B139A0CA3318042 /* PBXTargetDependency */,
+ );
+ name = "Service-Stage";
+ packageProductDependencies = (
+ );
+ productName = Service_Stage;
+ productReference = B432785FB9ED34C4A18C0C4C /* Service_Stage.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+ F2B641F230465A1CF012FDED /* Service */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = AAD510D6A096645A1B961388 /* Build configuration list for PBXNativeTarget "Service" */;
+ buildPhases = (
+ 90DCD84B70AC87F1B09042E8 /* Sources */,
+ 5DB916BB3D046F2698257E14 /* Resources */,
+ E46B5D6AB1628CA99D638546 /* Frameworks */,
+ 5B36A939A245B5A27F657AD1 /* Embed Frameworks */,
+ D2E9552C3D1506E8E42EB8ED /* Dependencies */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 473DD48BB67DC44253758883 /* PBXTargetDependency */,
+ );
+ name = Service;
+ packageProductDependencies = (
+ );
+ productName = Service;
+ productReference = 7EDFE229DFD7957E8AC64F6F /* Service.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+ FACA0FCDB2428D388FD9FB36 /* Service_Service_Debug */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = BBD76062195EA6015BD3CC7C /* Build configuration list for PBXNativeTarget "Service_Service_Debug" */;
+ buildPhases = (
+ A92647F5F222A07FF3EBB462 /* Sources */,
+ 4492569B068874DCC839BAD2 /* Resources */,
+ 28084E2E488F1A047E9698AE /* Frameworks */,
+ 9FACACDFA5587DCF39E4A956 /* Embed Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = Service_Service_Debug;
+ packageProductDependencies = (
+ );
+ productName = Service_Service_Debug;
+ productReference = B2E1FF37DA42FED72544D739 /* Service_Service_Debug.bundle */;
+ productType = "com.apple.product-type.bundle";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 2387D8980C051CCC13E9F55A /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ BuildIndependentTargetsInParallel = YES;
+ TargetAttributes = {
+ };
+ };
+ buildConfigurationList = A210B9CE0F80C75DCB439AE9 /* Build configuration list for PBXProject "Service" */;
+ compatibilityVersion = "Xcode 14.0";
+ developmentRegion = ko;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ ko,
+ );
+ mainGroup = D07C34F9592EC2D78588BE04;
+ productRefGroup = 6EF9FDD21B7717FD4262395A /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ F2B641F230465A1CF012FDED /* Service */,
+ 4D77B3747602ABAB4CDEEAE5 /* Service-Debug */,
+ 4F05B98A978D0CCF22F7E153 /* Service-Prod */,
+ D6E0EDD309910261BA164618 /* Service-Stage */,
+ BC16F4EC08A28EAA48363D3F /* ServiceTests */,
+ 0D95F23BDD78B958BFDF1825 /* Service_Service */,
+ FACA0FCDB2428D388FD9FB36 /* Service_Service_Debug */,
+ 9024C9D1379BD62ECD230F4C /* Service_Service_Prod */,
+ D1AEAC67256C578A4A7E5C5D /* Service_Service_Stage */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 099BBED0A3D302533934CC25 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 1FFBBED62BB347A64BB8DE45 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 52E04384F69285AE201D6813 /* BookListData.json in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 220D40C297E32C07E0E4144B /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 4492569B068874DCC839BAD2 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ FF5803238610ABEFD7B7D205 /* BookListData.json in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 5DB916BB3D046F2698257E14 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 7DC067AE06FC609CC63EE68F /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B3F7E32E4ACC78FF0D7C2CFE /* BookListData.json in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A2AA66D5428A52814A8CF2E2 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ DBB59024C51A6B1A99F072A5 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A7EA51756CE571F964AD2D48 /* Test.swift in Resources */,
+ 8530C925A773A34D38648EB2 /* Service_Service.bundle in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ EEFC6004A791A64F6E74507D /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 0E003D50F662B94A1FA6972E /* BookListData.json in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 262CDC2DFB2F08CAA66E8074 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 7D4DFF7298A47E8E07629107 /* TuistBundle+ServiceProd.swift in Sources */,
+ 2F3F58735CFFCB30ECE8B8D5 /* Extension+Data.swift in Sources */,
+ B9E2A4D48E191A2A2C7F9DFA /* JSONFileLookupError.swift in Sources */,
+ 3E7CAE206C12A26C588BFD4D /* JSONInput.swift in Sources */,
+ E2FE6F08169C7EB1919A971A /* JSONManager.swift in Sources */,
+ 1845B3F428E60BB968AE077D /* JSONParsingError.swift in Sources */,
+ 3FB677F4B44A522627248B2D /* ServiceBundle.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 3AD9279FB90A753C541D8E2E /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 4AD85F700EA608274BF8E71E /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 99F90699DD2251898FB90B7D /* TuistBundle+ServiceDebug.swift in Sources */,
+ 8BA6C5812D97167D5065A3D7 /* Extension+Data.swift in Sources */,
+ 04C97B4464187C784C56D14C /* JSONFileLookupError.swift in Sources */,
+ 7298E7D825DB78334F3728E9 /* JSONInput.swift in Sources */,
+ 33BB39CF1033B80F2281ED11 /* JSONManager.swift in Sources */,
+ 40C4E01464D530E5F10547C2 /* JSONParsingError.swift in Sources */,
+ F400E460AAE432BC8E4193A3 /* ServiceBundle.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 68FD6384534887A583C925B2 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 69819D61CEDB456AE2839A78 /* TuistBundle+ServiceStage.swift in Sources */,
+ 38F789F29CEB1BA472A8443D /* Extension+Data.swift in Sources */,
+ D7483758EE956D72B993EFF9 /* JSONFileLookupError.swift in Sources */,
+ 027C1403A68473B4502DA34C /* JSONInput.swift in Sources */,
+ 3903D99EEBCAD524F3D1682F /* JSONManager.swift in Sources */,
+ 52AF4B7A3A86D5CDA6C521B5 /* JSONParsingError.swift in Sources */,
+ 1896A8D24CE7CC46D3839461 /* ServiceBundle.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 7202730CEDFC338E29898DD9 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 90DCD84B70AC87F1B09042E8 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ D467FC54AABD6D164B211DEC /* TuistBundle+Service.swift in Sources */,
+ 00B80E5E7E6E83B4BF0A00A0 /* Extension+Data.swift in Sources */,
+ FEC8EA5D9A76D705BD74F8CC /* JSONFileLookupError.swift in Sources */,
+ B66A37E632260C4C76194F80 /* JSONInput.swift in Sources */,
+ C45DEF8DEE8619A956D482D1 /* JSONManager.swift in Sources */,
+ 7C3BCFBA6E292CFF52C25F8E /* JSONParsingError.swift in Sources */,
+ 462A14D4DE10CF18E4A0A64F /* ServiceBundle.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A92647F5F222A07FF3EBB462 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ EBF53E5CB7110DEA1663DED7 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ FEFA0B3C65A0E88A4F11A9F4 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A970C4596E49412243506FBB /* TuistBundle+ServiceTests.swift in Sources */,
+ 8279A0344BCCCB23F8D07ADA /* Test.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+ 136DEE285CB83817CECDA7A4 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ name = Service_Service_Debug;
+ target = FACA0FCDB2428D388FD9FB36 /* Service_Service_Debug */;
+ targetProxy = 654FCE51FB4C83CBEEEA62B2 /* PBXContainerItemProxy */;
+ };
+ 473DD48BB67DC44253758883 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ name = Service_Service;
+ target = 0D95F23BDD78B958BFDF1825 /* Service_Service */;
+ targetProxy = FB742409F973D4DFAD91DC35 /* PBXContainerItemProxy */;
+ };
+ 79B0BAB26B139A0CA3318042 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ name = Service_Service_Stage;
+ target = D1AEAC67256C578A4A7E5C5D /* Service_Service_Stage */;
+ targetProxy = B81CF6B98AC838E66B5A3A92 /* PBXContainerItemProxy */;
+ };
+ D992D41947002451EA3F1E9D /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ name = Service_Service_Prod;
+ target = 9024C9D1379BD62ECD230F4C /* Service_Service_Prod */;
+ targetProxy = 406CAEE35D99E7CA675D5BD6 /* PBXContainerItemProxy */;
+ };
+ E9B114F085A8E58F492A2524 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ name = Service;
+ target = F2B641F230465A1CF012FDED /* Service */;
+ targetProxy = E6E9DF8F0EEA2CFC49A3B0CB /* PBXContainerItemProxy */;
+ };
+/* End PBXTargetDependency section */
+
+/* Begin XCBuildConfiguration section */
+ 02E4E7B9BB18AB59CAEE2D48 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGNING_ALLOWED = NO;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ GENERATE_MASTER_OBJECT_FILE = NO;
+ INFOPLIST_FILE = "Derived/InfoPlists/Service_Service-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Service.generated.resources;
+ PRODUCT_NAME = Service_Service;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "";
+ };
+ name = Release;
+ };
+ 078F713D85496981E09AF488 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/Service-Prod-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Service;
+ PRODUCT_NAME = Service_Prod;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Release;
+ };
+ 0CF2F251CC7ACBFD83CB03BA /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/Service-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Service;
+ PRODUCT_NAME = Service;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Release;
+ };
+ 19C867CD46A97143B756714A /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/Service-Stage-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Service;
+ PRODUCT_NAME = Service_Stage;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Debug;
+ };
+ 1DD718A4523A14F31838AD9A /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/ServiceTests-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Service.ServiceTests;
+ PRODUCT_NAME = ServiceTests;
+ SDKROOT = iphoneos;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ };
+ name = Release;
+ };
+ 527A8504FEC0D977F10DFE1D /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ DEAD_CODE_STRIPPING = YES;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ MTL_ENABLE_DEBUG_INFO = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ };
+ name = Debug;
+ };
+ 6C0FDBF3C2E10CC60D8EBB4B /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGNING_ALLOWED = NO;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ GENERATE_MASTER_OBJECT_FILE = NO;
+ INFOPLIST_FILE = "Derived/InfoPlists/Service_Service_Stage-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Service.generated.resources;
+ PRODUCT_NAME = Service_Service_Stage;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "";
+ };
+ name = Release;
+ };
+ 827688E819193446D6A86496 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/Service-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Service;
+ PRODUCT_NAME = Service;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Debug;
+ };
+ 9B46EB756EEFE59D86CA13FC /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/Service-Stage-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Service;
+ PRODUCT_NAME = Service_Stage;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Release;
+ };
+ A84C8E7F6A8E1813C21C1AD3 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGNING_ALLOWED = NO;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ GENERATE_MASTER_OBJECT_FILE = NO;
+ INFOPLIST_FILE = "Derived/InfoPlists/Service_Service-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Service.generated.resources;
+ PRODUCT_NAME = Service_Service;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "";
+ };
+ name = Debug;
+ };
+ B329BCF86CB8AB9EF8BAD557 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/Service-Prod-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Service;
+ PRODUCT_NAME = Service_Prod;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Debug;
+ };
+ BAF2CCBF694046F2B33FBFE7 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/Service-Debug-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Service;
+ PRODUCT_NAME = Service_Debug;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Debug;
+ };
+ C2E25039ADCD7DF378738378 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGNING_ALLOWED = NO;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ GENERATE_MASTER_OBJECT_FILE = NO;
+ INFOPLIST_FILE = "Derived/InfoPlists/Service_Service_Debug-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Service.generated.resources;
+ PRODUCT_NAME = Service_Service_Debug;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "";
+ };
+ name = Debug;
+ };
+ CCD6AD99FB506BBD3797799B /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/ServiceTests-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Service.ServiceTests;
+ PRODUCT_NAME = ServiceTests;
+ SDKROOT = iphoneos;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ };
+ name = Debug;
+ };
+ D3499E0DC93D0169932DD5F0 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ DEAD_CODE_STRIPPING = YES;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+ D957C315836A9F8BF8035A2A /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGNING_ALLOWED = NO;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ GENERATE_MASTER_OBJECT_FILE = NO;
+ INFOPLIST_FILE = "Derived/InfoPlists/Service_Service_Prod-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Service.generated.resources;
+ PRODUCT_NAME = Service_Service_Prod;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "";
+ };
+ name = Debug;
+ };
+ EF9B983021836566B319F35D /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGNING_ALLOWED = NO;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ GENERATE_MASTER_OBJECT_FILE = NO;
+ INFOPLIST_FILE = "Derived/InfoPlists/Service_Service_Debug-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Service.generated.resources;
+ PRODUCT_NAME = Service_Service_Debug;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "";
+ };
+ name = Release;
+ };
+ FAE8935808606FB04194E667 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGNING_ALLOWED = NO;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ GENERATE_MASTER_OBJECT_FILE = NO;
+ INFOPLIST_FILE = "Derived/InfoPlists/Service_Service_Stage-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Service.generated.resources;
+ PRODUCT_NAME = Service_Service_Stage;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "";
+ };
+ name = Debug;
+ };
+ FC416B0F1390BAA55A14F864 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGNING_ALLOWED = NO;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ GENERATE_MASTER_OBJECT_FILE = NO;
+ INFOPLIST_FILE = "Derived/InfoPlists/Service_Service_Prod-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Service.generated.resources;
+ PRODUCT_NAME = Service_Service_Prod;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "";
+ };
+ name = Release;
+ };
+ FEDF02C8CAF40325944856B9 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
+ HEADER_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
+ );
+ INFOPLIST_FILE = "Derived/InfoPlists/Service-Debug-Info.plist";
+ INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
+ IPHONEOS_DEPLOYMENT_TARGET = 17.0;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ "@loader_path/Frameworks",
+ );
+ MACH_O_TYPE = staticlib;
+ OTHER_CFLAGS = (
+ "$(inherited)",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ );
+ OTHER_SWIFT_FLAGS = (
+ "$(inherited)",
+ "-Xcc",
+ "-fmodule-map-file=$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include/module.modulemap",
+ "-load-plugin-executable",
+ "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Service;
+ PRODUCT_NAME = Service_Debug;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 2061AE01CD20C06F343CE3DE /* Build configuration list for PBXNativeTarget "ServiceTests" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ CCD6AD99FB506BBD3797799B /* Debug */,
+ 1DD718A4523A14F31838AD9A /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 4AE20AEBB3804FE2DFF45499 /* Build configuration list for PBXNativeTarget "Service-Debug" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ BAF2CCBF694046F2B33FBFE7 /* Debug */,
+ FEDF02C8CAF40325944856B9 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 706D8A497CA3AA58E8BB6778 /* Build configuration list for PBXNativeTarget "Service_Service_Prod" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ D957C315836A9F8BF8035A2A /* Debug */,
+ FC416B0F1390BAA55A14F864 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 7B5FE70ED73C9186D9C86451 /* Build configuration list for PBXNativeTarget "Service-Prod" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ B329BCF86CB8AB9EF8BAD557 /* Debug */,
+ 078F713D85496981E09AF488 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 8A672D2435F864E61BC030CD /* Build configuration list for PBXNativeTarget "Service-Stage" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 19C867CD46A97143B756714A /* Debug */,
+ 9B46EB756EEFE59D86CA13FC /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ A210B9CE0F80C75DCB439AE9 /* Build configuration list for PBXProject "Service" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 527A8504FEC0D977F10DFE1D /* Debug */,
+ D3499E0DC93D0169932DD5F0 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ AAD510D6A096645A1B961388 /* Build configuration list for PBXNativeTarget "Service" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 827688E819193446D6A86496 /* Debug */,
+ 0CF2F251CC7ACBFD83CB03BA /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ BBD76062195EA6015BD3CC7C /* Build configuration list for PBXNativeTarget "Service_Service_Debug" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ C2E25039ADCD7DF378738378 /* Debug */,
+ EF9B983021836566B319F35D /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ F3CAD64C7EC184AEA6C0ADF2 /* Build configuration list for PBXNativeTarget "Service_Service" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ A84C8E7F6A8E1813C21C1AD3 /* Debug */,
+ 02E4E7B9BB18AB59CAEE2D48 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ F517DBD336F17104FB89B851 /* Build configuration list for PBXNativeTarget "Service_Service_Stage" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ FAE8935808606FB04194E667 /* Debug */,
+ 6C0FDBF3C2E10CC60D8EBB4B /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 2387D8980C051CCC13E9F55A /* Project object */;
+}
diff --git a/Projects/Core/Network/Service/Service.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Projects/Core/Network/Service/Service.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..919434a
--- /dev/null
+++ b/Projects/Core/Network/Service/Service.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/Projects/Core/Network/Service/Service.xcodeproj/xcshareddata/xcschemes/Service-Debug.xcscheme b/Projects/Core/Network/Service/Service.xcodeproj/xcshareddata/xcschemes/Service-Debug.xcscheme
new file mode 100644
index 0000000..0fa5dea
--- /dev/null
+++ b/Projects/Core/Network/Service/Service.xcodeproj/xcshareddata/xcschemes/Service-Debug.xcscheme
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Projects/Core/Network/Service/Service.xcodeproj/xcshareddata/xcschemes/Service-Prod.xcscheme b/Projects/Core/Network/Service/Service.xcodeproj/xcshareddata/xcschemes/Service-Prod.xcscheme
new file mode 100644
index 0000000..95d4659
--- /dev/null
+++ b/Projects/Core/Network/Service/Service.xcodeproj/xcshareddata/xcschemes/Service-Prod.xcscheme
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Projects/Core/Network/Service/Service.xcodeproj/xcshareddata/xcschemes/Service-Stage.xcscheme b/Projects/Core/Network/Service/Service.xcodeproj/xcshareddata/xcschemes/Service-Stage.xcscheme
new file mode 100644
index 0000000..9340dab
--- /dev/null
+++ b/Projects/Core/Network/Service/Service.xcodeproj/xcshareddata/xcschemes/Service-Stage.xcscheme
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Projects/Core/Network/Service/Service.xcodeproj/xcshareddata/xcschemes/Service.xcscheme b/Projects/Core/Network/Service/Service.xcodeproj/xcshareddata/xcschemes/Service.xcscheme
new file mode 100644
index 0000000..b301ad6
--- /dev/null
+++ b/Projects/Core/Network/Service/Service.xcodeproj/xcshareddata/xcschemes/Service.xcscheme
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Projects/Core/Network/Service/Service.xcodeproj/xcshareddata/xcschemes/Service_Service.xcscheme b/Projects/Core/Network/Service/Service.xcodeproj/xcshareddata/xcschemes/Service_Service.xcscheme
new file mode 100644
index 0000000..e70bb90
--- /dev/null
+++ b/Projects/Core/Network/Service/Service.xcodeproj/xcshareddata/xcschemes/Service_Service.xcscheme
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Projects/Core/Network/Service/Service.xcodeproj/xcshareddata/xcschemes/Service_Service_Debug.xcscheme b/Projects/Core/Network/Service/Service.xcodeproj/xcshareddata/xcschemes/Service_Service_Debug.xcscheme
new file mode 100644
index 0000000..d82227e
--- /dev/null
+++ b/Projects/Core/Network/Service/Service.xcodeproj/xcshareddata/xcschemes/Service_Service_Debug.xcscheme
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Projects/Core/Network/Service/Service.xcodeproj/xcshareddata/xcschemes/Service_Service_Prod.xcscheme b/Projects/Core/Network/Service/Service.xcodeproj/xcshareddata/xcschemes/Service_Service_Prod.xcscheme
new file mode 100644
index 0000000..9822d79
--- /dev/null
+++ b/Projects/Core/Network/Service/Service.xcodeproj/xcshareddata/xcschemes/Service_Service_Prod.xcscheme
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Projects/Core/Network/Service/Service.xcodeproj/xcshareddata/xcschemes/Service_Service_Stage.xcscheme b/Projects/Core/Network/Service/Service.xcodeproj/xcshareddata/xcschemes/Service_Service_Stage.xcscheme
new file mode 100644
index 0000000..efb57e4
--- /dev/null
+++ b/Projects/Core/Network/Service/Service.xcodeproj/xcshareddata/xcschemes/Service_Service_Stage.xcscheme
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Projects/Core/Network/Service/ServiceTests/Sources/Test.swift b/Projects/Core/Network/Service/ServiceTests/Sources/Test.swift
new file mode 100644
index 0000000..a9c810e
--- /dev/null
+++ b/Projects/Core/Network/Service/ServiceTests/Sources/Test.swift
@@ -0,0 +1,8 @@
+//
+// base.swift
+// DDDAttendance
+//
+// Created by Roy on 2025-09-04
+// Copyright © 2025 DDD , Ltd. All rights reserved.
+//
+
diff --git a/Projects/Core/Network/Service/Sources/Extension/Extension+Data.swift b/Projects/Core/Network/Service/Sources/Extension/Extension+Data.swift
new file mode 100644
index 0000000..00c7f5e
--- /dev/null
+++ b/Projects/Core/Network/Service/Sources/Extension/Extension+Data.swift
@@ -0,0 +1,21 @@
+//
+// Extension+Data.swift
+// Service
+//
+// Created by Wonji Suh on 9/5/25.
+//
+
+import Foundation
+
+/// Data를 지정된 Decodable 타입으로 디코딩하는 편의 메서드를 제공하는 확장입니다.
+extension Data {
+ /// JSON 형식의 바이트 시퀀스를 주어진 Decodable 타입으로 디코딩합니다.
+ ///
+ /// - Parameter type: 디코딩할 대상 Decodable 타입
+ /// - Returns: 디코딩된 타입의 인스턴스
+ /// - Throws: 디코딩 실패 시 DecodingError 또는 기타 오류를 던집니다.
+ func decoded(as type: T.Type) throws -> T {
+ let decoder = JSONDecoder()
+ return try decoder.decode(T.self, from: self)
+ }
+}
diff --git a/Projects/Core/Network/Service/Sources/JSONManager/JSONFileLookupError.swift b/Projects/Core/Network/Service/Sources/JSONManager/JSONFileLookupError.swift
new file mode 100644
index 0000000..047e74f
--- /dev/null
+++ b/Projects/Core/Network/Service/Sources/JSONManager/JSONFileLookupError.swift
@@ -0,0 +1,19 @@
+//
+// JSONFileLookupError.swift
+// Service
+//
+// Created by Wonji Suh on 9/8/25.
+//
+
+import Foundation
+
+// MARK: - Detail error with lookup log
+enum JSONFileLookupError: LocalizedError {
+ case fileNotFound(name: String, ext: String, tried: [String])
+ var errorDescription: String? {
+ switch self {
+ case let .fileNotFound(name, ext, tried):
+ return "파일을 찾을 수 없습니다: \(name).\(ext)\n🔎 검색 로그:\n" + tried.joined(separator: "\n")
+ }
+ }
+}
diff --git a/Projects/Core/Network/Service/Sources/JSONManager/JSONInput.swift b/Projects/Core/Network/Service/Sources/JSONManager/JSONInput.swift
new file mode 100644
index 0000000..4810c58
--- /dev/null
+++ b/Projects/Core/Network/Service/Sources/JSONManager/JSONInput.swift
@@ -0,0 +1,23 @@
+//
+// JSONInput.swift
+// Service
+//
+// Created by Wonji Suh on 9/8/25.
+//
+
+import Foundation
+
+public protocol JSONInput {
+ func toData() throws -> Data
+}
+
+extension Data: JSONInput {
+ public func toData() throws -> Data { self }
+}
+
+extension String: JSONInput {
+ public func toData() throws -> Data {
+ guard let data = self.data(using: .utf8) else { throw JSONParsingError.invalidString }
+ return data
+ }
+}
diff --git a/Projects/Core/Network/Service/Sources/JSONManager/JSONManager.swift b/Projects/Core/Network/Service/Sources/JSONManager/JSONManager.swift
new file mode 100644
index 0000000..945f3bb
--- /dev/null
+++ b/Projects/Core/Network/Service/Sources/JSONManager/JSONManager.swift
@@ -0,0 +1,109 @@
+//
+// JSONManager.swift
+// Service
+//
+// Created by Wonji Suh on 9/5/25.
+//
+
+
+import Foundation
+import LogMacro
+
+
+// MARK: - JSONManager
+public actor JSONManager {
+ public init() {}
+
+ static let resourceURLCache = NSCache()
+
+ nonisolated private static func cacheKey(
+ bundle: Bundle, name: String, ext: String, subdir: String?
+ ) -> NSString {
+ "\(bundle.bundlePath)|\(subdir ?? "")|\(name).\(ext)" as NSString
+ }
+
+ // MARK: - Core Parsing Methods
+ public static func parse(
+ _ type: T.Type,
+ from input: Input
+ ) async throws -> T {
+ let data = try input.toData()
+ let decoder = JSONDecoder()
+ decoder.dateDecodingStrategy = .iso8601
+ decoder.keyDecodingStrategy = .convertFromSnakeCase
+ return try decoder.decode(T.self, from: data)
+ }
+
+ /// 로컬 JSON 로드 (Tuist/멀티모듈/SwiftPM 모두 대응)
+ public static func parseFromFile(
+ _ type: T.Type,
+ fileName: String,
+ ext: String? = nil,
+ bundle: Bundle? = nil,
+ subdirectory: String? = nil
+ ) async throws -> T {
+ let (name, ext) = normalize(fileName, preferExt: ext)
+ let preferred = bundle ?? ServiceBundle.bundle
+
+ var seen = Set()
+ let bundles: [Bundle] =
+ ([preferred, Bundle(for: JSONManager.self), .main] + Bundle.allFrameworks + Bundle.allBundles)
+ .compactMap { $0 }
+ .filter { seen.insert($0.bundlePath).inserted }
+
+ var tried: [String] = []
+ for b in bundles {
+ // ✅ 캐시 조회
+ let key = cacheKey(bundle: b, name: name, ext: ext, subdir: subdirectory)
+ if let cached = resourceURLCache.object(forKey: key) {
+ let data = try Data(contentsOf: cached as URL, options: [.mappedIfSafe])
+ return try await parse(type, from: data)
+ }
+
+ // ✅ 미스 시 검색 → 적중하면 캐시에 저장
+ if let url = findResource(named: name, ext: ext, subdir: subdirectory, in: b) {
+ resourceURLCache.setObject(url as NSURL, forKey: key)
+ let data = try Data(contentsOf: url, options: [.mappedIfSafe])
+ return try await parse(type, from: data)
+ }
+
+ tried.append("• \(b.bundlePath) —")
+ }
+
+ throw JSONFileLookupError.fileNotFound(name: name, ext: ext, tried: tried)
+ }
+
+ // MARK: - Helpers (private)
+ private static func normalize(_ fileName: String, preferExt: String?) -> (String, String) {
+ let ns = fileName as NSString
+ let hasExt = !ns.pathExtension.isEmpty
+ let base = hasExt ? ns.deletingPathExtension : fileName
+ let ext = preferExt ?? (hasExt ? ns.pathExtension : "json")
+ return (base, ext)
+ }
+
+ private static func findResource(
+ named: String,
+ ext: String,
+ subdir: String?,
+ in bundle: Bundle
+ ) -> URL? {
+ // 1) 번들 직검색
+ if let url = bundle.url(forResource: named, withExtension: ext, subdirectory: subdir) {
+ return url
+ }
+ // 2) 하위 .bundle 전부 순회(깊이 제한 X)
+ guard let resURL = bundle.resourceURL,
+ let it = FileManager.default.enumerator(at: resURL, includingPropertiesForKeys: nil)
+ else { return nil }
+
+ for case let url as URL in it where url.pathExtension == "bundle" {
+ if let nested = Bundle(url: url),
+ let found = nested.url(forResource: named, withExtension: ext, subdirectory: subdir) {
+ return found
+ }
+ }
+ return nil
+ }
+}
+
diff --git a/Projects/Core/Network/Service/Sources/JSONManager/JSONParsingError.swift b/Projects/Core/Network/Service/Sources/JSONManager/JSONParsingError.swift
new file mode 100644
index 0000000..e9a72fe
--- /dev/null
+++ b/Projects/Core/Network/Service/Sources/JSONManager/JSONParsingError.swift
@@ -0,0 +1,29 @@
+//
+// JSONParsingError.swift
+// Service
+//
+// Created by Wonji Suh on 9/8/25.
+//
+
+import Foundation
+
+// MARK: - JSON Parsing Errors
+enum JSONParsingError: Error, LocalizedError {
+ case invalidString
+ case fileNotFound
+ case invalidFormat
+ case encodingFailed
+
+ var errorDescription: String? {
+ switch self {
+ case .invalidString:
+ return "유효하지 않은 JSON 문자열입니다."
+ case .fileNotFound:
+ return "JSON 파일을 찾을 수 없습니다."
+ case .invalidFormat:
+ return "JSON 형식이 올바르지 않습니다."
+ case .encodingFailed:
+ return "JSON 인코딩에 실패했습니다."
+ }
+ }
+}
diff --git a/Projects/Core/Network/Service/Sources/JSONManager/ServiceBundle.swift b/Projects/Core/Network/Service/Sources/JSONManager/ServiceBundle.swift
new file mode 100644
index 0000000..08ff15e
--- /dev/null
+++ b/Projects/Core/Network/Service/Sources/JSONManager/ServiceBundle.swift
@@ -0,0 +1,21 @@
+//
+// ServiceBundle.swift
+// Service
+//
+// Created by Wonji Suh on 9/8/25.
+//
+
+import Foundation
+
+
+// MARK: - Bundle helper (Tuist/SwiftPM 공용)
+public enum ServiceBundle {
+ public static var bundle: Bundle {
+ #if SWIFT_PACKAGE
+ return .module
+ #else
+ return Bundle(for: BundleToken.self) // 이 타입이 Service 타깃에 포함되어야 함
+ #endif
+ }
+ private final class BundleToken {}
+}
diff --git a/Projects/Core/ThirdParty/Sources/Base.swift b/Projects/Core/ThirdParty/Sources/Base.swift
new file mode 100644
index 0000000..6297cc4
--- /dev/null
+++ b/Projects/Core/ThirdParty/Sources/Base.swift
@@ -0,0 +1,22 @@
+//
+// base.swift
+// DDDAttendance.
+//
+// Created by Roy on 2025-09-04
+// Copyright © 2025 DDD , Ltd., All rights reserved.
+//
+
+import SwiftUI
+
+struct BaseView: View {
+ var body: some View {
+ VStack {
+ Image(systemName: "globe")
+ .imageScale(.large)
+ .foregroundColor(.accentColor)
+ Text("Hello, world!")
+ }
+ .padding()
+ }
+}
+
diff --git a/Projects/Core/ThirdParty/ThirdPartyTests/Sources/Test.swift b/Projects/Core/ThirdParty/ThirdPartyTests/Sources/Test.swift
new file mode 100644
index 0000000..a9c810e
--- /dev/null
+++ b/Projects/Core/ThirdParty/ThirdPartyTests/Sources/Test.swift
@@ -0,0 +1,8 @@
+//
+// base.swift
+// DDDAttendance
+//
+// Created by Roy on 2025-09-04
+// Copyright © 2025 DDD , Ltd. All rights reserved.
+//
+
diff --git a/Projects/Presentation/Presentation/Derived/InfoPlists/Presentation-Debug-Info.plist b/Projects/Presentation/Presentation/Derived/InfoPlists/Presentation-Debug-Info.plist
new file mode 100644
index 0000000..323e5ec
--- /dev/null
+++ b/Projects/Presentation/Presentation/Derived/InfoPlists/Presentation-Debug-Info.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ FMWK
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/Projects/Presentation/Presentation/Derived/InfoPlists/Presentation-Info.plist b/Projects/Presentation/Presentation/Derived/InfoPlists/Presentation-Info.plist
new file mode 100644
index 0000000..323e5ec
--- /dev/null
+++ b/Projects/Presentation/Presentation/Derived/InfoPlists/Presentation-Info.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ FMWK
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/Projects/Presentation/Presentation/Derived/InfoPlists/Presentation-Prod-Info.plist b/Projects/Presentation/Presentation/Derived/InfoPlists/Presentation-Prod-Info.plist
new file mode 100644
index 0000000..323e5ec
--- /dev/null
+++ b/Projects/Presentation/Presentation/Derived/InfoPlists/Presentation-Prod-Info.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ FMWK
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/Projects/Presentation/Presentation/Derived/InfoPlists/Presentation-Stage-Info.plist b/Projects/Presentation/Presentation/Derived/InfoPlists/Presentation-Stage-Info.plist
new file mode 100644
index 0000000..323e5ec
--- /dev/null
+++ b/Projects/Presentation/Presentation/Derived/InfoPlists/Presentation-Stage-Info.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ FMWK
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/Projects/Presentation/Presentation/Derived/InfoPlists/PresentationTests-Info.plist b/Projects/Presentation/Presentation/Derived/InfoPlists/PresentationTests-Info.plist
new file mode 100644
index 0000000..6c40a6c
--- /dev/null
+++ b/Projects/Presentation/Presentation/Derived/InfoPlists/PresentationTests-Info.plist
@@ -0,0 +1,22 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ BNDL
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+
+
diff --git a/Projects/Presentation/Presentation/Derived/Sources/TuistBundle+PresentationTests.swift b/Projects/Presentation/Presentation/Derived/Sources/TuistBundle+PresentationTests.swift
new file mode 100644
index 0000000..deddd50
--- /dev/null
+++ b/Projects/Presentation/Presentation/Derived/Sources/TuistBundle+PresentationTests.swift
@@ -0,0 +1,25 @@
+// periphery:ignore:all
+// swiftlint:disable:this file_name
+// swiftlint:disable all
+// swift-format-ignore-file
+// swiftformat:disable all
+#if hasFeature(InternalImportsByDefault)
+public import Foundation
+#else
+import Foundation
+#endif
+// MARK: - Swift Bundle Accessor for Frameworks
+private class BundleFinder {}
+extension Foundation.Bundle {
+/// Since PresentationTests is a unit tests, the bundle for classes within this module can be used directly.
+ static let module = Bundle(for: BundleFinder.self)
+}
+// MARK: - Objective-C Bundle Accessor
+@objc
+public class PresentationTestsResources: NSObject {
+@objc public class var bundle: Bundle {
+ return .module
+}
+}
+// swiftformat:enable all
+// swiftlint:enable all
\ No newline at end of file
diff --git a/Projects/Presentation/Presentation/Presentation.xcodeproj/project.pbxproj b/Projects/Presentation/Presentation/Presentation.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..4668bf8
--- /dev/null
+++ b/Projects/Presentation/Presentation/Presentation.xcodeproj/project.pbxproj
@@ -0,0 +1,1691 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 55;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 017C34EC169A4EFC95392855 /* BookListCoordinatorTests.swift in Resources */ = {isa = PBXBuildFile; fileRef = 1D8788B292C380BE5F9EEF46 /* BookListCoordinatorTests.swift */; };
+ 02803076E790C9FF1A29D6D1 /* BookList.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD198C76298DE5F31F645DE9 /* BookList.swift */; };
+ 02E613277F24FF0DB7AD2544 /* BookListCoordinatorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA34DB8E45D404B34E5F3CD1 /* BookListCoordinatorViewController.swift */; };
+ 03AACEC517F47A8E595AB9AF /* Repository.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 984C2842981AA76BB051604E /* Repository.framework */; };
+ 04286D02DE7BCAD03B5C9B3E /* PresentationExported.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C60918107A83F4DDE9D417D /* PresentationExported.swift */; };
+ 04C0E4F9EA1A0BC53049A9CB /* ChaptersView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48A4478B8AA84FEE6CCD06A3 /* ChaptersView.swift */; };
+ 07634F53B9998C35692BF1CA /* Core.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = C3E14D09AE76BE920545555A /* Core.framework */; };
+ 097514984C09DCD1D4856511 /* IssueReporting.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7591663F2D1B24C4BDA756A /* IssueReporting.framework */; };
+ 09D538DABC7DB4168D3E3972 /* DesignSystem.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A27DAEFE569D1445C1B42A46 /* DesignSystem.framework */; };
+ 0EC73F60DCE9DD266936AC61 /* BookListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C89966E16AAB2778D060CA6 /* BookListViewController.swift */; };
+ 0ED96C609E3A38826EC31884 /* swift-sharing_Sharing.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 32DB353133F1D17C0F625336 /* swift-sharing_Sharing.bundle */; };
+ 107E214526269B31BD1FC56F /* BookListHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D568B153F99D34E8D9B45487 /* BookListHeaderView.swift */; };
+ 1551881E171DB16D572DEA35 /* Shared.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = DED236801C3C6EBF9BB755A4 /* Shared.framework */; };
+ 16919AFC863C1901DA0F9E94 /* ThirdParty.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C86261F8C25DBF89E441797D /* ThirdParty.framework */; };
+ 16AA1EF839323DCCE84D0BE2 /* SwiftNavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 43B4D42BC4DDD8A43DF9671C /* SwiftNavigation.framework */; };
+ 18B077C495095A8DFA9B9600 /* BookDetailsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 274B44F14B4247E7845EABBD /* BookDetailsView.swift */; };
+ 1AA7563901E4A8DE63A9CAAF /* BookCardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20A7F4A23A5CFEA98A18659E /* BookCardView.swift */; };
+ 1B55EF53E2CA1C864C603EAC /* Service_Service.bundle in Resources */ = {isa = PBXBuildFile; fileRef = A4967BF69A380E0505980198 /* Service_Service.bundle */; };
+ 1EAAF94C2DBE6792F3DC10F0 /* UIKitNavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 85E19ADD14C9C9B66429933E /* UIKitNavigation.framework */; };
+ 20E985B5526A58569BA3B6D4 /* OSLog.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A8F349F7AD894987292CE7D8 /* OSLog.framework */; };
+ 211130F347AF9645D71398D6 /* BookList.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD198C76298DE5F31F645DE9 /* BookList.swift */; };
+ 2142F59A18E9E25184408BDA /* SeriesButtonsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BD85680544DC3698B2D16BF /* SeriesButtonsView.swift */; };
+ 2497196B0F089BE932F7DAC8 /* BookListSkeletonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64C788604E8D359A39584A76 /* BookListSkeletonView.swift */; };
+ 2617C246162B4B00F048B9C4 /* DomainInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D29941E89A40C785D8930DE4 /* DomainInterface.framework */; };
+ 27E0E9958994FE9EA460E1FD /* ChaptersView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48A4478B8AA84FEE6CCD06A3 /* ChaptersView.swift */; };
+ 2A10027F0ABEA1ED234E1EFE /* BookListCoordinatorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA34DB8E45D404B34E5F3CD1 /* BookListCoordinatorViewController.swift */; };
+ 2C6CAA8DB03549419C9A3E0C /* OrderedCollections.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A5B2D2882714ECB08228A5F1 /* OrderedCollections.framework */; };
+ 301576D6C257658B1D6B2F62 /* IssueReportingPackageSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB19892F3BF3A5908473514F /* IssueReportingPackageSupport.framework */; };
+ 315228127069BB806DAE9F24 /* Shared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DED236801C3C6EBF9BB755A4 /* Shared.framework */; };
+ 34432286BBF00969872EE2B1 /* TestTags.swift in Resources */ = {isa = PBXBuildFile; fileRef = E336FF5348C4ADB320B9065D /* TestTags.swift */; };
+ 353B901CF762F68E86363491 /* UseCase.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 868F9D0352A18E88B6F78CDE /* UseCase.framework */; };
+ 371A8960ED179F49A61DA51A /* DiContainer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8300088D89C2AAD468BD385 /* DiContainer.framework */; };
+ 3A605294C87EB23773B1CAB7 /* DesignSystem_DesignSystem.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 33331608298DA5C85E94BBEC /* DesignSystem_DesignSystem.bundle */; };
+ 409414CA8CF03E06E6A87EE8 /* BookList.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD198C76298DE5F31F645DE9 /* BookList.swift */; };
+ 4152A519CE4F0C9EED99D46F /* ChaptersView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48A4478B8AA84FEE6CCD06A3 /* ChaptersView.swift */; };
+ 427D051938DA711F28189F67 /* SeriesButtonsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BD85680544DC3698B2D16BF /* SeriesButtonsView.swift */; };
+ 42FC883CB99FF37E1FF78F15 /* BookDetailsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 274B44F14B4247E7845EABBD /* BookDetailsView.swift */; };
+ 461B7923C5885A691102455A /* IdentifiedCollections.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2F03CD23882DA025CC86817 /* IdentifiedCollections.framework */; };
+ 47EC8E645F480780859114FA /* Then.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8ECB22016E4C3FE7CA99BE6C /* Then.framework */; };
+ 49F6D986954C901DC50E5A49 /* Sharing1.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 232AE6BF7A1AFCF0B9B823FD /* Sharing1.framework */; };
+ 4A833C0275CFB01B52E54BC1 /* DesignSystem_DesignSystem.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 33331608298DA5C85E94BBEC /* DesignSystem_DesignSystem.bundle */; };
+ 4AE2C4A8FFF96D2AFD814FAA /* BookList.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD198C76298DE5F31F645DE9 /* BookList.swift */; };
+ 4E660B1501EE176BAAEAEA27 /* PresentationExported.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C60918107A83F4DDE9D417D /* PresentationExported.swift */; };
+ 5248ACB941821BF3F91EA6D7 /* Dependencies.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8DB201D0E8BE1D1547639F88 /* Dependencies.framework */; };
+ 565FF97BE09F5DFE85297259 /* BookListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F3746D61459A0D8674E0213 /* BookListView.swift */; };
+ 56D9562D153E9C59D094EFF1 /* TuistBundle+PresentationTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6EB51394563027203FF0164E /* TuistBundle+PresentationTests.swift */; };
+ 56FCE4DA807E3179DEFAF470 /* Core.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C3E14D09AE76BE920545555A /* Core.framework */; };
+ 593C75BD6C1B69D634B93645 /* BookCardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20A7F4A23A5CFEA98A18659E /* BookCardView.swift */; };
+ 59AF9FB5D346F1A33E342DE4 /* Shared.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = DED236801C3C6EBF9BB755A4 /* Shared.framework */; };
+ 59F11625F203DCDD137E6944 /* Model.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0595BAB78E7CD48075AF15B0 /* Model.framework */; };
+ 5DEC287CF3B74B317B64D875 /* BookListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F3746D61459A0D8674E0213 /* BookListView.swift */; };
+ 5F62CA7E2ED8512A23291939 /* BookCardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20A7F4A23A5CFEA98A18659E /* BookCardView.swift */; };
+ 610E66B1C269EBC709E677F2 /* swift-sharing_Sharing.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 32DB353133F1D17C0F625336 /* swift-sharing_Sharing.bundle */; };
+ 63172D1521022B4665C6BACD /* BookDetailsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 274B44F14B4247E7845EABBD /* BookDetailsView.swift */; };
+ 647AFC54E08849AD0B9FC06C /* Utill.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1C1089C47199FC3D4186C075 /* Utill.framework */; };
+ 6596CD1618805254CB7F40D2 /* PerceptionCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DBD6E248067073EB598B6D86 /* PerceptionCore.framework */; };
+ 667CF158A09EBB546A610500 /* Shared.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = DED236801C3C6EBF9BB755A4 /* Shared.framework */; };
+ 685FE2BDD50DA386B334E975 /* BookListCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89950E25C3C422982BC7E9B8 /* BookListCoordinator.swift */; };
+ 69F501FFCECF1AB16A4D4752 /* Presentation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 342AE4EAEE40294F0A26F2B8 /* Presentation.framework */; };
+ 6E6544A5C32E0B280FFC4168 /* BookCardView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 20A7F4A23A5CFEA98A18659E /* BookCardView.swift */; };
+ 70CD50C9A9474743BA18758F /* BookListSkeletonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64C788604E8D359A39584A76 /* BookListSkeletonView.swift */; };
+ 70E1397356E2EB8434F4D700 /* TestTags.swift in Sources */ = {isa = PBXBuildFile; fileRef = E336FF5348C4ADB320B9065D /* TestTags.swift */; };
+ 737B515B8DC023E17F94C10E /* BookListReducerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB275045F237E5D97B307CC6 /* BookListReducerTests.swift */; };
+ 75EDDE375848D64941F2E709 /* Core.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = C3E14D09AE76BE920545555A /* Core.framework */; };
+ 773B030F03D93F1EFE961D56 /* PresentationExported.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C60918107A83F4DDE9D417D /* PresentationExported.swift */; };
+ 79664A1CEE05B0A135CC3F7F /* CasePaths.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9C4E2C9101CD2ABA7FC93366 /* CasePaths.framework */; };
+ 79697766170F4CF0B454B74B /* CasePathsCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F45344C795A1109E3D0CB88C /* CasePathsCore.framework */; };
+ 7A09A9ECD1ED6652C5FDA693 /* ConcurrencyExtras.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2351D6B4A46469B4126F2C3B /* ConcurrencyExtras.framework */; };
+ 7EEEAF7BFFDFB86E03C1573C /* BookListHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D568B153F99D34E8D9B45487 /* BookListHeaderView.swift */; };
+ 7F8DAD9727D2784033F7F75E /* BookListSkeletonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64C788604E8D359A39584A76 /* BookListSkeletonView.swift */; };
+ 7FDC950EA5184A61FB200485 /* Shared.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = DED236801C3C6EBF9BB755A4 /* Shared.framework */; };
+ 807217A89A52115A073C89A3 /* BookListCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89950E25C3C422982BC7E9B8 /* BookListCoordinator.swift */; };
+ 86C661AFE402190C93A089B4 /* CustomDump.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0C8972F6F03E2BD077DCB37E /* CustomDump.framework */; };
+ 899BFAEEF246A2B88EF5C3C9 /* SnapKit_SnapKit.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = A240DF7B23275CAFB13D7309 /* SnapKit_SnapKit.bundle */; };
+ 8BC9FE4211F9A045F1E9027F /* BookListCoordinatorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA34DB8E45D404B34E5F3CD1 /* BookListCoordinatorViewController.swift */; };
+ 8BE1E88655FDD837557A2397 /* BookListHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D568B153F99D34E8D9B45487 /* BookListHeaderView.swift */; };
+ 8D23DE0BD5A9E91111F24602 /* Sharing.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 497184139D240D91EF50C77C /* Sharing.framework */; };
+ 8D31C6CBAE1D2C94A96269C6 /* BookListCoordinatorViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA34DB8E45D404B34E5F3CD1 /* BookListCoordinatorViewController.swift */; };
+ 8DA5B3FB09EA632D333C3F18 /* swift-composable-architecture_ComposableArchitecture.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 4C470EB5F1E10C6ED803FB18 /* swift-composable-architecture_ComposableArchitecture.bundle */; };
+ 8E3550FAC85AAF30DDDF21BB /* ComposableArchitecture.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1BBE3CACD554CD19E4299A9F /* ComposableArchitecture.framework */; };
+ 8F4859CA792B53A0A8289F0D /* ChaptersView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 48A4478B8AA84FEE6CCD06A3 /* ChaptersView.swift */; };
+ 900B654DCA939A4C48E0506E /* BookListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C89966E16AAB2778D060CA6 /* BookListViewController.swift */; };
+ 93316F9FAFBE2BA69B67B530 /* BookListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C89966E16AAB2778D060CA6 /* BookListViewController.swift */; };
+ 93C5FF758C5A3BC01837C3C7 /* BookListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C89966E16AAB2778D060CA6 /* BookListViewController.swift */; };
+ 9817995B59A87456AC4FAFBE /* Perception.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B2C1426AC84D7DD283CE6A67 /* Perception.framework */; };
+ 996AEC4FE0BFF1A9467213F1 /* Clocks.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 74DA26FE7C09459795F68303 /* Clocks.framework */; };
+ 9DF3DE6AB4E7BF4F5E932F00 /* SnapKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CEB9EB9C6C13C8F825E27E73 /* SnapKit.framework */; };
+ A61EBC1D0EBE7174C206C498 /* CombineSchedulers.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2F9691EC204490112CA94915 /* CombineSchedulers.framework */; };
+ A86F784BF54F7B2E520F174C /* UIKitNavigationShim.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 20933EA2BA8C344219E3B1FD /* UIKitNavigationShim.framework */; };
+ AA9CD1A2EFC160D06379D3BA /* SeriesButtonsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BD85680544DC3698B2D16BF /* SeriesButtonsView.swift */; };
+ AC907DAE5D69D2EBF4A6262A /* SwiftUINavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F0A130F086322D137AF4BA1 /* SwiftUINavigation.framework */; };
+ B2A93C61D0DC6E629714EAF9 /* InternalCollectionsUtilities.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C2D55F688109111CA472A53 /* InternalCollectionsUtilities.framework */; };
+ B5851ABD79A707F1CF6C5C68 /* BookListReducerTests.swift in Resources */ = {isa = PBXBuildFile; fileRef = EB275045F237E5D97B307CC6 /* BookListReducerTests.swift */; };
+ B5992248E109CA4A916520F7 /* SeriesButtonsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BD85680544DC3698B2D16BF /* SeriesButtonsView.swift */; };
+ B902D90E53F44BC283091D4C /* Network.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3EBDBEF54EF9C62AD5701E76 /* Network.framework */; };
+ C28B1DD196DC96F555D940F6 /* swift-composable-architecture_ComposableArchitecture.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 4C470EB5F1E10C6ED803FB18 /* swift-composable-architecture_ComposableArchitecture.bundle */; };
+ C3AED56D7A1655F0B1F891DA /* BookListHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D568B153F99D34E8D9B45487 /* BookListHeaderView.swift */; };
+ C6CBCEFA9344232C908FF37B /* BookListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F3746D61459A0D8674E0213 /* BookListView.swift */; };
+ C7A0C7EBE0FDA649B2B3CEA3 /* LogMacro.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 66443C80B20B08C1363E951B /* LogMacro.framework */; };
+ C8F2327FBDF8478718D28F45 /* SnapKit_SnapKit.bundle in Resources */ = {isa = PBXBuildFile; fileRef = A240DF7B23275CAFB13D7309 /* SnapKit_SnapKit.bundle */; };
+ D9E0A76D8C0596803BB3236E /* Service_Service.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = A4967BF69A380E0505980198 /* Service_Service.bundle */; };
+ DD982DBE91D3DCA0E959267F /* BookListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F3746D61459A0D8674E0213 /* BookListView.swift */; };
+ E22C98C743EAB6A73D7CAE55 /* BookListSkeletonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 64C788604E8D359A39584A76 /* BookListSkeletonView.swift */; };
+ E281F285B66BDF828F2E2AF0 /* BookDetailsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 274B44F14B4247E7845EABBD /* BookDetailsView.swift */; };
+ E3F658BAB2B06BD44B30AC49 /* Core.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = C3E14D09AE76BE920545555A /* Core.framework */; };
+ E981CFD6DC1F1C9534C9E167 /* PresentationExported.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C60918107A83F4DDE9D417D /* PresentationExported.swift */; };
+ EB5423988845641CCC797824 /* BookListCoordinatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1D8788B292C380BE5F9EEF46 /* BookListCoordinatorTests.swift */; };
+ EEE4922049DE831695B18E79 /* XCTestDynamicOverlay.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 375AA2720EF90234325320FB /* XCTestDynamicOverlay.framework */; };
+ EF37DF3F1678952A881FE872 /* Service.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CF3D9435F3E4322BD6B9160E /* Service.framework */; };
+ F09DA4847204EF87C7B58C84 /* Sharing2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6748D289DD7DC16E86016069 /* Sharing2.framework */; };
+ F431F0BD0DEAFCACC1BDCD2D /* BookListCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89950E25C3C422982BC7E9B8 /* BookListCoordinator.swift */; };
+ F650CC620116BE8B2F36DE6C /* DependenciesMacros.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FC62388B726211C6EB4E61FE /* DependenciesMacros.framework */; };
+ F6F6D705D0E79CB948D7048B /* BookListCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89950E25C3C422982BC7E9B8 /* BookListCoordinator.swift */; };
+ FB740A401DC00D05A81FD532 /* Core.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = C3E14D09AE76BE920545555A /* Core.framework */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+ AC47C2963C52FF154B25A536 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = ADF92DF0AD8E920125A75062 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 3F31459B2DA9E5BB7B7E73E2;
+ remoteInfo = Presentation;
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ 0B7757B47DC6C34EED3C7A7A /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 10D1656449D0EFCF4FFE96ED /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ FB740A401DC00D05A81FD532 /* Core.framework in Dependencies */,
+ 59AF9FB5D346F1A33E342DE4 /* Shared.framework in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ 1CFB3567DAC746B058339044 /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ 75EDDE375848D64941F2E709 /* Core.framework in Dependencies */,
+ 667CF158A09EBB546A610500 /* Shared.framework in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ 3B5CBBBEEF6D0A5B5656799B /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ E3F658BAB2B06BD44B30AC49 /* Core.framework in Dependencies */,
+ 7FDC950EA5184A61FB200485 /* Shared.framework in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ 6A01109A927826C6721A499C /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 6B3C6DF33E378A037539077F /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 6C30D1B25A17B83534A2BEDB /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ 07634F53B9998C35692BF1CA /* Core.framework in Dependencies */,
+ 1551881E171DB16D572DEA35 /* Shared.framework in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ 7700A9CAEC4495463F061032 /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ 3A605294C87EB23773B1CAB7 /* DesignSystem_DesignSystem.bundle in Dependencies */,
+ D9E0A76D8C0596803BB3236E /* Service_Service.bundle in Dependencies */,
+ 899BFAEEF246A2B88EF5C3C9 /* SnapKit_SnapKit.bundle in Dependencies */,
+ 8DA5B3FB09EA632D333C3F18 /* swift-composable-architecture_ComposableArchitecture.bundle in Dependencies */,
+ 0ED96C609E3A38826EC31884 /* swift-sharing_Sharing.bundle in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ AE630EE63CB3304CF25388B5 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ EF3F98248E1F7B5E7BF05876 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ 0595BAB78E7CD48075AF15B0 /* Model.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Model.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 0C8972F6F03E2BD077DCB37E /* CustomDump.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CustomDump.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 0F3746D61459A0D8674E0213 /* BookListView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookListView.swift; sourceTree = ""; };
+ 134AEE009D928C7E39EAF4CD /* Presentation-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Presentation-Info.plist"; sourceTree = ""; };
+ 1BBE3CACD554CD19E4299A9F /* ComposableArchitecture.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ComposableArchitecture.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 1C1089C47199FC3D4186C075 /* Utill.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Utill.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 1D8788B292C380BE5F9EEF46 /* BookListCoordinatorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookListCoordinatorTests.swift; sourceTree = ""; };
+ 1F0A130F086322D137AF4BA1 /* SwiftUINavigation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftUINavigation.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 20933EA2BA8C344219E3B1FD /* UIKitNavigationShim.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = UIKitNavigationShim.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 20A7F4A23A5CFEA98A18659E /* BookCardView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookCardView.swift; sourceTree = ""; };
+ 232AE6BF7A1AFCF0B9B823FD /* Sharing1.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Sharing1.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 2351D6B4A46469B4126F2C3B /* ConcurrencyExtras.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ConcurrencyExtras.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 274B44F14B4247E7845EABBD /* BookDetailsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookDetailsView.swift; sourceTree = ""; };
+ 2BD85680544DC3698B2D16BF /* SeriesButtonsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SeriesButtonsView.swift; sourceTree = ""; };
+ 2C23562150869ECF7E891E5C /* Presentation_Stage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Presentation_Stage.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 2F9691EC204490112CA94915 /* CombineSchedulers.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CombineSchedulers.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 32DB353133F1D17C0F625336 /* swift-sharing_Sharing.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "swift-sharing_Sharing.bundle"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 33331608298DA5C85E94BBEC /* DesignSystem_DesignSystem.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DesignSystem_DesignSystem.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
+ 342AE4EAEE40294F0A26F2B8 /* Presentation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Presentation.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 375AA2720EF90234325320FB /* XCTestDynamicOverlay.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = XCTestDynamicOverlay.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 3C60918107A83F4DDE9D417D /* PresentationExported.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PresentationExported.swift; sourceTree = ""; };
+ 3EBDBEF54EF9C62AD5701E76 /* Network.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Network.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 43B4D42BC4DDD8A43DF9671C /* SwiftNavigation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftNavigation.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 48A4478B8AA84FEE6CCD06A3 /* ChaptersView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChaptersView.swift; sourceTree = ""; };
+ 497184139D240D91EF50C77C /* Sharing.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Sharing.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 4C470EB5F1E10C6ED803FB18 /* swift-composable-architecture_ComposableArchitecture.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "swift-composable-architecture_ComposableArchitecture.bundle"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 5C2D55F688109111CA472A53 /* InternalCollectionsUtilities.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = InternalCollectionsUtilities.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 5C89966E16AAB2778D060CA6 /* BookListViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookListViewController.swift; sourceTree = ""; };
+ 64C788604E8D359A39584A76 /* BookListSkeletonView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookListSkeletonView.swift; sourceTree = ""; };
+ 66443C80B20B08C1363E951B /* LogMacro.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = LogMacro.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 6748D289DD7DC16E86016069 /* Sharing2.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Sharing2.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 68EE2AB0AEF1D5CB9A2F9181 /* Presentation-Prod-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Presentation-Prod-Info.plist"; sourceTree = ""; };
+ 6C92AD27CF19DDC5BEFC5290 /* Presentation_Debug.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Presentation_Debug.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 6EB51394563027203FF0164E /* TuistBundle+PresentationTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistBundle+PresentationTests.swift"; sourceTree = ""; };
+ 74DA26FE7C09459795F68303 /* Clocks.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Clocks.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 85E19ADD14C9C9B66429933E /* UIKitNavigation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = UIKitNavigation.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 868F9D0352A18E88B6F78CDE /* UseCase.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = UseCase.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 89950E25C3C422982BC7E9B8 /* BookListCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookListCoordinator.swift; sourceTree = ""; };
+ 8DB201D0E8BE1D1547639F88 /* Dependencies.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Dependencies.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 8ECB22016E4C3FE7CA99BE6C /* Then.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Then.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 984C2842981AA76BB051604E /* Repository.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Repository.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 9C4E2C9101CD2ABA7FC93366 /* CasePaths.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CasePaths.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ A240DF7B23275CAFB13D7309 /* SnapKit_SnapKit.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SnapKit_SnapKit.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
+ A27DAEFE569D1445C1B42A46 /* DesignSystem.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DesignSystem.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ A4967BF69A380E0505980198 /* Service_Service.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Service_Service.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
+ A5B2D2882714ECB08228A5F1 /* OrderedCollections.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = OrderedCollections.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ A7591663F2D1B24C4BDA756A /* IssueReporting.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = IssueReporting.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ A8F349F7AD894987292CE7D8 /* OSLog.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OSLog.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/OSLog.framework; sourceTree = DEVELOPER_DIR; };
+ B2C1426AC84D7DD283CE6A67 /* Perception.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Perception.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ B5F6E2479E03DF9A1548AFE4 /* PresentationTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = PresentationTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+ BE8656113F6736A3B744BB66 /* Presentation-Stage-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Presentation-Stage-Info.plist"; sourceTree = ""; };
+ BF64B8AFE4F24CC92327A710 /* PresentationTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "PresentationTests-Info.plist"; sourceTree = ""; };
+ C3E14D09AE76BE920545555A /* Core.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Core.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ C86261F8C25DBF89E441797D /* ThirdParty.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ThirdParty.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ CB19892F3BF3A5908473514F /* IssueReportingPackageSupport.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = IssueReportingPackageSupport.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ CD198C76298DE5F31F645DE9 /* BookList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookList.swift; sourceTree = ""; };
+ CEB9EB9C6C13C8F825E27E73 /* SnapKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SnapKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ CF3D9435F3E4322BD6B9160E /* Service.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Service.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ D29941E89A40C785D8930DE4 /* DomainInterface.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DomainInterface.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ D2F03CD23882DA025CC86817 /* IdentifiedCollections.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = IdentifiedCollections.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ D568B153F99D34E8D9B45487 /* BookListHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookListHeaderView.swift; sourceTree = ""; };
+ D656AFCB65DFA6950745AB83 /* Presentation_Prod.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Presentation_Prod.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ DBD6E248067073EB598B6D86 /* PerceptionCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PerceptionCore.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ DED236801C3C6EBF9BB755A4 /* Shared.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Shared.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ E336FF5348C4ADB320B9065D /* TestTags.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TestTags.swift; sourceTree = ""; };
+ EA34DB8E45D404B34E5F3CD1 /* BookListCoordinatorViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookListCoordinatorViewController.swift; sourceTree = ""; };
+ EB275045F237E5D97B307CC6 /* BookListReducerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookListReducerTests.swift; sourceTree = "