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 = ""; }; + F45344C795A1109E3D0CB88C /* CasePathsCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CasePathsCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F46E1D012C0A86E9B6BF4894 /* Presentation-Debug-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Presentation-Debug-Info.plist"; sourceTree = ""; }; + F8300088D89C2AAD468BD385 /* DiContainer.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DiContainer.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FC62388B726211C6EB4E61FE /* DependenciesMacros.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DependenciesMacros.framework; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 1C53DFC457859DB6DDBEED37 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4CB14772191C193CECB942A5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 20E985B5526A58569BA3B6D4 /* OSLog.framework in Frameworks */, + 79664A1CEE05B0A135CC3F7F /* CasePaths.framework in Frameworks */, + 79697766170F4CF0B454B74B /* CasePathsCore.framework in Frameworks */, + 996AEC4FE0BFF1A9467213F1 /* Clocks.framework in Frameworks */, + A61EBC1D0EBE7174C206C498 /* CombineSchedulers.framework in Frameworks */, + 8E3550FAC85AAF30DDDF21BB /* ComposableArchitecture.framework in Frameworks */, + 7A09A9ECD1ED6652C5FDA693 /* ConcurrencyExtras.framework in Frameworks */, + 56FCE4DA807E3179DEFAF470 /* Core.framework in Frameworks */, + 86C661AFE402190C93A089B4 /* CustomDump.framework in Frameworks */, + 5248ACB941821BF3F91EA6D7 /* Dependencies.framework in Frameworks */, + F650CC620116BE8B2F36DE6C /* DependenciesMacros.framework in Frameworks */, + 09D538DABC7DB4168D3E3972 /* DesignSystem.framework in Frameworks */, + 371A8960ED179F49A61DA51A /* DiContainer.framework in Frameworks */, + 2617C246162B4B00F048B9C4 /* DomainInterface.framework in Frameworks */, + 461B7923C5885A691102455A /* IdentifiedCollections.framework in Frameworks */, + B2A93C61D0DC6E629714EAF9 /* InternalCollectionsUtilities.framework in Frameworks */, + 097514984C09DCD1D4856511 /* IssueReporting.framework in Frameworks */, + 301576D6C257658B1D6B2F62 /* IssueReportingPackageSupport.framework in Frameworks */, + C7A0C7EBE0FDA649B2B3CEA3 /* LogMacro.framework in Frameworks */, + 59F11625F203DCDD137E6944 /* Model.framework in Frameworks */, + B902D90E53F44BC283091D4C /* Network.framework in Frameworks */, + 2C6CAA8DB03549419C9A3E0C /* OrderedCollections.framework in Frameworks */, + 9817995B59A87456AC4FAFBE /* Perception.framework in Frameworks */, + 6596CD1618805254CB7F40D2 /* PerceptionCore.framework in Frameworks */, + 69F501FFCECF1AB16A4D4752 /* Presentation.framework in Frameworks */, + 03AACEC517F47A8E595AB9AF /* Repository.framework in Frameworks */, + EF37DF3F1678952A881FE872 /* Service.framework in Frameworks */, + 315228127069BB806DAE9F24 /* Shared.framework in Frameworks */, + 8D23DE0BD5A9E91111F24602 /* Sharing.framework in Frameworks */, + 49F6D986954C901DC50E5A49 /* Sharing1.framework in Frameworks */, + F09DA4847204EF87C7B58C84 /* Sharing2.framework in Frameworks */, + 9DF3DE6AB4E7BF4F5E932F00 /* SnapKit.framework in Frameworks */, + 16AA1EF839323DCCE84D0BE2 /* SwiftNavigation.framework in Frameworks */, + AC907DAE5D69D2EBF4A6262A /* SwiftUINavigation.framework in Frameworks */, + 47EC8E645F480780859114FA /* Then.framework in Frameworks */, + 16919AFC863C1901DA0F9E94 /* ThirdParty.framework in Frameworks */, + 1EAAF94C2DBE6792F3DC10F0 /* UIKitNavigation.framework in Frameworks */, + A86F784BF54F7B2E520F174C /* UIKitNavigationShim.framework in Frameworks */, + 353B901CF762F68E86363491 /* UseCase.framework in Frameworks */, + 647AFC54E08849AD0B9FC06C /* Utill.framework in Frameworks */, + EEE4922049DE831695B18E79 /* XCTestDynamicOverlay.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 80B6D70FCAC1E46111342DFE /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AD6BB5BA06158E0D2E4C8A3C /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EFAD35AD9F9D1D661E9CBF5C /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 0A59867E452FCDCC30C04318 /* Sources */ = { + isa = PBXGroup; + children = ( + 6EB51394563027203FF0164E /* TuistBundle+PresentationTests.swift */, + ); + path = Sources; + sourceTree = ""; + }; + 3D985AB9DCEE582782E9D9D1 /* Controller */ = { + isa = PBXGroup; + children = ( + 5C89966E16AAB2778D060CA6 /* BookListViewController.swift */, + ); + path = Controller; + sourceTree = ""; + }; + 4750F860E7126A4865576EA5 /* Derived */ = { + isa = PBXGroup; + children = ( + 4C813A262FB7BAE2D823EAF8 /* InfoPlists */, + 0A59867E452FCDCC30C04318 /* Sources */, + ); + path = Derived; + sourceTree = ""; + }; + 4C813A262FB7BAE2D823EAF8 /* InfoPlists */ = { + isa = PBXGroup; + children = ( + F46E1D012C0A86E9B6BF4894 /* Presentation-Debug-Info.plist */, + 134AEE009D928C7E39EAF4CD /* Presentation-Info.plist */, + 68EE2AB0AEF1D5CB9A2F9181 /* Presentation-Prod-Info.plist */, + BE8656113F6736A3B744BB66 /* Presentation-Stage-Info.plist */, + BF64B8AFE4F24CC92327A710 /* PresentationTests-Info.plist */, + ); + path = InfoPlists; + sourceTree = ""; + }; + 5CED5E11155217A04B909850 /* PresentationTests */ = { + isa = PBXGroup; + children = ( + 9218B710138D5C39E561E904 /* Sources */, + ); + path = PresentationTests; + sourceTree = ""; + }; + 891EA984911EA03A950CF714 /* View */ = { + isa = PBXGroup; + children = ( + E347E90642A0EDD2DCE51961 /* Components */, + 64C788604E8D359A39584A76 /* BookListSkeletonView.swift */, + 0F3746D61459A0D8674E0213 /* BookListView.swift */, + ); + path = View; + sourceTree = ""; + }; + 9218B710138D5C39E561E904 /* Sources */ = { + isa = PBXGroup; + children = ( + 1D8788B292C380BE5F9EEF46 /* BookListCoordinatorTests.swift */, + EB275045F237E5D97B307CC6 /* BookListReducerTests.swift */, + E336FF5348C4ADB320B9065D /* TestTags.swift */, + ); + path = Sources; + sourceTree = ""; + }; + ACFC6E8F6D299B22A1D9900B /* Sources */ = { + isa = PBXGroup; + children = ( + D7162E364AD6C31A7DBABA84 /* BookList */, + DD3436F21D72684C6E20D5AB /* Exported */, + ); + path = Sources; + sourceTree = ""; + }; + C02C5E1EE85A039BFF7C8F57 /* Project */ = { + isa = PBXGroup; + children = ( + 4750F860E7126A4865576EA5 /* Derived */, + 5CED5E11155217A04B909850 /* PresentationTests */, + ACFC6E8F6D299B22A1D9900B /* Sources */, + ); + name = Project; + sourceTree = ""; + }; + C7F17C71238715FCB34BC3F3 /* Coordinator */ = { + isa = PBXGroup; + children = ( + D8EDBCFBCB7A25C49EFA2D6A /* Reducer */, + FD47BAAC98F1AF4E64EFC5AB /* View */, + ); + path = Coordinator; + sourceTree = ""; + }; + D7162E364AD6C31A7DBABA84 /* BookList */ = { + isa = PBXGroup; + children = ( + 3D985AB9DCEE582782E9D9D1 /* Controller */, + C7F17C71238715FCB34BC3F3 /* Coordinator */, + F40A62C6A835291847A0E9B8 /* Reducer */, + 891EA984911EA03A950CF714 /* View */, + ); + path = BookList; + sourceTree = ""; + }; + D8EDBCFBCB7A25C49EFA2D6A /* Reducer */ = { + isa = PBXGroup; + children = ( + 89950E25C3C422982BC7E9B8 /* BookListCoordinator.swift */, + ); + path = Reducer; + sourceTree = ""; + }; + DD3436F21D72684C6E20D5AB /* Exported */ = { + isa = PBXGroup; + children = ( + 3C60918107A83F4DDE9D417D /* PresentationExported.swift */, + ); + path = Exported; + sourceTree = ""; + }; + E347E90642A0EDD2DCE51961 /* Components */ = { + isa = PBXGroup; + children = ( + 20A7F4A23A5CFEA98A18659E /* BookCardView.swift */, + 274B44F14B4247E7845EABBD /* BookDetailsView.swift */, + D568B153F99D34E8D9B45487 /* BookListHeaderView.swift */, + 48A4478B8AA84FEE6CCD06A3 /* ChaptersView.swift */, + 2BD85680544DC3698B2D16BF /* SeriesButtonsView.swift */, + ); + path = Components; + sourceTree = ""; + }; + F40A62C6A835291847A0E9B8 /* Reducer */ = { + isa = PBXGroup; + children = ( + CD198C76298DE5F31F645DE9 /* BookList.swift */, + ); + path = Reducer; + sourceTree = ""; + }; + F6D62D9CC500DDA356076FB6 /* Products */ = { + isa = PBXGroup; + children = ( + 9C4E2C9101CD2ABA7FC93366 /* CasePaths.framework */, + F45344C795A1109E3D0CB88C /* CasePathsCore.framework */, + 74DA26FE7C09459795F68303 /* Clocks.framework */, + 2F9691EC204490112CA94915 /* CombineSchedulers.framework */, + 1BBE3CACD554CD19E4299A9F /* ComposableArchitecture.framework */, + 2351D6B4A46469B4126F2C3B /* ConcurrencyExtras.framework */, + C3E14D09AE76BE920545555A /* Core.framework */, + 0C8972F6F03E2BD077DCB37E /* CustomDump.framework */, + 8DB201D0E8BE1D1547639F88 /* Dependencies.framework */, + FC62388B726211C6EB4E61FE /* DependenciesMacros.framework */, + 33331608298DA5C85E94BBEC /* DesignSystem_DesignSystem.bundle */, + A27DAEFE569D1445C1B42A46 /* DesignSystem.framework */, + F8300088D89C2AAD468BD385 /* DiContainer.framework */, + D29941E89A40C785D8930DE4 /* DomainInterface.framework */, + D2F03CD23882DA025CC86817 /* IdentifiedCollections.framework */, + 5C2D55F688109111CA472A53 /* InternalCollectionsUtilities.framework */, + A7591663F2D1B24C4BDA756A /* IssueReporting.framework */, + CB19892F3BF3A5908473514F /* IssueReportingPackageSupport.framework */, + 66443C80B20B08C1363E951B /* LogMacro.framework */, + 0595BAB78E7CD48075AF15B0 /* Model.framework */, + 3EBDBEF54EF9C62AD5701E76 /* Network.framework */, + A5B2D2882714ECB08228A5F1 /* OrderedCollections.framework */, + B2C1426AC84D7DD283CE6A67 /* Perception.framework */, + DBD6E248067073EB598B6D86 /* PerceptionCore.framework */, + 6C92AD27CF19DDC5BEFC5290 /* Presentation_Debug.framework */, + D656AFCB65DFA6950745AB83 /* Presentation_Prod.framework */, + 2C23562150869ECF7E891E5C /* Presentation_Stage.framework */, + 342AE4EAEE40294F0A26F2B8 /* Presentation.framework */, + B5F6E2479E03DF9A1548AFE4 /* PresentationTests.xctest */, + 984C2842981AA76BB051604E /* Repository.framework */, + A4967BF69A380E0505980198 /* Service_Service.bundle */, + CF3D9435F3E4322BD6B9160E /* Service.framework */, + DED236801C3C6EBF9BB755A4 /* Shared.framework */, + 497184139D240D91EF50C77C /* Sharing.framework */, + 232AE6BF7A1AFCF0B9B823FD /* Sharing1.framework */, + 6748D289DD7DC16E86016069 /* Sharing2.framework */, + A240DF7B23275CAFB13D7309 /* SnapKit_SnapKit.bundle */, + CEB9EB9C6C13C8F825E27E73 /* SnapKit.framework */, + 4C470EB5F1E10C6ED803FB18 /* swift-composable-architecture_ComposableArchitecture.bundle */, + 32DB353133F1D17C0F625336 /* swift-sharing_Sharing.bundle */, + 43B4D42BC4DDD8A43DF9671C /* SwiftNavigation.framework */, + 1F0A130F086322D137AF4BA1 /* SwiftUINavigation.framework */, + 8ECB22016E4C3FE7CA99BE6C /* Then.framework */, + C86261F8C25DBF89E441797D /* ThirdParty.framework */, + 85E19ADD14C9C9B66429933E /* UIKitNavigation.framework */, + 20933EA2BA8C344219E3B1FD /* UIKitNavigationShim.framework */, + 868F9D0352A18E88B6F78CDE /* UseCase.framework */, + 1C1089C47199FC3D4186C075 /* Utill.framework */, + 375AA2720EF90234325320FB /* XCTestDynamicOverlay.framework */, + ); + name = Products; + sourceTree = ""; + }; + FB16DD150B16F59498923414 = { + isa = PBXGroup; + children = ( + C02C5E1EE85A039BFF7C8F57 /* Project */, + F6D62D9CC500DDA356076FB6 /* Products */, + FB76764758DC2A9FA9FEE70B /* Frameworks */, + ); + sourceTree = ""; + }; + FB76764758DC2A9FA9FEE70B /* Frameworks */ = { + isa = PBXGroup; + children = ( + A8F349F7AD894987292CE7D8 /* OSLog.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + FD47BAAC98F1AF4E64EFC5AB /* View */ = { + isa = PBXGroup; + children = ( + EA34DB8E45D404B34E5F3CD1 /* BookListCoordinatorViewController.swift */, + ); + path = View; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 3F31459B2DA9E5BB7B7E73E2 /* Presentation */ = { + isa = PBXNativeTarget; + buildConfigurationList = 3FBCA82F59D1854392A78BD5 /* Build configuration list for PBXNativeTarget "Presentation" */; + buildPhases = ( + C7FD07473D6CB2443CFDEC8D /* Sources */, + 047D93C9CBD2893A19732950 /* Resources */, + AD6BB5BA06158E0D2E4C8A3C /* Frameworks */, + 6A01109A927826C6721A499C /* Embed Frameworks */, + 3B5CBBBEEF6D0A5B5656799B /* Dependencies */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Presentation; + packageProductDependencies = ( + ); + productName = Presentation; + productReference = 342AE4EAEE40294F0A26F2B8 /* Presentation.framework */; + productType = "com.apple.product-type.framework"; + }; + 4706F81838C88054394C55DD /* Presentation-Stage */ = { + isa = PBXNativeTarget; + buildConfigurationList = 65E19D3D506A14FDD04FF645 /* Build configuration list for PBXNativeTarget "Presentation-Stage" */; + buildPhases = ( + D1661E425A741BEDE8A14549 /* Sources */, + 33CB6E67DC65439FE8122D37 /* Resources */, + 80B6D70FCAC1E46111342DFE /* Frameworks */, + EF3F98248E1F7B5E7BF05876 /* Embed Frameworks */, + 6C30D1B25A17B83534A2BEDB /* Dependencies */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Presentation-Stage"; + packageProductDependencies = ( + ); + productName = Presentation_Stage; + productReference = 2C23562150869ECF7E891E5C /* Presentation_Stage.framework */; + productType = "com.apple.product-type.framework"; + }; + 4F649FDB9C5521442A78DE10 /* PresentationTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 495E8DC38DBCADABBAE81A90 /* Build configuration list for PBXNativeTarget "PresentationTests" */; + buildPhases = ( + 6C36CC1706619E6A69922C3C /* Sources */, + CE9246C0B52C9AD2CCE8EB98 /* Resources */, + 4CB14772191C193CECB942A5 /* Frameworks */, + 0B7757B47DC6C34EED3C7A7A /* Embed Frameworks */, + 7700A9CAEC4495463F061032 /* Dependencies */, + ); + buildRules = ( + ); + dependencies = ( + CFC8D355C9BA1BF780000E36 /* PBXTargetDependency */, + ); + name = PresentationTests; + packageProductDependencies = ( + ); + productName = PresentationTests; + productReference = B5F6E2479E03DF9A1548AFE4 /* PresentationTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + B07DE38A7388D6FD68842E91 /* Presentation-Prod */ = { + isa = PBXNativeTarget; + buildConfigurationList = 261AF6498BFFB0D8F1DAC5C3 /* Build configuration list for PBXNativeTarget "Presentation-Prod" */; + buildPhases = ( + B61A3D590C9AEA6A51605488 /* Sources */, + 4847C9443282F3B8C5788488 /* Resources */, + 1C53DFC457859DB6DDBEED37 /* Frameworks */, + 6B3C6DF33E378A037539077F /* Embed Frameworks */, + 10D1656449D0EFCF4FFE96ED /* Dependencies */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Presentation-Prod"; + packageProductDependencies = ( + ); + productName = Presentation_Prod; + productReference = D656AFCB65DFA6950745AB83 /* Presentation_Prod.framework */; + productType = "com.apple.product-type.framework"; + }; + B7C870EAA303F7201B1090CB /* Presentation-Debug */ = { + isa = PBXNativeTarget; + buildConfigurationList = BCA6B99D3A378E3B7609D28A /* Build configuration list for PBXNativeTarget "Presentation-Debug" */; + buildPhases = ( + 0F7819FA07046D2F5A0CCE1D /* Sources */, + 3D0DB8D7EE6DABAB10AF19D5 /* Resources */, + EFAD35AD9F9D1D661E9CBF5C /* Frameworks */, + AE630EE63CB3304CF25388B5 /* Embed Frameworks */, + 1CFB3567DAC746B058339044 /* Dependencies */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Presentation-Debug"; + packageProductDependencies = ( + ); + productName = Presentation_Debug; + productReference = 6C92AD27CF19DDC5BEFC5290 /* Presentation_Debug.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + ADF92DF0AD8E920125A75062 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + TargetAttributes = { + }; + }; + buildConfigurationList = 1F46484E0096B2E0258B70F5 /* Build configuration list for PBXProject "Presentation" */; + compatibilityVersion = "Xcode 14.0"; + developmentRegion = ko; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ko, + ); + mainGroup = FB16DD150B16F59498923414; + productRefGroup = F6D62D9CC500DDA356076FB6 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 3F31459B2DA9E5BB7B7E73E2 /* Presentation */, + B7C870EAA303F7201B1090CB /* Presentation-Debug */, + B07DE38A7388D6FD68842E91 /* Presentation-Prod */, + 4706F81838C88054394C55DD /* Presentation-Stage */, + 4F649FDB9C5521442A78DE10 /* PresentationTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 047D93C9CBD2893A19732950 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CB6E67DC65439FE8122D37 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3D0DB8D7EE6DABAB10AF19D5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4847C9443282F3B8C5788488 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + CE9246C0B52C9AD2CCE8EB98 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 017C34EC169A4EFC95392855 /* BookListCoordinatorTests.swift in Resources */, + B5851ABD79A707F1CF6C5C68 /* BookListReducerTests.swift in Resources */, + 34432286BBF00969872EE2B1 /* TestTags.swift in Resources */, + 4A833C0275CFB01B52E54BC1 /* DesignSystem_DesignSystem.bundle in Resources */, + 1B55EF53E2CA1C864C603EAC /* Service_Service.bundle in Resources */, + C8F2327FBDF8478718D28F45 /* SnapKit_SnapKit.bundle in Resources */, + C28B1DD196DC96F555D940F6 /* swift-composable-architecture_ComposableArchitecture.bundle in Resources */, + 610E66B1C269EBC709E677F2 /* swift-sharing_Sharing.bundle in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 0F7819FA07046D2F5A0CCE1D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 900B654DCA939A4C48E0506E /* BookListViewController.swift in Sources */, + 685FE2BDD50DA386B334E975 /* BookListCoordinator.swift in Sources */, + 2A10027F0ABEA1ED234E1EFE /* BookListCoordinatorViewController.swift in Sources */, + 4AE2C4A8FFF96D2AFD814FAA /* BookList.swift in Sources */, + 7F8DAD9727D2784033F7F75E /* BookListSkeletonView.swift in Sources */, + DD982DBE91D3DCA0E959267F /* BookListView.swift in Sources */, + 593C75BD6C1B69D634B93645 /* BookCardView.swift in Sources */, + E281F285B66BDF828F2E2AF0 /* BookDetailsView.swift in Sources */, + 107E214526269B31BD1FC56F /* BookListHeaderView.swift in Sources */, + 4152A519CE4F0C9EED99D46F /* ChaptersView.swift in Sources */, + 427D051938DA711F28189F67 /* SeriesButtonsView.swift in Sources */, + 04286D02DE7BCAD03B5C9B3E /* PresentationExported.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6C36CC1706619E6A69922C3C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 56D9562D153E9C59D094EFF1 /* TuistBundle+PresentationTests.swift in Sources */, + EB5423988845641CCC797824 /* BookListCoordinatorTests.swift in Sources */, + 737B515B8DC023E17F94C10E /* BookListReducerTests.swift in Sources */, + 70E1397356E2EB8434F4D700 /* TestTags.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B61A3D590C9AEA6A51605488 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 0EC73F60DCE9DD266936AC61 /* BookListViewController.swift in Sources */, + F431F0BD0DEAFCACC1BDCD2D /* BookListCoordinator.swift in Sources */, + 02E613277F24FF0DB7AD2544 /* BookListCoordinatorViewController.swift in Sources */, + 211130F347AF9645D71398D6 /* BookList.swift in Sources */, + 70CD50C9A9474743BA18758F /* BookListSkeletonView.swift in Sources */, + 5DEC287CF3B74B317B64D875 /* BookListView.swift in Sources */, + 6E6544A5C32E0B280FFC4168 /* BookCardView.swift in Sources */, + 63172D1521022B4665C6BACD /* BookDetailsView.swift in Sources */, + 7EEEAF7BFFDFB86E03C1573C /* BookListHeaderView.swift in Sources */, + 8F4859CA792B53A0A8289F0D /* ChaptersView.swift in Sources */, + 2142F59A18E9E25184408BDA /* SeriesButtonsView.swift in Sources */, + E981CFD6DC1F1C9534C9E167 /* PresentationExported.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + C7FD07473D6CB2443CFDEC8D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 93316F9FAFBE2BA69B67B530 /* BookListViewController.swift in Sources */, + 807217A89A52115A073C89A3 /* BookListCoordinator.swift in Sources */, + 8BC9FE4211F9A045F1E9027F /* BookListCoordinatorViewController.swift in Sources */, + 02803076E790C9FF1A29D6D1 /* BookList.swift in Sources */, + E22C98C743EAB6A73D7CAE55 /* BookListSkeletonView.swift in Sources */, + C6CBCEFA9344232C908FF37B /* BookListView.swift in Sources */, + 5F62CA7E2ED8512A23291939 /* BookCardView.swift in Sources */, + 42FC883CB99FF37E1FF78F15 /* BookDetailsView.swift in Sources */, + 8BE1E88655FDD837557A2397 /* BookListHeaderView.swift in Sources */, + 04C0E4F9EA1A0BC53049A9CB /* ChaptersView.swift in Sources */, + B5992248E109CA4A916520F7 /* SeriesButtonsView.swift in Sources */, + 4E660B1501EE176BAAEAEA27 /* PresentationExported.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D1661E425A741BEDE8A14549 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 93C5FF758C5A3BC01837C3C7 /* BookListViewController.swift in Sources */, + F6F6D705D0E79CB948D7048B /* BookListCoordinator.swift in Sources */, + 8D31C6CBAE1D2C94A96269C6 /* BookListCoordinatorViewController.swift in Sources */, + 409414CA8CF03E06E6A87EE8 /* BookList.swift in Sources */, + 2497196B0F089BE932F7DAC8 /* BookListSkeletonView.swift in Sources */, + 565FF97BE09F5DFE85297259 /* BookListView.swift in Sources */, + 1AA7563901E4A8DE63A9CAAF /* BookCardView.swift in Sources */, + 18B077C495095A8DFA9B9600 /* BookDetailsView.swift in Sources */, + C3AED56D7A1655F0B1F891DA /* BookListHeaderView.swift in Sources */, + 27E0E9958994FE9EA460E1FD /* ChaptersView.swift in Sources */, + AA9CD1A2EFC160D06379D3BA /* SeriesButtonsView.swift in Sources */, + 773B030F03D93F1EFE961D56 /* PresentationExported.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + CFC8D355C9BA1BF780000E36 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Presentation; + target = 3F31459B2DA9E5BB7B7E73E2 /* Presentation */; + targetProxy = AC47C2963C52FF154B25A536 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 28D22904AFA6A96E5C3BFA05 /* 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/Presentation-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.Presentation; + PRODUCT_NAME = Presentation; + 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; + }; + 319273203B1FCAF3F9B8D140 /* 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/Presentation-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.Presentation; + PRODUCT_NAME = Presentation_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; + }; + 47533D3906F1F9721EA2BF8A /* 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; + }; + 50A0DDB77B86DFD207739A65 /* 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/Presentation-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.Presentation; + PRODUCT_NAME = Presentation_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; + }; + 563B8081FDEA66696633ADD3 /* 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; + }; + 586DECBAA6BFA82A946E6C3B /* 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/PresentationTests-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.Presentation.PresentationTests; + PRODUCT_NAME = PresentationTests; + 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; + }; + 8E7C6583191531D91411CB09 /* 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/Presentation-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.Presentation; + PRODUCT_NAME = Presentation; + 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; + }; + ACB2FA5D9AE591AAB9A860AD /* 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/PresentationTests-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.Presentation.PresentationTests; + PRODUCT_NAME = PresentationTests; + 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; + }; + AD5A236CE68AB02025FFBF67 /* 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/Presentation-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.Presentation; + PRODUCT_NAME = Presentation_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; + }; + D421E8D180DAEAE7891DB481 /* 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/Presentation-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.Presentation; + PRODUCT_NAME = Presentation_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; + }; + DCF482996D778B365912F03A /* 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/Presentation-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.Presentation; + PRODUCT_NAME = Presentation_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; + }; + E2C52A6BE316A8D546634159 /* 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/Presentation-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.Presentation; + PRODUCT_NAME = Presentation_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; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 1F46484E0096B2E0258B70F5 /* Build configuration list for PBXProject "Presentation" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 563B8081FDEA66696633ADD3 /* Debug */, + 47533D3906F1F9721EA2BF8A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 261AF6498BFFB0D8F1DAC5C3 /* Build configuration list for PBXNativeTarget "Presentation-Prod" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D421E8D180DAEAE7891DB481 /* Debug */, + 319273203B1FCAF3F9B8D140 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 3FBCA82F59D1854392A78BD5 /* Build configuration list for PBXNativeTarget "Presentation" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 8E7C6583191531D91411CB09 /* Debug */, + 28D22904AFA6A96E5C3BFA05 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 495E8DC38DBCADABBAE81A90 /* Build configuration list for PBXNativeTarget "PresentationTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + ACB2FA5D9AE591AAB9A860AD /* Debug */, + 586DECBAA6BFA82A946E6C3B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 65E19D3D506A14FDD04FF645 /* Build configuration list for PBXNativeTarget "Presentation-Stage" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AD5A236CE68AB02025FFBF67 /* Debug */, + DCF482996D778B365912F03A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + BCA6B99D3A378E3B7609D28A /* Build configuration list for PBXNativeTarget "Presentation-Debug" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E2C52A6BE316A8D546634159 /* Debug */, + 50A0DDB77B86DFD207739A65 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = ADF92DF0AD8E920125A75062 /* Project object */; +} diff --git a/Projects/Presentation/Presentation/Presentation.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Projects/Presentation/Presentation/Presentation.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/Projects/Presentation/Presentation/Presentation.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Projects/Presentation/Presentation/Presentation.xcodeproj/xcshareddata/xcschemes/Presentation-Debug.xcscheme b/Projects/Presentation/Presentation/Presentation.xcodeproj/xcshareddata/xcschemes/Presentation-Debug.xcscheme new file mode 100644 index 0000000..4df3bef --- /dev/null +++ b/Projects/Presentation/Presentation/Presentation.xcodeproj/xcshareddata/xcschemes/Presentation-Debug.xcscheme @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/Presentation/Presentation/Presentation.xcodeproj/xcshareddata/xcschemes/Presentation-Prod.xcscheme b/Projects/Presentation/Presentation/Presentation.xcodeproj/xcshareddata/xcschemes/Presentation-Prod.xcscheme new file mode 100644 index 0000000..d2712e9 --- /dev/null +++ b/Projects/Presentation/Presentation/Presentation.xcodeproj/xcshareddata/xcschemes/Presentation-Prod.xcscheme @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/Presentation/Presentation/Presentation.xcodeproj/xcshareddata/xcschemes/Presentation-Stage.xcscheme b/Projects/Presentation/Presentation/Presentation.xcodeproj/xcshareddata/xcschemes/Presentation-Stage.xcscheme new file mode 100644 index 0000000..fe6b805 --- /dev/null +++ b/Projects/Presentation/Presentation/Presentation.xcodeproj/xcshareddata/xcschemes/Presentation-Stage.xcscheme @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/Presentation/Presentation/Presentation.xcodeproj/xcshareddata/xcschemes/Presentation.xcscheme b/Projects/Presentation/Presentation/Presentation.xcodeproj/xcshareddata/xcschemes/Presentation.xcscheme new file mode 100644 index 0000000..ba2df9b --- /dev/null +++ b/Projects/Presentation/Presentation/Presentation.xcodeproj/xcshareddata/xcschemes/Presentation.xcscheme @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/Presentation/Presentation/PresentationTests/Sources/BookListCoordinatorTests.swift b/Projects/Presentation/Presentation/PresentationTests/Sources/BookListCoordinatorTests.swift new file mode 100644 index 0000000..5e5ba98 --- /dev/null +++ b/Projects/Presentation/Presentation/PresentationTests/Sources/BookListCoordinatorTests.swift @@ -0,0 +1,246 @@ +// +// BookListCoordinatorTests.swift +// PresentationTests +// +// Created by Wonji Suh on 9/11/25. +// + +import Testing +import Foundation +import ComposableArchitecture +@testable import Presentation +@testable import Model +@testable import Repository +@testable import UseCase + +@MainActor +struct BookListCoordinatorTests { + + // MARK: - State Tests + + @Test("초기 상태 테스트", .tags(.tcaReducerTest, .coordinatorTest, .stateManagementTest)) + func testInitialState() { + // Given + let state = BookListCoordinator.State() + + // Then + #expect(state.path.isEmpty) + #expect(state.bookList.book.isEmpty) + #expect(state.bookList.selectedBookIndex == 0) + #expect(state.bookList.isLoading == false) + } + + // MARK: - Action Tests + + @Test("onAppear 액션 테스트", .tags(.tcaReducerTest, .coordinatorTest, .actionTest)) + func testOnAppearAction() async { + // Given + let store = TestStore(initialState: BookListCoordinator.State()) { + BookListCoordinator() + } withDependencies: { + $0.bookListUseCase = DefaultBookListRepositoryImpl() + $0.summaryPersistenceUseCase = DefaultSummaryPersistenceRepository() + $0.continuousClock = ImmediateClock() + } + + store.exhaustivity = .off + + // When + await store.send(.onAppear) + + // Then - 비동기 작업 완료 대기 + await store.finish() + + // 최종 상태 검증 + #expect(store.state.bookList.isLoading == false) + } + + @Test("BookList 액션 위임 테스트", .tags(.tcaReducerTest, .coordinatorTest, .actionTest)) + func testBookListActionDelegation() async { + // Given + let store = TestStore(initialState: BookListCoordinator.State()) { + BookListCoordinator() + } + + store.exhaustivity = .off + + // When - BookList 액션 전달 + await store.send(.bookList(.view(.errorDismissed))) + } + + @Test("Path 액션 처리 테스트", .tags(.tcaReducerTest, .coordinatorTest, .navigationTest)) + func testPathActionHandling() async { + // Given + let store = TestStore(initialState: BookListCoordinator.State()) { + BookListCoordinator() + } + + // When - Path에 BookList 추가 + await store.send(.path(.push(id: 0, state: .bookList(BookList.State())))) { + $0.path[id: 0] = .bookList(BookList.State()) + } + + // When - Path에서 제거 + await store.send(.path(.popFrom(id: 0))) { + $0.path.removeAll() + } + } + + // MARK: - Integration Tests + + @Test("전체 플로우 통합 테스트", .tags(.tcaReducerTest, .coordinatorTest, .integrationTest)) + func testFullCoordinatorFlow() async { + // Given + let store = TestStore(initialState: BookListCoordinator.State()) { + BookListCoordinator() + } withDependencies: { + $0.bookListUseCase = DefaultBookListRepositoryImpl() + $0.summaryPersistenceUseCase = DefaultSummaryPersistenceRepository() + $0.continuousClock = ImmediateClock() + } + + + // When - 앱 시작 + await store.send(.onAppear) + +// // 비동기 작업 완료 대기 +// await store.finish() + + store.exhaustivity = .off(showSkippedAssertions: true) + + await store.skipReceivedActions() + // Then - 데이터가 로드됨 + #expect(store.state.bookList.isLoading == false) + #expect(store.state.bookList.book.count == 5) + + // When - 사용자 인터랙션 + let summaryKey = "SummaryExpanded.클린 코드|로버트 C. 마틴" + await store.send(.bookList(.view(.summaryToggleTapped(key: summaryKey)))) + } + + // MARK: - Path Navigation Tests + + @Test("네비게이션 스택 관리 테스트", .tags(.tcaReducerTest, .coordinatorTest, .navigationTest)) + func testNavigationStackManagement() async { + // Given + let store = TestStore(initialState: BookListCoordinator.State()) { + BookListCoordinator() + } + + // When - 첫 번째 화면 추가 + let firstBookListState = BookList.State() + await store.send(.path(.push(id: 0, state: .bookList(firstBookListState)))) { + $0.path[id: 0] = .bookList(firstBookListState) + } + + // When - 두 번째 화면 추가 + let secondBookListState = BookList.State() + await store.send(.path(.push(id: 1, state: .bookList(secondBookListState)))) { + $0.path[id: 1] = .bookList(secondBookListState) + } + + // Then - 스택에 2개 화면이 있음 + #expect(store.state.path.count == 2) + + // When - 마지막 화면 제거 + await store.send(.path(.popFrom(id: 1))) { + $0.path[id: 1] = nil + } + + // Then - 스택에 1개 화면만 남음 + #expect(store.state.path.count == 1) + } + + @Test("빈 Path 액션 처리 테스트", .tags(.tcaReducerTest, .coordinatorTest, .navigationTest)) + func testEmptyPathAction() async { + // Given + let store = TestStore(initialState: BookListCoordinator.State()) { + BookListCoordinator() + } + + // When - 빈 path에서 pop 시도 +// await store.send(.path(.popFrom(id: 999))) // ← 무 + + // Then - 상태 변경 없음 + #expect(store.state.path.isEmpty) + } + + // MARK: - Error Handling Tests + + @Test("BookList 에러 상태 처리 테스트", .tags(.tcaReducerTest, .coordinatorTest, .errorHandlingTest)) + func testBookListErrorHandling() async { + // Given + let errorRepository = DefaultBookListRepositoryImpl() + errorRepository.setShouldThrowError(true, error: DefaultBookListRepositoryImpl.MockError.networkError) + + let store = TestStore(initialState: BookListCoordinator.State()) { + BookListCoordinator() + } withDependencies: { + $0.bookListUseCase = errorRepository + $0.summaryPersistenceUseCase = DefaultSummaryPersistenceRepository() + $0.continuousClock = ImmediateClock() + } + + store.exhaustivity = .off + + // When + await store.send(.onAppear) + + // 비동기 작업 완료 대기 + await store.finish() + // Then - 에러 상태 처리 확인 + #expect(store.state.bookList.isLoading == false) + #expect(store.state.bookList.errorMessage == nil) + + // When - 에러 해제 + await store.send(.bookList(.view(.errorDismissed))) + } + + // MARK: - Dependency Tests + + @Test("의존성 주입 테스트", .tags(.tcaReducerTest, .coordinatorTest, .dependencyTest)) + func testDependencyInjection() async { + // Given + let customRepository = DefaultSummaryPersistenceRepository() + let store = TestStore(initialState: BookListCoordinator.State()) { + BookListCoordinator() + } withDependencies: { + $0.summaryPersistenceUseCase = customRepository + $0.continuousClock = ImmediateClock() + } + + // When + await store.send(.onAppear) + + await store.skipReceivedActions() + // 비동기 작업 완료 대기 + await store.finish() + + // Then - 커스텀 의존성이 사용됨 (오류 없이 완료) + #expect(store.state.bookList.isLoading == false) + + store.exhaustivity = .off + } + + // MARK: - State Consistency Tests + + @Test("상태 일관성 테스트", .tags(.tcaReducerTest, .coordinatorTest, .stateManagementTest)) + func testStateConsistency() async { + // Given + let store = TestStore(initialState: BookListCoordinator.State()) { + BookListCoordinator() + } + + // When - 여러 액션 연속 실행 + await store.send(.bookList(.view(.seriesSelected(0)))) + await store.send(.bookList(.view(.errorDismissed))) + await store.send(.bookList(.view(.tapUrl(url: "https://test.com")))) { + $0.bookList.url = "https://test.com" + } + + // Then - 상태가 일관되게 유지됨 + #expect(store.state.bookList.selectedBookIndex == 0) + #expect(store.state.bookList.errorMessage == nil) + #expect(store.state.bookList.url == "https://test.com") + } +} diff --git a/Projects/Presentation/Presentation/PresentationTests/Sources/BookListReducerTests.swift b/Projects/Presentation/Presentation/PresentationTests/Sources/BookListReducerTests.swift new file mode 100644 index 0000000..006bfd7 --- /dev/null +++ b/Projects/Presentation/Presentation/PresentationTests/Sources/BookListReducerTests.swift @@ -0,0 +1,319 @@ +// +// BookListReducerTests.swift +// PresentationTests +// +// Created by Wonji Suh on 9/11/25. +// + +import Testing +import Foundation +import ComposableArchitecture +@testable import Presentation +@testable import Model +@testable import Repository +@testable import UseCase + +@MainActor +struct BookListReducerTests { + + // MARK: - Test 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: ["객체 생성과 파괴", "모든 객체의 공통 메서드"] + ) + ] + + // MARK: - State Tests + + @Test("초기 상태 테스트", .tags(.tcaReducerTest, .stateManagementTest, .unitTest)) + func testInitialState() { + // Given + let state = BookList.State() + + // Then + #expect(state.book.isEmpty) + #expect(state.selectedBookIndex == 0) + #expect(state.expandedSummary.isEmpty) + #expect(state.isLoading == false) + #expect(state.errorMessage == nil) + #expect(state.url == "") + } + + @Test("선택된 책 계산 프로퍼티 테스트", .tags(.tcaReducerTest, .stateManagementTest, .unitTest)) + func testSelectedBookComputedProperty() { + // Given + var state = BookList.State() + + // When - 빈 상태 + #expect(state.selectedBook == nil) + + // When - 책이 있는 상태 + state.book = mockBooks + state.selectedBookIndex = 0 + #expect(state.selectedBook?.title == "클린 코드") + + state.selectedBookIndex = 1 + #expect(state.selectedBook?.title == "이펙티브 자바") + + // When - 잘못된 인덱스 + state.selectedBookIndex = 999 + #expect(state.selectedBook == nil) + } + + @Test("현재 요약 상태 테스트", .tags(.tcaReducerTest, .stateManagementTest, .unitTest)) + func testCurrentSummaryState() { + // Given + var state = BookList.State() + state.book = mockBooks + state.selectedBookIndex = 0 + + // When - 기본 상태 (확장되지 않음) + #expect(state.isCurrentSummaryExpanded == false) + + // When - 요약 확장 + let key = "SummaryExpanded.클린 코드|로버트 C. 마틴" + state.expandedSummary[key] = true + #expect(state.isCurrentSummaryExpanded == true) + } + + // MARK: - View Action Tests + + @Test("요약 토글 액션 테스트", .tags(.tcaReducerTest, .viewActionTest, .actionTest)) + func testSummaryToggleAction() async { + // Given + let store = TestStore(initialState: BookList.State()) { + BookList() + } withDependencies: { + $0.summaryPersistenceUseCase = DefaultSummaryPersistenceRepository() + } + + // When + let key = "SummaryExpanded.클린 코드|로버트 C. 마틴" + await store.send(.view(.summaryToggleTapped(key: key))) { + $0.expandedSummary[key] = true + } + } + + @Test("시리즈 선택 액션 테스트", .tags(.tcaReducerTest, .viewActionTest, .actionTest)) + func testSeriesSelectionAction() async { + // Given + let store = TestStore(initialState: BookList.State()) { + BookList() + } + + + + // 책 데이터 설정 + await store.send(.inner(.bookListResponse(.success(mockBooks)))) { + $0.book = mockBooks + $0.selectedBookIndex = 0 + $0.isLoading = false + $0.errorMessage = nil + } + + store.exhaustivity = .off + + // When - 유효한 인덱스 선택 + await store.send(.view(.seriesSelected(1))) + + + } + + @Test("에러 해제 액션 테스트", .tags(.tcaReducerTest, .viewActionTest, .errorHandlingTest)) + func testErrorDismissAction() async { + // Given + let store = TestStore(initialState: BookList.State()) { + BookList() + } + + store.exhaustivity = .off + // 에러 상태 설정 + await store.send(.inner(.bookListResponse(.failure(.encodingError("Test Error"))))) { + $0.isLoading = false +// $0.errorMessage = "책 목록을 불러오는데 실패했습니다: Test Error" + $0.book = [] + $0.selectedBookIndex = 0 + $0.expandedSummary = [:] + } + store.exhaustivity = .on + // When - 에러 해제 + await store.send(.view(.errorDismissed)) { + $0.errorMessage = nil + } + } + + @Test("URL 탭 액션 테스트", .tags(.tcaReducerTest, .viewActionTest, .actionTest)) + func testTapUrlAction() async { + // Given + let store = TestStore(initialState: BookList.State()) { + BookList() + } + + // When + let testUrl = "https://example.com" + await store.send(.view(.tapUrl(url: testUrl))) { + $0.url = testUrl + } + + await store.finish() + } + + // MARK: - Async Action Tests + + @Test("책 목록 가져오기 성공 테스트", .tags(.tcaReducerTest, .asyncActionTest, .effectTest)) + func testFetchBookSuccess() async { + // Given + let store = TestStore(initialState: BookList.State()) { + BookList() + } withDependencies: { + $0.bookListUseCase = DefaultBookListRepositoryImpl() + $0.summaryPersistenceUseCase = DefaultSummaryPersistenceRepository() + } + + + + // When + await store.send(.async(.fetchBook)){ + $0.isLoading = true + } + + // Then - 성공적으로 데이터가 로드됨을 확인하기 위해 상태 검증 + await store.skipReceivedActions() + await store.finish() + + // 최종 상태 검증 + #expect(store.state.isLoading == false) + #expect(store.state.book.count == 5) // DefaultBookListRepositoryImpl의 기본 책 개수 + } + + // MARK: - Inner Action Tests + + @Test("책 목록 응답 실패 처리 테스트", .tags(.tcaReducerTest, .innerActionTest, .errorHandlingTest)) + func testBookListResponseFailure() async { + // Given + let store = TestStore(initialState: BookList.State()) { + BookList() + } + store.exhaustivity = .off + // When + let error = CustomError.encodingError("Network Error") + await store.send(.inner(.bookListResponse(.failure(error)))) { + $0.isLoading = false +// $0.errorMessage = "책 목록을 불러오는데 실패했습니다: Network Error" + $0.book = [] + $0.selectedBookIndex = 0 + $0.expandedSummary = [:] + } + + } + + @Test("요약 상태 로드 완료 테스트", .tags(.tcaReducerTest, .innerActionTest, .stateManagementTest)) + func testSummaryStateLoaded() async { + // Given + let store = TestStore(initialState: BookList.State()) { + BookList() + } + + // When + let key = "SummaryExpanded.테스트책|테스트작가" + await store.send(.inner(.summaryStateLoaded(key: key, isExpanded: true))) { + $0.expandedSummary[key] = true + } + } + + // MARK: - Integration Tests + + @Test("전체 플로우 통합 테스트", .tags(.tcaReducerTest, .integrationTest, .effectTest)) + func testFullFlowIntegration() async { + // Given + let store = TestStore(initialState: BookList.State()) { + BookList() + } withDependencies: { + $0.bookListUseCase = DefaultBookListRepositoryImpl() + $0.summaryPersistenceUseCase = DefaultSummaryPersistenceRepository() + } + + + store.exhaustivity = .off + // When - 책 목록 가져오기 + await store.send(.async(.fetchBook)) + + await store.skipReceivedActions() + // 비동기 작업 완료 대기 + await store.finish() + store.exhaustivity = .on + + // Then - 데이터가 로드됨 + #expect(store.state.isLoading == false) + #expect(store.state.book.count == 5) + + // When - 시리즈 변경 + await store.send(.view(.seriesSelected(1))){ + $0.selectedBookIndex = 1 + } + + // When - 요약 토글 + let summaryKey = "SummaryExpanded.이펙티브 자바|조슈아 블로크" + await store.send(.view(.summaryToggleTapped(key: summaryKey))){ + $0.expandedSummary[summaryKey] = true + } + } + + // MARK: - Edge Cases + + @Test("잘못된 시리즈 인덱스 처리 테스트", .tags(.tcaReducerTest, .errorHandlingTest, .unitTest)) + func testInvalidSeriesIndex() async { + // Given + var initialState = BookList.State() + initialState.book = mockBooks + + let store = TestStore(initialState: initialState) { + BookList() + } + + // When - 음수 인덱스 + await store.send(.view(.seriesSelected(-1))) + + // When - 범위 초과 인덱스 + await store.send(.view(.seriesSelected(999))) + + // Then - 상태가 변경되지 않음 + #expect(store.state.selectedBookIndex == 0) + } + + @Test("빈 책 목록 상태 테스트", .tags(.tcaReducerTest, .stateManagementTest, .unitTest)) + func testEmptyBookListState() { + // Given + var state = BookList.State() + + // When + state.book = [] + state.selectedBookIndex = 0 + + // Then + #expect(state.selectedBook == nil) + #expect(state.currentSummaryBookInfo == nil) + #expect(state.isCurrentSummaryExpanded == false) + #expect(state.displayData == nil) + } +} diff --git a/Projects/Presentation/Presentation/PresentationTests/Sources/TestTags.swift b/Projects/Presentation/Presentation/PresentationTests/Sources/TestTags.swift new file mode 100644 index 0000000..963c3b4 --- /dev/null +++ b/Projects/Presentation/Presentation/PresentationTests/Sources/TestTags.swift @@ -0,0 +1,25 @@ +// +// TestTags.swift +// PresentationTests +// +// 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 bookListTest: Self + @Tag static var coordinatorTest: Self + @Tag static var viewActionTest: Self + @Tag static var asyncActionTest: Self + @Tag static var innerActionTest: Self + @Tag static var navigationTest: Self + @Tag static var dependencyTest: Self + @Tag static var errorHandlingTest: Self + @Tag static var integrationTest: Self + @Tag static var unitTest: Self +} \ No newline at end of file diff --git a/Projects/Presentation/Presentation/Presentations.xcodeproj/project.pbxproj b/Projects/Presentation/Presentation/Presentations.xcodeproj/project.pbxproj new file mode 100644 index 0000000..7d86bf6 --- /dev/null +++ b/Projects/Presentation/Presentation/Presentations.xcodeproj/project.pbxproj @@ -0,0 +1,973 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 55; + objects = { + +/* Begin PBXBuildFile section */ + 17F4B085353AD0A4AF6315C2 /* Shareds.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF6C39DFACBCB321A0060296 /* Shareds.framework */; }; + 19956539824226D53D21D2B8 /* Core.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4074EAB1DBDB9F0D129DFDEC /* Core.framework */; }; + 20336A09AB316ADDFD3379A7 /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7069CCC0A074596E27DB2C5 /* Base.swift */; }; + 3D08FDD5BBAA457735CA2EDA /* Shareds.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF6C39DFACBCB321A0060296 /* Shareds.framework */; }; + 554456F5448A12095150524E /* Shareds.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF6C39DFACBCB321A0060296 /* Shareds.framework */; }; + 5E882B16A4394F25F629ADCE /* Test.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07FABAF54FD579B463C0E4D1 /* Test.swift */; }; + 637D550E88C9AD210508E647 /* Core.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4074EAB1DBDB9F0D129DFDEC /* Core.framework */; }; + 7962DCDE92C6DFD75A2A441C /* Presentations.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 19C047366EA0592646748B06 /* Presentations.framework */; }; + 8304C13C37FEB2AEE6055C1C /* Shareds.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF6C39DFACBCB321A0060296 /* Shareds.framework */; }; + 8597701AA5E05FE080DCCCF8 /* Core.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4074EAB1DBDB9F0D129DFDEC /* Core.framework */; }; + 99BCCE981A3C28718917CB1E /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7069CCC0A074596E27DB2C5 /* Base.swift */; }; + B0630645035F0ABDCFC8276B /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7069CCC0A074596E27DB2C5 /* Base.swift */; }; + C18219BC11A692581FBA8901 /* Core.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4074EAB1DBDB9F0D129DFDEC /* Core.framework */; }; + CEE0F5D9D36EE0200001E43F /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = C7069CCC0A074596E27DB2C5 /* Base.swift */; }; + E4FA70DC29522F7364FD3A61 /* Core.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4074EAB1DBDB9F0D129DFDEC /* Core.framework */; }; + F89A0BC20E19FC384EFB819D /* Shareds.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF6C39DFACBCB321A0060296 /* Shareds.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 26637994CC1471485F9C85A5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = E2E16746CF9A456BAA8BEAC7 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 32D00563243DB6BEA654C608; + remoteInfo = Presentations; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 0BB2C9523F2E63C831E34370 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + 2173CA352097B0D601135665 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + 3CD12B61FB3574ED3EFB8A25 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + 74094DBCCC95212B93BA9277 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + B0914BF4EADDFD05CD2757D8 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 07FABAF54FD579B463C0E4D1 /* Test.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Test.swift; sourceTree = ""; }; + 0BAC78E9D0D8491A1696A7F0 /* Presentations_Debug.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Presentations_Debug.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 19C047366EA0592646748B06 /* Presentations.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Presentations.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4074EAB1DBDB9F0D129DFDEC /* Core.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Core.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 414474292C4A99353CC5ED7B /* Presentations-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Presentations-Info.plist"; sourceTree = ""; }; + 4D300F1F8031723EB7A576F0 /* PresentationsTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "PresentationsTests-Info.plist"; sourceTree = ""; }; + 6AE40D6861D33EB09BF1745C /* PresentationsTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = PresentationsTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 77E9B701C80E736B321E544A /* Presentations-Stage-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Presentations-Stage-Info.plist"; sourceTree = ""; }; + ADC6B0C23F7E47BC4F446A12 /* Presentations-Prod-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Presentations-Prod-Info.plist"; sourceTree = ""; }; + AF6C39DFACBCB321A0060296 /* Shareds.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Shareds.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BE7D5A3C1FCA59D79E0BA882 /* Presentations_Stage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Presentations_Stage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C7069CCC0A074596E27DB2C5 /* Base.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Base.swift; sourceTree = ""; }; + D2BBB05F1DD675BDD5CA4D9B /* Presentations-Debug-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Presentations-Debug-Info.plist"; sourceTree = ""; }; + F8C80AB19EF66A6923175013 /* Presentations_Prod.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Presentations_Prod.framework; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 048742F8E14A9766380D6C3E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 637D550E88C9AD210508E647 /* Core.framework in Frameworks */, + F89A0BC20E19FC384EFB819D /* Shareds.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6BC9C6C819957C1B9564DACA /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + E4FA70DC29522F7364FD3A61 /* Core.framework in Frameworks */, + 8304C13C37FEB2AEE6055C1C /* Shareds.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 791F27BAEEB08DF7062B70EA /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 19956539824226D53D21D2B8 /* Core.framework in Frameworks */, + 17F4B085353AD0A4AF6315C2 /* Shareds.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 79736C9A700C341B70500426 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + C18219BC11A692581FBA8901 /* Core.framework in Frameworks */, + 554456F5448A12095150524E /* Shareds.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D18C40353A80D03374D1DA2D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8597701AA5E05FE080DCCCF8 /* Core.framework in Frameworks */, + 7962DCDE92C6DFD75A2A441C /* Presentations.framework in Frameworks */, + 3D08FDD5BBAA457735CA2EDA /* Shareds.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 25C5E727592AF872032B4B0E /* Derived */ = { + isa = PBXGroup; + children = ( + A4836C72816BE89CFF3B5A47 /* InfoPlists */, + ); + path = Derived; + sourceTree = ""; + }; + 45CE483F88CB93CB73CE3550 /* PresentationsTests */ = { + isa = PBXGroup; + children = ( + F6A589F5C258EF41478C8D48 /* Sources */, + ); + path = PresentationsTests; + sourceTree = ""; + }; + 83C01F043F5BC6A028B77E5A /* Project */ = { + isa = PBXGroup; + children = ( + 25C5E727592AF872032B4B0E /* Derived */, + 45CE483F88CB93CB73CE3550 /* PresentationsTests */, + 9F6F914508C27661E19A1640 /* Sources */, + ); + name = Project; + sourceTree = ""; + }; + 9F6F914508C27661E19A1640 /* Sources */ = { + isa = PBXGroup; + children = ( + C7069CCC0A074596E27DB2C5 /* Base.swift */, + ); + path = Sources; + sourceTree = ""; + }; + A4836C72816BE89CFF3B5A47 /* InfoPlists */ = { + isa = PBXGroup; + children = ( + D2BBB05F1DD675BDD5CA4D9B /* Presentations-Debug-Info.plist */, + 414474292C4A99353CC5ED7B /* Presentations-Info.plist */, + ADC6B0C23F7E47BC4F446A12 /* Presentations-Prod-Info.plist */, + 77E9B701C80E736B321E544A /* Presentations-Stage-Info.plist */, + 4D300F1F8031723EB7A576F0 /* PresentationsTests-Info.plist */, + ); + path = InfoPlists; + sourceTree = ""; + }; + BBF19BD3E5940F97172DAA2F /* Products */ = { + isa = PBXGroup; + children = ( + 4074EAB1DBDB9F0D129DFDEC /* Core.framework */, + 0BAC78E9D0D8491A1696A7F0 /* Presentations_Debug.framework */, + F8C80AB19EF66A6923175013 /* Presentations_Prod.framework */, + BE7D5A3C1FCA59D79E0BA882 /* Presentations_Stage.framework */, + 19C047366EA0592646748B06 /* Presentations.framework */, + 6AE40D6861D33EB09BF1745C /* PresentationsTests.xctest */, + AF6C39DFACBCB321A0060296 /* Shareds.framework */, + ); + name = Products; + sourceTree = ""; + }; + D59B4AB557B6F8FDFEAAB601 = { + isa = PBXGroup; + children = ( + 83C01F043F5BC6A028B77E5A /* Project */, + BBF19BD3E5940F97172DAA2F /* Products */, + ); + sourceTree = ""; + }; + F6A589F5C258EF41478C8D48 /* Sources */ = { + isa = PBXGroup; + children = ( + 07FABAF54FD579B463C0E4D1 /* Test.swift */, + ); + path = Sources; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 1E5F9B4767F53F86CB6C0FA5 /* PresentationsTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 66E6C4C077149E65BF36D0BC /* Build configuration list for PBXNativeTarget "PresentationsTests" */; + buildPhases = ( + C06B9D4EF0D0962DD86F8CB1 /* Sources */, + E627B5F71EFB8FC0D3F1D35B /* Resources */, + D18C40353A80D03374D1DA2D /* Frameworks */, + 74094DBCCC95212B93BA9277 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 411C2FD6E426899D190A436F /* PBXTargetDependency */, + ); + name = PresentationsTests; + packageProductDependencies = ( + ); + productName = PresentationsTests; + productReference = 6AE40D6861D33EB09BF1745C /* PresentationsTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 32D00563243DB6BEA654C608 /* Presentations */ = { + isa = PBXNativeTarget; + buildConfigurationList = B2A82750945AA91F4E30B5AA /* Build configuration list for PBXNativeTarget "Presentations" */; + buildPhases = ( + 7B7A6C7CAFCF57680E1027CE /* Sources */, + 2F0D57D0CFAEDF3B982A218C /* Resources */, + 6BC9C6C819957C1B9564DACA /* Frameworks */, + 0BB2C9523F2E63C831E34370 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Presentations; + packageProductDependencies = ( + ); + productName = Presentations; + productReference = 19C047366EA0592646748B06 /* Presentations.framework */; + productType = "com.apple.product-type.framework"; + }; + 7EC7414E073A20793D916722 /* Presentations-Debug */ = { + isa = PBXNativeTarget; + buildConfigurationList = B47C1C2002A3BD89DFDA884B /* Build configuration list for PBXNativeTarget "Presentations-Debug" */; + buildPhases = ( + 26C78D29E4F5FC2E6C83B023 /* Sources */, + D1F207F63282477A3236C534 /* Resources */, + 79736C9A700C341B70500426 /* Frameworks */, + 3CD12B61FB3574ED3EFB8A25 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Presentations-Debug"; + packageProductDependencies = ( + ); + productName = Presentations_Debug; + productReference = 0BAC78E9D0D8491A1696A7F0 /* Presentations_Debug.framework */; + productType = "com.apple.product-type.framework"; + }; + A0AC462681D1DF2980117CAC /* Presentations-Prod */ = { + isa = PBXNativeTarget; + buildConfigurationList = F5FF2C075FA909D87DDDFA3C /* Build configuration list for PBXNativeTarget "Presentations-Prod" */; + buildPhases = ( + 9A49A70B116807828447DE20 /* Sources */, + 673B2C73E8D78BA34C318A0E /* Resources */, + 791F27BAEEB08DF7062B70EA /* Frameworks */, + B0914BF4EADDFD05CD2757D8 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Presentations-Prod"; + packageProductDependencies = ( + ); + productName = Presentations_Prod; + productReference = F8C80AB19EF66A6923175013 /* Presentations_Prod.framework */; + productType = "com.apple.product-type.framework"; + }; + E024B6F15C97900482396DE3 /* Presentations-Stage */ = { + isa = PBXNativeTarget; + buildConfigurationList = B28A4FE3766BB40C7A248E36 /* Build configuration list for PBXNativeTarget "Presentations-Stage" */; + buildPhases = ( + A9926580E852B0E84209BCBB /* Sources */, + 6D111094AECA2C56B0CFA5CE /* Resources */, + 048742F8E14A9766380D6C3E /* Frameworks */, + 2173CA352097B0D601135665 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Presentations-Stage"; + packageProductDependencies = ( + ); + productName = Presentations_Stage; + productReference = BE7D5A3C1FCA59D79E0BA882 /* Presentations_Stage.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + E2E16746CF9A456BAA8BEAC7 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + TargetAttributes = { + }; + }; + buildConfigurationList = FB28808A0775EBD12FC09EDB /* Build configuration list for PBXProject "Presentations" */; + compatibilityVersion = "Xcode 14.0"; + developmentRegion = ko; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ko, + ); + mainGroup = D59B4AB557B6F8FDFEAAB601; + productRefGroup = BBF19BD3E5940F97172DAA2F /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 32D00563243DB6BEA654C608 /* Presentations */, + 7EC7414E073A20793D916722 /* Presentations-Debug */, + A0AC462681D1DF2980117CAC /* Presentations-Prod */, + E024B6F15C97900482396DE3 /* Presentations-Stage */, + 1E5F9B4767F53F86CB6C0FA5 /* PresentationsTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 2F0D57D0CFAEDF3B982A218C /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 673B2C73E8D78BA34C318A0E /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6D111094AECA2C56B0CFA5CE /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D1F207F63282477A3236C534 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E627B5F71EFB8FC0D3F1D35B /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 26C78D29E4F5FC2E6C83B023 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + CEE0F5D9D36EE0200001E43F /* Base.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7B7A6C7CAFCF57680E1027CE /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 20336A09AB316ADDFD3379A7 /* Base.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 9A49A70B116807828447DE20 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B0630645035F0ABDCFC8276B /* Base.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A9926580E852B0E84209BCBB /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 99BCCE981A3C28718917CB1E /* Base.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + C06B9D4EF0D0962DD86F8CB1 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 5E882B16A4394F25F629ADCE /* Test.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 411C2FD6E426899D190A436F /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Presentations; + target = 32D00563243DB6BEA654C608 /* Presentations */; + targetProxy = 26637994CC1471485F9C85A5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 5EE4C8A8B15366987625F709 /* 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/Presentations-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.Module.Presentations; + PRODUCT_NAME = Presentations_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; + }; + 649D71FA326F7BE870FC446F /* 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/Presentations-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.Module.Presentations; + PRODUCT_NAME = Presentations_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; + }; + 70D7468B10EC027A83A41B2E /* 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; + }; + 7757EFBB5B6F5FE28E5A9949 /* 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/Presentations-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.Module.Presentations; + PRODUCT_NAME = Presentations_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; + }; + 777C057D51D7C934318F1617 /* 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/Presentations-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.Module.Presentations; + PRODUCT_NAME = Presentations_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; + }; + 7ACC865306F7DEE6266A6083 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "iPhone Developer"; + INFOPLIST_FILE = "Derived/InfoPlists/PresentationsTests-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 17.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Module.Presentations.PresentationsTests; + PRODUCT_NAME = PresentationsTests; + 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; + }; + 8049C3F24D49D48FAFF5146E /* 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/Presentations-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.Module.Presentations; + PRODUCT_NAME = Presentations_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; + }; + 9050A4EA67F448D42D02A017 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "iPhone Developer"; + INFOPLIST_FILE = "Derived/InfoPlists/PresentationsTests-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 17.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Module.Presentations.PresentationsTests; + PRODUCT_NAME = PresentationsTests; + 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; + }; + AAF2CDC4368580E7AE1E2A2C /* 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/Presentations-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.Module.Presentations; + PRODUCT_NAME = Presentations_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; + }; + B92B194A1D9D5FC5B8FB1185 /* 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/Presentations-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.Module.Presentations; + PRODUCT_NAME = Presentations; + 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; + }; + BE69379058ABAB562A3A4875 /* 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/Presentations-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.Module.Presentations; + PRODUCT_NAME = Presentations; + 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; + }; + C0B1E5B2E94DF4DBFB437DE1 /* 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 */ + 66E6C4C077149E65BF36D0BC /* Build configuration list for PBXNativeTarget "PresentationsTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7ACC865306F7DEE6266A6083 /* Debug */, + 9050A4EA67F448D42D02A017 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + B28A4FE3766BB40C7A248E36 /* Build configuration list for PBXNativeTarget "Presentations-Stage" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 777C057D51D7C934318F1617 /* Debug */, + 649D71FA326F7BE870FC446F /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + B2A82750945AA91F4E30B5AA /* Build configuration list for PBXNativeTarget "Presentations" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + B92B194A1D9D5FC5B8FB1185 /* Debug */, + BE69379058ABAB562A3A4875 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + B47C1C2002A3BD89DFDA884B /* Build configuration list for PBXNativeTarget "Presentations-Debug" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7757EFBB5B6F5FE28E5A9949 /* Debug */, + AAF2CDC4368580E7AE1E2A2C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + F5FF2C075FA909D87DDDFA3C /* Build configuration list for PBXNativeTarget "Presentations-Prod" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 5EE4C8A8B15366987625F709 /* Debug */, + 8049C3F24D49D48FAFF5146E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + FB28808A0775EBD12FC09EDB /* Build configuration list for PBXProject "Presentations" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + C0B1E5B2E94DF4DBFB437DE1 /* Debug */, + 70D7468B10EC027A83A41B2E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = E2E16746CF9A456BAA8BEAC7 /* Project object */; +} diff --git a/Projects/Presentation/Presentation/Presentations.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Projects/Presentation/Presentation/Presentations.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/Projects/Presentation/Presentation/Presentations.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Projects/Presentation/Presentation/Presentations.xcodeproj/xcshareddata/xcschemes/Presentations-Debug.xcscheme b/Projects/Presentation/Presentation/Presentations.xcodeproj/xcshareddata/xcschemes/Presentations-Debug.xcscheme new file mode 100644 index 0000000..35c34da --- /dev/null +++ b/Projects/Presentation/Presentation/Presentations.xcodeproj/xcshareddata/xcschemes/Presentations-Debug.xcscheme @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/Presentation/Presentation/Presentations.xcodeproj/xcshareddata/xcschemes/Presentations-Prod.xcscheme b/Projects/Presentation/Presentation/Presentations.xcodeproj/xcshareddata/xcschemes/Presentations-Prod.xcscheme new file mode 100644 index 0000000..8e96d5c --- /dev/null +++ b/Projects/Presentation/Presentation/Presentations.xcodeproj/xcshareddata/xcschemes/Presentations-Prod.xcscheme @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/Presentation/Presentation/Presentations.xcodeproj/xcshareddata/xcschemes/Presentations-Stage.xcscheme b/Projects/Presentation/Presentation/Presentations.xcodeproj/xcshareddata/xcschemes/Presentations-Stage.xcscheme new file mode 100644 index 0000000..3f1a4e3 --- /dev/null +++ b/Projects/Presentation/Presentation/Presentations.xcodeproj/xcshareddata/xcschemes/Presentations-Stage.xcscheme @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/Presentation/Presentation/Presentations.xcodeproj/xcshareddata/xcschemes/Presentations.xcscheme b/Projects/Presentation/Presentation/Presentations.xcodeproj/xcshareddata/xcschemes/Presentations.xcscheme new file mode 100644 index 0000000..e6188f5 --- /dev/null +++ b/Projects/Presentation/Presentation/Presentations.xcodeproj/xcshareddata/xcschemes/Presentations.xcscheme @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/Presentation/Presentation/Project.swift b/Projects/Presentation/Presentation/Project.swift new file mode 100644 index 0000000..ad20177 --- /dev/null +++ b/Projects/Presentation/Presentation/Project.swift @@ -0,0 +1,18 @@ +import Foundation +import ProjectDescription +import DependencyPlugin +import ProjectTemplatePlugin +import ProjectTemplatePlugin +import DependencyPackagePlugin + +let project = Project.makeAppModule( + name: "Presentation", + bundleId: .appBundleID(name: ".Presentation"), + product: .staticFramework, + settings: .settings(), + dependencies: [ + .Core(implements: .Core), + .Shared(implements: .Shared), + ], + sources: ["Sources/**"] +) diff --git a/Projects/Presentation/Presentation/Sources/BookList/Controller/BookListViewController.swift b/Projects/Presentation/Presentation/Sources/BookList/Controller/BookListViewController.swift new file mode 100644 index 0000000..98af4ff --- /dev/null +++ b/Projects/Presentation/Presentation/Sources/BookList/Controller/BookListViewController.swift @@ -0,0 +1,204 @@ +// +// BookListViewController.swift +// Presentation +// +// Created by Wonji Suh on 9/5/25. +// + +import UIKit +import Core +import ComposableArchitecture +import Shared +import Combine + +public final class BookListViewController: BaseViewController { + + // 시리즈 버튼 전용 cancellables + private var seriesButtonCancellables = Set() + + public init(store: StoreOf) { + super.init(rootView: BookListView(), store: store) + } + + @available(*, unavailable) + required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } + + // MARK: - Memory Management + + deinit { + // 시리즈 버튼 전용 cancellables 정리 + seriesButtonCancellables.removeAll() + // BaseViewController.deinit이 자동으로 main cancellables을 정리함 + } + + // MARK: - BaseViewController Override + + /// BookList State에서 에러 추출 + public override func extractError(from state: BookList.State) -> String? { + return state.errorMessage + } + + /// BookList 특화 에러 처리 + public override func handleError(_ errorMessage: String) { + // BookList 특화 에러 처리 로직 + // 로딩 상태 해제, 특정 UI 업데이트 등 + rootView.hideLoading() + + // 에러 알림 표시 (BaseViewController의 구현을 직접 호출) + showErrorAlert(message: errorMessage) + } + + /// 에러 알림 표시 (BaseViewController 기능을 확장) + private func showErrorAlert(message: String) { + let alert = UIAlertController( + title: "오류", + message: message, + preferredStyle: .alert + ) + + alert.addAction(UIAlertAction(title: "확인", style: .default) { [weak self] _ in + // 알림을 닫을 때 에러 상태 클리어 + self?.safeSend(.view(.errorDismissed)) + }) + + // 메인 스레드에서 실행 보장 + DispatchQueue.main.async { [weak self] in + self?.present(alert, animated: true) + } + } + + public override func setupView() { + super.setupView() + view.backgroundColor = .white + navigationItem.title = "Harry Potter Series" + } + + public override func configureUI() { + super.configureUI() + store.send(.async(.fetchBook)) + bindState() + } + + public override func viewDidAppear(_ animated: Bool) { + super.viewDidAppear(animated) + } + + public override func bindActions() { + super.bindActions() + + bindSummaryToggleAction() + bindSeriesButtonActions() + } + + private func bindSummaryToggleAction() { + rootView.foldSummaryButton + .publisher(for: .touchUpInside) + .compactMap { [weak self] _ in self?.viewStore.currentSummaryKey } + .map { key in BookList.Action.view(.summaryToggleTapped(key: key)) } + .sink { [weak self] action in self?.safeSend(action) } + .store(in: &cancellables) + } + + private func bindSeriesButtonActions() { + // 기존 시리즈 버튼 액션들만 정리 + seriesButtonCancellables.removeAll() + + // 각 시리즈 버튼에 대해 개별적으로 바인딩 + rootView.getSeriesButtons().forEach { button in + button.publisher(for: .touchUpInside) + .map { _ in button.tag } + .map { index in BookList.Action.view(.seriesSelected(index)) } + .sink { [weak self] action in self?.safeSend(action) } + .store(in: &seriesButtonCancellables) + + + } + } + + + public override func bindState() { + super.bindState() + + bindLoadingState() + bindBooksCountChange() + bindSelectedBookIndexChange() + bindDisplayData() + } + + private func bindLoadingState() { + // BaseViewController의 최적화된 publisher 활용 + optimizedPublisher(\.isLoading) + .sink { [weak self] isLoading in + if isLoading { + self?.rootView.showLoading() + } else { + self?.rootView.hideLoading() + } + } + .store(in: &cancellables) + } + + private func bindBooksCountChange() { + // BaseViewController의 최적화된 publisher로 통일 + optimizedPublisher(\.book) + .map(\.count) + .sink { [weak self] count in + self?.rootView.setupSeriesButtons(count: count) + if count > 0 { + self?.bindSeriesButtonActions() + } + } + .store(in: &cancellables) + } + + private func bindSelectedBookIndexChange() { + // 선택된 책 인덱스 변경 감지 + optimizedPublisher(\.selectedBookIndex) + .sink { [weak self] index in + self?.rootView.updateSelectedSeriesButton(index: index) + } + .store(in: &cancellables) + + } + + private func bindDisplayData() { + // BaseViewController의 최적화된 publisher 활용 + optimizedPublisher(\.displayData) + .sink { [weak self] displayData in + guard let self = self, let data = displayData else { + self?.navigationItem.title = "No Books" + return + } + + // UI 업데이트 + self.updateUI(with: data) + } + .store(in: &cancellables) + + + } + + private func updateUI(with data: BookDisplayData) { + let book = data.book + + // 네비게이션 타이틀 + navigationItem.title = book.title + + // 메인 UI 구성 + rootView.configure( + title: book.title, + author: book.author, + releasedDate: book.releaseDate, + pages: book.pages, + seriesNumber: data.seriesNumber, + totalSeries: data.totalSeries, + image: book.image, + dedication: book.dedication, + summary: book.summary, + chapters: book.chapters + ) + + // 요약 펼침 상태 + rootView.applySummaryExpanded(data.isSummaryExpanded, fullText: book.summary) + } +} diff --git a/Projects/Presentation/Presentation/Sources/BookList/Coordinator/Reducer/BookListCoordinator.swift b/Projects/Presentation/Presentation/Sources/BookList/Coordinator/Reducer/BookListCoordinator.swift new file mode 100644 index 0000000..fa5c6c2 --- /dev/null +++ b/Projects/Presentation/Presentation/Sources/BookList/Coordinator/Reducer/BookListCoordinator.swift @@ -0,0 +1,75 @@ +// +// BookListCoordinator.swift +// Presentation +// +// Created by Wonji Suh on 9/8/25. +// + +import Foundation + +import ComposableArchitecture + + +@Reducer +public struct BookListCoordinator { + public init() {} + + + @ObservableState + public struct State: Equatable { + var path: StackState = .init() + var bookList = BookList.State() + public init() {} + } + + public enum Action { + case onAppear + case path(StackActionOf) + case bookList(BookList.Action) + + } + + @Dependency(\.continuousClock) var clock + + public var body: some ReducerOf { + Reduce { state, action in + switch action { + case .onAppear: + return .concatenate( + .run { + await $0(.bookList(.async(.fetchBook))) + } + + ) + + case let .path(action): + return handlePathAction(state: &state, action: (action)) + + case .bookList: + return .none + } + } + .forEach(\.path, action: \.path) + Scope(state: \.bookList, action: \.bookList) { + BookList() + } + } + + private func handlePathAction( + state: inout State, + action: StackActionOf + ) -> Effect { + switch action { + default: + return .none + } + } +} + +extension BookListCoordinator { + @Reducer(state: .equatable) + public enum Path { + case bookList(BookList) + } +} + diff --git a/Projects/Presentation/Presentation/Sources/BookList/Coordinator/View/BookListCoordinatorViewController.swift b/Projects/Presentation/Presentation/Sources/BookList/Coordinator/View/BookListCoordinatorViewController.swift new file mode 100644 index 0000000..dc67443 --- /dev/null +++ b/Projects/Presentation/Presentation/Sources/BookList/Coordinator/View/BookListCoordinatorViewController.swift @@ -0,0 +1,38 @@ +// +// BookListCoordinatorViewController.swift +// Presentation +// +// Created by Wonji Suh on 9/8/25. +// + +import UIKit +import ComposableArchitecture +import Shared + +@MainActor +public final class BookListCoordinatorViewController: UINavigationController, Coordinator { + + + private let appStore: StoreOf + private let listStore: StoreOf + + public init(appStore: StoreOf) { + self.appStore = appStore + self.listStore = Store(initialState: BookList.State()) { BookList()._printChanges() } + super.init(nibName: nil, bundle: nil) + setNavigationBarHidden(true, animated: false) // 네비 바 숨김 + } + + required init?(coder aDecoder: NSCoder) { fatalError("init(coder:) has not been implemented") } + + public override func viewDidLoad() { + super.viewDidLoad() + start() + } + + // Coordinator 프로토콜이 nonisolated라면 @MainActor 붙이지 마세요. + public func start() { + let vc = BookListViewController(store: listStore) + setViewControllers([vc], animated: false) // self가 내비게이션 컨트롤러 + } +} diff --git a/Projects/Presentation/Presentation/Sources/BookList/Reducer/BookList.swift b/Projects/Presentation/Presentation/Sources/BookList/Reducer/BookList.swift new file mode 100644 index 0000000..8918b97 --- /dev/null +++ b/Projects/Presentation/Presentation/Sources/BookList/Reducer/BookList.swift @@ -0,0 +1,264 @@ +// +// BookList.swift +// Presentation +// +// Created by Wonji Suh on 9/8/25. +// + + +import Foundation +import Core +import DomainInterface + +import ComposableArchitecture +import LogMacro + +@Reducer +public struct BookList { + public init() {} + + @ObservableState + public struct State: Equatable { + + public init() {} + var book: [Book] = [] + // 현재 선택된 책의 인덱스 추가 + var selectedBookIndex: Int = 0 + // key: 책 고유키(아래 keyForBook 참고), value: 펼침여부 + var expandedSummary: [String: Bool] = [:] + // 로딩 상태 + var isLoading: Bool = false + // 에러 상태 + var errorMessage: String? = nil + var url: String = "" + + // MARK: - Derived State (Computed Properties) + + // 현재 선택된 책 + var selectedBook: Book? { + guard !book.isEmpty, + selectedBookIndex >= 0, + selectedBookIndex < book.count else { return nil } + return book[selectedBookIndex] + } + + // 현재 선택된 책의 요약 키를 반환 (Repository 사용을 위해 책 정보 직접 반환) + var currentSummaryBookInfo: (title: String, author: String)? { + guard let selectedBook = selectedBook else { return nil } + return (selectedBook.title, selectedBook.author) + } + + // 현재 선택된 책의 요약 펼침 상태 + var isCurrentSummaryExpanded: Bool { + guard let bookInfo = currentSummaryBookInfo else { return false } + let key = "SummaryExpanded.\(bookInfo.title)|\(bookInfo.author)" + return expandedSummary[key] ?? false + } + + // UI 표시를 위한 완전한 BookData + var displayData: BookDisplayData? { + guard let selectedBook = selectedBook else { return nil } + return BookDisplayData( + book: selectedBook, + seriesNumber: selectedBookIndex + 1, + totalSeries: book.count, + isSummaryExpanded: isCurrentSummaryExpanded + ) + } + + var currentSummaryKey: String? { + guard let bookInfo = currentSummaryBookInfo else { return nil } + return "SummaryExpanded.\(bookInfo.title)|\(bookInfo.author)" + } + } + + public enum Action: ViewAction, BindableAction { + case binding(BindingAction) + case view(View) + case async(AsyncAction) + case inner(InnerAction) + case navigation(NavigationAction) + } + + //MARK: - ViewAction + @CasePathable + public enum View { + case summaryToggleTapped(key: String) + case seriesSelected(Int) // 시리즈 선택 액션 추가 (0-based index) + case errorDismissed // 에러 상태 클리어 액션 + case tapUrl(url: String) + } + + //MARK: - AsyncAction 비동기 처리 액션 + public enum AsyncAction: Equatable { + case fetchBook + } + + //MARK: - 앱내에서 사용하는 액션 + public enum InnerAction: Equatable { + case bookListResponse(Result<[Book], CustomError>) + case summaryStateLoaded(key: String, isExpanded: Bool) + } + + //MARK: - NavigationAction + public enum NavigationAction: Equatable { + } + + public var body: some ReducerOf { + BindingReducer() + Reduce { state, action in + switch action { + case .binding(_): + return .none + + case .view(let viewAction): + return handleViewAction(state: &state, action: viewAction) + + case .async(let asyncAction): + return handleAsyncAction(state: &state, action: asyncAction) + + case .inner(let innerAction): + return handleInnerAction(state: &state, action: innerAction) + + case .navigation(let navigationAction): + return handleNavigationAction(state: &state, action: navigationAction) + } + } + } + + private func handleViewAction( + state: inout State, + action: View + ) -> Effect { + switch action { + case .summaryToggleTapped(let key): + let new = !(state.expandedSummary[key] ?? false) + state.expandedSummary[key] = new + + // 키에서 책 정보 추출하여 Repository에 저장 + let components = key.replacingOccurrences(of: "SummaryExpanded.", with: "").split(separator: "|") + if components.count == 2 { + let title = String(components[0]) + let author = String(components[1]) + return .run { [summaryPersistenceRepository] _ in + summaryPersistenceRepository.saveSummaryExpanded(new, for: title, author: author) + } + } + return .none + + case .seriesSelected(let index): + // 유효한 인덱스인지 확인 + guard index >= 0 && index < state.book.count else { + #logDebug("잘못된 시리즈 인덱스", "index: \(index), total: \(state.book.count)") + return .none + } + + // 선택된 인덱스 업데이트 + state.selectedBookIndex = index + #logDebug("시리즈 선택됨", "인덱스: \(index), 책: \(state.book[index].title)") + return .none + + case .errorDismissed: + // 에러 상태 클리어 + state.errorMessage = nil + return .none + + case .tapUrl(let url): + state.url = url + return .none + } + } + + @Dependency(\.bookListUseCase) var bookListUseCase + @Dependency(\.summaryPersistenceUseCase) var summaryPersistenceRepository + + private func handleAsyncAction( + state: inout State, + action: AsyncAction + ) -> Effect { + switch action { + case .fetchBook: + state.isLoading = true + return .run { send in + let bookResult = await Result { + try await bookListUseCase.getBookList() + } + + switch bookResult { + case .success(let bookResultData): + await send(.inner(.bookListResponse(.success(bookResultData)))) + + case .failure(let error): + await send(.inner(.bookListResponse(.failure(.encodingError(error.localizedDescription))))) + } + } + } + } + + private func handleNavigationAction( + state: inout State, + action: NavigationAction + ) -> Effect { + switch action { + } + } + + private func handleInnerAction( + state: inout State, + action: InnerAction + ) -> Effect { + switch action { + case .bookListResponse(let result): + state.isLoading = false + switch result { + case .success(let bookData): + state.book = bookData + state.errorMessage = nil // 성공 시 에러 상태 클리어 + // 첫 번째 책을 기본 선택으로 설정 + state.selectedBookIndex = 0 + + // 모든 책별 펼침 상태 로딩 (Repository 사용) + return .run { [summaryPersistenceRepository] send in + await withTaskGroup(of: Void.self) { group in + for book in bookData { + group.addTask { + let isExpanded = summaryPersistenceRepository.loadSummaryExpanded(for: book.title, author: book.author) + let key = "SummaryExpanded.\(book.title)|\(book.author)" + await send(.inner(.summaryStateLoaded(key: key, isExpanded: isExpanded))) + } + } + } + } + + #logDebug("책 목록 로딩 완료", "총 \(bookData.count)권, 기본 선택: \(bookData.first?.title ?? "없음")") + + case .failure(let error): + #logDebug("데이터 로드 실패", error.localizedDescription) + // 실패 시 에러 상태 설정 + state.errorMessage = "책 목록을 불러오는데 실패했습니다: \(error.localizedDescription)" + // 실패 시 초기 상태로 리셋 + state.book = [] + state.selectedBookIndex = 0 + state.expandedSummary = [:] + } + return .none + + case .summaryStateLoaded(key: let key, isExpanded: let isExpanded): + state.expandedSummary[key] = isExpanded + #logDebug("요약 상태 로드 완료", "key: \(key), isExpanded: \(isExpanded)") + return .none + } + } +} + +enum SummaryPersistence { + static func key(for title: String, author: String) -> String { + "SummaryExpanded.\(title)|\(author)" + } + static func load(forKey key: String) -> Bool { + UserDefaults.standard.bool(forKey: key) + } + static func save(_ value: Bool, forKey key: String) { + UserDefaults.standard.set(value, forKey: key) + } +} diff --git a/Projects/Presentation/Presentation/Sources/BookList/View/BookListSkeletonView.swift b/Projects/Presentation/Presentation/Sources/BookList/View/BookListSkeletonView.swift new file mode 100644 index 0000000..f59db37 --- /dev/null +++ b/Projects/Presentation/Presentation/Sources/BookList/View/BookListSkeletonView.swift @@ -0,0 +1,406 @@ +// +// BookListSkeletonView.swift +// Presentation +// +// Created by Claude on 9/10/25. +// + +import UIKit +import Shared +import SnapKit +import Then + +public final class BookListSkeletonView: BaseView { + + private let rootView = UIView() + + // 메인 스택 + private let mainVerticalStack = UIStackView().then { + $0.axis = .vertical + $0.spacing = 0 + $0.alignment = .fill + $0.distribution = .fill + } + + // MARK: - 헤더 스켈레톤 + + private let headerContainer = UIView() + + private let titleSkeletonView = UIView().then { + $0.backgroundColor = .systemGray4 + $0.layer.cornerRadius = 8 + $0.clipsToBounds = true + } + + private let seriesNumberSkeletonView = UIView().then { + $0.backgroundColor = .systemGray4 + $0.layer.cornerRadius = 25 + $0.clipsToBounds = true + } + + // MARK: - 시리즈 버튼 스켈레톤 + + private let seriesButtonsContainer = UIView() + private let seriesButtonStack = UIStackView.horizontal(spacing: 12, alignment: .center) + + // MARK: - 스크롤 영역 + + private let scrollView = UIScrollView().then { + $0.showsVerticalScrollIndicator = false + $0.showsHorizontalScrollIndicator = false + } + private let scrollContentView = UIView() + private let scrollStack = UIStackView.vertical(spacing: 24, alignment: .fill, distribution: .fill) + + // MARK: - 카드 스켈레톤 + + private let cardContainer = UIView.makeContainer(.init(backgroundColor: .clear, cornerRadius: 12)) + private let cardHorizontalStack = UIStackView.horizontal(spacing: 16, alignment: .leading) + + private let bookImageSkeletonView = UIView().then { + $0.backgroundColor = .systemGray4 + $0.layer.cornerRadius = 8 + $0.clipsToBounds = true + } + + private let cardInfoVerticalStack = UIStackView.vertical(spacing: 8, alignment: .leading, distribution: .fill) + + private let cardTitleSkeletonView = UIView().then { + $0.backgroundColor = .systemGray4 + $0.layer.cornerRadius = 4 + $0.clipsToBounds = true + } + + private let authorSkeletonView = UIView().then { + $0.backgroundColor = .systemGray4 + $0.layer.cornerRadius = 4 + $0.clipsToBounds = true + } + + private let dateSkeletonView = UIView().then { + $0.backgroundColor = .systemGray4 + $0.layer.cornerRadius = 4 + $0.clipsToBounds = true + } + + private let pagesSkeletonView = UIView().then { + $0.backgroundColor = .systemGray4 + $0.layer.cornerRadius = 4 + $0.clipsToBounds = true + } + + // MARK: - 상세 정보 스켈레톤 + + private let detailsContainer = UIView() + + private let dedicationTitleSkeletonView = UIView().then { + $0.backgroundColor = .systemGray4 + $0.layer.cornerRadius = 4 + $0.clipsToBounds = true + } + + private let dedicationTextSkeletonView = UIView().then { + $0.backgroundColor = .systemGray4 + $0.layer.cornerRadius = 4 + $0.clipsToBounds = true + } + + private let summaryTitleSkeletonView = UIView().then { + $0.backgroundColor = .systemGray4 + $0.layer.cornerRadius = 4 + $0.clipsToBounds = true + } + + private let summaryTextSkeletonView = UIView().then { + $0.backgroundColor = .systemGray4 + $0.layer.cornerRadius = 4 + $0.clipsToBounds = true + } + + // MARK: - 목차 스켈레톤 + + private let chaptersContainer = UIView() + private let chaptersTitleSkeletonView = UIView().then { + $0.backgroundColor = .systemGray4 + $0.layer.cornerRadius = 4 + $0.clipsToBounds = true + } + + private let chaptersStack = UIStackView.vertical(spacing: 8, alignment: .leading, distribution: .fill) + + // MARK: - Life cycle + + public override func addView() { + super.addView() + addSubview(rootView) + setupViewHierarchy() + setupConstraints() + startShimmerAnimation() + } + + private func setupViewHierarchy() { + // 메인 구조 + rootView.addSubviews(mainVerticalStack) + mainVerticalStack.addArrangedSubviews(headerContainer, seriesButtonsContainer, scrollView) + + mainVerticalStack.setCustomSpacing(24, after: headerContainer) + mainVerticalStack.setCustomSpacing(16, after: seriesButtonsContainer) + + // 헤더 + headerContainer.addSubviews(titleSkeletonView, seriesNumberSkeletonView) + + // 시리즈 버튼 + seriesButtonsContainer.addSubviews(seriesButtonStack) + setupSeriesButtonSkeleton() + + // 스크롤 영역 + scrollView.addSubviews(scrollContentView) + scrollContentView.addSubviews(scrollStack) + scrollStack.addArrangedSubviews(cardContainer, detailsContainer, chaptersContainer) + scrollStack.setCustomSpacing(32, after: cardContainer) + + // 카드 섹션 + cardContainer.addSubviews(cardHorizontalStack) + cardHorizontalStack.addArrangedSubviews(bookImageSkeletonView, cardInfoVerticalStack) + cardInfoVerticalStack.addArrangedSubviews( + cardTitleSkeletonView, + authorSkeletonView, + dateSkeletonView, + pagesSkeletonView + ) + + // 상세 정보 섹션 + detailsContainer.addSubviews( + dedicationTitleSkeletonView, + dedicationTextSkeletonView, + summaryTitleSkeletonView, + summaryTextSkeletonView + ) + + // 목차 섹션 + chaptersContainer.addSubviews(chaptersTitleSkeletonView, chaptersStack) + setupChaptersSkeleton() + } + + private func setupSeriesButtonSkeleton() { + // 7개의 시리즈 버튼 스켈레톤 생성 + for _ in 1...7 { + let buttonSkeleton = UIView().then { + $0.backgroundColor = .systemGray4 + $0.layer.cornerRadius = 22 + $0.clipsToBounds = true + } + + seriesButtonStack.addArrangedSubview(buttonSkeleton) + buttonSkeleton.snp.makeConstraints { make in + make.width.height.equalTo(44) + } + } + } + + private func setupChaptersSkeleton() { + // 5개의 목차 스켈레톤 생성 + for i in 0..<5 { + let chapterSkeleton = UIView().then { + $0.backgroundColor = .systemGray4 + $0.layer.cornerRadius = 4 + $0.clipsToBounds = true + } + + chaptersStack.addArrangedSubview(chapterSkeleton) + chapterSkeleton.snp.makeConstraints { make in + make.height.equalTo(16) + // 각기 다른 너비로 자연스럽게 + let widthMultiplier = 0.6 + (Double(i) * 0.1) + make.width.equalToSuperview().multipliedBy(widthMultiplier) + } + } + } + + private func setupConstraints() { + // rootView: 안전영역 + rootView.snp.makeConstraints { make in + make.edges.equalTo(self.safeAreaLayoutGuide) + } + + // 메인 스택 + mainVerticalStack.snp.makeConstraints { make in + make.top.equalToSuperview().offset(20) + make.leading.equalToSuperview().offset(20) + make.trailing.equalToSuperview().offset(-20) + make.bottom.equalToSuperview() + } + + // 헤더 스켈레톤 + titleSkeletonView.snp.makeConstraints { make in + make.top.equalToSuperview() + make.leading.equalToSuperview().offset(20) + make.trailing.equalToSuperview().offset(-20) + make.height.equalTo(60) + } + + seriesNumberSkeletonView.snp.makeConstraints { make in + make.top.equalTo(titleSkeletonView.snp.bottom).offset(16) + make.centerX.equalToSuperview() + make.width.height.equalTo(50) + make.bottom.equalToSuperview() + } + + // 시리즈 버튼 컨테이너 + seriesButtonStack.snp.makeConstraints { make in + make.edges.equalToSuperview().inset(20) + make.height.equalTo(44) + } + + // 스크롤 컨텐츠 + scrollContentView.snp.makeConstraints { make in + make.edges.equalTo(scrollView.contentLayoutGuide) + make.width.equalTo(scrollView.frameLayoutGuide) + } + scrollStack.snp.makeConstraints { make in + make.edges.equalToSuperview() + } + + // 카드 스켈레톤 + cardHorizontalStack.snp.makeConstraints { make in + make.top.equalToSuperview().offset(8) + make.leading.equalToSuperview().offset(16) + make.trailing.equalToSuperview().offset(-16) + make.bottom.equalToSuperview().offset(-8) + } + + bookImageSkeletonView.snp.makeConstraints { make in + make.width.equalTo(80) + make.height.equalTo(120) + } + + cardTitleSkeletonView.snp.makeConstraints { make in + make.height.equalTo(24) + } + + authorSkeletonView.snp.makeConstraints { make in + make.height.equalTo(16) + make.width.equalToSuperview().multipliedBy(0.6) + } + + dateSkeletonView.snp.makeConstraints { make in + make.height.equalTo(14) + make.width.equalToSuperview().multipliedBy(0.7) + } + + pagesSkeletonView.snp.makeConstraints { make in + make.height.equalTo(14) + make.width.equalToSuperview().multipliedBy(0.4) + } + + // 상세 정보 스켈레톤 + dedicationTitleSkeletonView.snp.makeConstraints { make in + make.top.equalToSuperview().offset(20) + make.leading.equalToSuperview().offset(20) + make.height.equalTo(20) + make.width.equalTo(100) + } + + dedicationTextSkeletonView.snp.makeConstraints { make in + make.top.equalTo(dedicationTitleSkeletonView.snp.bottom).offset(8) + make.leading.equalToSuperview().offset(20) + make.trailing.equalToSuperview().offset(-20) + make.height.equalTo(40) + } + + summaryTitleSkeletonView.snp.makeConstraints { make in + make.top.equalTo(dedicationTextSkeletonView.snp.bottom).offset(24) + make.leading.equalToSuperview().offset(20) + make.height.equalTo(20) + make.width.equalTo(80) + } + + summaryTextSkeletonView.snp.makeConstraints { make in + make.top.equalTo(summaryTitleSkeletonView.snp.bottom).offset(8) + make.leading.equalToSuperview().offset(20) + make.trailing.equalToSuperview().offset(-20) + make.height.equalTo(80) + make.bottom.equalToSuperview() + } + + // 목차 스켈레톤 + chaptersTitleSkeletonView.snp.makeConstraints { make in + make.top.equalToSuperview() + make.leading.equalToSuperview().offset(20) + make.height.equalTo(20) + make.width.equalTo(80) + } + + chaptersStack.snp.makeConstraints { make in + make.top.equalTo(chaptersTitleSkeletonView.snp.bottom).offset(8) + make.leading.equalToSuperview().offset(20) + make.trailing.equalToSuperview().offset(-20) + make.bottom.equalToSuperview() + } + } + + // MARK: - Shimmer Animation + + private func startShimmerAnimation() { + let allSkeletonViews = [ + titleSkeletonView, seriesNumberSkeletonView, + bookImageSkeletonView, cardTitleSkeletonView, authorSkeletonView, dateSkeletonView, pagesSkeletonView, + dedicationTitleSkeletonView, dedicationTextSkeletonView, + summaryTitleSkeletonView, summaryTextSkeletonView, + chaptersTitleSkeletonView + ] + + // 시리즈 버튼 스켈레톤 추가 + let seriesButtonSkeletons = seriesButtonStack.arrangedSubviews + let chapterSkeletons = chaptersStack.arrangedSubviews + + let allViews = allSkeletonViews + seriesButtonSkeletons + chapterSkeletons + + for view in allViews { + addShimmerEffect(to: view) + } + } + + private func addShimmerEffect(to view: UIView) { + let gradientLayer = CAGradientLayer() + gradientLayer.colors = [ + UIColor.systemGray4.cgColor, + UIColor.systemGray3.cgColor, + UIColor.systemGray4.cgColor + ] + gradientLayer.locations = [0, 0.5, 1] + gradientLayer.startPoint = CGPoint(x: 0, y: 0.5) + gradientLayer.endPoint = CGPoint(x: 1, y: 0.5) + gradientLayer.frame = view.bounds + + view.layer.addSublayer(gradientLayer) + + let animation = CABasicAnimation(keyPath: "locations") + animation.fromValue = [-1.0, -0.5, 0.0] + animation.toValue = [1.0, 1.5, 2.0] + animation.duration = 1.5 + animation.repeatCount = .infinity + + gradientLayer.add(animation, forKey: "shimmer") + + // 레이아웃이 변경될 때 gradientLayer 프레임 업데이트 + DispatchQueue.main.async { + gradientLayer.frame = view.bounds + } + } + + public func stopShimmerAnimation() { + // 모든 서브레이어에서 애니메이션 제거 + func removeShimmerFromView(_ view: UIView) { + view.layer.sublayers?.forEach { layer in + if layer is CAGradientLayer { + layer.removeAllAnimations() + layer.removeFromSuperlayer() + } + } + view.subviews.forEach { removeShimmerFromView($0) } + } + + removeShimmerFromView(self) + } +} \ No newline at end of file diff --git a/Projects/Presentation/Presentation/Sources/BookList/View/BookListView.swift b/Projects/Presentation/Presentation/Sources/BookList/View/BookListView.swift new file mode 100644 index 0000000..9e5204b --- /dev/null +++ b/Projects/Presentation/Presentation/Sources/BookList/View/BookListView.swift @@ -0,0 +1,200 @@ +// +// BookListView.swift +// Presentation +// +// Created by Wonji Suh on 9/8/25. +// + +import UIKit +import Shared +import SnapKit +import Then + +public final class BookListView: BaseView { + + private let rootView = UIView() + + // MARK: - Skeleton View + + private lazy var skeletonView = BookListSkeletonView() + + // MARK: - Main Components + + // 상단(고정) + 하단(스크롤) 컨테이너 + private let mainVerticalStack = UIStackView().then { + $0.axis = .vertical + $0.spacing = 0 + $0.alignment = .fill + $0.distribution = .fill + } + + // 컴포넌트 뷰들 + private let headerView = BookListHeaderView() + private let seriesButtonsView = SeriesButtonsView() + private let bookCardView = BookCardView() + private let bookDetailsView = BookDetailsView() + private let chaptersView = ChaptersView() + + // MARK: - 스크롤 영역 + + private let scrollView = UIScrollView().then { + $0.showsVerticalScrollIndicator = false + $0.showsHorizontalScrollIndicator = false + } + private let scrollContentView = UIView() + private let scrollStack = UIStackView.vertical(spacing: 24, alignment: .fill, distribution: .fill) + + // MARK: - Life cycle + + public override func addView() { + super.addView() + addSubview(rootView) + addSubview(skeletonView) + setupViewHierarchy() + setupConstraints() + + // 초기에는 스켈레톤 뷰 표시 + showSkeleton() + } + + private func setupViewHierarchy() { + // 메인 구조 설정 + rootView.addSubviews(mainVerticalStack) + mainVerticalStack.addArrangedSubviews(headerView, seriesButtonsView, scrollView) + + // 간격 설정 + mainVerticalStack.setCustomSpacing(24, after: headerView) + mainVerticalStack.setCustomSpacing(16, after: seriesButtonsView) + + // 스크롤 내부 구조 + scrollView.addSubviews(scrollContentView) + scrollContentView.addSubviews(scrollStack) + + // 스크롤 스택에 컴포넌트 추가 + scrollStack.addArrangedSubviews(bookCardView, bookDetailsView, chaptersView) + + // ✅ 하단 safe area padding view 추가 + let bottomSpacer = UIView() + scrollStack.addArrangedSubview(bottomSpacer) + bottomSpacer.snp.makeConstraints { make in + // safe area bottom inset만큼 확보 + make.height.equalTo(self.safeAreaInsets.bottom).priority(.required) + } + + scrollStack.setCustomSpacing(20, after: bookCardView) + + } + + private func setupConstraints() { + // rootView: 안전영역 + rootView.snp.makeConstraints { make in + make.edges.equalTo(self.safeAreaLayoutGuide) + } + + // skeletonView: 안전영역 + skeletonView.snp.makeConstraints { make in + make.edges.equalTo(self.safeAreaLayoutGuide) + } + + // 메인 스택: 상단 여백 + 좌우 20 + 하단 고정 + mainVerticalStack.snp.makeConstraints { make in + make.top.equalToSuperview().offset(20) + make.leading.equalToSuperview().offset(20) + make.trailing.equalToSuperview().offset(-20) + make.bottom.equalToSuperview() + } + + // 스크롤 컨텐츠 고정 패턴 + scrollContentView.snp.makeConstraints { make in + make.edges.equalTo(scrollView.contentLayoutGuide) + make.width.equalTo(scrollView.frameLayoutGuide) + } + scrollStack.snp.makeConstraints { make in + make.edges.equalToSuperview() + } + } + + // MARK: - Public API + + public func configure( + title: String, + author: String, + releasedDate: String, + pages: Int, + seriesNumber: Int? = nil, + totalSeries: Int? = nil, + image: String? = nil, + dedication: String, + summary: String, + chapters: [String] = [] + ) { + // 헤더 설정 + headerView.configure(title: title, seriesNumber: seriesNumber) + + // 카드 설정 + let cardData = BookCardView.BookCardData( + title: title, + author: author, + releaseDate: releasedDate, + pages: pages, + image: image + ) + bookCardView.configure(with: cardData) + + // 상세 정보 설정 + let detailsData = BookDetailsView.BookDetailsData( + dedication: dedication, + summary: summary + ) + bookDetailsView.configure(with: detailsData) + + // 목차 설정 + chaptersView.configure(chapters: chapters) + } + + public func applySummaryExpanded(_ expanded: Bool, fullText: String) { + bookDetailsView.applySummaryExpanded(expanded, fullText: fullText) + } + + // MARK: - Component Access (for ViewController) + + public var foldSummaryButton: UIButton { + return bookDetailsView.foldSummaryButton + } + + // MARK: - Series Buttons Setup + + public func setupSeriesButtons(count: Int) { + seriesButtonsView.setupButtons(count: count) + } + + public func updateSelectedSeriesButton(index: Int) { + seriesButtonsView.updateSelectedButton(index: index) + } + + public func getSeriesButtons() -> [UIButton] { + return seriesButtonsView.getButtons() + } + + // MARK: - Loading State Management + + public func showSkeleton() { + skeletonView.isHidden = false + rootView.isHidden = true + } + + public func hideSkeleton() { + skeletonView.stopShimmerAnimation() + skeletonView.isHidden = true + rootView.isHidden = false + } + + public func showLoading() { + showSkeleton() + } + + public func hideLoading() { + hideSkeleton() + } +} + diff --git a/Projects/Presentation/Presentation/Sources/BookList/View/Components/BookCardView.swift b/Projects/Presentation/Presentation/Sources/BookList/View/Components/BookCardView.swift new file mode 100644 index 0000000..65d349e --- /dev/null +++ b/Projects/Presentation/Presentation/Sources/BookList/View/Components/BookCardView.swift @@ -0,0 +1,156 @@ +// +// BookCardView.swift +// Presentation +// +// Created by Claude on 9/10/25. +// + +import UIKit +import Shared +import SnapKit +import Then + +public final class BookCardView: BaseView { + + // MARK: - UI Components + + private let cardContainer = UIView.makeContainer(.init(backgroundColor: .clear, cornerRadius: 12)) + private let cardHorizontalStack = UIStackView.horizontal(spacing: 16, alignment: .leading) + + private lazy var bookImageView = UIImageView().then { + $0.backgroundColor = .systemGray5 + $0.contentMode = .scaleAspectFit + $0.clipsToBounds = true + $0.layer.cornerRadius = 8 + + // placeholder + let label = UILabel.createLabel( + for: "Book\nImage", + family: .regular, + size: 12, + color: .gray40 + ).then { + $0.numberOfLines = 2 + $0.textAlignment = .center + } + $0.addSubview(label) + label.snp.makeConstraints { $0.center.equalToSuperview() } + } + + private lazy var cardInfoVerticalStack = UIStackView.vertical(spacing: 4, alignment: .leading, distribution: .fill) + + private lazy var cardTitleLabel = UILabel.createLabel( + for: "Harry Potter and the Philosopher's Stone", + family: .bold, + size: 20, + color: .basicBlack + ).then { + $0.numberOfLines = 0 + $0.lineBreakMode = .byWordWrapping + $0.textAlignment = .left + } + + private lazy var authorLabel = UILabel.createLabel( + for: "J. K. Rowling", + family: .medium, + size: 14, + color: .basicBlack + ) + + private lazy var releasedDateLabel = UILabel.createLabel( + for: "Released June 26, 1997", + family: .regular, + size: 12, + color: .systemGray + ) + + private lazy var pagesLabel = UILabel.createLabel( + for: "Pages 223", + family: .regular, + size: 12, + color: .systemGray + ) + + // MARK: - Life cycle + + public override func addView() { + super.addView() + setupViewHierarchy() + setupConstraints() + } + + private func setupViewHierarchy() { + addSubviews(cardContainer) + cardContainer.addSubviews(cardHorizontalStack) + cardHorizontalStack.addArrangedSubviews(bookImageView, cardInfoVerticalStack) + cardInfoVerticalStack.addArrangedSubviews(cardTitleLabel, authorLabel, releasedDateLabel, pagesLabel) + } + + private func setupConstraints() { + cardContainer.snp.makeConstraints { make in + make.edges.equalToSuperview() + } + + cardHorizontalStack.snp.makeConstraints { make in + make.top.equalToSuperview().offset(8) + make.leading.equalToSuperview().offset(16) + make.trailing.equalToSuperview().offset(-16) + make.bottom.equalToSuperview().offset(-8) + } + + bookImageView.snp.makeConstraints { make in + make.width.equalTo(80) + make.height.equalTo(120) + } + } + + // MARK: - Public Methods + + public struct BookCardData { + let title: String + let author: String + let releaseDate: String + let pages: Int + let image: String? + } + + public func configure(with data: BookCardData) { + cardTitleLabel.text = data.title + + authorLabel.text = "Author \(data.author)" + authorLabel.textColor = .basicBlack + authorLabel.font = UIFont.pretendardFont(family: .medium, size: 14) + + releasedDateLabel.text = "Released \(data.releaseDate.toLongUSDate() ?? data.releaseDate)" + releasedDateLabel.textColor = .systemGray + releasedDateLabel.font = UIFont.pretendardFont(family: .regular, size: 12) + + pagesLabel.text = "Pages \(data.pages)" + pagesLabel.textColor = .systemGray + pagesLabel.font = UIFont.pretendardFont(family: .regular, size: 12) + + bookImageView.image = UIImage(assetName: data.image ?? "") + bookImageView.subviews.first?.isHidden = (bookImageView.image != nil) + } + + public func setTitle(_ title: String) { + cardTitleLabel.text = title + } + + public func setAuthor(_ author: String) { + authorLabel.text = "Author \(author)" + } + + public func setReleaseDate(_ date: String) { + releasedDateLabel.text = "Released \(date.toLongUSDate() ?? date)" + } + + public func setPages(_ pages: Int) { + pagesLabel.text = "Pages \(pages)" + } + + public func setImage(_ image: String?) { + bookImageView.image = UIImage(assetName: image ?? "") + bookImageView.subviews.first?.isHidden = (bookImageView.image != nil) + } +} \ No newline at end of file diff --git a/Projects/Presentation/Presentation/Sources/BookList/View/Components/BookDetailsView.swift b/Projects/Presentation/Presentation/Sources/BookList/View/Components/BookDetailsView.swift new file mode 100644 index 0000000..4801591 --- /dev/null +++ b/Projects/Presentation/Presentation/Sources/BookList/View/Components/BookDetailsView.swift @@ -0,0 +1,160 @@ +// +// BookDetailsView.swift +// Presentation +// +// Created by Claude on 9/10/25. +// + +import UIKit +import Shared +import SnapKit +import Then + +public final class BookDetailsView: BaseView { + + // MARK: - UI Components + + private let bookDetailsContainer = UIView.makeContainer(.init(backgroundColor: .clear)) + + private lazy var dedicationStack = UIStackView.vertical(spacing: 8, alignment: .leading, distribution: .fill) + + private lazy var dedicationTitleLabel = UILabel.createLabel( + for: "Dedication", + family: .bold, + size: 18, + color: .basicBlack + ) + + private lazy var dedicationTextLabel = UILabel.createLabel( + for: "Dedication Summary", + family: .regular, + size: 14, + color: .darkGray.withAlphaComponent(0.5) + ).then { + $0.textAlignment = .left + $0.numberOfLines = 0 + } + + private lazy var summaryStack = UIStackView.vertical(spacing: 8, alignment: .leading, distribution: .fill) + + private lazy var summaryTitleLabel = UILabel.createLabel( + for: "Summary", + family: .bold, + size: 18, + color: .basicBlack + ) + + private lazy var summaryTextLabel = UILabel.createLabel( + for: "Summary Text", + family: .regular, + size: 14, + color: .darkGray.withAlphaComponent(0.5) + ).then { + $0.textAlignment = .left + $0.numberOfLines = 0 + } + + // Summary 토글 버튼 (우측 정렬) + public lazy var foldSummaryButton = UIButton() + .create(.summaryToggle, title: "더보기") + .then { + $0.contentHorizontalAlignment = .right + $0.setContentHuggingPriority(.defaultLow, for: .horizontal) + } + + // MARK: - Properties + + private var fullSummaryText: String = "" + private var isSummaryExpanded: Bool = false + + // MARK: - Life cycle + + public override func addView() { + super.addView() + setupViewHierarchy() + setupConstraints() + } + + private func setupViewHierarchy() { + addSubviews(bookDetailsContainer) + bookDetailsContainer.addSubviews(dedicationStack, summaryStack) + dedicationStack.addArrangedSubviews(dedicationTitleLabel, dedicationTextLabel) + summaryStack.addArrangedSubviews(summaryTitleLabel, summaryTextLabel, foldSummaryButton) + } + + private func setupConstraints() { + bookDetailsContainer.snp.makeConstraints { make in + make.edges.equalToSuperview() + } + + dedicationStack.snp.makeConstraints { make in + make.top.equalToSuperview().offset(0) + make.leading.equalToSuperview().offset(20) + make.trailing.equalToSuperview().offset(-20) + } + + summaryStack.snp.makeConstraints { make in + make.top.equalTo(dedicationStack.snp.bottom).offset(24) + make.leading.equalToSuperview().offset(20) + make.trailing.equalToSuperview().offset(-20) + make.bottom.equalToSuperview() + } + + // Summary 버튼: 스택 내부에서 우측 정렬 + foldSummaryButton.snp.makeConstraints { make in + make.trailing.equalToSuperview() + make.leading.greaterThanOrEqualToSuperview() + } + } + + // MARK: - Public Methods + + public struct BookDetailsData { + let dedication: String + let summary: String + } + + public func configure(with data: BookDetailsData) { + dedicationTextLabel.text = data.dedication + setSummary(data.summary) + } + + public func setDedication(_ dedication: String) { + dedicationTextLabel.text = dedication + } + + public func setSummary(_ summary: String) { + fullSummaryText = summary + updateSummaryUI() + } + + public func applySummaryExpanded(_ expanded: Bool, fullText: String) { + isSummaryExpanded = expanded + fullSummaryText = fullText + updateSummaryUI() + } + + public func toggleSummary() { + isSummaryExpanded.toggle() + updateSummaryUI() + } + + // MARK: - Private Methods + + private func updateSummaryUI() { + let needsButton = fullSummaryText.count >= 450 + foldSummaryButton.isHidden = !needsButton + + if needsButton { + if isSummaryExpanded { + summaryTextLabel.text = fullSummaryText + foldSummaryButton.setTitle("접기", for: .normal) + } else { + summaryTextLabel.text = fullSummaryText.truncated(to: 450) + foldSummaryButton.setTitle("더보기", for: .normal) + } + } else { + summaryTextLabel.text = fullSummaryText + } + } +} \ No newline at end of file diff --git a/Projects/Presentation/Presentation/Sources/BookList/View/Components/BookListHeaderView.swift b/Projects/Presentation/Presentation/Sources/BookList/View/Components/BookListHeaderView.swift new file mode 100644 index 0000000..b302cc5 --- /dev/null +++ b/Projects/Presentation/Presentation/Sources/BookList/View/Components/BookListHeaderView.swift @@ -0,0 +1,93 @@ +// +// BookListHeaderView.swift +// Presentation +// +// Created by Claude on 9/10/25. +// + +import UIKit +import Shared +import SnapKit +import Then + +public final class BookListHeaderView: BaseView { + + // MARK: - UI Components + + private lazy var mainTitleLabel = UILabel.createLabel( + for: "Harry Potter and the Philosopher's Stone", + family: .bold, + size: 24, + color: .basicBlack + ).then { + $0.numberOfLines = 0 + $0.textAlignment = .center + $0.lineBreakMode = .byWordWrapping + } + + private lazy var mainSeriesNumberLabel = UILabel.createLabel( + for: "1", + family: .bold, + size: 18, + color: .staticWhite + ).then { + $0.textAlignment = .center + $0.backgroundColor = .blue50.withAlphaComponent(0.6) + $0.layer.cornerRadius = 25 + $0.clipsToBounds = true + } + + // MARK: - Life cycle + + public override func addView() { + super.addView() + setupViewHierarchy() + setupConstraints() + } + + private func setupViewHierarchy() { + addSubviews(mainTitleLabel, mainSeriesNumberLabel) + } + + private func setupConstraints() { + mainTitleLabel.snp.makeConstraints { make in + make.top.equalToSuperview() + make.leading.equalToSuperview().offset(20) + make.trailing.equalToSuperview().offset(-20) + make.centerX.equalToSuperview() + } + + mainSeriesNumberLabel.snp.makeConstraints { make in + make.top.equalTo(mainTitleLabel.snp.bottom).offset(16) + make.centerX.equalToSuperview() + make.width.height.equalTo(50) + make.bottom.equalToSuperview() + } + } + + // MARK: - Public Methods + + public func configure(title: String, seriesNumber: Int?) { + mainTitleLabel.text = title + + if let seriesNumber { + mainSeriesNumberLabel.text = "\(seriesNumber)" + mainSeriesNumberLabel.isHidden = false + } else { + mainSeriesNumberLabel.isHidden = true + } + } + + public func setTitle(_ title: String) { + mainTitleLabel.text = title + } + + public func setSeriesNumber(_ number: Int) { + mainSeriesNumberLabel.text = "\(number)" + mainSeriesNumberLabel.isHidden = false + } + + public func hideSeriesNumber() { + mainSeriesNumberLabel.isHidden = true + } +} \ No newline at end of file diff --git a/Projects/Presentation/Presentation/Sources/BookList/View/Components/ChaptersView.swift b/Projects/Presentation/Presentation/Sources/BookList/View/Components/ChaptersView.swift new file mode 100644 index 0000000..da6879c --- /dev/null +++ b/Projects/Presentation/Presentation/Sources/BookList/View/Components/ChaptersView.swift @@ -0,0 +1,100 @@ +// +// ChaptersView.swift +// Presentation +// +// Created by Claude on 9/10/25. +// + +import UIKit +import Shared +import SnapKit +import Then + +public final class ChaptersView: BaseView { + + // MARK: - UI Components + + private let chaptersContainer = UIView() + + private let chaptersTitleLabel = UILabel.createLabel( + for: "Chapters", + family: .bold, + size: 18, + color: .basicBlack + ).then { + $0.textAlignment = .left + } + + private let chaptersListStack = UIStackView.vertical( + spacing: 8, + alignment: .leading, + distribution: .fill + ) + + // MARK: - Life cycle + + public override func addView() { + super.addView() + setupViewHierarchy() + setupConstraints() + } + + private func setupViewHierarchy() { + addSubviews(chaptersContainer) + chaptersContainer.addSubviews(chaptersTitleLabel, chaptersListStack) + } + + private func setupConstraints() { + chaptersContainer.snp.makeConstraints { make in + make.edges.equalToSuperview() + } + + chaptersTitleLabel.snp.makeConstraints { make in + make.top.equalToSuperview().offset(0) + make.leading.equalToSuperview().offset(20) + make.trailing.equalToSuperview().offset(-20) + } + + chaptersListStack.snp.makeConstraints { make in + make.top.equalTo(chaptersTitleLabel.snp.bottom).offset(8) + make.leading.equalToSuperview().offset(20) + make.trailing.equalToSuperview().offset(-20) + make.bottom.equalToSuperview() + } + } + + // MARK: - Public Methods + + public func configure(chapters: [String]) { + setChapters(chapters) + } + + public func setChapters(_ chapters: [String]) { + // 기존 제거 + clearChapters() + + // 새 목차 추가 + for title in chapters { + let label = createChapterLabel(title: title) + chaptersListStack.addArrangedSubview(label) + } + } + + // MARK: - Private Methods + + private func createChapterLabel(title: String) -> UILabel { + let label = UILabel() + label.text = title + label.font = .systemFont(ofSize: 14) + label.textColor = .darkGray + label.numberOfLines = 0 + return label + } + + private func clearChapters() { + chaptersListStack.arrangedSubviews.forEach { + chaptersListStack.removeArrangedSubview($0) + $0.removeFromSuperview() + } + } +} \ No newline at end of file diff --git a/Projects/Presentation/Presentation/Sources/BookList/View/Components/SeriesButtonsView.swift b/Projects/Presentation/Presentation/Sources/BookList/View/Components/SeriesButtonsView.swift new file mode 100644 index 0000000..ed602cb --- /dev/null +++ b/Projects/Presentation/Presentation/Sources/BookList/View/Components/SeriesButtonsView.swift @@ -0,0 +1,151 @@ +// +// SeriesButtonsView.swift +// Presentation +// +// Created by Claude on 9/10/25. +// + +import UIKit +import Shared +import SnapKit +import Then + +public final class SeriesButtonsView: BaseView { + + // MARK: - UI Components + + private let seriesScrollView = UIScrollView().then { + $0.showsVerticalScrollIndicator = false + $0.showsHorizontalScrollIndicator = false + } + + private let seriesButtonStack = UIStackView.horizontal(spacing: 12, alignment: .center, distribution: .equalSpacing) + + // MARK: - Properties + + private var seriesButtons: [UIButton] = [] + private let minButtonSpacing: CGFloat = 12 + private let maxButtonSpacing: CGFloat = 24 + + // MARK: - Life cycle + + public override func addView() { + super.addView() + setupViewHierarchy() + setupConstraints() + } + + public override func layoutSubviews() { + super.layoutSubviews() + updateScrollViewContentInset() + } + + private func setupViewHierarchy() { + addSubviews(seriesScrollView) + seriesScrollView.addSubviews(seriesButtonStack) + } + + private func setupConstraints() { + seriesScrollView.snp.makeConstraints { make in + make.edges.equalToSuperview() + make.height.equalTo(44) + } + + seriesButtonStack.snp.makeConstraints { make in + make.top.bottom.equalTo(seriesScrollView.contentLayoutGuide) + make.height.equalTo(seriesScrollView.frameLayoutGuide) + make.leading.trailing.equalTo(seriesScrollView.contentLayoutGuide).inset(20) + } + } + + // MARK: - Public Methods + + public func setupButtons(count: Int) { + // 기존 버튼들 제거 + clearButtons() + + // count가 0 이하이면 버튼 생성하지 않음 + guard count > 0 else { return } + + // 데이터 개수에 맞게 시리즈 버튼 생성 + for i in 1...count { + let button = createSeriesButton(number: i, index: i - 1) + seriesButtons.append(button) + seriesButtonStack.addArrangedSubview(button) + + // 버튼 크기 제약 + button.snp.makeConstraints { make in + make.width.height.equalTo(44) + } + } + + // 첫 번째 버튼을 선택 상태로 설정 + updateSelectedButton(index: 0) + + // 레이아웃 업데이트 후 contentInset 조정 + setNeedsLayout() + layoutIfNeeded() + } + + public func updateSelectedButton(index: Int) { + // ViewController에서 전달받은 인덱스로 UI만 업데이트 + seriesButtons.enumerated().forEach { (buttonIndex, button) in + if buttonIndex == index { + button.isSelected = true + button.backgroundColor = .blue50.withAlphaComponent(0.6) + } else { + button.isSelected = false + button.backgroundColor = .gray.withAlphaComponent(0.3) + } + } + } + + public func getButtons() -> [UIButton] { + return seriesButtons + } + + // MARK: - Private Methods + + private func updateScrollViewContentInset() { + // 컨텐츠 너비 계산 (버튼 개수 * 버튼 너비 + 스페이싱 + 좌우 패딩) + let buttonWidth: CGFloat = 44 + let spacing: CGFloat = 12 + let horizontalPadding: CGFloat = 40 // 좌우 패딩 (20 * 2) + let contentWidth = CGFloat(seriesButtons.count) * buttonWidth + + CGFloat(max(0, seriesButtons.count - 1)) * spacing + + horizontalPadding + + // 스크롤뷰의 너비 + let scrollViewWidth = seriesScrollView.frame.width + + // 컨텐츠가 스크롤뷰보다 작을 때만 중앙 정렬을 위한 inset 적용 + if contentWidth < scrollViewWidth { + let horizontalInset = (scrollViewWidth - contentWidth) / 2 + seriesScrollView.contentInset = UIEdgeInsets(top: 0, left: horizontalInset, bottom: 0, right: horizontalInset) + } else { + // 컨텐츠가 스크롤뷰보다 크면 기본 inset + seriesScrollView.contentInset = .zero + } + } + + private func createSeriesButton(number: Int, index: Int) -> UIButton { + return UIButton().then { + $0.setTitle("\(number)", for: .normal) + $0.titleLabel?.font = UIFont.pretendardFont(family: .medium, size: 16) + $0.setTitleColor(.basicBlack, for: .normal) + $0.setTitleColor(.staticWhite, for: .selected) + $0.backgroundColor = .gray.withAlphaComponent(0.3) + $0.layer.cornerRadius = 22 + $0.clipsToBounds = true + $0.tag = index // 0-based index for seriesSelected action + } + } + + private func clearButtons() { + seriesButtons.forEach { button in + seriesButtonStack.removeArrangedSubview(button) + button.removeFromSuperview() + } + seriesButtons.removeAll() + } +} diff --git a/Projects/Presentation/Presentation/Sources/Exported/PresentationExported.swift b/Projects/Presentation/Presentation/Sources/Exported/PresentationExported.swift new file mode 100644 index 0000000..048b00b --- /dev/null +++ b/Projects/Presentation/Presentation/Sources/Exported/PresentationExported.swift @@ -0,0 +1,10 @@ +// +// PresentationExported.swift +// Presentation +// +// Created by Wonji Suh on 9/5/25. +// + + +// MARK: - 여기에 한번에 호출 할꺼 추가 +//@_exported import Service diff --git a/Projects/Shared/DesignSystem/Derived/InfoPlists/DesignSystem-Debug-Info.plist b/Projects/Shared/DesignSystem/Derived/InfoPlists/DesignSystem-Debug-Info.plist new file mode 100644 index 0000000..323e5ec --- /dev/null +++ b/Projects/Shared/DesignSystem/Derived/InfoPlists/DesignSystem-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/Shared/DesignSystem/Derived/InfoPlists/DesignSystem-Info.plist b/Projects/Shared/DesignSystem/Derived/InfoPlists/DesignSystem-Info.plist new file mode 100644 index 0000000..323e5ec --- /dev/null +++ b/Projects/Shared/DesignSystem/Derived/InfoPlists/DesignSystem-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/Shared/DesignSystem/Derived/InfoPlists/DesignSystem-Prod-Info.plist b/Projects/Shared/DesignSystem/Derived/InfoPlists/DesignSystem-Prod-Info.plist new file mode 100644 index 0000000..323e5ec --- /dev/null +++ b/Projects/Shared/DesignSystem/Derived/InfoPlists/DesignSystem-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/Shared/DesignSystem/Derived/InfoPlists/DesignSystem-Stage-Info.plist b/Projects/Shared/DesignSystem/Derived/InfoPlists/DesignSystem-Stage-Info.plist new file mode 100644 index 0000000..323e5ec --- /dev/null +++ b/Projects/Shared/DesignSystem/Derived/InfoPlists/DesignSystem-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/Shared/DesignSystem/Derived/InfoPlists/DesignSystemTests-Info.plist b/Projects/Shared/DesignSystem/Derived/InfoPlists/DesignSystemTests-Info.plist new file mode 100644 index 0000000..6c40a6c --- /dev/null +++ b/Projects/Shared/DesignSystem/Derived/InfoPlists/DesignSystemTests-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/Shared/DesignSystem/Derived/InfoPlists/DesignSystem_DesignSystem-Info.plist b/Projects/Shared/DesignSystem/Derived/InfoPlists/DesignSystem_DesignSystem-Info.plist new file mode 100644 index 0000000..04ffbaa --- /dev/null +++ b/Projects/Shared/DesignSystem/Derived/InfoPlists/DesignSystem_DesignSystem-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/Shared/DesignSystem/Derived/InfoPlists/DesignSystem_DesignSystem_Debug-Info.plist b/Projects/Shared/DesignSystem/Derived/InfoPlists/DesignSystem_DesignSystem_Debug-Info.plist new file mode 100644 index 0000000..04ffbaa --- /dev/null +++ b/Projects/Shared/DesignSystem/Derived/InfoPlists/DesignSystem_DesignSystem_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/Shared/DesignSystem/Derived/InfoPlists/DesignSystem_DesignSystem_Prod-Info.plist b/Projects/Shared/DesignSystem/Derived/InfoPlists/DesignSystem_DesignSystem_Prod-Info.plist new file mode 100644 index 0000000..04ffbaa --- /dev/null +++ b/Projects/Shared/DesignSystem/Derived/InfoPlists/DesignSystem_DesignSystem_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/Shared/DesignSystem/Derived/InfoPlists/DesignSystem_DesignSystem_Stage-Info.plist b/Projects/Shared/DesignSystem/Derived/InfoPlists/DesignSystem_DesignSystem_Stage-Info.plist new file mode 100644 index 0000000..04ffbaa --- /dev/null +++ b/Projects/Shared/DesignSystem/Derived/InfoPlists/DesignSystem_DesignSystem_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/Shared/DesignSystem/Derived/Sources/TuistAssets+DesignSystem.swift b/Projects/Shared/DesignSystem/Derived/Sources/TuistAssets+DesignSystem.swift new file mode 100644 index 0000000..4eadfe4 --- /dev/null +++ b/Projects/Shared/DesignSystem/Derived/Sources/TuistAssets+DesignSystem.swift @@ -0,0 +1,85 @@ +// 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 DesignSystemAsset: Sendable { + public static let harrypotter1 = DesignSystemImages(name: "harrypotter1") + public static let harrypotter2 = DesignSystemImages(name: "harrypotter2") + public static let harrypotter3 = DesignSystemImages(name: "harrypotter3") + public static let harrypotter4 = DesignSystemImages(name: "harrypotter4") + public static let harrypotter5 = DesignSystemImages(name: "harrypotter5") + public static let harrypotter6 = DesignSystemImages(name: "harrypotter6") + public static let harrypotter7 = DesignSystemImages(name: "harrypotter7") +} + +// MARK: - Implementation Details + +public struct DesignSystemImages: Sendable { + public let name: String + + #if os(macOS) + public typealias Image = NSImage + #elseif os(iOS) || os(tvOS) || os(watchOS) || os(visionOS) + public typealias Image = UIImage + #endif + + public var image: Image { + let bundle = Bundle.module + #if os(iOS) || os(tvOS) || os(visionOS) + let image = Image(named: name, in: bundle, compatibleWith: nil) + #elseif os(macOS) + let image = bundle.image(forResource: NSImage.Name(name)) + #elseif os(watchOS) + let image = Image(named: name) + #endif + guard let result = image else { + fatalError("Unable to load image asset named \(name).") + } + return result + } + + #if canImport(SwiftUI) + @available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, visionOS 1.0, *) + public var swiftUIImage: SwiftUI.Image { + SwiftUI.Image(asset: self) + } + #endif +} + +#if canImport(SwiftUI) +@available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, visionOS 1.0, *) +public extension SwiftUI.Image { + init(asset: DesignSystemImages) { + let bundle = Bundle.module + self.init(asset.name, bundle: bundle) + } + + init(asset: DesignSystemImages, label: Text) { + let bundle = Bundle.module + self.init(asset.name, bundle: bundle, label: label) + } + + init(decorative asset: DesignSystemImages) { + let bundle = Bundle.module + self.init(decorative: asset.name, bundle: bundle) + } +} +#endif + +// swiftformat:enable all +// swiftlint:enable all diff --git a/Projects/Shared/DesignSystem/Derived/Sources/TuistAssets+DesignSystemDebug.swift b/Projects/Shared/DesignSystem/Derived/Sources/TuistAssets+DesignSystemDebug.swift new file mode 100644 index 0000000..5f83c7e --- /dev/null +++ b/Projects/Shared/DesignSystem/Derived/Sources/TuistAssets+DesignSystemDebug.swift @@ -0,0 +1,85 @@ +// 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 DesignSystemDebugAsset: Sendable { + public static let harrypotter1 = DesignSystemDebugImages(name: "harrypotter1") + public static let harrypotter2 = DesignSystemDebugImages(name: "harrypotter2") + public static let harrypotter3 = DesignSystemDebugImages(name: "harrypotter3") + public static let harrypotter4 = DesignSystemDebugImages(name: "harrypotter4") + public static let harrypotter5 = DesignSystemDebugImages(name: "harrypotter5") + public static let harrypotter6 = DesignSystemDebugImages(name: "harrypotter6") + public static let harrypotter7 = DesignSystemDebugImages(name: "harrypotter7") +} + +// MARK: - Implementation Details + +public struct DesignSystemDebugImages: Sendable { + public let name: String + + #if os(macOS) + public typealias Image = NSImage + #elseif os(iOS) || os(tvOS) || os(watchOS) || os(visionOS) + public typealias Image = UIImage + #endif + + public var image: Image { + let bundle = Bundle.module + #if os(iOS) || os(tvOS) || os(visionOS) + let image = Image(named: name, in: bundle, compatibleWith: nil) + #elseif os(macOS) + let image = bundle.image(forResource: NSImage.Name(name)) + #elseif os(watchOS) + let image = Image(named: name) + #endif + guard let result = image else { + fatalError("Unable to load image asset named \(name).") + } + return result + } + + #if canImport(SwiftUI) + @available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, visionOS 1.0, *) + public var swiftUIImage: SwiftUI.Image { + SwiftUI.Image(asset: self) + } + #endif +} + +#if canImport(SwiftUI) +@available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, visionOS 1.0, *) +public extension SwiftUI.Image { + init(asset: DesignSystemDebugImages) { + let bundle = Bundle.module + self.init(asset.name, bundle: bundle) + } + + init(asset: DesignSystemDebugImages, label: Text) { + let bundle = Bundle.module + self.init(asset.name, bundle: bundle, label: label) + } + + init(decorative asset: DesignSystemDebugImages) { + let bundle = Bundle.module + self.init(decorative: asset.name, bundle: bundle) + } +} +#endif + +// swiftformat:enable all +// swiftlint:enable all diff --git a/Projects/Shared/DesignSystem/Derived/Sources/TuistAssets+DesignSystemProd.swift b/Projects/Shared/DesignSystem/Derived/Sources/TuistAssets+DesignSystemProd.swift new file mode 100644 index 0000000..4be458b --- /dev/null +++ b/Projects/Shared/DesignSystem/Derived/Sources/TuistAssets+DesignSystemProd.swift @@ -0,0 +1,85 @@ +// 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 DesignSystemProdAsset: Sendable { + public static let harrypotter1 = DesignSystemProdImages(name: "harrypotter1") + public static let harrypotter2 = DesignSystemProdImages(name: "harrypotter2") + public static let harrypotter3 = DesignSystemProdImages(name: "harrypotter3") + public static let harrypotter4 = DesignSystemProdImages(name: "harrypotter4") + public static let harrypotter5 = DesignSystemProdImages(name: "harrypotter5") + public static let harrypotter6 = DesignSystemProdImages(name: "harrypotter6") + public static let harrypotter7 = DesignSystemProdImages(name: "harrypotter7") +} + +// MARK: - Implementation Details + +public struct DesignSystemProdImages: Sendable { + public let name: String + + #if os(macOS) + public typealias Image = NSImage + #elseif os(iOS) || os(tvOS) || os(watchOS) || os(visionOS) + public typealias Image = UIImage + #endif + + public var image: Image { + let bundle = Bundle.module + #if os(iOS) || os(tvOS) || os(visionOS) + let image = Image(named: name, in: bundle, compatibleWith: nil) + #elseif os(macOS) + let image = bundle.image(forResource: NSImage.Name(name)) + #elseif os(watchOS) + let image = Image(named: name) + #endif + guard let result = image else { + fatalError("Unable to load image asset named \(name).") + } + return result + } + + #if canImport(SwiftUI) + @available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, visionOS 1.0, *) + public var swiftUIImage: SwiftUI.Image { + SwiftUI.Image(asset: self) + } + #endif +} + +#if canImport(SwiftUI) +@available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, visionOS 1.0, *) +public extension SwiftUI.Image { + init(asset: DesignSystemProdImages) { + let bundle = Bundle.module + self.init(asset.name, bundle: bundle) + } + + init(asset: DesignSystemProdImages, label: Text) { + let bundle = Bundle.module + self.init(asset.name, bundle: bundle, label: label) + } + + init(decorative asset: DesignSystemProdImages) { + let bundle = Bundle.module + self.init(decorative: asset.name, bundle: bundle) + } +} +#endif + +// swiftformat:enable all +// swiftlint:enable all diff --git a/Projects/Shared/DesignSystem/Derived/Sources/TuistAssets+DesignSystemStage.swift b/Projects/Shared/DesignSystem/Derived/Sources/TuistAssets+DesignSystemStage.swift new file mode 100644 index 0000000..c0cdd4c --- /dev/null +++ b/Projects/Shared/DesignSystem/Derived/Sources/TuistAssets+DesignSystemStage.swift @@ -0,0 +1,85 @@ +// 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 DesignSystemStageAsset: Sendable { + public static let harrypotter1 = DesignSystemStageImages(name: "harrypotter1") + public static let harrypotter2 = DesignSystemStageImages(name: "harrypotter2") + public static let harrypotter3 = DesignSystemStageImages(name: "harrypotter3") + public static let harrypotter4 = DesignSystemStageImages(name: "harrypotter4") + public static let harrypotter5 = DesignSystemStageImages(name: "harrypotter5") + public static let harrypotter6 = DesignSystemStageImages(name: "harrypotter6") + public static let harrypotter7 = DesignSystemStageImages(name: "harrypotter7") +} + +// MARK: - Implementation Details + +public struct DesignSystemStageImages: Sendable { + public let name: String + + #if os(macOS) + public typealias Image = NSImage + #elseif os(iOS) || os(tvOS) || os(watchOS) || os(visionOS) + public typealias Image = UIImage + #endif + + public var image: Image { + let bundle = Bundle.module + #if os(iOS) || os(tvOS) || os(visionOS) + let image = Image(named: name, in: bundle, compatibleWith: nil) + #elseif os(macOS) + let image = bundle.image(forResource: NSImage.Name(name)) + #elseif os(watchOS) + let image = Image(named: name) + #endif + guard let result = image else { + fatalError("Unable to load image asset named \(name).") + } + return result + } + + #if canImport(SwiftUI) + @available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, visionOS 1.0, *) + public var swiftUIImage: SwiftUI.Image { + SwiftUI.Image(asset: self) + } + #endif +} + +#if canImport(SwiftUI) +@available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, visionOS 1.0, *) +public extension SwiftUI.Image { + init(asset: DesignSystemStageImages) { + let bundle = Bundle.module + self.init(asset.name, bundle: bundle) + } + + init(asset: DesignSystemStageImages, label: Text) { + let bundle = Bundle.module + self.init(asset.name, bundle: bundle, label: label) + } + + init(decorative asset: DesignSystemStageImages) { + let bundle = Bundle.module + self.init(decorative: asset.name, bundle: bundle) + } +} +#endif + +// swiftformat:enable all +// swiftlint:enable all diff --git a/Projects/Shared/DesignSystem/Derived/Sources/TuistBundle+DesignSystem.swift b/Projects/Shared/DesignSystem/Derived/Sources/TuistBundle+DesignSystem.swift new file mode 100644 index 0000000..bb0bd68 --- /dev/null +++ b/Projects/Shared/DesignSystem/Derived/Sources/TuistBundle+DesignSystem.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 DesignSystem is a static framework, the bundle containing the resources is copied into the final product. + static let module: Bundle = { + let bundleName = "DesignSystem_DesignSystem" + 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 DesignSystem_DesignSystem") + }() +} +// MARK: - Objective-C Bundle Accessor +@objc +public class DesignSystemResources: 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/Shared/DesignSystem/Derived/Sources/TuistBundle+DesignSystemDebug.swift b/Projects/Shared/DesignSystem/Derived/Sources/TuistBundle+DesignSystemDebug.swift new file mode 100644 index 0000000..8b307c4 --- /dev/null +++ b/Projects/Shared/DesignSystem/Derived/Sources/TuistBundle+DesignSystemDebug.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 DesignSystem-Debug is a static framework, the bundle containing the resources is copied into the final product. + static let module: Bundle = { + let bundleName = "DesignSystem_DesignSystem_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 DesignSystem_DesignSystem_Debug") + }() +} +// MARK: - Objective-C Bundle Accessor +@objc +public class DesignSystemDebugResources: 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/Shared/DesignSystem/Derived/Sources/TuistBundle+DesignSystemProd.swift b/Projects/Shared/DesignSystem/Derived/Sources/TuistBundle+DesignSystemProd.swift new file mode 100644 index 0000000..94110e2 --- /dev/null +++ b/Projects/Shared/DesignSystem/Derived/Sources/TuistBundle+DesignSystemProd.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 DesignSystem-Prod is a static framework, the bundle containing the resources is copied into the final product. + static let module: Bundle = { + let bundleName = "DesignSystem_DesignSystem_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 DesignSystem_DesignSystem_Prod") + }() +} +// MARK: - Objective-C Bundle Accessor +@objc +public class DesignSystemProdResources: 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/Shared/DesignSystem/Derived/Sources/TuistBundle+DesignSystemStage.swift b/Projects/Shared/DesignSystem/Derived/Sources/TuistBundle+DesignSystemStage.swift new file mode 100644 index 0000000..d99971b --- /dev/null +++ b/Projects/Shared/DesignSystem/Derived/Sources/TuistBundle+DesignSystemStage.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 DesignSystem-Stage is a static framework, the bundle containing the resources is copied into the final product. + static let module: Bundle = { + let bundleName = "DesignSystem_DesignSystem_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 DesignSystem_DesignSystem_Stage") + }() +} +// MARK: - Objective-C Bundle Accessor +@objc +public class DesignSystemStageResources: 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/Shared/DesignSystem/Derived/Sources/TuistBundle+DesignSystemTests.swift b/Projects/Shared/DesignSystem/Derived/Sources/TuistBundle+DesignSystemTests.swift new file mode 100644 index 0000000..4d90c2b --- /dev/null +++ b/Projects/Shared/DesignSystem/Derived/Sources/TuistBundle+DesignSystemTests.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 DesignSystemTests 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 DesignSystemTestsResources: 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/Shared/DesignSystem/Derived/Sources/TuistFonts+DesignSystem.swift b/Projects/Shared/DesignSystem/Derived/Sources/TuistFonts+DesignSystem.swift new file mode 100644 index 0000000..e1daf0d --- /dev/null +++ b/Projects/Shared/DesignSystem/Derived/Sources/TuistFonts+DesignSystem.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 DesignSystemFontFamily: Sendable { + public enum PretendardVariable: Sendable { + public static let black = DesignSystemFontConvertible(name: "PretendardVariable-Black", family: "Pretendard Variable", path: "PretendardVariable.ttf") + public static let bold = DesignSystemFontConvertible(name: "PretendardVariable-Bold", family: "Pretendard Variable", path: "PretendardVariable.ttf") + public static let extraBold = DesignSystemFontConvertible(name: "PretendardVariable-ExtraBold", family: "Pretendard Variable", path: "PretendardVariable.ttf") + public static let extraLight = DesignSystemFontConvertible(name: "PretendardVariable-ExtraLight", family: "Pretendard Variable", path: "PretendardVariable.ttf") + public static let light = DesignSystemFontConvertible(name: "PretendardVariable-Light", family: "Pretendard Variable", path: "PretendardVariable.ttf") + public static let medium = DesignSystemFontConvertible(name: "PretendardVariable-Medium", family: "Pretendard Variable", path: "PretendardVariable.ttf") + public static let regular = DesignSystemFontConvertible(name: "PretendardVariable-Regular", family: "Pretendard Variable", path: "PretendardVariable.ttf") + public static let semiBold = DesignSystemFontConvertible(name: "PretendardVariable-SemiBold", family: "Pretendard Variable", path: "PretendardVariable.ttf") + public static let thin = DesignSystemFontConvertible(name: "PretendardVariable-Thin", family: "Pretendard Variable", path: "PretendardVariable.ttf") + public static let all: [DesignSystemFontConvertible] = [black, bold, extraBold, extraLight, light, medium, regular, semiBold, thin] + } + public static let allCustomFonts: [DesignSystemFontConvertible] = [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 DesignSystemFontConvertible: 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 DesignSystemFontConvertible.Font { + convenience init?(font: DesignSystemFontConvertible, 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/Shared/DesignSystem/Derived/Sources/TuistFonts+DesignSystemDebug.swift b/Projects/Shared/DesignSystem/Derived/Sources/TuistFonts+DesignSystemDebug.swift new file mode 100644 index 0000000..2d79211 --- /dev/null +++ b/Projects/Shared/DesignSystem/Derived/Sources/TuistFonts+DesignSystemDebug.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 DesignSystemDebugFontFamily: Sendable { + public enum PretendardVariable: Sendable { + public static let black = DesignSystemDebugFontConvertible(name: "PretendardVariable-Black", family: "Pretendard Variable", path: "PretendardVariable.ttf") + public static let bold = DesignSystemDebugFontConvertible(name: "PretendardVariable-Bold", family: "Pretendard Variable", path: "PretendardVariable.ttf") + public static let extraBold = DesignSystemDebugFontConvertible(name: "PretendardVariable-ExtraBold", family: "Pretendard Variable", path: "PretendardVariable.ttf") + public static let extraLight = DesignSystemDebugFontConvertible(name: "PretendardVariable-ExtraLight", family: "Pretendard Variable", path: "PretendardVariable.ttf") + public static let light = DesignSystemDebugFontConvertible(name: "PretendardVariable-Light", family: "Pretendard Variable", path: "PretendardVariable.ttf") + public static let medium = DesignSystemDebugFontConvertible(name: "PretendardVariable-Medium", family: "Pretendard Variable", path: "PretendardVariable.ttf") + public static let regular = DesignSystemDebugFontConvertible(name: "PretendardVariable-Regular", family: "Pretendard Variable", path: "PretendardVariable.ttf") + public static let semiBold = DesignSystemDebugFontConvertible(name: "PretendardVariable-SemiBold", family: "Pretendard Variable", path: "PretendardVariable.ttf") + public static let thin = DesignSystemDebugFontConvertible(name: "PretendardVariable-Thin", family: "Pretendard Variable", path: "PretendardVariable.ttf") + public static let all: [DesignSystemDebugFontConvertible] = [black, bold, extraBold, extraLight, light, medium, regular, semiBold, thin] + } + public static let allCustomFonts: [DesignSystemDebugFontConvertible] = [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 DesignSystemDebugFontConvertible: 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 DesignSystemDebugFontConvertible.Font { + convenience init?(font: DesignSystemDebugFontConvertible, 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/Shared/DesignSystem/Derived/Sources/TuistFonts+DesignSystemProd.swift b/Projects/Shared/DesignSystem/Derived/Sources/TuistFonts+DesignSystemProd.swift new file mode 100644 index 0000000..27d78f8 --- /dev/null +++ b/Projects/Shared/DesignSystem/Derived/Sources/TuistFonts+DesignSystemProd.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 DesignSystemProdFontFamily: Sendable { + public enum PretendardVariable: Sendable { + public static let black = DesignSystemProdFontConvertible(name: "PretendardVariable-Black", family: "Pretendard Variable", path: "PretendardVariable.ttf") + public static let bold = DesignSystemProdFontConvertible(name: "PretendardVariable-Bold", family: "Pretendard Variable", path: "PretendardVariable.ttf") + public static let extraBold = DesignSystemProdFontConvertible(name: "PretendardVariable-ExtraBold", family: "Pretendard Variable", path: "PretendardVariable.ttf") + public static let extraLight = DesignSystemProdFontConvertible(name: "PretendardVariable-ExtraLight", family: "Pretendard Variable", path: "PretendardVariable.ttf") + public static let light = DesignSystemProdFontConvertible(name: "PretendardVariable-Light", family: "Pretendard Variable", path: "PretendardVariable.ttf") + public static let medium = DesignSystemProdFontConvertible(name: "PretendardVariable-Medium", family: "Pretendard Variable", path: "PretendardVariable.ttf") + public static let regular = DesignSystemProdFontConvertible(name: "PretendardVariable-Regular", family: "Pretendard Variable", path: "PretendardVariable.ttf") + public static let semiBold = DesignSystemProdFontConvertible(name: "PretendardVariable-SemiBold", family: "Pretendard Variable", path: "PretendardVariable.ttf") + public static let thin = DesignSystemProdFontConvertible(name: "PretendardVariable-Thin", family: "Pretendard Variable", path: "PretendardVariable.ttf") + public static let all: [DesignSystemProdFontConvertible] = [black, bold, extraBold, extraLight, light, medium, regular, semiBold, thin] + } + public static let allCustomFonts: [DesignSystemProdFontConvertible] = [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 DesignSystemProdFontConvertible: 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 DesignSystemProdFontConvertible.Font { + convenience init?(font: DesignSystemProdFontConvertible, 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/Shared/DesignSystem/Derived/Sources/TuistFonts+DesignSystemStage.swift b/Projects/Shared/DesignSystem/Derived/Sources/TuistFonts+DesignSystemStage.swift new file mode 100644 index 0000000..19c9621 --- /dev/null +++ b/Projects/Shared/DesignSystem/Derived/Sources/TuistFonts+DesignSystemStage.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 DesignSystemStageFontFamily: Sendable { + public enum PretendardVariable: Sendable { + public static let black = DesignSystemStageFontConvertible(name: "PretendardVariable-Black", family: "Pretendard Variable", path: "PretendardVariable.ttf") + public static let bold = DesignSystemStageFontConvertible(name: "PretendardVariable-Bold", family: "Pretendard Variable", path: "PretendardVariable.ttf") + public static let extraBold = DesignSystemStageFontConvertible(name: "PretendardVariable-ExtraBold", family: "Pretendard Variable", path: "PretendardVariable.ttf") + public static let extraLight = DesignSystemStageFontConvertible(name: "PretendardVariable-ExtraLight", family: "Pretendard Variable", path: "PretendardVariable.ttf") + public static let light = DesignSystemStageFontConvertible(name: "PretendardVariable-Light", family: "Pretendard Variable", path: "PretendardVariable.ttf") + public static let medium = DesignSystemStageFontConvertible(name: "PretendardVariable-Medium", family: "Pretendard Variable", path: "PretendardVariable.ttf") + public static let regular = DesignSystemStageFontConvertible(name: "PretendardVariable-Regular", family: "Pretendard Variable", path: "PretendardVariable.ttf") + public static let semiBold = DesignSystemStageFontConvertible(name: "PretendardVariable-SemiBold", family: "Pretendard Variable", path: "PretendardVariable.ttf") + public static let thin = DesignSystemStageFontConvertible(name: "PretendardVariable-Thin", family: "Pretendard Variable", path: "PretendardVariable.ttf") + public static let all: [DesignSystemStageFontConvertible] = [black, bold, extraBold, extraLight, light, medium, regular, semiBold, thin] + } + public static let allCustomFonts: [DesignSystemStageFontConvertible] = [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 DesignSystemStageFontConvertible: 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 DesignSystemStageFontConvertible.Font { + convenience init?(font: DesignSystemStageFontConvertible, 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/Shared/DesignSystem/DesignSystem.xcodeproj/project.pbxproj b/Projects/Shared/DesignSystem/DesignSystem.xcodeproj/project.pbxproj new file mode 100644 index 0000000..41fc592 --- /dev/null +++ b/Projects/Shared/DesignSystem/DesignSystem.xcodeproj/project.pbxproj @@ -0,0 +1,2215 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 55; + objects = { + +/* Begin PBXBuildFile section */ + 02086E956F0BCAD214D8D7F4 /* PretendardVariable.ttf in Resources */ = {isa = PBXBuildFile; fileRef = A20647CF23B131D16DCAB555 /* PretendardVariable.ttf */; }; + 030D39D707AB3BCF4B40E507 /* Sharing.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C8F7D85DCA3E9D25ADED069C /* Sharing.framework */; }; + 0332DA7CA35D431B1DB265D9 /* Sharing1.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 81AE6D1B890D432B9EF75587 /* Sharing1.framework */; }; + 03E1F3ADEF42E78FFBE78441 /* TuistBundle+DesignSystemTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BCDB7A8C7AFCCBADBDBBD94 /* TuistBundle+DesignSystemTests.swift */; }; + 04E11CD30C06369FF371925B /* CasePathsCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6B42EA0AFB8C59B4DAD38868 /* CasePathsCore.framework */; }; + 06D16B1B1B957D3A84E4CDA5 /* BaseViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DDB65E50E9A40944ADEEDB2 /* BaseViewController.swift */; }; + 0E71762241059BF3166A881A /* ComposableArchitecture.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 2B4A427439EE9D505B327761 /* ComposableArchitecture.framework */; }; + 1182CCB9EADDE65BAC4986F0 /* Extension+UiStack.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00F600C0502DF200CC0304ED /* Extension+UiStack.swift */; }; + 11C8E34547D88D53D0191C17 /* PerceptionCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 820CBF0A1EAF51B0F1668443 /* PerceptionCore.framework */; }; + 164B83516C13A4829B5B695A /* swift-sharing_Sharing.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 5DF9D9AFD325FE508D5CE09B /* swift-sharing_Sharing.bundle */; }; + 16A82F835B12CE4A0F63F226 /* Clocks.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A8E4F9B5ED6A58F34C4E9188 /* Clocks.framework */; }; + 1A2A8052202F6956AA87272B /* Extension+UiView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1BBE6E197660D5DE1A0E0487 /* Extension+UiView.swift */; }; + 1F4BF4D83DEBABCF9477B5A4 /* TuistFonts+DesignSystemProd.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2EF20F019AC6C1E3B3D87AF8 /* TuistFonts+DesignSystemProd.swift */; }; + 21D6A622DF9A1906D496AADF /* UIColors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6964B76F338CA1083A2EAA11 /* UIColors.swift */; }; + 273480CBCFE37513F3099A8E /* IdentifiedCollections.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 86995CBAA8C9317B4B24DB99 /* IdentifiedCollections.framework */; }; + 28C49F12B3B589FE9956F483 /* Extension+UIButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 625A555D5B7A2ADF19B256AE /* Extension+UIButton.swift */; }; + 295C45B14842023C80A47D51 /* PretendardFont.swift in Sources */ = {isa = PBXBuildFile; fileRef = 688D1487AF38E7CCA4A91781 /* PretendardFont.swift */; }; + 29B83E78203A842E17186969 /* TuistAssets+DesignSystemProd.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E80CBF5486DD48CEF7D4361 /* TuistAssets+DesignSystemProd.swift */; }; + 2B971169413063D149A93B91 /* PretendardVariable.ttf in Resources */ = {isa = PBXBuildFile; fileRef = A20647CF23B131D16DCAB555 /* PretendardVariable.ttf */; }; + 2C21562F6B50D439DB21DCAC /* swift-composable-architecture_ComposableArchitecture.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 3E6F8BA946CF2483A542F489 /* swift-composable-architecture_ComposableArchitecture.bundle */; }; + 2C2A6F1B0843699ACFE53D23 /* TuistFonts+DesignSystem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1489E7809DA4DADA471C2CDC /* TuistFonts+DesignSystem.swift */; }; + 2D4222DE6962486053AE92D2 /* Extension+Colo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12730386909033CD68A22CD0 /* Extension+Colo.swift */; }; + 308D66749C581385357D35F0 /* swift-composable-architecture_ComposableArchitecture.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 3E6F8BA946CF2483A542F489 /* swift-composable-architecture_ComposableArchitecture.bundle */; }; + 31EC067D18118B89B3E26C35 /* BaseViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DDB65E50E9A40944ADEEDB2 /* BaseViewController.swift */; }; + 31FDCEBF2D11CFD7F04719EC /* PretendardVariable.ttf in Resources */ = {isa = PBXBuildFile; fileRef = A20647CF23B131D16DCAB555 /* PretendardVariable.ttf */; }; + 328FD9E765C5F57E4EE84C2D /* Extension+UIButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 625A555D5B7A2ADF19B256AE /* Extension+UIButton.swift */; }; + 36B4268421AB9CDA58103A7B /* TuistAssets+DesignSystemDebug.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6D0FABFF623E11D22F6BDCC /* TuistAssets+DesignSystemDebug.swift */; }; + 3E95B9A38B30D09DEB68E9AB /* XCTestDynamicOverlay.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C6CCAA1C922609FB997CD33 /* XCTestDynamicOverlay.framework */; }; + 3F18AE2877D4B2F2FBBEE7DA /* ConcurrencyExtras.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 19A10E83761BF8F7A5D0FB4E /* ConcurrencyExtras.framework */; }; + 451B3319A64E5905270FB3D4 /* Extension+Colo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12730386909033CD68A22CD0 /* Extension+Colo.swift */; }; + 458A1C8A23DB6A3FF0BAC637 /* Extension+UIButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 625A555D5B7A2ADF19B256AE /* Extension+UIButton.swift */; }; + 4D89A31A0E8ADEEBF3937616 /* SwiftNavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BEE3C1F9940BDC9B2D5DF45C /* SwiftNavigation.framework */; }; + 4EEA700FC28C94A9321002E8 /* Extension+UIColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BF62E3713A0EBCEECEAB6AE /* Extension+UIColor.swift */; }; + 4FB20F2D3BC745E19225A129 /* Extension+Colo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12730386909033CD68A22CD0 /* Extension+Colo.swift */; }; + 51917CDE10A43EA5B01275F6 /* Extension+UiStack.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00F600C0502DF200CC0304ED /* Extension+UiStack.swift */; }; + 53D817882A37E5BDE297B626 /* Extension+UIColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BF62E3713A0EBCEECEAB6AE /* Extension+UIColor.swift */; }; + 54C0E12DDE6CAE81C18E8BC4 /* ComposableArchitecture.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 2B4A427439EE9D505B327761 /* ComposableArchitecture.framework */; }; + 5535A46BBF316AB4582FB4C9 /* TuistBundle+DesignSystemStage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27AA3E385D373C2295F94842 /* TuistBundle+DesignSystemStage.swift */; }; + 5E12234768DE4CD7ED40F7E2 /* Extension+UILabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B3E3329BD329BF6999EE0E9 /* Extension+UILabel.swift */; }; + 5E1EAED55A21ED7168716302 /* Extension+Image.swift in Sources */ = {isa = PBXBuildFile; fileRef = 498B5930ACE63777F8AAC082 /* Extension+Image.swift */; }; + 5E7A67D479FC010F9A730C76 /* ImageAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 365911FA35B2B70671D60856 /* ImageAssets.xcassets */; }; + 612A492C9B46FD82ED8898D2 /* Extension+Colo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12730386909033CD68A22CD0 /* Extension+Colo.swift */; }; + 639F7AE8FBB03215FD246E17 /* Extension+UIColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BF62E3713A0EBCEECEAB6AE /* Extension+UIColor.swift */; }; + 64F162B159C0BD3427E9096D /* PretendardFontFamily.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DFDEE116A67E6C3606007A2 /* PretendardFontFamily.swift */; }; + 6652FFE921D20801AA9D5DF5 /* ComposableArchitecture.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 2B4A427439EE9D505B327761 /* ComposableArchitecture.framework */; }; + 669DDDAB3138D6302F2DC45A /* PretendardFont.swift in Sources */ = {isa = PBXBuildFile; fileRef = 688D1487AF38E7CCA4A91781 /* PretendardFont.swift */; }; + 683B9C0B090D319ECE7EB598 /* TuistFonts+DesignSystemDebug.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C0657B12FC785E86158F7DC /* TuistFonts+DesignSystemDebug.swift */; }; + 6A9D0C3784F739E22DC53C14 /* DesignSystem_DesignSystem.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 42D7C40704F4FCBCDB855667 /* DesignSystem_DesignSystem.bundle */; }; + 6AE6137318CDE6295B498FBE /* InternalCollectionsUtilities.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 54D283EE11452C681A061DC9 /* InternalCollectionsUtilities.framework */; }; + 6CBFFDE6727988688C659C02 /* ImageAsset.swift in Sources */ = {isa = PBXBuildFile; fileRef = D199440E65D8D401EDC98511 /* ImageAsset.swift */; }; + 6E0179999137F6B42EFE5F5E /* Sharing2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C55D59177E8C3DE72C12D00B /* Sharing2.framework */; }; + 7638FAAE90FE3B5FBB2A4ADC /* Extension+UiView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1BBE6E197660D5DE1A0E0487 /* Extension+UiView.swift */; }; + 7C1D8609E5BE69FF2214C5B4 /* Extension+UiStack.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00F600C0502DF200CC0304ED /* Extension+UiStack.swift */; }; + 809EDC2E93C95F31FF952541 /* CasePaths.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5A3357E843BEB22728319115 /* CasePaths.framework */; }; + 852AE05A4BF170B9AA20146B /* swift-sharing_Sharing.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 5DF9D9AFD325FE508D5CE09B /* swift-sharing_Sharing.bundle */; }; + 8B0EBF23A3B2B5FE686E8A33 /* ComposableArchitecture.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 2B4A427439EE9D505B327761 /* ComposableArchitecture.framework */; }; + 90BD3BCC7A12B9D9FC0FC0E5 /* BaseView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2037A54D1D7D283E80FF0D5C /* BaseView.swift */; }; + 98AB5B407AC0A41477E3F909 /* OrderedCollections.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FFA6ACA00B77989252818340 /* OrderedCollections.framework */; }; + 99F770CC14F59432F1C41769 /* Extension+UiView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1BBE6E197660D5DE1A0E0487 /* Extension+UiView.swift */; }; + 9C4EE29BC0F3C09880555CDD /* BaseViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DDB65E50E9A40944ADEEDB2 /* BaseViewController.swift */; }; + A02E2BEEF01F40AB5EB27967 /* Extension+UIColor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BF62E3713A0EBCEECEAB6AE /* Extension+UIColor.swift */; }; + A18206A7174AB69D58054395 /* Extension+UILabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B3E3329BD329BF6999EE0E9 /* Extension+UILabel.swift */; }; + A2CEB3ECFE3AFCFBB6509C79 /* Test.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B67F5AD336FFDED9C31245F /* Test.swift */; }; + A65C76AD0609306E05A0CFDF /* PretendardFontFamily.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DFDEE116A67E6C3606007A2 /* PretendardFontFamily.swift */; }; + ABB14811E13F7B1ECCF8B086 /* TuistAssets+DesignSystem.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5263BC75B281154AC0B5A7B /* TuistAssets+DesignSystem.swift */; }; + AC2F7CEABACAAA4D2CE74498 /* UIKitNavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CCE5037734D068E5FCD1777C /* UIKitNavigation.framework */; }; + ACAFAF275EDB5180657388E8 /* IssueReportingPackageSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DC9D8E1672FAB94378F3B3E2 /* IssueReportingPackageSupport.framework */; }; + AD8836C636E43E59E7DB750E /* ImageAsset.swift in Sources */ = {isa = PBXBuildFile; fileRef = D199440E65D8D401EDC98511 /* ImageAsset.swift */; }; + B2FE89393BB081596AD206FF /* BaseView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2037A54D1D7D283E80FF0D5C /* BaseView.swift */; }; + B8B740BFA10B2786CB756CBC /* Extension+UIButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 625A555D5B7A2ADF19B256AE /* Extension+UIButton.swift */; }; + BA136466484AA0C1BF238F63 /* UIColors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6964B76F338CA1083A2EAA11 /* UIColors.swift */; }; + BAFD017682E1A8CFA89F3099 /* Test.swift in Resources */ = {isa = PBXBuildFile; fileRef = 0B67F5AD336FFDED9C31245F /* Test.swift */; }; + BC40AC04CE1BE4D7CA94854B /* ImageAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 365911FA35B2B70671D60856 /* ImageAssets.xcassets */; }; + BCFF08E151BC139800086031 /* UIColors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6964B76F338CA1083A2EAA11 /* UIColors.swift */; }; + BD878E42E01BA5FA93F29FDE /* TuistBundle+DesignSystemDebug.swift in Sources */ = {isa = PBXBuildFile; fileRef = B38EF5B36E88588961AB7E44 /* TuistBundle+DesignSystemDebug.swift */; }; + C438E92FA9121880084AE9AA /* DesignSystem.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 69B7BBEAD5472C7195924AC8 /* DesignSystem.framework */; }; + C67D9D255ADB7E82D2DCB8D8 /* UIColors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6964B76F338CA1083A2EAA11 /* UIColors.swift */; }; + C8030B09F96168D2FD8D8CBA /* Extension+Image.swift in Sources */ = {isa = PBXBuildFile; fileRef = 498B5930ACE63777F8AAC082 /* Extension+Image.swift */; }; + C83CACD5B5F275224A93814E /* ImageAsset.swift in Sources */ = {isa = PBXBuildFile; fileRef = D199440E65D8D401EDC98511 /* ImageAsset.swift */; }; + C908C920CCECD8166299C023 /* Perception.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D715D77099C80978547C7548 /* Perception.framework */; }; + CC69CFC9464E55BC817D771B /* Dependencies.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 18EFD810A3CEA450AB61C1D7 /* Dependencies.framework */; }; + CDBB5C5F170717B8E3CBDF10 /* Extension+UILabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B3E3329BD329BF6999EE0E9 /* Extension+UILabel.swift */; }; + D454D68ADFCEB25F5F69149D /* BaseView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2037A54D1D7D283E80FF0D5C /* BaseView.swift */; }; + D46A396A766EADD6372746FB /* ComposableArchitecture.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B4A427439EE9D505B327761 /* ComposableArchitecture.framework */; }; + D4BBBE665283FCFF21AF1E1E /* TuistFonts+DesignSystemStage.swift in Sources */ = {isa = PBXBuildFile; fileRef = A61786D0EB738723AB6A3E52 /* TuistFonts+DesignSystemStage.swift */; }; + DAE5BEECD2AF04139A336C3C /* BaseView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2037A54D1D7D283E80FF0D5C /* BaseView.swift */; }; + DF26B81FBD6FDC0158FA47C7 /* TuistAssets+DesignSystemStage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1609C54BDDFC80336CF0C360 /* TuistAssets+DesignSystemStage.swift */; }; + E2369AB20606EC81D8971526 /* BaseViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DDB65E50E9A40944ADEEDB2 /* BaseViewController.swift */; }; + E266D455EC0325C2484FE0DC /* PretendardFontFamily.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DFDEE116A67E6C3606007A2 /* PretendardFontFamily.swift */; }; + E3854479AFC143B40321C1CA /* PretendardFont.swift in Sources */ = {isa = PBXBuildFile; fileRef = 688D1487AF38E7CCA4A91781 /* PretendardFont.swift */; }; + E4A9BC98A8E210D6173854CE /* DesignSystem_DesignSystem.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 42D7C40704F4FCBCDB855667 /* DesignSystem_DesignSystem.bundle */; }; + E5DC09F78C12EFA6E938F008 /* CombineSchedulers.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 19FD78DA10392F8186881533 /* CombineSchedulers.framework */; }; + E79FE8601AE837DBF04B8E00 /* ImageAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 365911FA35B2B70671D60856 /* ImageAssets.xcassets */; }; + EA827A6FAEA4D96C71D1A5E5 /* CustomDump.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 25DAE8AF1BF5CC6F905CFC59 /* CustomDump.framework */; }; + F0D28400E5CB9F754BF47E0E /* SwiftUINavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 124A3F418128D4BE2539991A /* SwiftUINavigation.framework */; }; + F100966D7E5353C0B0001DA9 /* UIKitNavigationShim.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FCD3021BFFE813C71FFB6D9B /* UIKitNavigationShim.framework */; }; + F16B378FA89AF6BB63790180 /* ImageAsset.swift in Sources */ = {isa = PBXBuildFile; fileRef = D199440E65D8D401EDC98511 /* ImageAsset.swift */; }; + F17B84058BDEC3F96F1EB6B8 /* PretendardFont.swift in Sources */ = {isa = PBXBuildFile; fileRef = 688D1487AF38E7CCA4A91781 /* PretendardFont.swift */; }; + F256291B173F7E68A0E89DB9 /* Extension+Image.swift in Sources */ = {isa = PBXBuildFile; fileRef = 498B5930ACE63777F8AAC082 /* Extension+Image.swift */; }; + F3289F76100C3623ADD227DF /* ImageAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 365911FA35B2B70671D60856 /* ImageAssets.xcassets */; }; + F4D617D15D68E945AA50728A /* Extension+Image.swift in Sources */ = {isa = PBXBuildFile; fileRef = 498B5930ACE63777F8AAC082 /* Extension+Image.swift */; }; + F52D68163C625870CB8D309A /* PretendardFontFamily.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DFDEE116A67E6C3606007A2 /* PretendardFontFamily.swift */; }; + F6018B5F7748E322214C52D6 /* TuistBundle+DesignSystem.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE4AD9735556ECA8C8008FEC /* TuistBundle+DesignSystem.swift */; }; + F80C60BC170FC4B607B4C864 /* DependenciesMacros.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4CC27EAEEC28E0C418B61022 /* DependenciesMacros.framework */; }; + F8EAC6294DBE1321794E04E4 /* Extension+UiView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1BBE6E197660D5DE1A0E0487 /* Extension+UiView.swift */; }; + F96DE42BCD64C94E1E9FE912 /* Extension+UiStack.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00F600C0502DF200CC0304ED /* Extension+UiStack.swift */; }; + FA17A19D49963C814439E27E /* TuistBundle+DesignSystemProd.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B0C3E527CEC0A57D2B99BFB /* TuistBundle+DesignSystemProd.swift */; }; + FA87677D0DB27483F2365065 /* Extension+UILabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B3E3329BD329BF6999EE0E9 /* Extension+UILabel.swift */; }; + FC9356548B6885419E09AF18 /* IssueReporting.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA76D7F27BECF9DDDE16561C /* IssueReporting.framework */; }; + FDEBA8D19C6B643D2EE7D847 /* PretendardVariable.ttf in Resources */ = {isa = PBXBuildFile; fileRef = A20647CF23B131D16DCAB555 /* PretendardVariable.ttf */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 20E90005D70A7468024DE83C /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = F639F9585E77B0BBBB642E14 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 707910BA6BE9907351D0858D; + remoteInfo = DesignSystem_DesignSystem_Debug; + }; + 4A4956649CBDCC6BF0221AD1 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = F639F9585E77B0BBBB642E14 /* Project object */; + proxyType = 1; + remoteGlobalIDString = C777EA7684CF3B97BE76C38C; + remoteInfo = DesignSystem_DesignSystem; + }; + 780AF5A021DE23D585EE2ED6 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = F639F9585E77B0BBBB642E14 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 83C9B5D1938C22907FF6E247; + remoteInfo = DesignSystem; + }; + AE6E28587E490E5B4810FFFA /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = F639F9585E77B0BBBB642E14 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 731284097D03F7AE7DAF61C7; + remoteInfo = DesignSystem_DesignSystem_Prod; + }; + BBD5D604069715B0FD97C36B /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = F639F9585E77B0BBBB642E14 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 36DB180B3BF086646401D7DF; + remoteInfo = DesignSystem_DesignSystem_Stage; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 0CFFBBF6FC8BC4422B8E7ECA /* Dependencies */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 8; + dstSubfolderSpec = 16; + files = ( + 54C0E12DDE6CAE81C18E8BC4 /* ComposableArchitecture.framework in Dependencies */, + ); + name = Dependencies; + runOnlyForDeploymentPostprocessing = 1; + }; + 0F682C693EA88A8520C88ADA /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + 188C94718B4CAFFF5622CD06 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + 20A4A2ED5CF5F9B3D3E2F3C9 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + 261A68F06D4B4813FC5879A5 /* Dependencies */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 8; + dstSubfolderSpec = 16; + files = ( + 8B0EBF23A3B2B5FE686E8A33 /* ComposableArchitecture.framework in Dependencies */, + ); + name = Dependencies; + runOnlyForDeploymentPostprocessing = 1; + }; + 3FBA6A1C0FF2C099107F7C40 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + 49C4A8593835DDF36FBC2A05 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + 5F500C9E427FA7872826D3DF /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + 9A689226874D46B59FD12E7E /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + B89E06F8898C67DCC5389581 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + C494F3E0911012C972CC32C6 /* Dependencies */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 8; + dstSubfolderSpec = 16; + files = ( + 0E71762241059BF3166A881A /* ComposableArchitecture.framework in Dependencies */, + ); + name = Dependencies; + runOnlyForDeploymentPostprocessing = 1; + }; + E524915DBB351239A7C59C5C /* Dependencies */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 8; + dstSubfolderSpec = 16; + files = ( + 6652FFE921D20801AA9D5DF5 /* ComposableArchitecture.framework in Dependencies */, + ); + name = Dependencies; + runOnlyForDeploymentPostprocessing = 1; + }; + F2166D77A31A58D48E2556FF /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + FFFE0F493C50B650BFA949E3 /* Dependencies */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 8; + dstSubfolderSpec = 16; + files = ( + E4A9BC98A8E210D6173854CE /* DesignSystem_DesignSystem.bundle in Dependencies */, + 308D66749C581385357D35F0 /* swift-composable-architecture_ComposableArchitecture.bundle in Dependencies */, + 852AE05A4BF170B9AA20146B /* swift-sharing_Sharing.bundle in Dependencies */, + ); + name = Dependencies; + runOnlyForDeploymentPostprocessing = 1; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 00F600C0502DF200CC0304ED /* Extension+UiStack.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Extension+UiStack.swift"; sourceTree = ""; }; + 0B67F5AD336FFDED9C31245F /* Test.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Test.swift; sourceTree = ""; }; + 124A3F418128D4BE2539991A /* SwiftUINavigation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftUINavigation.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 12730386909033CD68A22CD0 /* Extension+Colo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Extension+Colo.swift"; sourceTree = ""; }; + 1489E7809DA4DADA471C2CDC /* TuistFonts+DesignSystem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistFonts+DesignSystem.swift"; sourceTree = ""; }; + 1609C54BDDFC80336CF0C360 /* TuistAssets+DesignSystemStage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistAssets+DesignSystemStage.swift"; sourceTree = ""; }; + 18EFD810A3CEA450AB61C1D7 /* Dependencies.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Dependencies.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 19A10E83761BF8F7A5D0FB4E /* ConcurrencyExtras.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ConcurrencyExtras.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 19FD78DA10392F8186881533 /* CombineSchedulers.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CombineSchedulers.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 1B3E3329BD329BF6999EE0E9 /* Extension+UILabel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Extension+UILabel.swift"; sourceTree = ""; }; + 1BBE6E197660D5DE1A0E0487 /* Extension+UiView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Extension+UiView.swift"; sourceTree = ""; }; + 2037A54D1D7D283E80FF0D5C /* BaseView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseView.swift; sourceTree = ""; }; + 24E0063F8DAAFAE14BCFEE93 /* DesignSystem_DesignSystem_Prod.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DesignSystem_DesignSystem_Prod.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 25DAE8AF1BF5CC6F905CFC59 /* CustomDump.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CustomDump.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 27AA3E385D373C2295F94842 /* TuistBundle+DesignSystemStage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistBundle+DesignSystemStage.swift"; sourceTree = ""; }; + 286D4EE69896CE34670D1AE0 /* DesignSystem_Prod.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DesignSystem_Prod.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2B4A427439EE9D505B327761 /* ComposableArchitecture.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ComposableArchitecture.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2EF20F019AC6C1E3B3D87AF8 /* TuistFonts+DesignSystemProd.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistFonts+DesignSystemProd.swift"; sourceTree = ""; }; + 365911FA35B2B70671D60856 /* ImageAssets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = ImageAssets.xcassets; sourceTree = ""; }; + 3E6F8BA946CF2483A542F489 /* swift-composable-architecture_ComposableArchitecture.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "swift-composable-architecture_ComposableArchitecture.bundle"; sourceTree = BUILT_PRODUCTS_DIR; }; + 42D7C40704F4FCBCDB855667 /* DesignSystem_DesignSystem.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DesignSystem_DesignSystem.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 44A000B3D481B9241DB8971A /* DesignSystem_DesignSystem_Prod-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "DesignSystem_DesignSystem_Prod-Info.plist"; sourceTree = ""; }; + 469F4B641DBB710B1B90BAD8 /* DesignSystemTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "DesignSystemTests-Info.plist"; sourceTree = ""; }; + 498B5930ACE63777F8AAC082 /* Extension+Image.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = " Extension+Image.swift"; sourceTree = ""; }; + 4CC27EAEEC28E0C418B61022 /* DependenciesMacros.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DependenciesMacros.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 54D283EE11452C681A061DC9 /* InternalCollectionsUtilities.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = InternalCollectionsUtilities.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5A3357E843BEB22728319115 /* CasePaths.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CasePaths.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5C6CCAA1C922609FB997CD33 /* XCTestDynamicOverlay.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = XCTestDynamicOverlay.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5DDB65E50E9A40944ADEEDB2 /* BaseViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseViewController.swift; sourceTree = ""; }; + 5DF9D9AFD325FE508D5CE09B /* swift-sharing_Sharing.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "swift-sharing_Sharing.bundle"; sourceTree = BUILT_PRODUCTS_DIR; }; + 5DFDEE116A67E6C3606007A2 /* PretendardFontFamily.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PretendardFontFamily.swift; sourceTree = ""; }; + 625A555D5B7A2ADF19B256AE /* Extension+UIButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Extension+UIButton.swift"; sourceTree = ""; }; + 67AC3D394CED665A57B6D341 /* DesignSystem-Stage-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "DesignSystem-Stage-Info.plist"; sourceTree = ""; }; + 688D1487AF38E7CCA4A91781 /* PretendardFont.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PretendardFont.swift; sourceTree = ""; }; + 6964B76F338CA1083A2EAA11 /* UIColors.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIColors.swift; sourceTree = ""; }; + 69B7BBEAD5472C7195924AC8 /* DesignSystem.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DesignSystem.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6B42EA0AFB8C59B4DAD38868 /* CasePathsCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CasePathsCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 7B11E5E9D21524DF1C180F0C /* DesignSystem_Debug.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DesignSystem_Debug.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 7C0657B12FC785E86158F7DC /* TuistFonts+DesignSystemDebug.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistFonts+DesignSystemDebug.swift"; sourceTree = ""; }; + 7EF38864C69153237B1B4234 /* DesignSystem-Debug-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "DesignSystem-Debug-Info.plist"; sourceTree = ""; }; + 8011B55F1DC08EC73C2467B4 /* DesignSystem_DesignSystem_Stage.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DesignSystem_DesignSystem_Stage.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 8080BDCE77FA8041E648FFE0 /* DesignSystem-Prod-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "DesignSystem-Prod-Info.plist"; sourceTree = ""; }; + 81AE6D1B890D432B9EF75587 /* Sharing1.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Sharing1.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 820CBF0A1EAF51B0F1668443 /* PerceptionCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PerceptionCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 8374AFD4C591FD586AC84128 /* DesignSystem_Stage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DesignSystem_Stage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 86995CBAA8C9317B4B24DB99 /* IdentifiedCollections.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = IdentifiedCollections.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 8706A3EA246104147CB10AC9 /* DesignSystem_DesignSystem_Stage-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "DesignSystem_DesignSystem_Stage-Info.plist"; sourceTree = ""; }; + 8937FA9427EEA938B58C5B3E /* DesignSystem-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "DesignSystem-Info.plist"; sourceTree = ""; }; + 8E80CBF5486DD48CEF7D4361 /* TuistAssets+DesignSystemProd.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistAssets+DesignSystemProd.swift"; sourceTree = ""; }; + 9B0C3E527CEC0A57D2B99BFB /* TuistBundle+DesignSystemProd.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistBundle+DesignSystemProd.swift"; sourceTree = ""; }; + 9BCDB7A8C7AFCCBADBDBBD94 /* TuistBundle+DesignSystemTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistBundle+DesignSystemTests.swift"; sourceTree = ""; }; + 9BF62E3713A0EBCEECEAB6AE /* Extension+UIColor.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Extension+UIColor.swift"; sourceTree = ""; }; + A20647CF23B131D16DCAB555 /* PretendardVariable.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = PretendardVariable.ttf; sourceTree = ""; }; + A5263BC75B281154AC0B5A7B /* TuistAssets+DesignSystem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistAssets+DesignSystem.swift"; sourceTree = ""; }; + A61786D0EB738723AB6A3E52 /* TuistFonts+DesignSystemStage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistFonts+DesignSystemStage.swift"; sourceTree = ""; }; + A8E4F9B5ED6A58F34C4E9188 /* Clocks.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Clocks.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B38EF5B36E88588961AB7E44 /* TuistBundle+DesignSystemDebug.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistBundle+DesignSystemDebug.swift"; sourceTree = ""; }; + BE4AD9735556ECA8C8008FEC /* TuistBundle+DesignSystem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistBundle+DesignSystem.swift"; sourceTree = ""; }; + BEE3C1F9940BDC9B2D5DF45C /* SwiftNavigation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftNavigation.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C55D59177E8C3DE72C12D00B /* Sharing2.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Sharing2.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C8F7D85DCA3E9D25ADED069C /* Sharing.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Sharing.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + CCE5037734D068E5FCD1777C /* UIKitNavigation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = UIKitNavigation.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D199440E65D8D401EDC98511 /* ImageAsset.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageAsset.swift; sourceTree = ""; }; + D6D0FABFF623E11D22F6BDCC /* TuistAssets+DesignSystemDebug.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistAssets+DesignSystemDebug.swift"; sourceTree = ""; }; + D715D77099C80978547C7548 /* Perception.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Perception.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D8C4AF8E52680E324D6FBCBF /* DesignSystem_DesignSystem_Debug.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DesignSystem_DesignSystem_Debug.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + DC9D8E1672FAB94378F3B3E2 /* IssueReportingPackageSupport.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = IssueReportingPackageSupport.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + DDA12AD00E98A3497D3A729E /* DesignSystem_DesignSystem-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "DesignSystem_DesignSystem-Info.plist"; sourceTree = ""; }; + ECAFBD3892447294C1342932 /* DesignSystemTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DesignSystemTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + FA76D7F27BECF9DDDE16561C /* IssueReporting.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = IssueReporting.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FACA604C0F807EB6665FF98A /* DesignSystem_DesignSystem_Debug-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "DesignSystem_DesignSystem_Debug-Info.plist"; sourceTree = ""; }; + FCD3021BFFE813C71FFB6D9B /* UIKitNavigationShim.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = UIKitNavigationShim.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FFA6ACA00B77989252818340 /* OrderedCollections.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = OrderedCollections.framework; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 1964AC1CF76FA8EBDF2A15A1 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 21D2E38EFDFDB350406F7982 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2678C9FCDBBF577DD88F9418 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 49CB8920B5AE9ECAFBA0D86F /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 809EDC2E93C95F31FF952541 /* CasePaths.framework in Frameworks */, + 04E11CD30C06369FF371925B /* CasePathsCore.framework in Frameworks */, + 16A82F835B12CE4A0F63F226 /* Clocks.framework in Frameworks */, + E5DC09F78C12EFA6E938F008 /* CombineSchedulers.framework in Frameworks */, + D46A396A766EADD6372746FB /* ComposableArchitecture.framework in Frameworks */, + 3F18AE2877D4B2F2FBBEE7DA /* ConcurrencyExtras.framework in Frameworks */, + EA827A6FAEA4D96C71D1A5E5 /* CustomDump.framework in Frameworks */, + CC69CFC9464E55BC817D771B /* Dependencies.framework in Frameworks */, + F80C60BC170FC4B607B4C864 /* DependenciesMacros.framework in Frameworks */, + C438E92FA9121880084AE9AA /* DesignSystem.framework in Frameworks */, + 273480CBCFE37513F3099A8E /* IdentifiedCollections.framework in Frameworks */, + 6AE6137318CDE6295B498FBE /* InternalCollectionsUtilities.framework in Frameworks */, + FC9356548B6885419E09AF18 /* IssueReporting.framework in Frameworks */, + ACAFAF275EDB5180657388E8 /* IssueReportingPackageSupport.framework in Frameworks */, + 98AB5B407AC0A41477E3F909 /* OrderedCollections.framework in Frameworks */, + C908C920CCECD8166299C023 /* Perception.framework in Frameworks */, + 11C8E34547D88D53D0191C17 /* PerceptionCore.framework in Frameworks */, + 030D39D707AB3BCF4B40E507 /* Sharing.framework in Frameworks */, + 0332DA7CA35D431B1DB265D9 /* Sharing1.framework in Frameworks */, + 6E0179999137F6B42EFE5F5E /* Sharing2.framework in Frameworks */, + 4D89A31A0E8ADEEBF3937616 /* SwiftNavigation.framework in Frameworks */, + F0D28400E5CB9F754BF47E0E /* SwiftUINavigation.framework in Frameworks */, + AC2F7CEABACAAA4D2CE74498 /* UIKitNavigation.framework in Frameworks */, + F100966D7E5353C0B0001DA9 /* UIKitNavigationShim.framework in Frameworks */, + 3E95B9A38B30D09DEB68E9AB /* XCTestDynamicOverlay.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4BABCA327D9323795936DAB5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6BAB3C09B0843BDAAE985474 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 95242FF3F1F12C3D45A52FC6 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 9C2812D88455F1F58E39B693 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DF0BD45C2E7E03717605EC1E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 07B3C6779FC95ED6B892F6E8 /* CustomFont */ = { + isa = PBXGroup; + children = ( + 688D1487AF38E7CCA4A91781 /* PretendardFont.swift */, + 5DFDEE116A67E6C3606007A2 /* PretendardFontFamily.swift */, + ); + path = CustomFont; + sourceTree = ""; + }; + 0E1288659896D0CFF98DA5AA /* Sources */ = { + isa = PBXGroup; + children = ( + 1D7DAFC035EC8A7E2AAE52AE /* Component */, + 07B3C6779FC95ED6B892F6E8 /* CustomFont */, + DADCA588D3E296D27BE4E9DD /* Extension */, + 3D56AC3DF263FFE10ECDAF91 /* Image */, + F50F691919569472F1BDF4EE /* UI */, + 40E93A76365B9EEE4D2A9420 /* UIColors */, + ); + path = Sources; + sourceTree = ""; + }; + 1D7DAFC035EC8A7E2AAE52AE /* Component */ = { + isa = PBXGroup; + children = ( + 8E66A78D3193A7178EA9CA3A /* Controller */, + B50531634D4EEB7A5C7115D3 /* View */, + ); + path = Component; + sourceTree = ""; + }; + 2BB59E843B58BD9FFF395FEA /* Project */ = { + isa = PBXGroup; + children = ( + 8753C5EB21B15584438290E8 /* Derived */, + 33DFC0F735B7843506B05E8F /* DesignSystemTests */, + 9C29548CCBEAF62FB7951500 /* Resources */, + 0E1288659896D0CFF98DA5AA /* Sources */, + ); + name = Project; + sourceTree = ""; + }; + 33DFC0F735B7843506B05E8F /* DesignSystemTests */ = { + isa = PBXGroup; + children = ( + 40B3714D155242D0EB4D6C9B /* Sources */, + ); + path = DesignSystemTests; + sourceTree = ""; + }; + 37E903075B812927C05A173C /* UILabel */ = { + isa = PBXGroup; + children = ( + 1B3E3329BD329BF6999EE0E9 /* Extension+UILabel.swift */, + ); + path = UILabel; + sourceTree = ""; + }; + 3D56AC3DF263FFE10ECDAF91 /* Image */ = { + isa = PBXGroup; + children = ( + D199440E65D8D401EDC98511 /* ImageAsset.swift */, + ); + path = Image; + sourceTree = ""; + }; + 40B3714D155242D0EB4D6C9B /* Sources */ = { + isa = PBXGroup; + children = ( + 0B67F5AD336FFDED9C31245F /* Test.swift */, + ); + path = Sources; + sourceTree = ""; + }; + 40E93A76365B9EEE4D2A9420 /* UIColors */ = { + isa = PBXGroup; + children = ( + 6964B76F338CA1083A2EAA11 /* UIColors.swift */, + ); + path = UIColors; + sourceTree = ""; + }; + 5D733C381594AF5205BB8922 /* Image */ = { + isa = PBXGroup; + children = ( + 498B5930ACE63777F8AAC082 /* Extension+Image.swift */, + ); + path = Image; + sourceTree = ""; + }; + 786F17AF2FB2F3D1598E0C72 /* FontAsset */ = { + isa = PBXGroup; + children = ( + A20647CF23B131D16DCAB555 /* PretendardVariable.ttf */, + ); + path = FontAsset; + sourceTree = ""; + }; + 82664F67710540CBDEBE5B11 /* Products */ = { + isa = PBXGroup; + children = ( + 5A3357E843BEB22728319115 /* CasePaths.framework */, + 6B42EA0AFB8C59B4DAD38868 /* CasePathsCore.framework */, + A8E4F9B5ED6A58F34C4E9188 /* Clocks.framework */, + 19FD78DA10392F8186881533 /* CombineSchedulers.framework */, + 2B4A427439EE9D505B327761 /* ComposableArchitecture.framework */, + 19A10E83761BF8F7A5D0FB4E /* ConcurrencyExtras.framework */, + 25DAE8AF1BF5CC6F905CFC59 /* CustomDump.framework */, + 18EFD810A3CEA450AB61C1D7 /* Dependencies.framework */, + 4CC27EAEEC28E0C418B61022 /* DependenciesMacros.framework */, + 7B11E5E9D21524DF1C180F0C /* DesignSystem_Debug.framework */, + D8C4AF8E52680E324D6FBCBF /* DesignSystem_DesignSystem_Debug.bundle */, + 24E0063F8DAAFAE14BCFEE93 /* DesignSystem_DesignSystem_Prod.bundle */, + 8011B55F1DC08EC73C2467B4 /* DesignSystem_DesignSystem_Stage.bundle */, + 42D7C40704F4FCBCDB855667 /* DesignSystem_DesignSystem.bundle */, + 286D4EE69896CE34670D1AE0 /* DesignSystem_Prod.framework */, + 8374AFD4C591FD586AC84128 /* DesignSystem_Stage.framework */, + 69B7BBEAD5472C7195924AC8 /* DesignSystem.framework */, + ECAFBD3892447294C1342932 /* DesignSystemTests.xctest */, + 86995CBAA8C9317B4B24DB99 /* IdentifiedCollections.framework */, + 54D283EE11452C681A061DC9 /* InternalCollectionsUtilities.framework */, + FA76D7F27BECF9DDDE16561C /* IssueReporting.framework */, + DC9D8E1672FAB94378F3B3E2 /* IssueReportingPackageSupport.framework */, + FFA6ACA00B77989252818340 /* OrderedCollections.framework */, + D715D77099C80978547C7548 /* Perception.framework */, + 820CBF0A1EAF51B0F1668443 /* PerceptionCore.framework */, + C8F7D85DCA3E9D25ADED069C /* Sharing.framework */, + 81AE6D1B890D432B9EF75587 /* Sharing1.framework */, + C55D59177E8C3DE72C12D00B /* Sharing2.framework */, + 3E6F8BA946CF2483A542F489 /* swift-composable-architecture_ComposableArchitecture.bundle */, + 5DF9D9AFD325FE508D5CE09B /* swift-sharing_Sharing.bundle */, + BEE3C1F9940BDC9B2D5DF45C /* SwiftNavigation.framework */, + 124A3F418128D4BE2539991A /* SwiftUINavigation.framework */, + CCE5037734D068E5FCD1777C /* UIKitNavigation.framework */, + FCD3021BFFE813C71FFB6D9B /* UIKitNavigationShim.framework */, + 5C6CCAA1C922609FB997CD33 /* XCTestDynamicOverlay.framework */, + ); + name = Products; + sourceTree = ""; + }; + 842CEEEFC265CA844CDCB39D /* UiStack */ = { + isa = PBXGroup; + children = ( + 00F600C0502DF200CC0304ED /* Extension+UiStack.swift */, + ); + path = UiStack; + sourceTree = ""; + }; + 8753C5EB21B15584438290E8 /* Derived */ = { + isa = PBXGroup; + children = ( + F2F0D6EECE384EBEC3AFDEB4 /* InfoPlists */, + D5FD3537E28AE857DC09D214 /* Sources */, + ); + path = Derived; + sourceTree = ""; + }; + 8E66A78D3193A7178EA9CA3A /* Controller */ = { + isa = PBXGroup; + children = ( + 5DDB65E50E9A40944ADEEDB2 /* BaseViewController.swift */, + ); + path = Controller; + sourceTree = ""; + }; + 9C29548CCBEAF62FB7951500 /* Resources */ = { + isa = PBXGroup; + children = ( + 786F17AF2FB2F3D1598E0C72 /* FontAsset */, + 365911FA35B2B70671D60856 /* ImageAssets.xcassets */, + ); + path = Resources; + sourceTree = ""; + }; + B50531634D4EEB7A5C7115D3 /* View */ = { + isa = PBXGroup; + children = ( + 2037A54D1D7D283E80FF0D5C /* BaseView.swift */, + ); + path = View; + sourceTree = ""; + }; + D5FD3537E28AE857DC09D214 /* Sources */ = { + isa = PBXGroup; + children = ( + A5263BC75B281154AC0B5A7B /* TuistAssets+DesignSystem.swift */, + D6D0FABFF623E11D22F6BDCC /* TuistAssets+DesignSystemDebug.swift */, + 8E80CBF5486DD48CEF7D4361 /* TuistAssets+DesignSystemProd.swift */, + 1609C54BDDFC80336CF0C360 /* TuistAssets+DesignSystemStage.swift */, + BE4AD9735556ECA8C8008FEC /* TuistBundle+DesignSystem.swift */, + B38EF5B36E88588961AB7E44 /* TuistBundle+DesignSystemDebug.swift */, + 9B0C3E527CEC0A57D2B99BFB /* TuistBundle+DesignSystemProd.swift */, + 27AA3E385D373C2295F94842 /* TuistBundle+DesignSystemStage.swift */, + 9BCDB7A8C7AFCCBADBDBBD94 /* TuistBundle+DesignSystemTests.swift */, + 1489E7809DA4DADA471C2CDC /* TuistFonts+DesignSystem.swift */, + 7C0657B12FC785E86158F7DC /* TuistFonts+DesignSystemDebug.swift */, + 2EF20F019AC6C1E3B3D87AF8 /* TuistFonts+DesignSystemProd.swift */, + A61786D0EB738723AB6A3E52 /* TuistFonts+DesignSystemStage.swift */, + ); + path = Sources; + sourceTree = ""; + }; + DADCA588D3E296D27BE4E9DD /* Extension */ = { + isa = PBXGroup; + children = ( + F0E76573CF74786F9BC5B779 /* Color */, + 5D733C381594AF5205BB8922 /* Image */, + ); + path = Extension; + sourceTree = ""; + }; + E1A28E14BECFAD0259361AE7 /* UiView */ = { + isa = PBXGroup; + children = ( + 1BBE6E197660D5DE1A0E0487 /* Extension+UiView.swift */, + ); + path = UiView; + sourceTree = ""; + }; + E58010B730E702A26CA4CB3F /* UIButton */ = { + isa = PBXGroup; + children = ( + 625A555D5B7A2ADF19B256AE /* Extension+UIButton.swift */, + ); + path = UIButton; + sourceTree = ""; + }; + EC9821EEC8CC800276475F6C = { + isa = PBXGroup; + children = ( + 2BB59E843B58BD9FFF395FEA /* Project */, + 82664F67710540CBDEBE5B11 /* Products */, + ); + sourceTree = ""; + }; + F0E76573CF74786F9BC5B779 /* Color */ = { + isa = PBXGroup; + children = ( + 12730386909033CD68A22CD0 /* Extension+Colo.swift */, + 9BF62E3713A0EBCEECEAB6AE /* Extension+UIColor.swift */, + ); + path = Color; + sourceTree = ""; + }; + F2F0D6EECE384EBEC3AFDEB4 /* InfoPlists */ = { + isa = PBXGroup; + children = ( + FACA604C0F807EB6665FF98A /* DesignSystem_DesignSystem_Debug-Info.plist */, + 44A000B3D481B9241DB8971A /* DesignSystem_DesignSystem_Prod-Info.plist */, + 8706A3EA246104147CB10AC9 /* DesignSystem_DesignSystem_Stage-Info.plist */, + DDA12AD00E98A3497D3A729E /* DesignSystem_DesignSystem-Info.plist */, + 7EF38864C69153237B1B4234 /* DesignSystem-Debug-Info.plist */, + 8937FA9427EEA938B58C5B3E /* DesignSystem-Info.plist */, + 8080BDCE77FA8041E648FFE0 /* DesignSystem-Prod-Info.plist */, + 67AC3D394CED665A57B6D341 /* DesignSystem-Stage-Info.plist */, + 469F4B641DBB710B1B90BAD8 /* DesignSystemTests-Info.plist */, + ); + path = InfoPlists; + sourceTree = ""; + }; + F50F691919569472F1BDF4EE /* UI */ = { + isa = PBXGroup; + children = ( + E58010B730E702A26CA4CB3F /* UIButton */, + 37E903075B812927C05A173C /* UILabel */, + 842CEEEFC265CA844CDCB39D /* UiStack */, + E1A28E14BECFAD0259361AE7 /* UiView */, + ); + path = UI; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 0F708BB592F173C2660727CA /* DesignSystemTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = F949D06F1040638E855626C4 /* Build configuration list for PBXNativeTarget "DesignSystemTests" */; + buildPhases = ( + EC84A65CF96C8470F2186FA2 /* Sources */, + 8836997EA64CE056B14C043C /* Resources */, + 49CB8920B5AE9ECAFBA0D86F /* Frameworks */, + F2166D77A31A58D48E2556FF /* Embed Frameworks */, + FFFE0F493C50B650BFA949E3 /* Dependencies */, + ); + buildRules = ( + ); + dependencies = ( + C3373F47F3B553009386B333 /* PBXTargetDependency */, + ); + name = DesignSystemTests; + packageProductDependencies = ( + ); + productName = DesignSystemTests; + productReference = ECAFBD3892447294C1342932 /* DesignSystemTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 1C92443DDD263D870B1CDC4C /* DesignSystem-Stage */ = { + isa = PBXNativeTarget; + buildConfigurationList = 91AB59F7E4C4CD016304B12E /* Build configuration list for PBXNativeTarget "DesignSystem-Stage" */; + buildPhases = ( + C034C105E0638AEA6FE00FE9 /* Sources */, + CCCB454D2177C56ECA5AA9F2 /* Resources */, + DF0BD45C2E7E03717605EC1E /* Frameworks */, + 9A689226874D46B59FD12E7E /* Embed Frameworks */, + E524915DBB351239A7C59C5C /* Dependencies */, + ); + buildRules = ( + ); + dependencies = ( + F2408E3D40B4685960561532 /* PBXTargetDependency */, + ); + name = "DesignSystem-Stage"; + packageProductDependencies = ( + ); + productName = DesignSystem_Stage; + productReference = 8374AFD4C591FD586AC84128 /* DesignSystem_Stage.framework */; + productType = "com.apple.product-type.framework"; + }; + 36DB180B3BF086646401D7DF /* DesignSystem_DesignSystem_Stage */ = { + isa = PBXNativeTarget; + buildConfigurationList = E88DC62F52FDE860A2270512 /* Build configuration list for PBXNativeTarget "DesignSystem_DesignSystem_Stage" */; + buildPhases = ( + 0DE87B2F4A0816091C2EEEDC /* Sources */, + A2FC9593736D3FE709F1DBCD /* Resources */, + 95242FF3F1F12C3D45A52FC6 /* Frameworks */, + 5F500C9E427FA7872826D3DF /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = DesignSystem_DesignSystem_Stage; + packageProductDependencies = ( + ); + productName = DesignSystem_DesignSystem_Stage; + productReference = 8011B55F1DC08EC73C2467B4 /* DesignSystem_DesignSystem_Stage.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 4F2F9D111E325D40D20A2774 /* DesignSystem-Prod */ = { + isa = PBXNativeTarget; + buildConfigurationList = 50584AEE63DB98EF9F40CCBB /* Build configuration list for PBXNativeTarget "DesignSystem-Prod" */; + buildPhases = ( + 7C8C9B455B25CAFD3A0AEBBF /* Sources */, + 8078DEDA1CD1CA09226F5B8D /* Resources */, + 9C2812D88455F1F58E39B693 /* Frameworks */, + 20A4A2ED5CF5F9B3D3E2F3C9 /* Embed Frameworks */, + C494F3E0911012C972CC32C6 /* Dependencies */, + ); + buildRules = ( + ); + dependencies = ( + 109F5EAE8D098E0F2D76AE38 /* PBXTargetDependency */, + ); + name = "DesignSystem-Prod"; + packageProductDependencies = ( + ); + productName = DesignSystem_Prod; + productReference = 286D4EE69896CE34670D1AE0 /* DesignSystem_Prod.framework */; + productType = "com.apple.product-type.framework"; + }; + 707910BA6BE9907351D0858D /* DesignSystem_DesignSystem_Debug */ = { + isa = PBXNativeTarget; + buildConfigurationList = 7357DFBD14391E34E3E3AD35 /* Build configuration list for PBXNativeTarget "DesignSystem_DesignSystem_Debug" */; + buildPhases = ( + 46DEBDB19426290B26382C1F /* Sources */, + 437A7119CFA8BD74EA861813 /* Resources */, + 4BABCA327D9323795936DAB5 /* Frameworks */, + 0F682C693EA88A8520C88ADA /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = DesignSystem_DesignSystem_Debug; + packageProductDependencies = ( + ); + productName = DesignSystem_DesignSystem_Debug; + productReference = D8C4AF8E52680E324D6FBCBF /* DesignSystem_DesignSystem_Debug.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 731284097D03F7AE7DAF61C7 /* DesignSystem_DesignSystem_Prod */ = { + isa = PBXNativeTarget; + buildConfigurationList = 74D0AE04AC7A67AB1B7C67B1 /* Build configuration list for PBXNativeTarget "DesignSystem_DesignSystem_Prod" */; + buildPhases = ( + B37DFD1B055211D20173AB29 /* Sources */, + 281B8A4A081EC96D6F3EC259 /* Resources */, + 6BAB3C09B0843BDAAE985474 /* Frameworks */, + B89E06F8898C67DCC5389581 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = DesignSystem_DesignSystem_Prod; + packageProductDependencies = ( + ); + productName = DesignSystem_DesignSystem_Prod; + productReference = 24E0063F8DAAFAE14BCFEE93 /* DesignSystem_DesignSystem_Prod.bundle */; + productType = "com.apple.product-type.bundle"; + }; + 83C9B5D1938C22907FF6E247 /* DesignSystem */ = { + isa = PBXNativeTarget; + buildConfigurationList = FDE90610E9DF3345CFC83326 /* Build configuration list for PBXNativeTarget "DesignSystem" */; + buildPhases = ( + BA6DF36C53063F00B80115EA /* Sources */, + 510D3A5EADC65A3BE366D353 /* Resources */, + 21D2E38EFDFDB350406F7982 /* Frameworks */, + 49C4A8593835DDF36FBC2A05 /* Embed Frameworks */, + 261A68F06D4B4813FC5879A5 /* Dependencies */, + ); + buildRules = ( + ); + dependencies = ( + 5EE60265510B17C28AE5EBA4 /* PBXTargetDependency */, + ); + name = DesignSystem; + packageProductDependencies = ( + ); + productName = DesignSystem; + productReference = 69B7BBEAD5472C7195924AC8 /* DesignSystem.framework */; + productType = "com.apple.product-type.framework"; + }; + C777EA7684CF3B97BE76C38C /* DesignSystem_DesignSystem */ = { + isa = PBXNativeTarget; + buildConfigurationList = 05AE9C11574FFE2195EAFA90 /* Build configuration list for PBXNativeTarget "DesignSystem_DesignSystem" */; + buildPhases = ( + 97B9A85DB0C77866043716C8 /* Sources */, + B43C3DC03910608BAD041023 /* Resources */, + 1964AC1CF76FA8EBDF2A15A1 /* Frameworks */, + 3FBA6A1C0FF2C099107F7C40 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = DesignSystem_DesignSystem; + packageProductDependencies = ( + ); + productName = DesignSystem_DesignSystem; + productReference = 42D7C40704F4FCBCDB855667 /* DesignSystem_DesignSystem.bundle */; + productType = "com.apple.product-type.bundle"; + }; + CDC7A90126EADC1CB1D53626 /* DesignSystem-Debug */ = { + isa = PBXNativeTarget; + buildConfigurationList = 99B644CEC306362CFC61EEEC /* Build configuration list for PBXNativeTarget "DesignSystem-Debug" */; + buildPhases = ( + 2A168B4F7C734A0F8F15FBF9 /* Sources */, + 158847365512D5F5BEBFDDB7 /* Resources */, + 2678C9FCDBBF577DD88F9418 /* Frameworks */, + 188C94718B4CAFFF5622CD06 /* Embed Frameworks */, + 0CFFBBF6FC8BC4422B8E7ECA /* Dependencies */, + ); + buildRules = ( + ); + dependencies = ( + 0A01D9C61E614BA114130103 /* PBXTargetDependency */, + ); + name = "DesignSystem-Debug"; + packageProductDependencies = ( + ); + productName = DesignSystem_Debug; + productReference = 7B11E5E9D21524DF1C180F0C /* DesignSystem_Debug.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + F639F9585E77B0BBBB642E14 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + TargetAttributes = { + }; + }; + buildConfigurationList = 5C0CBBA2BFE0CEE21375AF0A /* Build configuration list for PBXProject "DesignSystem" */; + compatibilityVersion = "Xcode 14.0"; + developmentRegion = ko; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ko, + ); + mainGroup = EC9821EEC8CC800276475F6C; + productRefGroup = 82664F67710540CBDEBE5B11 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 83C9B5D1938C22907FF6E247 /* DesignSystem */, + CDC7A90126EADC1CB1D53626 /* DesignSystem-Debug */, + 4F2F9D111E325D40D20A2774 /* DesignSystem-Prod */, + 1C92443DDD263D870B1CDC4C /* DesignSystem-Stage */, + 0F708BB592F173C2660727CA /* DesignSystemTests */, + C777EA7684CF3B97BE76C38C /* DesignSystem_DesignSystem */, + 707910BA6BE9907351D0858D /* DesignSystem_DesignSystem_Debug */, + 731284097D03F7AE7DAF61C7 /* DesignSystem_DesignSystem_Prod */, + 36DB180B3BF086646401D7DF /* DesignSystem_DesignSystem_Stage */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 158847365512D5F5BEBFDDB7 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 281B8A4A081EC96D6F3EC259 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + FDEBA8D19C6B643D2EE7D847 /* PretendardVariable.ttf in Resources */, + F3289F76100C3623ADD227DF /* ImageAssets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 437A7119CFA8BD74EA861813 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2B971169413063D149A93B91 /* PretendardVariable.ttf in Resources */, + 5E7A67D479FC010F9A730C76 /* ImageAssets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 510D3A5EADC65A3BE366D353 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 8078DEDA1CD1CA09226F5B8D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 8836997EA64CE056B14C043C /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BAFD017682E1A8CFA89F3099 /* Test.swift in Resources */, + 6A9D0C3784F739E22DC53C14 /* DesignSystem_DesignSystem.bundle in Resources */, + 2C21562F6B50D439DB21DCAC /* swift-composable-architecture_ComposableArchitecture.bundle in Resources */, + 164B83516C13A4829B5B695A /* swift-sharing_Sharing.bundle in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A2FC9593736D3FE709F1DBCD /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 02086E956F0BCAD214D8D7F4 /* PretendardVariable.ttf in Resources */, + BC40AC04CE1BE4D7CA94854B /* ImageAssets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B43C3DC03910608BAD041023 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 31FDCEBF2D11CFD7F04719EC /* PretendardVariable.ttf in Resources */, + E79FE8601AE837DBF04B8E00 /* ImageAssets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + CCCB454D2177C56ECA5AA9F2 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 0DE87B2F4A0816091C2EEEDC /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 2A168B4F7C734A0F8F15FBF9 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 36B4268421AB9CDA58103A7B /* TuistAssets+DesignSystemDebug.swift in Sources */, + BD878E42E01BA5FA93F29FDE /* TuistBundle+DesignSystemDebug.swift in Sources */, + 683B9C0B090D319ECE7EB598 /* TuistFonts+DesignSystemDebug.swift in Sources */, + E2369AB20606EC81D8971526 /* BaseViewController.swift in Sources */, + D454D68ADFCEB25F5F69149D /* BaseView.swift in Sources */, + E3854479AFC143B40321C1CA /* PretendardFont.swift in Sources */, + E266D455EC0325C2484FE0DC /* PretendardFontFamily.swift in Sources */, + 4FB20F2D3BC745E19225A129 /* Extension+Colo.swift in Sources */, + A02E2BEEF01F40AB5EB27967 /* Extension+UIColor.swift in Sources */, + F4D617D15D68E945AA50728A /* Extension+Image.swift in Sources */, + AD8836C636E43E59E7DB750E /* ImageAsset.swift in Sources */, + 28C49F12B3B589FE9956F483 /* Extension+UIButton.swift in Sources */, + CDBB5C5F170717B8E3CBDF10 /* Extension+UILabel.swift in Sources */, + 51917CDE10A43EA5B01275F6 /* Extension+UiStack.swift in Sources */, + 1A2A8052202F6956AA87272B /* Extension+UiView.swift in Sources */, + BCFF08E151BC139800086031 /* UIColors.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 46DEBDB19426290B26382C1F /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7C8C9B455B25CAFD3A0AEBBF /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 29B83E78203A842E17186969 /* TuistAssets+DesignSystemProd.swift in Sources */, + FA17A19D49963C814439E27E /* TuistBundle+DesignSystemProd.swift in Sources */, + 1F4BF4D83DEBABCF9477B5A4 /* TuistFonts+DesignSystemProd.swift in Sources */, + 9C4EE29BC0F3C09880555CDD /* BaseViewController.swift in Sources */, + DAE5BEECD2AF04139A336C3C /* BaseView.swift in Sources */, + F17B84058BDEC3F96F1EB6B8 /* PretendardFont.swift in Sources */, + F52D68163C625870CB8D309A /* PretendardFontFamily.swift in Sources */, + 2D4222DE6962486053AE92D2 /* Extension+Colo.swift in Sources */, + 639F7AE8FBB03215FD246E17 /* Extension+UIColor.swift in Sources */, + C8030B09F96168D2FD8D8CBA /* Extension+Image.swift in Sources */, + 6CBFFDE6727988688C659C02 /* ImageAsset.swift in Sources */, + 458A1C8A23DB6A3FF0BAC637 /* Extension+UIButton.swift in Sources */, + A18206A7174AB69D58054395 /* Extension+UILabel.swift in Sources */, + 7C1D8609E5BE69FF2214C5B4 /* Extension+UiStack.swift in Sources */, + 99F770CC14F59432F1C41769 /* Extension+UiView.swift in Sources */, + C67D9D255ADB7E82D2DCB8D8 /* UIColors.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97B9A85DB0C77866043716C8 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B37DFD1B055211D20173AB29 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BA6DF36C53063F00B80115EA /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ABB14811E13F7B1ECCF8B086 /* TuistAssets+DesignSystem.swift in Sources */, + F6018B5F7748E322214C52D6 /* TuistBundle+DesignSystem.swift in Sources */, + 2C2A6F1B0843699ACFE53D23 /* TuistFonts+DesignSystem.swift in Sources */, + 31EC067D18118B89B3E26C35 /* BaseViewController.swift in Sources */, + B2FE89393BB081596AD206FF /* BaseView.swift in Sources */, + 295C45B14842023C80A47D51 /* PretendardFont.swift in Sources */, + 64F162B159C0BD3427E9096D /* PretendardFontFamily.swift in Sources */, + 451B3319A64E5905270FB3D4 /* Extension+Colo.swift in Sources */, + 53D817882A37E5BDE297B626 /* Extension+UIColor.swift in Sources */, + 5E1EAED55A21ED7168716302 /* Extension+Image.swift in Sources */, + C83CACD5B5F275224A93814E /* ImageAsset.swift in Sources */, + 328FD9E765C5F57E4EE84C2D /* Extension+UIButton.swift in Sources */, + FA87677D0DB27483F2365065 /* Extension+UILabel.swift in Sources */, + F96DE42BCD64C94E1E9FE912 /* Extension+UiStack.swift in Sources */, + 7638FAAE90FE3B5FBB2A4ADC /* Extension+UiView.swift in Sources */, + BA136466484AA0C1BF238F63 /* UIColors.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + C034C105E0638AEA6FE00FE9 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DF26B81FBD6FDC0158FA47C7 /* TuistAssets+DesignSystemStage.swift in Sources */, + 5535A46BBF316AB4582FB4C9 /* TuistBundle+DesignSystemStage.swift in Sources */, + D4BBBE665283FCFF21AF1E1E /* TuistFonts+DesignSystemStage.swift in Sources */, + 06D16B1B1B957D3A84E4CDA5 /* BaseViewController.swift in Sources */, + 90BD3BCC7A12B9D9FC0FC0E5 /* BaseView.swift in Sources */, + 669DDDAB3138D6302F2DC45A /* PretendardFont.swift in Sources */, + A65C76AD0609306E05A0CFDF /* PretendardFontFamily.swift in Sources */, + 612A492C9B46FD82ED8898D2 /* Extension+Colo.swift in Sources */, + 4EEA700FC28C94A9321002E8 /* Extension+UIColor.swift in Sources */, + F256291B173F7E68A0E89DB9 /* Extension+Image.swift in Sources */, + F16B378FA89AF6BB63790180 /* ImageAsset.swift in Sources */, + B8B740BFA10B2786CB756CBC /* Extension+UIButton.swift in Sources */, + 5E12234768DE4CD7ED40F7E2 /* Extension+UILabel.swift in Sources */, + 1182CCB9EADDE65BAC4986F0 /* Extension+UiStack.swift in Sources */, + F8EAC6294DBE1321794E04E4 /* Extension+UiView.swift in Sources */, + 21D6A622DF9A1906D496AADF /* UIColors.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EC84A65CF96C8470F2186FA2 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 03E1F3ADEF42E78FFBE78441 /* TuistBundle+DesignSystemTests.swift in Sources */, + A2CEB3ECFE3AFCFBB6509C79 /* Test.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 0A01D9C61E614BA114130103 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = DesignSystem_DesignSystem_Debug; + target = 707910BA6BE9907351D0858D /* DesignSystem_DesignSystem_Debug */; + targetProxy = 20E90005D70A7468024DE83C /* PBXContainerItemProxy */; + }; + 109F5EAE8D098E0F2D76AE38 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = DesignSystem_DesignSystem_Prod; + target = 731284097D03F7AE7DAF61C7 /* DesignSystem_DesignSystem_Prod */; + targetProxy = AE6E28587E490E5B4810FFFA /* PBXContainerItemProxy */; + }; + 5EE60265510B17C28AE5EBA4 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = DesignSystem_DesignSystem; + target = C777EA7684CF3B97BE76C38C /* DesignSystem_DesignSystem */; + targetProxy = 4A4956649CBDCC6BF0221AD1 /* PBXContainerItemProxy */; + }; + C3373F47F3B553009386B333 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = DesignSystem; + target = 83C9B5D1938C22907FF6E247 /* DesignSystem */; + targetProxy = 780AF5A021DE23D585EE2ED6 /* PBXContainerItemProxy */; + }; + F2408E3D40B4685960561532 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = DesignSystem_DesignSystem_Stage; + target = 36DB180B3BF086646401D7DF /* DesignSystem_DesignSystem_Stage */; + targetProxy = BBD5D604069715B0FD97C36B /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 06FE36F5BCD04B71D2901212 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + GENERATE_MASTER_OBJECT_FILE = NO; + INFOPLIST_FILE = "Derived/InfoPlists/DesignSystem_DesignSystem-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 17.0; + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.DesignSystem.generated.resources; + PRODUCT_NAME = DesignSystem_DesignSystem; + 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; + }; + 0C02DEECDC95653FCDD00F9F /* 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/DesignSystem-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/PerceptionMacros#PerceptionMacros", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.DesignSystem; + PRODUCT_NAME = DesignSystem; + 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; + }; + 0C83D3CA59FA25C8C608F7C9 /* 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/DesignSystem-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/PerceptionMacros#PerceptionMacros", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.DesignSystem; + PRODUCT_NAME = DesignSystem_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; + }; + 0D16C1963228110B68D18F9A /* 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/DesignSystem-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/PerceptionMacros#PerceptionMacros", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.DesignSystem; + PRODUCT_NAME = DesignSystem_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; + }; + 18F43991FF77A7004B5E3EC0 /* 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/DesignSystemTests-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/PerceptionMacros#PerceptionMacros", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.DesignSystem.DesignSystemTests; + PRODUCT_NAME = DesignSystemTests; + 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; + }; + 1C00DDAD210EFF33D0D78A8D /* 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/DesignSystemTests-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/PerceptionMacros#PerceptionMacros", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.DesignSystem.DesignSystemTests; + PRODUCT_NAME = DesignSystemTests; + 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; + }; + 211D0141C9134D6AE10CB1DA /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + GENERATE_MASTER_OBJECT_FILE = NO; + INFOPLIST_FILE = "Derived/InfoPlists/DesignSystem_DesignSystem_Prod-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 17.0; + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.DesignSystem.generated.resources; + PRODUCT_NAME = DesignSystem_DesignSystem_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; + }; + 52C14854ECC2ED10764A18BC /* 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/DesignSystem-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/PerceptionMacros#PerceptionMacros", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.DesignSystem; + PRODUCT_NAME = DesignSystem; + 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; + }; + 5F0114C5AD429627199B304F /* 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/DesignSystem-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/PerceptionMacros#PerceptionMacros", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.DesignSystem; + PRODUCT_NAME = DesignSystem_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; + }; + 6B70166AA197AFB971A032B4 /* 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/DesignSystem-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/PerceptionMacros#PerceptionMacros", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.DesignSystem; + PRODUCT_NAME = DesignSystem_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; + }; + 7277DF913F606D69F469518F /* 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; + }; + 85B6B79ADD7A4E7548F316CC /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + GENERATE_MASTER_OBJECT_FILE = NO; + INFOPLIST_FILE = "Derived/InfoPlists/DesignSystem_DesignSystem-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 17.0; + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.DesignSystem.generated.resources; + PRODUCT_NAME = DesignSystem_DesignSystem; + 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; + }; + 87C6813AE2FF738F0554CA0E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + GENERATE_MASTER_OBJECT_FILE = NO; + INFOPLIST_FILE = "Derived/InfoPlists/DesignSystem_DesignSystem_Stage-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 17.0; + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.DesignSystem.generated.resources; + PRODUCT_NAME = DesignSystem_DesignSystem_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; + }; + 880EB30003E96091B64EE0A0 /* 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/DesignSystem-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/PerceptionMacros#PerceptionMacros", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.DesignSystem; + PRODUCT_NAME = DesignSystem_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; + }; + 88DC404DB5E70F332291F97C /* 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; + }; + 8FFA562D45CDD5938B08D60D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + GENERATE_MASTER_OBJECT_FILE = NO; + INFOPLIST_FILE = "Derived/InfoPlists/DesignSystem_DesignSystem_Stage-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 17.0; + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.DesignSystem.generated.resources; + PRODUCT_NAME = DesignSystem_DesignSystem_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; + }; + 9F2683426B6A4AC0D91D4796 /* 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/DesignSystem-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/PerceptionMacros#PerceptionMacros", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.DesignSystem; + PRODUCT_NAME = DesignSystem_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; + }; + B208567C084E38A6989DCB97 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + GENERATE_MASTER_OBJECT_FILE = NO; + INFOPLIST_FILE = "Derived/InfoPlists/DesignSystem_DesignSystem_Debug-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 17.0; + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.DesignSystem.generated.resources; + PRODUCT_NAME = DesignSystem_DesignSystem_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; + }; + BD7C81715A077530A99FDEC5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + GENERATE_MASTER_OBJECT_FILE = NO; + INFOPLIST_FILE = "Derived/InfoPlists/DesignSystem_DesignSystem_Prod-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 17.0; + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.DesignSystem.generated.resources; + PRODUCT_NAME = DesignSystem_DesignSystem_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; + }; + EC9402BBB814F0FC9FF46202 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGNING_ALLOWED = NO; + CODE_SIGN_IDENTITY = "iPhone Developer"; + GENERATE_MASTER_OBJECT_FILE = NO; + INFOPLIST_FILE = "Derived/InfoPlists/DesignSystem_DesignSystem_Debug-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 17.0; + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.DesignSystem.generated.resources; + PRODUCT_NAME = DesignSystem_DesignSystem_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; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 05AE9C11574FFE2195EAFA90 /* Build configuration list for PBXNativeTarget "DesignSystem_DesignSystem" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 06FE36F5BCD04B71D2901212 /* Debug */, + 85B6B79ADD7A4E7548F316CC /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 50584AEE63DB98EF9F40CCBB /* Build configuration list for PBXNativeTarget "DesignSystem-Prod" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 0D16C1963228110B68D18F9A /* Debug */, + 5F0114C5AD429627199B304F /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 5C0CBBA2BFE0CEE21375AF0A /* Build configuration list for PBXProject "DesignSystem" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 7277DF913F606D69F469518F /* Debug */, + 88DC404DB5E70F332291F97C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 7357DFBD14391E34E3E3AD35 /* Build configuration list for PBXNativeTarget "DesignSystem_DesignSystem_Debug" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + EC9402BBB814F0FC9FF46202 /* Debug */, + B208567C084E38A6989DCB97 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 74D0AE04AC7A67AB1B7C67B1 /* Build configuration list for PBXNativeTarget "DesignSystem_DesignSystem_Prod" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + BD7C81715A077530A99FDEC5 /* Debug */, + 211D0141C9134D6AE10CB1DA /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 91AB59F7E4C4CD016304B12E /* Build configuration list for PBXNativeTarget "DesignSystem-Stage" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 6B70166AA197AFB971A032B4 /* Debug */, + 880EB30003E96091B64EE0A0 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 99B644CEC306362CFC61EEEC /* Build configuration list for PBXNativeTarget "DesignSystem-Debug" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 9F2683426B6A4AC0D91D4796 /* Debug */, + 0C83D3CA59FA25C8C608F7C9 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + E88DC62F52FDE860A2270512 /* Build configuration list for PBXNativeTarget "DesignSystem_DesignSystem_Stage" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 8FFA562D45CDD5938B08D60D /* Debug */, + 87C6813AE2FF738F0554CA0E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + F949D06F1040638E855626C4 /* Build configuration list for PBXNativeTarget "DesignSystemTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 18F43991FF77A7004B5E3EC0 /* Debug */, + 1C00DDAD210EFF33D0D78A8D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + FDE90610E9DF3345CFC83326 /* Build configuration list for PBXNativeTarget "DesignSystem" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 0C02DEECDC95653FCDD00F9F /* Debug */, + 52C14854ECC2ED10764A18BC /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = F639F9585E77B0BBBB642E14 /* Project object */; +} diff --git a/Projects/Shared/DesignSystem/DesignSystem.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Projects/Shared/DesignSystem/DesignSystem.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/Projects/Shared/DesignSystem/DesignSystem.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Projects/Shared/DesignSystem/DesignSystem.xcodeproj/xcshareddata/xcschemes/DesignSystem-Debug.xcscheme b/Projects/Shared/DesignSystem/DesignSystem.xcodeproj/xcshareddata/xcschemes/DesignSystem-Debug.xcscheme new file mode 100644 index 0000000..84a0633 --- /dev/null +++ b/Projects/Shared/DesignSystem/DesignSystem.xcodeproj/xcshareddata/xcschemes/DesignSystem-Debug.xcscheme @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/Shared/DesignSystem/DesignSystem.xcodeproj/xcshareddata/xcschemes/DesignSystem-Prod.xcscheme b/Projects/Shared/DesignSystem/DesignSystem.xcodeproj/xcshareddata/xcschemes/DesignSystem-Prod.xcscheme new file mode 100644 index 0000000..165350e --- /dev/null +++ b/Projects/Shared/DesignSystem/DesignSystem.xcodeproj/xcshareddata/xcschemes/DesignSystem-Prod.xcscheme @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/Shared/DesignSystem/DesignSystem.xcodeproj/xcshareddata/xcschemes/DesignSystem-Stage.xcscheme b/Projects/Shared/DesignSystem/DesignSystem.xcodeproj/xcshareddata/xcschemes/DesignSystem-Stage.xcscheme new file mode 100644 index 0000000..8f5fece --- /dev/null +++ b/Projects/Shared/DesignSystem/DesignSystem.xcodeproj/xcshareddata/xcschemes/DesignSystem-Stage.xcscheme @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/Shared/DesignSystem/DesignSystem.xcodeproj/xcshareddata/xcschemes/DesignSystem.xcscheme b/Projects/Shared/DesignSystem/DesignSystem.xcodeproj/xcshareddata/xcschemes/DesignSystem.xcscheme new file mode 100644 index 0000000..b5f43dc --- /dev/null +++ b/Projects/Shared/DesignSystem/DesignSystem.xcodeproj/xcshareddata/xcschemes/DesignSystem.xcscheme @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/Shared/DesignSystem/DesignSystem.xcodeproj/xcshareddata/xcschemes/DesignSystem_DesignSystem.xcscheme b/Projects/Shared/DesignSystem/DesignSystem.xcodeproj/xcshareddata/xcschemes/DesignSystem_DesignSystem.xcscheme new file mode 100644 index 0000000..201f088 --- /dev/null +++ b/Projects/Shared/DesignSystem/DesignSystem.xcodeproj/xcshareddata/xcschemes/DesignSystem_DesignSystem.xcscheme @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/Shared/DesignSystem/DesignSystem.xcodeproj/xcshareddata/xcschemes/DesignSystem_DesignSystem_Debug.xcscheme b/Projects/Shared/DesignSystem/DesignSystem.xcodeproj/xcshareddata/xcschemes/DesignSystem_DesignSystem_Debug.xcscheme new file mode 100644 index 0000000..1ba406a --- /dev/null +++ b/Projects/Shared/DesignSystem/DesignSystem.xcodeproj/xcshareddata/xcschemes/DesignSystem_DesignSystem_Debug.xcscheme @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/Shared/DesignSystem/DesignSystem.xcodeproj/xcshareddata/xcschemes/DesignSystem_DesignSystem_Prod.xcscheme b/Projects/Shared/DesignSystem/DesignSystem.xcodeproj/xcshareddata/xcschemes/DesignSystem_DesignSystem_Prod.xcscheme new file mode 100644 index 0000000..86c0b8d --- /dev/null +++ b/Projects/Shared/DesignSystem/DesignSystem.xcodeproj/xcshareddata/xcschemes/DesignSystem_DesignSystem_Prod.xcscheme @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/Shared/DesignSystem/DesignSystem.xcodeproj/xcshareddata/xcschemes/DesignSystem_DesignSystem_Stage.xcscheme b/Projects/Shared/DesignSystem/DesignSystem.xcodeproj/xcshareddata/xcschemes/DesignSystem_DesignSystem_Stage.xcscheme new file mode 100644 index 0000000..85fedc6 --- /dev/null +++ b/Projects/Shared/DesignSystem/DesignSystem.xcodeproj/xcshareddata/xcschemes/DesignSystem_DesignSystem_Stage.xcscheme @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/Shared/DesignSystem/DesignSystemTests/Sources/Test.swift b/Projects/Shared/DesignSystem/DesignSystemTests/Sources/Test.swift new file mode 100644 index 0000000..a9c810e --- /dev/null +++ b/Projects/Shared/DesignSystem/DesignSystemTests/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/Shared/DesignSystem/Project.swift b/Projects/Shared/DesignSystem/Project.swift new file mode 100644 index 0000000..beae0ca --- /dev/null +++ b/Projects/Shared/DesignSystem/Project.swift @@ -0,0 +1,18 @@ +import Foundation +import ProjectDescription +import DependencyPlugin +import ProjectTemplatePlugin +import ProjectTemplatePlugin +import DependencyPackagePlugin + +let project = Project.makeAppModule( + name: "DesignSystem", + bundleId: .appBundleID(name: ".DesignSystem"), + product: .staticFramework, + settings: .settings(), + dependencies: [ + .SPM.composableArchitecture + ], + sources: ["Sources/**"], + resources: ["Resources/**", "FontAsset"] +) diff --git a/Projects/Shared/DesignSystem/Resources/FontAsset/PretendardVariable.ttf b/Projects/Shared/DesignSystem/Resources/FontAsset/PretendardVariable.ttf new file mode 100644 index 0000000..19063ad Binary files /dev/null and b/Projects/Shared/DesignSystem/Resources/FontAsset/PretendardVariable.ttf differ diff --git a/Projects/Shared/DesignSystem/Resources/ImageAssets.xcassets/Contents.json b/Projects/Shared/DesignSystem/Resources/ImageAssets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/Projects/Shared/DesignSystem/Resources/ImageAssets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/Shared/DesignSystem/Resources/ImageAssets.xcassets/harrypotter1.imageset/Contents.json b/Projects/Shared/DesignSystem/Resources/ImageAssets.xcassets/harrypotter1.imageset/Contents.json new file mode 100644 index 0000000..35a5d9f --- /dev/null +++ b/Projects/Shared/DesignSystem/Resources/ImageAssets.xcassets/harrypotter1.imageset/Contents.json @@ -0,0 +1,16 @@ +{ + "images" : [ + { + "filename" : "harrypotter1.jpg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true, + "template-rendering-intent" : "original" + } +} diff --git a/Projects/Shared/DesignSystem/Resources/ImageAssets.xcassets/harrypotter1.imageset/harrypotter1.jpg b/Projects/Shared/DesignSystem/Resources/ImageAssets.xcassets/harrypotter1.imageset/harrypotter1.jpg new file mode 100644 index 0000000..5f747c1 Binary files /dev/null and b/Projects/Shared/DesignSystem/Resources/ImageAssets.xcassets/harrypotter1.imageset/harrypotter1.jpg differ diff --git a/Projects/Shared/DesignSystem/Resources/ImageAssets.xcassets/harrypotter2.imageset/Contents.json b/Projects/Shared/DesignSystem/Resources/ImageAssets.xcassets/harrypotter2.imageset/Contents.json new file mode 100644 index 0000000..576e667 --- /dev/null +++ b/Projects/Shared/DesignSystem/Resources/ImageAssets.xcassets/harrypotter2.imageset/Contents.json @@ -0,0 +1,16 @@ +{ + "images" : [ + { + "filename" : "harrypotter2.jpg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true, + "template-rendering-intent" : "original" + } +} diff --git a/Projects/Shared/DesignSystem/Resources/ImageAssets.xcassets/harrypotter2.imageset/harrypotter2.jpg b/Projects/Shared/DesignSystem/Resources/ImageAssets.xcassets/harrypotter2.imageset/harrypotter2.jpg new file mode 100644 index 0000000..f480bad Binary files /dev/null and b/Projects/Shared/DesignSystem/Resources/ImageAssets.xcassets/harrypotter2.imageset/harrypotter2.jpg differ diff --git a/Projects/Shared/DesignSystem/Resources/ImageAssets.xcassets/harrypotter3.imageset/Contents.json b/Projects/Shared/DesignSystem/Resources/ImageAssets.xcassets/harrypotter3.imageset/Contents.json new file mode 100644 index 0000000..dbf4314 --- /dev/null +++ b/Projects/Shared/DesignSystem/Resources/ImageAssets.xcassets/harrypotter3.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "harrypotter3.jpg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/Projects/Shared/DesignSystem/Resources/ImageAssets.xcassets/harrypotter3.imageset/harrypotter3.jpg b/Projects/Shared/DesignSystem/Resources/ImageAssets.xcassets/harrypotter3.imageset/harrypotter3.jpg new file mode 100644 index 0000000..e116662 Binary files /dev/null and b/Projects/Shared/DesignSystem/Resources/ImageAssets.xcassets/harrypotter3.imageset/harrypotter3.jpg differ diff --git a/Projects/Shared/DesignSystem/Resources/ImageAssets.xcassets/harrypotter4.imageset/Contents.json b/Projects/Shared/DesignSystem/Resources/ImageAssets.xcassets/harrypotter4.imageset/Contents.json new file mode 100644 index 0000000..c7841c7 --- /dev/null +++ b/Projects/Shared/DesignSystem/Resources/ImageAssets.xcassets/harrypotter4.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "harrypotter4.jpg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/Projects/Shared/DesignSystem/Resources/ImageAssets.xcassets/harrypotter4.imageset/harrypotter4.jpg b/Projects/Shared/DesignSystem/Resources/ImageAssets.xcassets/harrypotter4.imageset/harrypotter4.jpg new file mode 100644 index 0000000..a60cd59 Binary files /dev/null and b/Projects/Shared/DesignSystem/Resources/ImageAssets.xcassets/harrypotter4.imageset/harrypotter4.jpg differ diff --git a/Projects/Shared/DesignSystem/Resources/ImageAssets.xcassets/harrypotter5.imageset/Contents.json b/Projects/Shared/DesignSystem/Resources/ImageAssets.xcassets/harrypotter5.imageset/Contents.json new file mode 100644 index 0000000..8b39205 --- /dev/null +++ b/Projects/Shared/DesignSystem/Resources/ImageAssets.xcassets/harrypotter5.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "harrypotter5.jpg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/Projects/Shared/DesignSystem/Resources/ImageAssets.xcassets/harrypotter5.imageset/harrypotter5.jpg b/Projects/Shared/DesignSystem/Resources/ImageAssets.xcassets/harrypotter5.imageset/harrypotter5.jpg new file mode 100644 index 0000000..6d9595d Binary files /dev/null and b/Projects/Shared/DesignSystem/Resources/ImageAssets.xcassets/harrypotter5.imageset/harrypotter5.jpg differ diff --git a/Projects/Shared/DesignSystem/Resources/ImageAssets.xcassets/harrypotter6.imageset/Contents.json b/Projects/Shared/DesignSystem/Resources/ImageAssets.xcassets/harrypotter6.imageset/Contents.json new file mode 100644 index 0000000..f315548 --- /dev/null +++ b/Projects/Shared/DesignSystem/Resources/ImageAssets.xcassets/harrypotter6.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "harrypotter6.jpg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/Projects/Shared/DesignSystem/Resources/ImageAssets.xcassets/harrypotter6.imageset/harrypotter6.jpg b/Projects/Shared/DesignSystem/Resources/ImageAssets.xcassets/harrypotter6.imageset/harrypotter6.jpg new file mode 100644 index 0000000..2bb3716 Binary files /dev/null and b/Projects/Shared/DesignSystem/Resources/ImageAssets.xcassets/harrypotter6.imageset/harrypotter6.jpg differ diff --git a/Projects/Shared/DesignSystem/Resources/ImageAssets.xcassets/harrypotter7.imageset/Contents.json b/Projects/Shared/DesignSystem/Resources/ImageAssets.xcassets/harrypotter7.imageset/Contents.json new file mode 100644 index 0000000..d527d43 --- /dev/null +++ b/Projects/Shared/DesignSystem/Resources/ImageAssets.xcassets/harrypotter7.imageset/Contents.json @@ -0,0 +1,15 @@ +{ + "images" : [ + { + "filename" : "harrypotter7.jpg", + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + }, + "properties" : { + "preserves-vector-representation" : true + } +} diff --git a/Projects/Shared/DesignSystem/Resources/ImageAssets.xcassets/harrypotter7.imageset/harrypotter7.jpg b/Projects/Shared/DesignSystem/Resources/ImageAssets.xcassets/harrypotter7.imageset/harrypotter7.jpg new file mode 100644 index 0000000..c0d913b Binary files /dev/null and b/Projects/Shared/DesignSystem/Resources/ImageAssets.xcassets/harrypotter7.imageset/harrypotter7.jpg differ diff --git a/Projects/Shared/DesignSystem/Sources/Component/Controller/BaseViewController.swift b/Projects/Shared/DesignSystem/Sources/Component/Controller/BaseViewController.swift new file mode 100644 index 0000000..243f88f --- /dev/null +++ b/Projects/Shared/DesignSystem/Sources/Component/Controller/BaseViewController.swift @@ -0,0 +1,220 @@ +// +// BaseViewController.swift +// DesignSystem +// +// Created by Wonji Suh on 9/5/25. +// + +import UIKit + +import Combine +import ComposableArchitecture + +open class BaseViewController< + RootView: UIView, + Feature: Reducer +>: UIViewController where Feature.State: Equatable { + + // MARK: - Properties + /// 루트 뷰 인스턴스 + public let rootView: RootView + + /// TCA Store + public let store: StoreOf + + /// ViewStore for observing state + public let viewStore: ViewStoreOf + + /// Combine cancellables - 메모리 관리 최적화 + public var cancellables: Set = [] + + // MARK: - Performance Monitoring + + #if DEBUG + private var performanceTimer: CFAbsoluteTime = 0 + #endif + + // MARK: - Initialization + + public init(rootView: RootView, store: StoreOf) { + self.rootView = rootView + self.store = store + self.viewStore = ViewStore(store, observe: { $0 }) + super.init(nibName: nil, bundle: nil) + } + + @available(*, unavailable) + public required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: - Lifecycle + + open override func loadView() { + view = rootView + } + + open override func viewDidLoad() { + super.viewDidLoad() + + #if DEBUG + performanceTimer = CFAbsoluteTimeGetCurrent() + print("🚀 [\(String(describing: type(of: self)))] viewDidLoad 시작") + #endif + + setupView() + configureUI() + bindActions() + bindState() + + #if DEBUG + let elapsed = CFAbsoluteTimeGetCurrent() - performanceTimer + print("⏱️ [\(String(describing: type(of: self)))] viewDidLoad 완료: \(String(format: "%.3f", elapsed))초") + #endif + } + + open override func viewWillAppear(_ animated: Bool) { + super.viewWillAppear(animated) + + #if DEBUG + print("👀 [\(String(describing: type(of: self)))] viewWillAppear") + #endif + } + + // MARK: - Memory Management + + deinit { + #if DEBUG + print("♻️ [\(String(describing: type(of: self)))] deinit - 메모리 해제") + #endif + + // Combine cancellables 정리 + cancellables.removeAll() + } + + // MARK: - Setup Methods + + /// 뷰의 기본 설정 (배경색, 기본 속성 등) + open func setupView() { + view.backgroundColor = .basicBlack + } + + /// UI 구성 등 추가 설정 + /// 서브클래스에서 오버라이드하여 사용 + open func configureUI() { + // Override in subclass + } + + /// 액션 바인딩 + /// 서브클래스에서 오버라이드하여 UI 액션을 TCA 액션으로 연결 + open func bindActions() { + // Override in subclass + } + + /// 상태 바인딩 + /// 서브클래스에서 오버라이드하여 TCA 상태를 UI에 반영 + open func bindState() { + // 기본 에러 처리 바인딩 + bindErrorHandling() + } + + // MARK: - Error Handling + + /// 글로벌 에러 처리를 위한 기본 바인딩 + private func bindErrorHandling() { + // TCA Store의 에러를 감지하고 처리 + viewStore.publisher + .compactMap { state -> String? in + // Feature.State에 error 프로퍼티가 있다면 추출 + // 서브클래스에서 오버라이드하여 구체적인 에러 추출 로직 구현 + return self.extractError(from: state) + } + .removeDuplicates() + .receive(on: DispatchQueue.main) + .sink { [weak self] errorMessage in + self?.handleError(errorMessage) + } + .store(in: &cancellables) + } + + /// Feature State에서 에러 추출 (서브클래스에서 오버라이드) + open func extractError(from state: Feature.State) -> String? { + // 서브클래스에서 구체적인 에러 추출 로직 구현 + return nil + } + + /// 에러 처리 (서브클래스에서 오버라이드 가능) + open func handleError(_ errorMessage: String) { + #if DEBUG + print("🚨 [\(String(describing: type(of: self)))] Error: \(errorMessage)") + #endif + + // 기본 에러 처리: 알림 표시 + showErrorAlert(message: errorMessage) + } + + /// 에러 알림 표시 + private func showErrorAlert(message: String) { + let alert = UIAlertController( + title: "오류", + message: message, + preferredStyle: .alert + ) + + alert.addAction(UIAlertAction(title: "확인", style: .default)) + + // 메인 스레드에서 실행 보장 + DispatchQueue.main.async { [weak self] in + self?.present(alert, animated: true) + } + } + + // MARK: - Performance Utilities + + /// ViewStore 구독 최적화 헬퍼 + public func optimizedPublisher( + _ keyPath: KeyPath + ) -> AnyPublisher { + return viewStore.publisher + .map { $0[keyPath: keyPath] } + .removeDuplicates() + .receive(on: DispatchQueue.main) + .eraseToAnyPublisher() + } + + /// Optional 타입을 위한 ViewStore 구독 최적화 헬퍼 + public func optimizedPublisher( + _ keyPath: KeyPath + ) -> AnyPublisher { + return viewStore.publisher + .map { $0[keyPath: keyPath] } + .removeDuplicates { lhs, rhs in + switch (lhs, rhs) { + case let (l?, r?): + return l == r + case (nil, nil): + return true + default: + return false + } + } + .receive(on: DispatchQueue.main) + .eraseToAnyPublisher() + } + + /// 안전한 액션 전송 (에러 처리 포함) + public func safeSend(_ action: Feature.Action) { + do { + store.send(action) + #if DEBUG + print("✅ [\(String(describing: type(of: self)))] Action sent: \(action)") + #endif + } catch { + #if DEBUG + print("🚨 [\(String(describing: type(of: self)))] Action send failed: \(error)") + #endif + handleError("액션 처리 중 오류가 발생했습니다: \(error.localizedDescription)") + } + } +} + diff --git a/Projects/Shared/DesignSystem/Sources/Component/View/BaseView.swift b/Projects/Shared/DesignSystem/Sources/Component/View/BaseView.swift new file mode 100644 index 0000000..daef367 --- /dev/null +++ b/Projects/Shared/DesignSystem/Sources/Component/View/BaseView.swift @@ -0,0 +1,37 @@ +// +// BaseView.swift +// DesignSystem +// +// Created by Wonji Suh on 9/5/25. +// + +import UIKit + +open class BaseView: UIView { + + public override init(frame: CGRect) { + super.init(frame: frame) + configureUI() + } + + public required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + /// 초기 UI 구성 훅 + open func configureUI() { + addView() + setAttributes() + } + + /// 서브뷰 추가 훅 + open func addView() { + defineLayout() + } + + /// 속성 세팅 훅 + open func setAttributes() {} + + /// 오토레이아웃/플렉스 레이아웃 정의 훅 + open func defineLayout() {} +} diff --git a/Projects/Shared/DesignSystem/Sources/CustomFont/PretendardFont.swift b/Projects/Shared/DesignSystem/Sources/CustomFont/PretendardFont.swift new file mode 100644 index 0000000..d36ea4a --- /dev/null +++ b/Projects/Shared/DesignSystem/Sources/CustomFont/PretendardFont.swift @@ -0,0 +1,66 @@ +// +// PretendardFont.swift +// DesignSystem +// +// Created by Wonji Suh on 9/5/25. +// + +import Foundation +import UIKit + +public extension UIFont { + static func pretendardFont(family: PretendardFontFamily, size: CGFloat) -> UIFont { + let fontName = "PretendardVariable-\(family)" + return UIFont(name: fontName, size: size) ?? UIFont.systemFont(ofSize: size, weight: .regular) + } + + struct Pretendard { + static func title(size: CGFloat) -> UIFont { + return UIFont.pretendardFont(family: .semiBold, size: size) + } + + static func body(size: CGFloat) -> UIFont { + return UIFont.pretendardFont(family: .regular, size: size) + } + + static func caption(size: CGFloat) -> UIFont { + return UIFont.pretendardFont(family: .medium, size: size) + } + + static func amount(size: CGFloat) -> UIFont { + return UIFont.pretendardFont(family: .bold, size: size) + } + + static func button(size: CGFloat) -> UIFont { + return UIFont.pretendardFont(family: .semiBold, size: size) + } + } +} + +// MARK: - UILabel Extension +public extension UILabel { + func setPretendardFont(family: PretendardFontFamily, size: CGFloat) { + self.font = UIFont.pretendardFont(family: family, size: size) + } +} + +// MARK: - UITextField Extension +public extension UITextField { + func setPretendardFont(family: PretendardFontFamily, size: CGFloat) { + self.font = UIFont.pretendardFont(family: family, size: size) + } +} + +// MARK: - UITextView Extension +public extension UITextView { + func setPretendardFont(family: PretendardFontFamily, size: CGFloat) { + self.font = UIFont.pretendardFont(family: family, size: size) + } +} + +// MARK: - UIButton Extension +public extension UIButton { + func setPretendardFont(family: PretendardFontFamily, size: CGFloat) { + self.titleLabel?.font = UIFont.pretendardFont(family: family, size: size) + } +} diff --git a/Projects/Shared/DesignSystem/Sources/CustomFont/PretendardFontFamily.swift b/Projects/Shared/DesignSystem/Sources/CustomFont/PretendardFontFamily.swift new file mode 100644 index 0000000..2c6ee4f --- /dev/null +++ b/Projects/Shared/DesignSystem/Sources/CustomFont/PretendardFontFamily.swift @@ -0,0 +1,43 @@ +// +// PretendardFontFamily.swift +// DesignSystem +// +// Created by Wonji Suh on 9/5/25. +// + +import Foundation + +public enum PretendardFontFamily: CustomStringConvertible { + case black + case bold + case extraBold + case extraLight + case light + case medium + case regular + case semiBold + case thin + + public var description: String { + switch self { + case .black: + return "Black" + case .bold: + return "Bold" + case .extraBold: + return "ExtraBold" + case .extraLight: + return "ExtraLight" + case .light: + return "Light" + case .medium: + return "Medium" + case .regular: + return "Regular" + case .semiBold: + return "SemiBold" + case .thin: + return "Thin" + } + } +} diff --git a/Projects/Shared/DesignSystem/Sources/Extension/Color/Extension+Colo.swift b/Projects/Shared/DesignSystem/Sources/Extension/Color/Extension+Colo.swift new file mode 100644 index 0000000..e14a643 --- /dev/null +++ b/Projects/Shared/DesignSystem/Sources/Extension/Color/Extension+Colo.swift @@ -0,0 +1,23 @@ +// +// Extension+Colo.swift +// DesignSystem +// +// Created by Wonji Suh on 9/5/25. +// + +import UIKit + +public extension UIColor { + convenience init(hex: String, alpha: Double? = .zero) { + let scanner = Scanner(string: hex) + _ = scanner.scanString("#") + + var rgb: UInt64 = 0 + scanner.scanHexInt64(&rgb) + + let r = Double((rgb >> 16) & 0xFF) / 255.0 + let g = Double((rgb >> 8) & 0xFF) / 255.0 + let b = Double((rgb >> 0) & 0xFF) / 255.0 + self.init(red: r, green: g, blue: b, alpha: 100) + } +} diff --git a/Projects/Shared/DesignSystem/Sources/Extension/Color/Extension+UIColor.swift b/Projects/Shared/DesignSystem/Sources/Extension/Color/Extension+UIColor.swift new file mode 100644 index 0000000..a62d3f2 --- /dev/null +++ b/Projects/Shared/DesignSystem/Sources/Extension/Color/Extension+UIColor.swift @@ -0,0 +1,23 @@ +// +// Extension+UIColor.swift +// DesignSystem +// +// Created by Wonji Suh on 9/5/25. +// + +import SwiftUI + +public extension Color { + init(hex: String) { + let scanner = Scanner(string: hex) + _ = scanner.scanString("#") + + var rgb: UInt64 = 0 + scanner.scanHexInt64(&rgb) + + let r = Double((rgb >> 16) & 0xFF) / 255.0 + let g = Double((rgb >> 8) & 0xFF) / 255.0 + let b = Double((rgb >> 0) & 0xFF) / 255.0 + self.init(red: r, green: g, blue: b) + } +} diff --git a/Projects/Shared/DesignSystem/Sources/Extension/Image/ Extension+Image.swift b/Projects/Shared/DesignSystem/Sources/Extension/Image/ Extension+Image.swift new file mode 100644 index 0000000..4b54a6f --- /dev/null +++ b/Projects/Shared/DesignSystem/Sources/Extension/Image/ Extension+Image.swift @@ -0,0 +1,52 @@ +// +// Extension+Image.swift +// DesignSystem +// +// Created by Wonji Suh on 9/5/25. +// + +import Foundation +import UIKit + +public extension UIImage { + func roundedImage() -> UIImage? { + let imageSize = CGSize(width: self.size.width, height: self.size.height) + let radius = min(self.size.width, self.size.height) / 2.0 + let roundedRect = CGRect(origin: .zero, size: imageSize).insetBy(dx: radius, dy: radius) + + let renderer = UIGraphicsImageRenderer(size: imageSize) + let roundedImage = renderer.image { context in + let path = UIBezierPath(roundedRect: CGRect(origin: .zero, size: imageSize), cornerRadius: radius) + context.cgContext.addPath(path.cgPath) + context.cgContext.clip() + self.draw(in: roundedRect) + } + return roundedImage + } + + func setRoundedCorners() -> UIImage? { + let imageView = UIImageView(image: self) + let layer = imageView.layer + layer.masksToBounds = true + layer.cornerRadius = imageView.frame.width / 2.0 + UIGraphicsBeginImageContext(imageView.bounds.size) + defer { UIGraphicsEndImageContext() } + guard let context = UIGraphicsGetCurrentContext() else { + return nil + } + layer.render(in: context) + let roundedImage = UIGraphicsGetImageFromCurrentImageContext() + return roundedImage + } +} + + +public extension UIImage { + convenience init?(_ asset: ImageAsset) { + self.init(named: asset.rawValue, in: Bundle.module, with: nil) + } + + convenience init?(assetName: String) { + self.init(named: assetName, in: Bundle.module, with: nil) + } +} diff --git a/Projects/Shared/DesignSystem/Sources/Image/ImageAsset.swift b/Projects/Shared/DesignSystem/Sources/Image/ImageAsset.swift new file mode 100644 index 0000000..2b51906 --- /dev/null +++ b/Projects/Shared/DesignSystem/Sources/Image/ImageAsset.swift @@ -0,0 +1,19 @@ +// +// ImageAsset.swift +// DesignSystem +// +// Created by Wonji Suh on 9/5/25. +// + +import Foundation + +public enum ImageAsset : String { + case empty + case harrypotter1 + case harrypotter2 + case harrypotter3 + case harrypotter4 + case harrypotter5 + case harrypotter6 + case harrypotter7 +} diff --git a/Projects/Shared/DesignSystem/Sources/UI/UIButton/Extension+UIButton.swift b/Projects/Shared/DesignSystem/Sources/UI/UIButton/Extension+UIButton.swift new file mode 100644 index 0000000..5ca40d8 --- /dev/null +++ b/Projects/Shared/DesignSystem/Sources/UI/UIButton/Extension+UIButton.swift @@ -0,0 +1,96 @@ +// +// Extension+UIButton.swift +// DesignSystem +// +// Created by Wonji Suh on 9/9/25. +// + +import UIKit + +import UIKit + +public struct ButtonStyle { + public enum Kind { case plain, tinted, filled, gray } + + public var kind: Kind = .plain + public var titleFont: UIFont = .pretendardFont(family: .bold, size: 14) + public var titleColor: UIColor = .systemBlue + public var backgroundColor: UIColor = .clear + public var cornerRadius: CGFloat = 6 + public var contentInsets: NSDirectionalEdgeInsets = + .init(top: 4, leading: 8, bottom: 4, trailing: 8) + public var borderWidth: CGFloat = 0 + public var borderColor: UIColor? = nil + + public static let summaryToggle = ButtonStyle() +} + +public extension UIButton { + @discardableResult + func create(_ style: ButtonStyle = .summaryToggle, title: String? = nil) -> Self { + applyStyle(style, title: title) + } + + static func make(_ style: ButtonStyle = .summaryToggle, + title: String? = nil, + target: Any? = nil, + action: Selector? = nil) -> UIButton { + let b = UIButton(type: .system).applyStyle(style, title: title) + if let target, let action { b.addTarget(target, action: action, for: .touchUpInside) } + return b + } + + @discardableResult + func applyStyle(_ style: ButtonStyle, title: String? = nil) -> Self { + if #available(iOS 15.0, *) { + // 1) 구성 객체 선택 + var config: UIButton.Configuration = { + switch style.kind { + case .plain: return .plain() + case .tinted: return .tinted() + case .filled: return .filled() + case .gray: return .gray() + } + }() + + // 2) 제목 + 폰트 + let finalTitle = title ?? (self.currentTitle ?? "") + var attrs = AttributeContainer() + attrs.font = style.titleFont + config.attributedTitle = AttributedString(finalTitle, attributes: attrs) + + // 3) 색/인셋 + config.baseForegroundColor = style.titleColor + config.contentInsets = style.contentInsets + + // 4) 배경 + config.baseBackgroundColor = style.backgroundColor + // cornerRadius는 configuration에 고정값 API가 제한적이라 layer로 처리 + self.configuration = config + + // 5) 모서리/테두리(layer로 처리) + layer.cornerRadius = style.cornerRadius + layer.masksToBounds = true + layer.borderWidth = style.borderWidth + layer.borderColor = style.borderColor?.cgColor + + } else { + // iOS 14 이하 폴백 + if let title { setTitle(title, for: .normal) } + setTitleColor(style.titleColor, for: .normal) + titleLabel?.font = style.titleFont + backgroundColor = style.backgroundColor + layer.cornerRadius = style.cornerRadius + layer.masksToBounds = true + contentEdgeInsets = UIEdgeInsets( + top: style.contentInsets.top, + left: style.contentInsets.leading, + bottom: style.contentInsets.bottom, + right: style.contentInsets.trailing + ) + layer.borderWidth = style.borderWidth + layer.borderColor = style.borderColor?.cgColor + } + return self + } +} diff --git a/Projects/Shared/DesignSystem/Sources/UI/UILabel/Extension+UILabel.swift b/Projects/Shared/DesignSystem/Sources/UI/UILabel/Extension+UILabel.swift new file mode 100644 index 0000000..b72bd7e --- /dev/null +++ b/Projects/Shared/DesignSystem/Sources/UI/UILabel/Extension+UILabel.swift @@ -0,0 +1,26 @@ +// +// Extension+UILabel.swift +// DesignSystem +// +// Created by Wonji Suh on 9/5/25. +// + +import UIKit + +public extension UILabel { + static func createLabel( + for text: String, + family: PretendardFontFamily, + size: CGFloat, + color: UIColor + ) -> UILabel { + let label = UILabel() + label.text = text + label.font = UIFont.pretendardFont(family: .bold, size: size) + label.textColor = color + label.textAlignment = .center + label.numberOfLines = 0 // 필요한 만큼 줄 수 허용 + label.lineBreakMode = .byWordWrapping // 단어 단위로 줄바꿈 + return label + } +} diff --git a/Projects/Shared/DesignSystem/Sources/UI/UiStack/Extension+UiStack.swift b/Projects/Shared/DesignSystem/Sources/UI/UiStack/Extension+UiStack.swift new file mode 100644 index 0000000..3854104 --- /dev/null +++ b/Projects/Shared/DesignSystem/Sources/UI/UiStack/Extension+UiStack.swift @@ -0,0 +1,77 @@ +// +// Extension+UiStack.swift +// DesignSystem +// +// Created by Wonji Suh on 9/9/25. +// + +import UIKit + + +public enum StackStyle { + case mainVertical // axis: vertical, spacing: 30 + case cardHorizontal // axis: horizontal, spacing: 16, alignment: .top + case custom(axis: NSLayoutConstraint.Axis, + spacing: CGFloat, + alignment: UIStackView.Alignment = .fill, + distribution: UIStackView.Distribution = .fill) +} + +public extension UIStackView { + // 핵심 팩토리 + static func make(_ style: StackStyle, + arrangedSubviews: [UIView] = []) -> UIStackView { + switch style { + case .mainVertical: + return UIStackView.vertical(spacing: 30, alignment: .fill, distribution: .fill, + arrangedSubviews: arrangedSubviews) + case .cardHorizontal: + return UIStackView.horizontal(spacing: 16, alignment: .top, distribution: .fill, + arrangedSubviews: arrangedSubviews) + case let .custom(axis, spacing, alignment, distribution): + let stack = UIStackView(arrangedSubviews: arrangedSubviews) + stack.axis = axis + stack.spacing = spacing + stack.alignment = alignment + stack.distribution = distribution + return stack + } + } + + // 편의 생성자: 세로/가로 + static func vertical(spacing: CGFloat = 0, + alignment: UIStackView.Alignment = .fill, + distribution: UIStackView.Distribution = .fill, + arrangedSubviews: [UIView] = []) -> UIStackView { + let stack = UIStackView(arrangedSubviews: arrangedSubviews) + stack.axis = .vertical + stack.spacing = spacing + stack.alignment = alignment + stack.distribution = distribution + return stack + } + + static func horizontal(spacing: CGFloat = 0, + alignment: UIStackView.Alignment = .fill, + distribution: UIStackView.Distribution = .fill, + arrangedSubviews: [UIView] = []) -> UIStackView { + let stack = UIStackView(arrangedSubviews: arrangedSubviews) + stack.axis = .horizontal + stack.spacing = spacing + stack.alignment = alignment + stack.distribution = distribution + return stack + } + + // 자주 쓰는 유틸 + func addArrangedSubviews(_ views: UIView...) { views.forEach(addArrangedSubview) } + func addArrangedSubviews(_ views: [UIView]) { views.forEach(addArrangedSubview) } + + func setArrangedSubviews(_ views: [UIView]) { + arrangedSubviews.forEach { + removeArrangedSubview($0) + $0.removeFromSuperview() + } + views.forEach(addArrangedSubview) + } +} diff --git a/Projects/Shared/DesignSystem/Sources/UI/UiView/Extension+UiView.swift b/Projects/Shared/DesignSystem/Sources/UI/UiView/Extension+UiView.swift new file mode 100644 index 0000000..064aba8 --- /dev/null +++ b/Projects/Shared/DesignSystem/Sources/UI/UiView/Extension+UiView.swift @@ -0,0 +1,58 @@ +// +// Extension+UiView.swift +// DesignSystem +// +// Created by Wonji Suh on 9/9/25. +// + +import UIKit + +public struct ContainerStyle { + public var backgroundColor: UIColor = .systemBackground + public var cornerRadius: CGFloat = 12 + public var shadowColor: UIColor = .black + public var shadowOpacity: Float = 0.1 + public var shadowOffset: CGSize = .init(width: 0, height: 2) + public var shadowRadius: CGFloat = 8 + + public init(backgroundColor: UIColor = .systemBackground, + cornerRadius: CGFloat = 12, + shadowColor: UIColor = .black, + shadowOpacity: Float = 0.1, + shadowOffset: CGSize = .init(width: 0, height: 2), + shadowRadius: CGFloat = 8) { + self.backgroundColor = backgroundColor + self.cornerRadius = cornerRadius + self.shadowColor = shadowColor + self.shadowOpacity = shadowOpacity + self.shadowOffset = shadowOffset + self.shadowRadius = shadowRadius + } + + public static let `default` = ContainerStyle() +} + +public extension UIView { + + func addSubviews(_ views: UIView...) { + views.forEach(addSubview) + } + + /// 한 줄 생성: UIView.makeContainer() + static func makeContainer(_ style: ContainerStyle = .default) -> UIView { + UIView().applyContainerStyle(style) + } + + /// 체이닝 적용: UIView().applyContainerStyle() + @discardableResult + func applyContainerStyle(_ style: ContainerStyle = .default) -> Self { + backgroundColor = style.backgroundColor + layer.cornerRadius = style.cornerRadius + layer.shadowColor = style.shadowColor.cgColor + layer.shadowOpacity = style.shadowOpacity + layer.shadowOffset = style.shadowOffset + layer.shadowRadius = style.shadowRadius + layer.masksToBounds = false + return self + } +} diff --git a/Projects/Shared/DesignSystem/Sources/UIColors/UIColors.swift b/Projects/Shared/DesignSystem/Sources/UIColors/UIColors.swift new file mode 100644 index 0000000..48db025 --- /dev/null +++ b/Projects/Shared/DesignSystem/Sources/UIColors/UIColors.swift @@ -0,0 +1,102 @@ +// +// UIColors.swift +// DesignSystem +// +// Created by Wonji Suh on 9/5/25. +// + +import UIKit + +public extension UIColor { + + // MARK: - Static Basic + + static var staticWhite: UIColor { UIColor(hex: "FFFFFF") } + static var staticBlack: UIColor { UIColor(hex: "0C0E0F") } + + // MARK: - Static Text + static var textPrimary: UIColor { UIColor(hex: "FFFFFF") } + static var textSecondary: UIColor { UIColor(hex: "EAEAEA") } + static var textSecondary100: UIColor { UIColor(hex: "525252") } + static var textInactive: UIColor { UIColor(hex: "70737C").withAlphaComponent(0.28) } + + // MARK: - Static Background + static var backGroundPrimary: UIColor { UIColor(hex: "0C0E0F") } + static var backgroundInverse: UIColor { UIColor(hex: "FFFFFF") } + + // MARK: - Static Border + static var borderInactive: UIColor { UIColor(hex: "C6C6C6") } + static var borderDisabled: UIColor { UIColor(hex: "323537") } + static var borderInverse: UIColor { UIColor(hex: "202325") } + + // MARK: - Static Status + + static var statusFocus: UIColor { UIColor(hex: "0D82F9") } + static var statusCautionary: UIColor { UIColor(hex: "FD5D08") } + static var statusError: UIColor { UIColor(hex: "FD1008") } + + // MARK: - Primitives + + static var grayBlack: UIColor { UIColor(hex: "1A1A1A") } + static var gray80: UIColor { UIColor(hex: "323537") } + static var gray60: UIColor { UIColor(hex: "6F6F6F") } + static var gray40: UIColor { UIColor(hex: "A8A8A8") } + static var gray90: UIColor { UIColor(hex: "202325") } + static var grayError: UIColor { UIColor(hex: "FF5050") } + static var grayWhite: UIColor { UIColor(hex: "FFFFFF") } + static var grayPrimary: UIColor { UIColor(hex: "0099FF") } + + // MARK: - Surface + + static var surfaceBackground: UIColor { UIColor(hex: "1A1A1A") } + static var surfaceElevated: UIColor { UIColor(hex: "4D4D4D").withAlphaComponent(0.4) } + static var surfaceNormal: UIColor { UIColor(hex: "FFFFFF") } + static var surfaceAccent: UIColor { UIColor(hex: "E6E6E6") } + static var surfaceDisable: UIColor { UIColor(hex: "808080") } + static var surfaceEnable: UIColor { UIColor(hex: "0099FF") } + static var surfaceError: UIColor { UIColor(hex: "FF5050").withAlphaComponent(0.2) } + + // MARK: - TextIcon + + static var onBackground: UIColor { UIColor(hex: "FFFFFF") } + static var onNormal: UIColor { UIColor(hex: "1A1A1A") } + static var onDisabled: UIColor { UIColor(hex: "4D4D4D").withAlphaComponent(0.4) } + static var onError: UIColor { UIColor(hex: "FF5050") } + + // MARK: - NatureBlue + + static var blue10: UIColor { UIColor(hex: "F5F8FF") } + static var blue20: UIColor { UIColor(hex: "E1EAFF") } + static var blue30: UIColor { UIColor(hex: "C1D3FF") } + static var blue40: UIColor { UIColor(hex: "0D82F9") } + static var blue50: UIColor { UIColor(hex: "0c75e0") } + static var blue60: UIColor { UIColor(hex: "0a68c7") } + static var blue70: UIColor { UIColor(hex: "0a62bb") } + static var blue80: UIColor { UIColor(hex: "084E95") } + static var blue90: UIColor { UIColor(hex: "063A70") } + static var blue100: UIColor { UIColor(hex: "052E57") } + + // MARK: - NatureRed + static var red10: UIColor { UIColor(hex: "ffe7e6") } + static var red20: UIColor { UIColor(hex: "ffdbda") } + static var red30: UIColor { UIColor(hex: "feb5b2") } + static var red40: UIColor { UIColor(hex: "fd1008") } + static var red50: UIColor { UIColor(hex: "e40e07") } + static var red60: UIColor { UIColor(hex: "ca0d06") } + static var red70: UIColor { UIColor(hex: "be0c06") } + static var red80: UIColor { UIColor(hex: "980a05") } + static var red90: UIColor { UIColor(hex: "720704") } + static var red100: UIColor { UIColor(hex: "590603") } + + static var basicBlack: UIColor { UIColor(hex: "1A1A1A") } + static var gray200: UIColor { UIColor(hex: "E6E6E6") } + static var gray300: UIColor { UIColor(hex: "8F8F8F") } + static var gray400: UIColor { UIColor(hex: "B3B3B3") } + static var gray600: UIColor { UIColor(hex: "808080") } + static var gray800: UIColor { UIColor(hex: "4D4D4D") } + + static var error: UIColor { UIColor(hex: "FF5050") } + static var basicBlue: UIColor { UIColor(hex: "0099FF") } + + static var basicBlackDimmed: UIColor { UIColor(hex: "333332").withAlphaComponent(0.7) } +} diff --git a/Projects/Shared/Shared/Derived/InfoPlists/Shared-Debug-Info.plist b/Projects/Shared/Shared/Derived/InfoPlists/Shared-Debug-Info.plist new file mode 100644 index 0000000..323e5ec --- /dev/null +++ b/Projects/Shared/Shared/Derived/InfoPlists/Shared-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/Shared/Shared/Derived/InfoPlists/Shared-Info.plist b/Projects/Shared/Shared/Derived/InfoPlists/Shared-Info.plist new file mode 100644 index 0000000..323e5ec --- /dev/null +++ b/Projects/Shared/Shared/Derived/InfoPlists/Shared-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/Shared/Shared/Derived/InfoPlists/Shared-Prod-Info.plist b/Projects/Shared/Shared/Derived/InfoPlists/Shared-Prod-Info.plist new file mode 100644 index 0000000..323e5ec --- /dev/null +++ b/Projects/Shared/Shared/Derived/InfoPlists/Shared-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/Shared/Shared/Derived/InfoPlists/Shared-Stage-Info.plist b/Projects/Shared/Shared/Derived/InfoPlists/Shared-Stage-Info.plist new file mode 100644 index 0000000..323e5ec --- /dev/null +++ b/Projects/Shared/Shared/Derived/InfoPlists/Shared-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/Shared/Shared/Derived/InfoPlists/SharedTests-Info.plist b/Projects/Shared/Shared/Derived/InfoPlists/SharedTests-Info.plist new file mode 100644 index 0000000..6c40a6c --- /dev/null +++ b/Projects/Shared/Shared/Derived/InfoPlists/SharedTests-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/Shared/Shared/Derived/Sources/TuistBundle+SharedTests.swift b/Projects/Shared/Shared/Derived/Sources/TuistBundle+SharedTests.swift new file mode 100644 index 0000000..b794157 --- /dev/null +++ b/Projects/Shared/Shared/Derived/Sources/TuistBundle+SharedTests.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 SharedTests 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 SharedTestsResources: 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/Shared/Shared/Project.swift b/Projects/Shared/Shared/Project.swift new file mode 100644 index 0000000..e6a49bd --- /dev/null +++ b/Projects/Shared/Shared/Project.swift @@ -0,0 +1,19 @@ +import Foundation +import ProjectDescription +import DependencyPlugin +import ProjectTemplatePlugin +import ProjectTemplatePlugin +import DependencyPackagePlugin + +let project = Project.makeAppModule( + name: "Shared", + bundleId: .appBundleID(name: ".Shared"), + product: .staticFramework, + settings: .settings(), + dependencies: [ + .Shared(implements: .ThirdParty), + .Shared(implements: .DesignSystem), + .Shared(implements: .Utill), + ], + sources: ["Sources/**"] +) diff --git a/Projects/Shared/Shared/Shared.xcodeproj/project.pbxproj b/Projects/Shared/Shared/Shared.xcodeproj/project.pbxproj new file mode 100644 index 0000000..78e2dca --- /dev/null +++ b/Projects/Shared/Shared/Shared.xcodeproj/project.pbxproj @@ -0,0 +1,1435 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 55; + objects = { + +/* Begin PBXBuildFile section */ + 03C6E8CAABDCC8EA2A9C833D /* Sharing1.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E5CB67B1B862F32C9DBF4200 /* Sharing1.framework */; }; + 03CCC30D3210F5400C1486FE /* XCTestDynamicOverlay.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 62FB4B57EE0B4FF57DB2E98C /* XCTestDynamicOverlay.framework */; }; + 0792B614FDDC1CE2BEC07605 /* DesignSystem.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 4AE87645A97032776452E22F /* DesignSystem.framework */; }; + 0C8957912F2D02D504FFF5A9 /* swift-composable-architecture_ComposableArchitecture.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 4595115C1E806888151C9650 /* swift-composable-architecture_ComposableArchitecture.bundle */; }; + 0C962E9CF84A09DC2BF31448 /* IssueReportingPackageSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AD7280F892588925BDA24822 /* IssueReportingPackageSupport.framework */; }; + 0F1E6BF81970625FB19609D7 /* SnapKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 49D8CAD4A1E3478C7DC7DFFB /* SnapKit.framework */; }; + 1D106E89AD8F63F2F43A7F6E /* OrderedCollections.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8B05823D17AC1A01668CA17A /* OrderedCollections.framework */; }; + 1DA1BD86723C863368DBAA54 /* PerceptionCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 169DFD779D490EF6D0450319 /* PerceptionCore.framework */; }; + 2214BCDFAF9B6BBDA78A98C2 /* Perception.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 888EAA25A85A8C2558C81033 /* Perception.framework */; }; + 246E74A34053D13CBBF522F2 /* ThirdParty.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3856DDE39ED5A0A35BB0A5CC /* ThirdParty.framework */; }; + 25CCB4B7700896516801026E /* SharedExported.swift in Sources */ = {isa = PBXBuildFile; fileRef = 774BD0E38EC71B9E5E7E4517 /* SharedExported.swift */; }; + 26A7FFF42670F1F606B685BB /* SnapKit_SnapKit.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E597872285478A9F1A0FAC39 /* SnapKit_SnapKit.bundle */; }; + 3413AE59056BFB1365F78075 /* SwiftUINavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 36E666AAA64A164B30D9BCB9 /* SwiftUINavigation.framework */; }; + 3AE4EA711182B84E033B44D9 /* swift-sharing_Sharing.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 7259C25AA1A99BB1BBD3C941 /* swift-sharing_Sharing.bundle */; }; + 3C1554DECACDABC4363FAECB /* Dependencies.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C32206975EC04787B73B7C1E /* Dependencies.framework */; }; + 3EC81901058D502393BDDEBD /* TuistBundle+SharedTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F662262A6E4B5DB87EA107A /* TuistBundle+SharedTests.swift */; }; + 48A898FE2B7B2BD37CDA5B14 /* InternalCollectionsUtilities.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 17205074249DF2B59082FA58 /* InternalCollectionsUtilities.framework */; }; + 59308B6E4D70BD1DC619D56B /* Clocks.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5903DAA16331C93F6AD367EC /* Clocks.framework */; }; + 6081932CDC695E831E563A0C /* CustomDump.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD588A48E7F5E6AD89544592 /* CustomDump.framework */; }; + 703320CF4233B9D736AC46AC /* Utill.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = C94F2606E7E958A55416DF32 /* Utill.framework */; }; + 712C98768928CDC19A1FF64B /* DesignSystem.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 4AE87645A97032776452E22F /* DesignSystem.framework */; }; + 72C318FD14B4632124C1DEC4 /* SharedExported.swift in Sources */ = {isa = PBXBuildFile; fileRef = 774BD0E38EC71B9E5E7E4517 /* SharedExported.swift */; }; + 7729DE4265979E242097DC13 /* ComposableArchitecture.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CC49F23A2E6E890B28B8E87E /* ComposableArchitecture.framework */; }; + 77C0C9B844FEC33382FD8E33 /* ThirdParty.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 3856DDE39ED5A0A35BB0A5CC /* ThirdParty.framework */; }; + 7954754CEE43E050E68B64DB /* CasePaths.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9F6D7141FB2589CD40FC9AF1 /* CasePaths.framework */; }; + 7B9BEF2AD94A7BE029199E1A /* ThirdParty.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 3856DDE39ED5A0A35BB0A5CC /* ThirdParty.framework */; }; + 7CFFD298B082478D73DD31CA /* swift-composable-architecture_ComposableArchitecture.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 4595115C1E806888151C9650 /* swift-composable-architecture_ComposableArchitecture.bundle */; }; + 7FF1472EAF65458FF3A6352A /* CasePathsCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3E4AEBF8716AC6121D39F88E /* CasePathsCore.framework */; }; + 80A1E62F4E504D542E6917EB /* Sharing2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B640CE6746F8A788385C1B6D /* Sharing2.framework */; }; + 86C75A68497BF504E22A3D2E /* ThirdParty.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 3856DDE39ED5A0A35BB0A5CC /* ThirdParty.framework */; }; + 92FE4B69A0ED0B98C2D712ED /* CombineSchedulers.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EB9EEE1B771280F5D0FC2736 /* CombineSchedulers.framework */; }; + 9420C11B004E467B09E6EBDD /* Utill.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C94F2606E7E958A55416DF32 /* Utill.framework */; }; + 95AEFC489348E239C6DC7AFE /* Utill.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = C94F2606E7E958A55416DF32 /* Utill.framework */; }; + 97DF61D2CF1DAEC662E19F33 /* DesignSystem_DesignSystem.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 0202CA9E6AAAC0787B68E995 /* DesignSystem_DesignSystem.bundle */; }; + 984599B22092B4B27DD6CECB /* swift-sharing_Sharing.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 7259C25AA1A99BB1BBD3C941 /* swift-sharing_Sharing.bundle */; }; + 9AD170BB1D7EB98AD04D63AF /* Shared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 080C58231FCEDC083F899294 /* Shared.framework */; }; + A36068A8F8147EA66D17BEF7 /* Utill.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = C94F2606E7E958A55416DF32 /* Utill.framework */; }; + A3E71A678647825D513E2419 /* DesignSystem.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4AE87645A97032776452E22F /* DesignSystem.framework */; }; + A57411EB5D8F4DF8BAB05086 /* SharedExported.swift in Sources */ = {isa = PBXBuildFile; fileRef = 774BD0E38EC71B9E5E7E4517 /* SharedExported.swift */; }; + ADCE69DD2AC431F9347D20F5 /* ConcurrencyExtras.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0289B94C11EC779006322480 /* ConcurrencyExtras.framework */; }; + B1E2C3D8845BEB9D59ECE9FB /* DependenciesMacros.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 78B2A02B3BB5CCD75FCC2060 /* DependenciesMacros.framework */; }; + BA73EBE9A4C015DEB9D8FD48 /* SharedExported.swift in Sources */ = {isa = PBXBuildFile; fileRef = 774BD0E38EC71B9E5E7E4517 /* SharedExported.swift */; }; + C21BA352741E2986DB90320C /* Test.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0D401F44D6E4EB3BF22FD6C3 /* Test.swift */; }; + C2F1A38C40904F3BF2D97538 /* Then.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FBCD53E2BB563C812B8ACDAF /* Then.framework */; }; + C2FA6B24C1ED707BA1124D96 /* DesignSystem_DesignSystem.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 0202CA9E6AAAC0787B68E995 /* DesignSystem_DesignSystem.bundle */; }; + C81CAFCFEB13FED6E0C2091B /* DesignSystem.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 4AE87645A97032776452E22F /* DesignSystem.framework */; }; + CA895FF8FDF68C27541005FF /* Utill.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = C94F2606E7E958A55416DF32 /* Utill.framework */; }; + D2F88218904E23C88C36AF6A /* IssueReporting.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0EAE5989CA1A850DF2ECFFFC /* IssueReporting.framework */; }; + D346C58E67E2740AD4DD1310 /* ThirdParty.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 3856DDE39ED5A0A35BB0A5CC /* ThirdParty.framework */; }; + D52303CE5D36A056B401285D /* UIKitNavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D058DC706D315B4420AC4E6E /* UIKitNavigation.framework */; }; + DB4C750DEEFF001C9E2F92AC /* DesignSystem.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 4AE87645A97032776452E22F /* DesignSystem.framework */; }; + E0AB5066B6C5F124E93C6FFC /* SwiftNavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 11546DC873CD070AC6AB00F2 /* SwiftNavigation.framework */; }; + E71D6A90D4ADFA306173ECED /* Test.swift in Resources */ = {isa = PBXBuildFile; fileRef = 0D401F44D6E4EB3BF22FD6C3 /* Test.swift */; }; + F1FC1406E587B17396514EA7 /* UIKitNavigationShim.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 92A4FA977C0B1B989DD6F80A /* UIKitNavigationShim.framework */; }; + F4EBF543DDF4588FFADA1B04 /* SnapKit_SnapKit.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = E597872285478A9F1A0FAC39 /* SnapKit_SnapKit.bundle */; }; + F5A5E24CFBA770D564DE29A8 /* Sharing.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 98809FB8001A003575E411AB /* Sharing.framework */; }; + F5AB1E3DE815C6D045365F4B /* IdentifiedCollections.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D222003E85442FD962122B92 /* IdentifiedCollections.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + D367AB1F10B77F2DA52D26FD /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = CF2E1D8B54DADE3AB44ADA38 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 3F5E725EB25BB5E4543E24FA; + remoteInfo = Shared; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 02780E7AD3523CF1B16CE398 /* Dependencies */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 8; + dstSubfolderSpec = 16; + files = ( + 0792B614FDDC1CE2BEC07605 /* DesignSystem.framework in Dependencies */, + 77C0C9B844FEC33382FD8E33 /* ThirdParty.framework in Dependencies */, + 703320CF4233B9D736AC46AC /* Utill.framework in Dependencies */, + ); + name = Dependencies; + runOnlyForDeploymentPostprocessing = 1; + }; + 31C3364D6EE6DB128AE520FE /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + 31EFB6BDF2EEBB9763884BA9 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + 3AA9FA2CC2DEAF59F76A9966 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + 3D0E34771599776959478C35 /* Dependencies */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 8; + dstSubfolderSpec = 16; + files = ( + 712C98768928CDC19A1FF64B /* DesignSystem.framework in Dependencies */, + D346C58E67E2740AD4DD1310 /* ThirdParty.framework in Dependencies */, + 95AEFC489348E239C6DC7AFE /* Utill.framework in Dependencies */, + ); + name = Dependencies; + runOnlyForDeploymentPostprocessing = 1; + }; + 5524240DC103CA57DCF970AC /* Dependencies */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 8; + dstSubfolderSpec = 16; + files = ( + DB4C750DEEFF001C9E2F92AC /* DesignSystem.framework in Dependencies */, + 86C75A68497BF504E22A3D2E /* ThirdParty.framework in Dependencies */, + CA895FF8FDF68C27541005FF /* Utill.framework in Dependencies */, + ); + name = Dependencies; + runOnlyForDeploymentPostprocessing = 1; + }; + B00AD4DC42AFDCC5B8712FFC /* Dependencies */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 8; + dstSubfolderSpec = 16; + files = ( + C81CAFCFEB13FED6E0C2091B /* DesignSystem.framework in Dependencies */, + 7B9BEF2AD94A7BE029199E1A /* ThirdParty.framework in Dependencies */, + A36068A8F8147EA66D17BEF7 /* Utill.framework in Dependencies */, + ); + name = Dependencies; + runOnlyForDeploymentPostprocessing = 1; + }; + B2C28250E1FEE98351EB810B /* Dependencies */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 8; + dstSubfolderSpec = 16; + files = ( + 97DF61D2CF1DAEC662E19F33 /* DesignSystem_DesignSystem.bundle in Dependencies */, + F4EBF543DDF4588FFADA1B04 /* SnapKit_SnapKit.bundle in Dependencies */, + 7CFFD298B082478D73DD31CA /* swift-composable-architecture_ComposableArchitecture.bundle in Dependencies */, + 984599B22092B4B27DD6CECB /* swift-sharing_Sharing.bundle in Dependencies */, + ); + name = Dependencies; + runOnlyForDeploymentPostprocessing = 1; + }; + B74C05F69C125FB83306930B /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + F52BE5796E4FC227870F34F2 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 0202CA9E6AAAC0787B68E995 /* DesignSystem_DesignSystem.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DesignSystem_DesignSystem.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 0289B94C11EC779006322480 /* ConcurrencyExtras.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ConcurrencyExtras.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 06BA0AFDE0052B25D521E944 /* SharedTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SharedTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 080C58231FCEDC083F899294 /* Shared.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Shared.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0D401F44D6E4EB3BF22FD6C3 /* Test.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Test.swift; sourceTree = ""; }; + 0EAE5989CA1A850DF2ECFFFC /* IssueReporting.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = IssueReporting.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 11546DC873CD070AC6AB00F2 /* SwiftNavigation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftNavigation.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 169DFD779D490EF6D0450319 /* PerceptionCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PerceptionCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 16CC7160F67243B858D0A374 /* Shared-Prod-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Shared-Prod-Info.plist"; sourceTree = ""; }; + 17205074249DF2B59082FA58 /* InternalCollectionsUtilities.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = InternalCollectionsUtilities.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 280CB53B6DF7F64864E5482A /* Shared_Prod.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Shared_Prod.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 36E666AAA64A164B30D9BCB9 /* SwiftUINavigation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftUINavigation.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 3856DDE39ED5A0A35BB0A5CC /* ThirdParty.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ThirdParty.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 3E4AEBF8716AC6121D39F88E /* CasePathsCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CasePathsCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4595115C1E806888151C9650 /* swift-composable-architecture_ComposableArchitecture.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "swift-composable-architecture_ComposableArchitecture.bundle"; sourceTree = BUILT_PRODUCTS_DIR; }; + 49D8CAD4A1E3478C7DC7DFFB /* SnapKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SnapKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4AE87645A97032776452E22F /* DesignSystem.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DesignSystem.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4C9B7667F0D21DDF6F7FFBB4 /* Shared-Debug-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Shared-Debug-Info.plist"; sourceTree = ""; }; + 5903DAA16331C93F6AD367EC /* Clocks.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Clocks.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 62FB4B57EE0B4FF57DB2E98C /* XCTestDynamicOverlay.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = XCTestDynamicOverlay.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 7259C25AA1A99BB1BBD3C941 /* swift-sharing_Sharing.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "swift-sharing_Sharing.bundle"; sourceTree = BUILT_PRODUCTS_DIR; }; + 774BD0E38EC71B9E5E7E4517 /* SharedExported.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SharedExported.swift; sourceTree = ""; }; + 78B2A02B3BB5CCD75FCC2060 /* DependenciesMacros.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DependenciesMacros.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 816DF9B49960C28F45C9B1A9 /* Shared-Stage-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Shared-Stage-Info.plist"; sourceTree = ""; }; + 888EAA25A85A8C2558C81033 /* Perception.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Perception.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 8B05823D17AC1A01668CA17A /* OrderedCollections.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = OrderedCollections.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 92A4FA977C0B1B989DD6F80A /* UIKitNavigationShim.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = UIKitNavigationShim.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 98809FB8001A003575E411AB /* Sharing.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Sharing.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9BA57BC4B13796776E6C9DC2 /* Shared_Stage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Shared_Stage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9F662262A6E4B5DB87EA107A /* TuistBundle+SharedTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistBundle+SharedTests.swift"; sourceTree = ""; }; + 9F6D7141FB2589CD40FC9AF1 /* CasePaths.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CasePaths.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + AD7280F892588925BDA24822 /* IssueReportingPackageSupport.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = IssueReportingPackageSupport.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B640CE6746F8A788385C1B6D /* Sharing2.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Sharing2.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C32206975EC04787B73B7C1E /* Dependencies.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Dependencies.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C94F2606E7E958A55416DF32 /* Utill.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Utill.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + CC49F23A2E6E890B28B8E87E /* ComposableArchitecture.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ComposableArchitecture.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + CD588A48E7F5E6AD89544592 /* CustomDump.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CustomDump.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D058DC706D315B4420AC4E6E /* UIKitNavigation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = UIKitNavigation.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D222003E85442FD962122B92 /* IdentifiedCollections.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = IdentifiedCollections.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D24D0C7082053533D4DE9314 /* Shared_Debug.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Shared_Debug.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D72BA6AE8B9AF02B56D8FC04 /* Shared-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Shared-Info.plist"; sourceTree = ""; }; + E597872285478A9F1A0FAC39 /* SnapKit_SnapKit.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SnapKit_SnapKit.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + E5CB67B1B862F32C9DBF4200 /* Sharing1.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Sharing1.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + EB9EEE1B771280F5D0FC2736 /* CombineSchedulers.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CombineSchedulers.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F7F21D59A4ECB79F8630E071 /* SharedTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "SharedTests-Info.plist"; sourceTree = ""; }; + FBCD53E2BB563C812B8ACDAF /* Then.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Then.framework; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 10616931EF5AA9226467086E /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 151CED655F1E995DB8B0B885 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 7954754CEE43E050E68B64DB /* CasePaths.framework in Frameworks */, + 7FF1472EAF65458FF3A6352A /* CasePathsCore.framework in Frameworks */, + 59308B6E4D70BD1DC619D56B /* Clocks.framework in Frameworks */, + 92FE4B69A0ED0B98C2D712ED /* CombineSchedulers.framework in Frameworks */, + 7729DE4265979E242097DC13 /* ComposableArchitecture.framework in Frameworks */, + ADCE69DD2AC431F9347D20F5 /* ConcurrencyExtras.framework in Frameworks */, + 6081932CDC695E831E563A0C /* CustomDump.framework in Frameworks */, + 3C1554DECACDABC4363FAECB /* Dependencies.framework in Frameworks */, + B1E2C3D8845BEB9D59ECE9FB /* DependenciesMacros.framework in Frameworks */, + A3E71A678647825D513E2419 /* DesignSystem.framework in Frameworks */, + F5AB1E3DE815C6D045365F4B /* IdentifiedCollections.framework in Frameworks */, + 48A898FE2B7B2BD37CDA5B14 /* InternalCollectionsUtilities.framework in Frameworks */, + D2F88218904E23C88C36AF6A /* IssueReporting.framework in Frameworks */, + 0C962E9CF84A09DC2BF31448 /* IssueReportingPackageSupport.framework in Frameworks */, + 1D106E89AD8F63F2F43A7F6E /* OrderedCollections.framework in Frameworks */, + 2214BCDFAF9B6BBDA78A98C2 /* Perception.framework in Frameworks */, + 1DA1BD86723C863368DBAA54 /* PerceptionCore.framework in Frameworks */, + 9AD170BB1D7EB98AD04D63AF /* Shared.framework in Frameworks */, + F5A5E24CFBA770D564DE29A8 /* Sharing.framework in Frameworks */, + 03C6E8CAABDCC8EA2A9C833D /* Sharing1.framework in Frameworks */, + 80A1E62F4E504D542E6917EB /* Sharing2.framework in Frameworks */, + 0F1E6BF81970625FB19609D7 /* SnapKit.framework in Frameworks */, + E0AB5066B6C5F124E93C6FFC /* SwiftNavigation.framework in Frameworks */, + 3413AE59056BFB1365F78075 /* SwiftUINavigation.framework in Frameworks */, + C2F1A38C40904F3BF2D97538 /* Then.framework in Frameworks */, + 246E74A34053D13CBBF522F2 /* ThirdParty.framework in Frameworks */, + D52303CE5D36A056B401285D /* UIKitNavigation.framework in Frameworks */, + F1FC1406E587B17396514EA7 /* UIKitNavigationShim.framework in Frameworks */, + 9420C11B004E467B09E6EBDD /* Utill.framework in Frameworks */, + 03CCC30D3210F5400C1486FE /* XCTestDynamicOverlay.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 86B4D49AA4860D5ACA6368F3 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A2D2F43D11F6FFB6C8AEED26 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + CA16CCCB741E47EAA9FE52A5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 3C54C1673B7334EF19C38BB2 /* Derived */ = { + isa = PBXGroup; + children = ( + CFF3308B9DD8563D12ABFC25 /* InfoPlists */, + CCE12D42A69525F4979C8A35 /* Sources */, + ); + path = Derived; + sourceTree = ""; + }; + 6C1C6C8C7D6626CF96508CA2 /* Sources */ = { + isa = PBXGroup; + children = ( + 0D401F44D6E4EB3BF22FD6C3 /* Test.swift */, + ); + path = Sources; + sourceTree = ""; + }; + 6EC0B98B4A7FF03886AD270E /* Project */ = { + isa = PBXGroup; + children = ( + 3C54C1673B7334EF19C38BB2 /* Derived */, + C460DBAD906D50B6028365B7 /* SharedTests */, + 8DBC6BAA6C2105D09B097177 /* Sources */, + ); + name = Project; + sourceTree = ""; + }; + 72723117B1BFA01E33CBB7A6 /* Products */ = { + isa = PBXGroup; + children = ( + 9F6D7141FB2589CD40FC9AF1 /* CasePaths.framework */, + 3E4AEBF8716AC6121D39F88E /* CasePathsCore.framework */, + 5903DAA16331C93F6AD367EC /* Clocks.framework */, + EB9EEE1B771280F5D0FC2736 /* CombineSchedulers.framework */, + CC49F23A2E6E890B28B8E87E /* ComposableArchitecture.framework */, + 0289B94C11EC779006322480 /* ConcurrencyExtras.framework */, + CD588A48E7F5E6AD89544592 /* CustomDump.framework */, + C32206975EC04787B73B7C1E /* Dependencies.framework */, + 78B2A02B3BB5CCD75FCC2060 /* DependenciesMacros.framework */, + 0202CA9E6AAAC0787B68E995 /* DesignSystem_DesignSystem.bundle */, + 4AE87645A97032776452E22F /* DesignSystem.framework */, + D222003E85442FD962122B92 /* IdentifiedCollections.framework */, + 17205074249DF2B59082FA58 /* InternalCollectionsUtilities.framework */, + 0EAE5989CA1A850DF2ECFFFC /* IssueReporting.framework */, + AD7280F892588925BDA24822 /* IssueReportingPackageSupport.framework */, + 8B05823D17AC1A01668CA17A /* OrderedCollections.framework */, + 888EAA25A85A8C2558C81033 /* Perception.framework */, + 169DFD779D490EF6D0450319 /* PerceptionCore.framework */, + D24D0C7082053533D4DE9314 /* Shared_Debug.framework */, + 280CB53B6DF7F64864E5482A /* Shared_Prod.framework */, + 9BA57BC4B13796776E6C9DC2 /* Shared_Stage.framework */, + 080C58231FCEDC083F899294 /* Shared.framework */, + 06BA0AFDE0052B25D521E944 /* SharedTests.xctest */, + 98809FB8001A003575E411AB /* Sharing.framework */, + E5CB67B1B862F32C9DBF4200 /* Sharing1.framework */, + B640CE6746F8A788385C1B6D /* Sharing2.framework */, + E597872285478A9F1A0FAC39 /* SnapKit_SnapKit.bundle */, + 49D8CAD4A1E3478C7DC7DFFB /* SnapKit.framework */, + 4595115C1E806888151C9650 /* swift-composable-architecture_ComposableArchitecture.bundle */, + 7259C25AA1A99BB1BBD3C941 /* swift-sharing_Sharing.bundle */, + 11546DC873CD070AC6AB00F2 /* SwiftNavigation.framework */, + 36E666AAA64A164B30D9BCB9 /* SwiftUINavigation.framework */, + FBCD53E2BB563C812B8ACDAF /* Then.framework */, + 3856DDE39ED5A0A35BB0A5CC /* ThirdParty.framework */, + D058DC706D315B4420AC4E6E /* UIKitNavigation.framework */, + 92A4FA977C0B1B989DD6F80A /* UIKitNavigationShim.framework */, + C94F2606E7E958A55416DF32 /* Utill.framework */, + 62FB4B57EE0B4FF57DB2E98C /* XCTestDynamicOverlay.framework */, + ); + name = Products; + sourceTree = ""; + }; + 8DBC6BAA6C2105D09B097177 /* Sources */ = { + isa = PBXGroup; + children = ( + DE17EDBF4DF129A5D29050DF /* Exported */, + ); + path = Sources; + sourceTree = ""; + }; + C460DBAD906D50B6028365B7 /* SharedTests */ = { + isa = PBXGroup; + children = ( + 6C1C6C8C7D6626CF96508CA2 /* Sources */, + ); + path = SharedTests; + sourceTree = ""; + }; + CCE12D42A69525F4979C8A35 /* Sources */ = { + isa = PBXGroup; + children = ( + 9F662262A6E4B5DB87EA107A /* TuistBundle+SharedTests.swift */, + ); + path = Sources; + sourceTree = ""; + }; + CFF3308B9DD8563D12ABFC25 /* InfoPlists */ = { + isa = PBXGroup; + children = ( + 4C9B7667F0D21DDF6F7FFBB4 /* Shared-Debug-Info.plist */, + D72BA6AE8B9AF02B56D8FC04 /* Shared-Info.plist */, + 16CC7160F67243B858D0A374 /* Shared-Prod-Info.plist */, + 816DF9B49960C28F45C9B1A9 /* Shared-Stage-Info.plist */, + F7F21D59A4ECB79F8630E071 /* SharedTests-Info.plist */, + ); + path = InfoPlists; + sourceTree = ""; + }; + DA75EE09CE53689E1DEA0A26 = { + isa = PBXGroup; + children = ( + 6EC0B98B4A7FF03886AD270E /* Project */, + 72723117B1BFA01E33CBB7A6 /* Products */, + ); + sourceTree = ""; + }; + DE17EDBF4DF129A5D29050DF /* Exported */ = { + isa = PBXGroup; + children = ( + 774BD0E38EC71B9E5E7E4517 /* SharedExported.swift */, + ); + path = Exported; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 1B1376E59ED7F9AA6CB3D0FF /* SharedTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 18790BCFDAAC1D432B699AC3 /* Build configuration list for PBXNativeTarget "SharedTests" */; + buildPhases = ( + 4DBBA43E12AD46FD5280AA7D /* Sources */, + 2894A9CBBD3488DD81A09614 /* Resources */, + 151CED655F1E995DB8B0B885 /* Frameworks */, + B74C05F69C125FB83306930B /* Embed Frameworks */, + B2C28250E1FEE98351EB810B /* Dependencies */, + ); + buildRules = ( + ); + dependencies = ( + FC9F4FC0A2CDD959D49607A2 /* PBXTargetDependency */, + ); + name = SharedTests; + packageProductDependencies = ( + ); + productName = SharedTests; + productReference = 06BA0AFDE0052B25D521E944 /* SharedTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 2C786DAFB28E0A8F750B4BF5 /* Shared-Debug */ = { + isa = PBXNativeTarget; + buildConfigurationList = 2D80434C44B02E1952AF45AB /* Build configuration list for PBXNativeTarget "Shared-Debug" */; + buildPhases = ( + AF7977B4C161A23C62ADDBC5 /* Sources */, + C96560B0F2337336A8FB9B0C /* Resources */, + 86B4D49AA4860D5ACA6368F3 /* Frameworks */, + 31C3364D6EE6DB128AE520FE /* Embed Frameworks */, + B00AD4DC42AFDCC5B8712FFC /* Dependencies */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Shared-Debug"; + packageProductDependencies = ( + ); + productName = Shared_Debug; + productReference = D24D0C7082053533D4DE9314 /* Shared_Debug.framework */; + productType = "com.apple.product-type.framework"; + }; + 3F5E725EB25BB5E4543E24FA /* Shared */ = { + isa = PBXNativeTarget; + buildConfigurationList = 2117CF03C79C03B7B3B8416A /* Build configuration list for PBXNativeTarget "Shared" */; + buildPhases = ( + AD74B58C499707A60EFE16AE /* Sources */, + F626B9F9730D1752FF928FEA /* Resources */, + CA16CCCB741E47EAA9FE52A5 /* Frameworks */, + 3AA9FA2CC2DEAF59F76A9966 /* Embed Frameworks */, + 3D0E34771599776959478C35 /* Dependencies */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Shared; + packageProductDependencies = ( + ); + productName = Shared; + productReference = 080C58231FCEDC083F899294 /* Shared.framework */; + productType = "com.apple.product-type.framework"; + }; + 7F7728E43540425EE0952F71 /* Shared-Stage */ = { + isa = PBXNativeTarget; + buildConfigurationList = A2BA567622E2ECEB6CA4B49D /* Build configuration list for PBXNativeTarget "Shared-Stage" */; + buildPhases = ( + 0493327F7BE5EBCDF050F03C /* Sources */, + 505B0379551D6777AF7927AD /* Resources */, + 10616931EF5AA9226467086E /* Frameworks */, + 31EFB6BDF2EEBB9763884BA9 /* Embed Frameworks */, + 5524240DC103CA57DCF970AC /* Dependencies */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Shared-Stage"; + packageProductDependencies = ( + ); + productName = Shared_Stage; + productReference = 9BA57BC4B13796776E6C9DC2 /* Shared_Stage.framework */; + productType = "com.apple.product-type.framework"; + }; + DCACE7CD4F28C9B0011BA28E /* Shared-Prod */ = { + isa = PBXNativeTarget; + buildConfigurationList = 9AD3875B701B96695915E7D2 /* Build configuration list for PBXNativeTarget "Shared-Prod" */; + buildPhases = ( + EF4103FB282B13A1D9098427 /* Sources */, + 8E275C2257E824BED631E213 /* Resources */, + A2D2F43D11F6FFB6C8AEED26 /* Frameworks */, + F52BE5796E4FC227870F34F2 /* Embed Frameworks */, + 02780E7AD3523CF1B16CE398 /* Dependencies */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Shared-Prod"; + packageProductDependencies = ( + ); + productName = Shared_Prod; + productReference = 280CB53B6DF7F64864E5482A /* Shared_Prod.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + CF2E1D8B54DADE3AB44ADA38 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + TargetAttributes = { + }; + }; + buildConfigurationList = D2876CF02FBF5B694E5387F4 /* Build configuration list for PBXProject "Shared" */; + compatibilityVersion = "Xcode 14.0"; + developmentRegion = ko; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ko, + ); + mainGroup = DA75EE09CE53689E1DEA0A26; + productRefGroup = 72723117B1BFA01E33CBB7A6 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 3F5E725EB25BB5E4543E24FA /* Shared */, + 2C786DAFB28E0A8F750B4BF5 /* Shared-Debug */, + DCACE7CD4F28C9B0011BA28E /* Shared-Prod */, + 7F7728E43540425EE0952F71 /* Shared-Stage */, + 1B1376E59ED7F9AA6CB3D0FF /* SharedTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 2894A9CBBD3488DD81A09614 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E71D6A90D4ADFA306173ECED /* Test.swift in Resources */, + C2FA6B24C1ED707BA1124D96 /* DesignSystem_DesignSystem.bundle in Resources */, + 26A7FFF42670F1F606B685BB /* SnapKit_SnapKit.bundle in Resources */, + 0C8957912F2D02D504FFF5A9 /* swift-composable-architecture_ComposableArchitecture.bundle in Resources */, + 3AE4EA711182B84E033B44D9 /* swift-sharing_Sharing.bundle in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 505B0379551D6777AF7927AD /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 8E275C2257E824BED631E213 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + C96560B0F2337336A8FB9B0C /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F626B9F9730D1752FF928FEA /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 0493327F7BE5EBCDF050F03C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + A57411EB5D8F4DF8BAB05086 /* SharedExported.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4DBBA43E12AD46FD5280AA7D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 3EC81901058D502393BDDEBD /* TuistBundle+SharedTests.swift in Sources */, + C21BA352741E2986DB90320C /* Test.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AD74B58C499707A60EFE16AE /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + BA73EBE9A4C015DEB9D8FD48 /* SharedExported.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AF7977B4C161A23C62ADDBC5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 72C318FD14B4632124C1DEC4 /* SharedExported.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + EF4103FB282B13A1D9098427 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 25CCB4B7700896516801026E /* SharedExported.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + FC9F4FC0A2CDD959D49607A2 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Shared; + target = 3F5E725EB25BB5E4543E24FA /* Shared */; + targetProxy = D367AB1F10B77F2DA52D26FD /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 329F7F5599946B33744B069E /* 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/Shared-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/PerceptionMacros#PerceptionMacros", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Shared; + PRODUCT_NAME = Shared; + 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; + }; + 33578EBEECC0B6302676D2FC /* 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/Shared-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/PerceptionMacros#PerceptionMacros", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Shared; + PRODUCT_NAME = Shared_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; + }; + 3B142AAA98D3EED199F0F30E /* 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/Shared-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/PerceptionMacros#PerceptionMacros", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Shared; + PRODUCT_NAME = Shared; + 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; + }; + 551049F8A8B83DD6C9DFD2C1 /* 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/Shared-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/PerceptionMacros#PerceptionMacros", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Shared; + PRODUCT_NAME = Shared_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; + }; + 706E9345B9310FE10FC29CE4 /* 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/Shared-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/PerceptionMacros#PerceptionMacros", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Shared; + PRODUCT_NAME = Shared_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; + }; + 80660448C7777C31D58A899F /* 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/Shared-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/PerceptionMacros#PerceptionMacros", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Shared; + PRODUCT_NAME = Shared_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; + }; + 9BBB95EB384AC6D989B3FFF3 /* 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/Shared-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/PerceptionMacros#PerceptionMacros", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Shared; + PRODUCT_NAME = Shared_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; + }; + 9E598ED3BCA79682F2666767 /* 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/SharedTests-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/PerceptionMacros#PerceptionMacros", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Shared.SharedTests; + PRODUCT_NAME = SharedTests; + 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; + }; + AE7AE4ABAAA7EB9BF3481FFE /* 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/Shared-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/PerceptionMacros#PerceptionMacros", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Shared; + PRODUCT_NAME = Shared_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; + }; + D7A3C293A18A829F33CF4960 /* 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; + }; + E304E4928CC029AE6888BAD5 /* 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/SharedTests-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/PerceptionMacros#PerceptionMacros", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Shared.SharedTests; + PRODUCT_NAME = SharedTests; + 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; + }; + FA09E0D1BF44993C2C215471 /* 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 */ + 18790BCFDAAC1D432B699AC3 /* Build configuration list for PBXNativeTarget "SharedTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 9E598ED3BCA79682F2666767 /* Debug */, + E304E4928CC029AE6888BAD5 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 2117CF03C79C03B7B3B8416A /* Build configuration list for PBXNativeTarget "Shared" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 3B142AAA98D3EED199F0F30E /* Debug */, + 329F7F5599946B33744B069E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 2D80434C44B02E1952AF45AB /* Build configuration list for PBXNativeTarget "Shared-Debug" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 80660448C7777C31D58A899F /* Debug */, + 706E9345B9310FE10FC29CE4 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 9AD3875B701B96695915E7D2 /* Build configuration list for PBXNativeTarget "Shared-Prod" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 9BBB95EB384AC6D989B3FFF3 /* Debug */, + 33578EBEECC0B6302676D2FC /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + A2BA567622E2ECEB6CA4B49D /* Build configuration list for PBXNativeTarget "Shared-Stage" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + AE7AE4ABAAA7EB9BF3481FFE /* Debug */, + 551049F8A8B83DD6C9DFD2C1 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + D2876CF02FBF5B694E5387F4 /* Build configuration list for PBXProject "Shared" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + FA09E0D1BF44993C2C215471 /* Debug */, + D7A3C293A18A829F33CF4960 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = CF2E1D8B54DADE3AB44ADA38 /* Project object */; +} diff --git a/Projects/Shared/Shared/Shared.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Projects/Shared/Shared/Shared.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/Projects/Shared/Shared/Shared.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Projects/Shared/Shared/Shared.xcodeproj/xcshareddata/xcschemes/Shared-Debug.xcscheme b/Projects/Shared/Shared/Shared.xcodeproj/xcshareddata/xcschemes/Shared-Debug.xcscheme new file mode 100644 index 0000000..48faa45 --- /dev/null +++ b/Projects/Shared/Shared/Shared.xcodeproj/xcshareddata/xcschemes/Shared-Debug.xcscheme @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/Shared/Shared/Shared.xcodeproj/xcshareddata/xcschemes/Shared-Prod.xcscheme b/Projects/Shared/Shared/Shared.xcodeproj/xcshareddata/xcschemes/Shared-Prod.xcscheme new file mode 100644 index 0000000..8a82b0d --- /dev/null +++ b/Projects/Shared/Shared/Shared.xcodeproj/xcshareddata/xcschemes/Shared-Prod.xcscheme @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/Shared/Shared/Shared.xcodeproj/xcshareddata/xcschemes/Shared-Stage.xcscheme b/Projects/Shared/Shared/Shared.xcodeproj/xcshareddata/xcschemes/Shared-Stage.xcscheme new file mode 100644 index 0000000..2ca3215 --- /dev/null +++ b/Projects/Shared/Shared/Shared.xcodeproj/xcshareddata/xcschemes/Shared-Stage.xcscheme @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/Shared/Shared/Shared.xcodeproj/xcshareddata/xcschemes/Shared.xcscheme b/Projects/Shared/Shared/Shared.xcodeproj/xcshareddata/xcschemes/Shared.xcscheme new file mode 100644 index 0000000..79b9f12 --- /dev/null +++ b/Projects/Shared/Shared/Shared.xcodeproj/xcshareddata/xcschemes/Shared.xcscheme @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/Shared/Shared/SharedTests/Sources/Test.swift b/Projects/Shared/Shared/SharedTests/Sources/Test.swift new file mode 100644 index 0000000..a9c810e --- /dev/null +++ b/Projects/Shared/Shared/SharedTests/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/Shared/Shared/Sources/Exported/SharedExported.swift b/Projects/Shared/Shared/Sources/Exported/SharedExported.swift new file mode 100644 index 0000000..da3112a --- /dev/null +++ b/Projects/Shared/Shared/Sources/Exported/SharedExported.swift @@ -0,0 +1,11 @@ +// +// SharedExported.swift +// Shared +// +// Created by Wonji Suh on 9/8/25. +// + + +@_exported import DesignSystem +@_exported import Utill +@_exported import ThirdParty diff --git a/Projects/Shared/ThirdParty/Derived/InfoPlists/ThirdParty-Debug-Info.plist b/Projects/Shared/ThirdParty/Derived/InfoPlists/ThirdParty-Debug-Info.plist new file mode 100644 index 0000000..323e5ec --- /dev/null +++ b/Projects/Shared/ThirdParty/Derived/InfoPlists/ThirdParty-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/Shared/ThirdParty/Derived/InfoPlists/ThirdParty-Info.plist b/Projects/Shared/ThirdParty/Derived/InfoPlists/ThirdParty-Info.plist new file mode 100644 index 0000000..323e5ec --- /dev/null +++ b/Projects/Shared/ThirdParty/Derived/InfoPlists/ThirdParty-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/Shared/ThirdParty/Derived/InfoPlists/ThirdParty-Prod-Info.plist b/Projects/Shared/ThirdParty/Derived/InfoPlists/ThirdParty-Prod-Info.plist new file mode 100644 index 0000000..323e5ec --- /dev/null +++ b/Projects/Shared/ThirdParty/Derived/InfoPlists/ThirdParty-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/Shared/ThirdParty/Derived/InfoPlists/ThirdParty-Stage-Info.plist b/Projects/Shared/ThirdParty/Derived/InfoPlists/ThirdParty-Stage-Info.plist new file mode 100644 index 0000000..323e5ec --- /dev/null +++ b/Projects/Shared/ThirdParty/Derived/InfoPlists/ThirdParty-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/Shared/ThirdParty/Derived/InfoPlists/ThirdPartyTests-Info.plist b/Projects/Shared/ThirdParty/Derived/InfoPlists/ThirdPartyTests-Info.plist new file mode 100644 index 0000000..6c40a6c --- /dev/null +++ b/Projects/Shared/ThirdParty/Derived/InfoPlists/ThirdPartyTests-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/Shared/ThirdParty/Derived/Sources/TuistBundle+ThirdPartyTests.swift b/Projects/Shared/ThirdParty/Derived/Sources/TuistBundle+ThirdPartyTests.swift new file mode 100644 index 0000000..85151bb --- /dev/null +++ b/Projects/Shared/ThirdParty/Derived/Sources/TuistBundle+ThirdPartyTests.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 ThirdPartyTests 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 ThirdPartyTestsResources: 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/Shared/ThirdParty/Project.swift b/Projects/Shared/ThirdParty/Project.swift new file mode 100644 index 0000000..4e0dc14 --- /dev/null +++ b/Projects/Shared/ThirdParty/Project.swift @@ -0,0 +1,21 @@ +import Foundation +import ProjectDescription +import DependencyPlugin +import ProjectTemplatePlugin +import ProjectTemplatePlugin +import DependencyPackagePlugin + +let project = Project.makeAppModule( + name: "ThirdParty", + bundleId: .appBundleID(name: ".ThirdParty"), + product: .staticFramework, + settings: .settings(), + dependencies: [ + .SPM.composableArchitecture, +// .SPM.flexLayout, + .SPM.then, + .SPM.snapKit +// .SPM.pinLayout + ], + sources: ["Sources/**"] +) diff --git a/Projects/Shared/ThirdParty/Sources/Base.swift b/Projects/Shared/ThirdParty/Sources/Base.swift new file mode 100644 index 0000000..6297cc4 --- /dev/null +++ b/Projects/Shared/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/Shared/ThirdParty/ThirdParty.xcodeproj/project.pbxproj b/Projects/Shared/ThirdParty/ThirdParty.xcodeproj/project.pbxproj new file mode 100644 index 0000000..3418437 --- /dev/null +++ b/Projects/Shared/ThirdParty/ThirdParty.xcodeproj/project.pbxproj @@ -0,0 +1,1409 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 55; + objects = { + +/* Begin PBXBuildFile section */ + 0074469DB831813B3CF710CC /* swift-composable-architecture_ComposableArchitecture.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 876C0F3CB0FC08A46906C3D9 /* swift-composable-architecture_ComposableArchitecture.bundle */; }; + 05929F461A316092B9BA2153 /* ComposableArchitecture.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 3BB088CFCF5B751E961933C0 /* ComposableArchitecture.framework */; }; + 107C62AE9CD667F46B4E15A1 /* ComposableArchitecture.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 3BB088CFCF5B751E961933C0 /* ComposableArchitecture.framework */; }; + 14540254CEC3497B67333884 /* swift-composable-architecture_ComposableArchitecture.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 876C0F3CB0FC08A46906C3D9 /* swift-composable-architecture_ComposableArchitecture.bundle */; }; + 191DFD2A2DA32E45C070D016 /* SnapKit_SnapKit.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = EB15BAC581DBAA67EFA4A2F8 /* SnapKit_SnapKit.bundle */; }; + 199156A4DC68D0F4387CCDA6 /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88DC163A6902C6C732FD855A /* Base.swift */; }; + 1D6C4D67EC8C19AC634855BC /* ComposableArchitecture.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 3BB088CFCF5B751E961933C0 /* ComposableArchitecture.framework */; }; + 2A8020A3F07A908E497F1B9E /* Test.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21178B4A2A59C6B2EADC5B6C /* Test.swift */; }; + 311471A656CA889BE88C78D9 /* CasePathsCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7224F70B4CF69C652CE68E87 /* CasePathsCore.framework */; }; + 31DF26B9CD387C3DBBD90C18 /* IssueReporting.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5AB4F2063102023E996F015D /* IssueReporting.framework */; }; + 3385BD64B43917ECCBC5D7FF /* Then.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 4624958689CA4574D6DE5569 /* Then.framework */; }; + 459C5FD5AD31D8A6C6628DC6 /* ComposableArchitecture.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3BB088CFCF5B751E961933C0 /* ComposableArchitecture.framework */; }; + 4D34235D228D6EE9C27534F0 /* Sharing.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A9AE888EDA3909F45835B514 /* Sharing.framework */; }; + 4D4CF95D400DCA4D0B3D6B51 /* Perception.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BE127F8400BF4F674847DF5D /* Perception.framework */; }; + 5251B0B792D4C49E825F466E /* SnapKit.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 550FD29325E806542CEFA72A /* SnapKit.framework */; }; + 551ABD7544CD267AE6CC195C /* Clocks.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4FDA5D0BD3E8E323677EB026 /* Clocks.framework */; }; + 603FE92EDB472C61D8437F72 /* SwiftNavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B36F1CA8CC4B96FA2609B4DF /* SwiftNavigation.framework */; }; + 653474AB185843E0DF662DD1 /* Sharing2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2EBE83BD9D8603167735DBA2 /* Sharing2.framework */; }; + 6E0BC5259BA7934681AA91D5 /* Then.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4624958689CA4574D6DE5569 /* Then.framework */; }; + 6E6162BB191893B5D743D52C /* TuistBundle+ThirdPartyTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A77AA96439A830D80E228086 /* TuistBundle+ThirdPartyTests.swift */; }; + 78AC8F364BB31C11BB2FEC02 /* ThirdParty.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DBCBFAAA9644395883C4A718 /* ThirdParty.framework */; }; + 78E505D53CA7826ADE9757E2 /* ComposableArchitecture.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 3BB088CFCF5B751E961933C0 /* ComposableArchitecture.framework */; }; + 820C0A3E5C2BD6C6CA8BAC10 /* SnapKit.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 550FD29325E806542CEFA72A /* SnapKit.framework */; }; + 8C8B39AD0F1762FFDC793228 /* Test.swift in Resources */ = {isa = PBXBuildFile; fileRef = 21178B4A2A59C6B2EADC5B6C /* Test.swift */; }; + 9003C2D283711C20FDBB33E0 /* ConcurrencyExtras.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9510426F57C0386AD282AAA8 /* ConcurrencyExtras.framework */; }; + 910E2DEB552042AC98EB4F08 /* CombineSchedulers.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 529D683020BDA42AF2A467E4 /* CombineSchedulers.framework */; }; + 92C6371E1DEAA7A0B1D6F2C7 /* InternalCollectionsUtilities.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E8CE454E7ACF464177DC1FB6 /* InternalCollectionsUtilities.framework */; }; + 96668040EAC7FFF193982EC5 /* XCTestDynamicOverlay.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6F7E5510FEC285549404D23A /* XCTestDynamicOverlay.framework */; }; + 985AAB619CA4E6F97CA797F3 /* OrderedCollections.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C32AF99B4D617683E25151E3 /* OrderedCollections.framework */; }; + 98A0DA222D9BA10DFD520C3F /* Dependencies.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E057B5A6C190B51DEA95A52C /* Dependencies.framework */; }; + 9C1C6C8D2E3E4B380A8C8B55 /* CustomDump.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 075BC2A5FD001078D38856E6 /* CustomDump.framework */; }; + 9CFE05FA0C9CD8ADC787C716 /* DependenciesMacros.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F6A7606444B2A24E9A29BE1F /* DependenciesMacros.framework */; }; + A1E39C81459EE28C97417885 /* UIKitNavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9962B6781CF429287378C23C /* UIKitNavigation.framework */; }; + A268E18642DBC591738B7F88 /* UIKitNavigationShim.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6049E02DD59C6B27D4CC5A57 /* UIKitNavigationShim.framework */; }; + A51CC37F104E46691C55AD2F /* SnapKit.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 550FD29325E806542CEFA72A /* SnapKit.framework */; }; + ABAFCB51556BE0DF9BC6EDAC /* Then.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 4624958689CA4574D6DE5569 /* Then.framework */; }; + B0E03937330DFF6BED21D35C /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88DC163A6902C6C732FD855A /* Base.swift */; }; + B15FBED9FEBEFF4C5E31049B /* PerceptionCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D9FB87EE5D02B2E41676C721 /* PerceptionCore.framework */; }; + B24DF497249FDEACB5D8334F /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88DC163A6902C6C732FD855A /* Base.swift */; }; + BDC04BFA40CBD6A5E3B4386C /* SwiftUINavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0606655A5FEF1EA3A2F658DD /* SwiftUINavigation.framework */; }; + C2E18D714C5C12B8DD0A521B /* swift-sharing_Sharing.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 76271C889E6D86C7D22CB056 /* swift-sharing_Sharing.bundle */; }; + CD6DAC1889B345AA6225B8BF /* Then.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 4624958689CA4574D6DE5569 /* Then.framework */; }; + CDD2ABB41363C0E333172654 /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = 88DC163A6902C6C732FD855A /* Base.swift */; }; + D19BDCDFE47D3555554F163E /* swift-sharing_Sharing.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 76271C889E6D86C7D22CB056 /* swift-sharing_Sharing.bundle */; }; + D713F9D884B7FC901851460B /* IssueReportingPackageSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FE34E7FD7B776485C4F5686B /* IssueReportingPackageSupport.framework */; }; + DE67F660AFC056E6F6C01E08 /* SnapKit_SnapKit.bundle in Resources */ = {isa = PBXBuildFile; fileRef = EB15BAC581DBAA67EFA4A2F8 /* SnapKit_SnapKit.bundle */; }; + E97EB92A32723612E3973813 /* CasePaths.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3F1193D224A436351DC8E329 /* CasePaths.framework */; }; + EAA7CEA224A883C2C0DA46BA /* IdentifiedCollections.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A0F3DB55EAF01D251BFF4B56 /* IdentifiedCollections.framework */; }; + F7E5410AE9538F8421D0B7EB /* Then.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 4624958689CA4574D6DE5569 /* Then.framework */; }; + F8931CEA6B1AF2B9FE40DCA8 /* Sharing1.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F14DEE44EEA5E5AE73AB020 /* Sharing1.framework */; }; + FC297C90F2DCD2607BC1655C /* SnapKit.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 550FD29325E806542CEFA72A /* SnapKit.framework */; }; + FF4459E15DB7A99E4B62EC27 /* SnapKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 550FD29325E806542CEFA72A /* SnapKit.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + B889311A24C6B9DBC222F087 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = A1C969001B135EC8AB74F870 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 5D711CEA43FFAD6AD6BDA3FC; + remoteInfo = ThirdParty; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 0772368432AD871F10E82268 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + 14FBB7F2441108A2A7E4731F /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + 39933C724C9B061B385A9E24 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + 50B4899019456DEF2177DB2D /* Dependencies */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 8; + dstSubfolderSpec = 16; + files = ( + 78E505D53CA7826ADE9757E2 /* ComposableArchitecture.framework in Dependencies */, + 820C0A3E5C2BD6C6CA8BAC10 /* SnapKit.framework in Dependencies */, + ABAFCB51556BE0DF9BC6EDAC /* Then.framework in Dependencies */, + ); + name = Dependencies; + runOnlyForDeploymentPostprocessing = 1; + }; + 83B1E4DEB29E49212D7C4188 /* Dependencies */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 8; + dstSubfolderSpec = 16; + files = ( + 1D6C4D67EC8C19AC634855BC /* ComposableArchitecture.framework in Dependencies */, + FC297C90F2DCD2607BC1655C /* SnapKit.framework in Dependencies */, + F7E5410AE9538F8421D0B7EB /* Then.framework in Dependencies */, + ); + name = Dependencies; + runOnlyForDeploymentPostprocessing = 1; + }; + 966315BB9CA1C67A6E4DD818 /* Dependencies */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 8; + dstSubfolderSpec = 16; + files = ( + 05929F461A316092B9BA2153 /* ComposableArchitecture.framework in Dependencies */, + 5251B0B792D4C49E825F466E /* SnapKit.framework in Dependencies */, + 3385BD64B43917ECCBC5D7FF /* Then.framework in Dependencies */, + ); + name = Dependencies; + runOnlyForDeploymentPostprocessing = 1; + }; + B1933C3D9403DB4254F1EF94 /* Dependencies */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 8; + dstSubfolderSpec = 16; + files = ( + 191DFD2A2DA32E45C070D016 /* SnapKit_SnapKit.bundle in Dependencies */, + 14540254CEC3497B67333884 /* swift-composable-architecture_ComposableArchitecture.bundle in Dependencies */, + D19BDCDFE47D3555554F163E /* swift-sharing_Sharing.bundle in Dependencies */, + ); + name = Dependencies; + runOnlyForDeploymentPostprocessing = 1; + }; + C69C5529F4E0A7A46B9B8188 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + CFBFB14026F1D132E10A9468 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + D3A481C3AFC897F2EB9E93AE /* Dependencies */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 8; + dstSubfolderSpec = 16; + files = ( + 107C62AE9CD667F46B4E15A1 /* ComposableArchitecture.framework in Dependencies */, + A51CC37F104E46691C55AD2F /* SnapKit.framework in Dependencies */, + CD6DAC1889B345AA6225B8BF /* Then.framework in Dependencies */, + ); + name = Dependencies; + runOnlyForDeploymentPostprocessing = 1; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 0606655A5FEF1EA3A2F658DD /* SwiftUINavigation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftUINavigation.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 075BC2A5FD001078D38856E6 /* CustomDump.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CustomDump.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 1F14DEE44EEA5E5AE73AB020 /* Sharing1.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Sharing1.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 21178B4A2A59C6B2EADC5B6C /* Test.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Test.swift; sourceTree = ""; }; + 23C9FE08FD9C2C513D1679DB /* ThirdParty_Debug.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ThirdParty_Debug.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2EBE83BD9D8603167735DBA2 /* Sharing2.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Sharing2.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 3BB088CFCF5B751E961933C0 /* ComposableArchitecture.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ComposableArchitecture.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 3F1193D224A436351DC8E329 /* CasePaths.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CasePaths.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4624958689CA4574D6DE5569 /* Then.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Then.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4DA72FC8EB1C71648466B851 /* ThirdParty-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "ThirdParty-Info.plist"; sourceTree = ""; }; + 4FDA5D0BD3E8E323677EB026 /* Clocks.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Clocks.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 526B092377E8662E33B120BD /* ThirdPartyTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "ThirdPartyTests-Info.plist"; sourceTree = ""; }; + 529D683020BDA42AF2A467E4 /* CombineSchedulers.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CombineSchedulers.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 550FD29325E806542CEFA72A /* SnapKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SnapKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5AB4F2063102023E996F015D /* IssueReporting.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = IssueReporting.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6049E02DD59C6B27D4CC5A57 /* UIKitNavigationShim.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = UIKitNavigationShim.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6865A708D3CFBD5D900FD8EA /* ThirdParty_Stage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ThirdParty_Stage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6F7E5510FEC285549404D23A /* XCTestDynamicOverlay.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = XCTestDynamicOverlay.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 7224F70B4CF69C652CE68E87 /* CasePathsCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CasePathsCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 76271C889E6D86C7D22CB056 /* swift-sharing_Sharing.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "swift-sharing_Sharing.bundle"; sourceTree = BUILT_PRODUCTS_DIR; }; + 7CD96CC9A07F20F545BD7529 /* ThirdParty-Debug-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "ThirdParty-Debug-Info.plist"; sourceTree = ""; }; + 876C0F3CB0FC08A46906C3D9 /* swift-composable-architecture_ComposableArchitecture.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "swift-composable-architecture_ComposableArchitecture.bundle"; sourceTree = BUILT_PRODUCTS_DIR; }; + 88DC163A6902C6C732FD855A /* Base.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Base.swift; sourceTree = ""; }; + 9510426F57C0386AD282AAA8 /* ConcurrencyExtras.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ConcurrencyExtras.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9962B6781CF429287378C23C /* UIKitNavigation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = UIKitNavigation.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A0F3DB55EAF01D251BFF4B56 /* IdentifiedCollections.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = IdentifiedCollections.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A77AA96439A830D80E228086 /* TuistBundle+ThirdPartyTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistBundle+ThirdPartyTests.swift"; sourceTree = ""; }; + A9AE888EDA3909F45835B514 /* Sharing.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Sharing.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + AAA036898E83738C48199540 /* ThirdParty-Prod-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "ThirdParty-Prod-Info.plist"; sourceTree = ""; }; + B36F1CA8CC4B96FA2609B4DF /* SwiftNavigation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftNavigation.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B3E1A842F278744F11160DFB /* ThirdParty_Prod.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ThirdParty_Prod.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BE127F8400BF4F674847DF5D /* Perception.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Perception.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C32AF99B4D617683E25151E3 /* OrderedCollections.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = OrderedCollections.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D9FB87EE5D02B2E41676C721 /* PerceptionCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PerceptionCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + DBCBFAAA9644395883C4A718 /* ThirdParty.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ThirdParty.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E057B5A6C190B51DEA95A52C /* Dependencies.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Dependencies.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E40944E96BB05F258649A6B0 /* ThirdPartyTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ThirdPartyTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + E8CE454E7ACF464177DC1FB6 /* InternalCollectionsUtilities.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = InternalCollectionsUtilities.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + EB15BAC581DBAA67EFA4A2F8 /* SnapKit_SnapKit.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SnapKit_SnapKit.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + F142D3247F8A749C15AED28C /* ThirdParty-Stage-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "ThirdParty-Stage-Info.plist"; sourceTree = ""; }; + F6A7606444B2A24E9A29BE1F /* DependenciesMacros.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DependenciesMacros.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FE34E7FD7B776485C4F5686B /* IssueReportingPackageSupport.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = IssueReportingPackageSupport.framework; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 03ED0EEAA84ABC551FCBEDF0 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 0FA85EEADD78627B6675EB67 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 10B8669291682D314505CE05 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 1B3023E437EC9C772D7F002A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + E97EB92A32723612E3973813 /* CasePaths.framework in Frameworks */, + 311471A656CA889BE88C78D9 /* CasePathsCore.framework in Frameworks */, + 551ABD7544CD267AE6CC195C /* Clocks.framework in Frameworks */, + 910E2DEB552042AC98EB4F08 /* CombineSchedulers.framework in Frameworks */, + 459C5FD5AD31D8A6C6628DC6 /* ComposableArchitecture.framework in Frameworks */, + 9003C2D283711C20FDBB33E0 /* ConcurrencyExtras.framework in Frameworks */, + 9C1C6C8D2E3E4B380A8C8B55 /* CustomDump.framework in Frameworks */, + 98A0DA222D9BA10DFD520C3F /* Dependencies.framework in Frameworks */, + 9CFE05FA0C9CD8ADC787C716 /* DependenciesMacros.framework in Frameworks */, + EAA7CEA224A883C2C0DA46BA /* IdentifiedCollections.framework in Frameworks */, + 92C6371E1DEAA7A0B1D6F2C7 /* InternalCollectionsUtilities.framework in Frameworks */, + 31DF26B9CD387C3DBBD90C18 /* IssueReporting.framework in Frameworks */, + D713F9D884B7FC901851460B /* IssueReportingPackageSupport.framework in Frameworks */, + 985AAB619CA4E6F97CA797F3 /* OrderedCollections.framework in Frameworks */, + 4D4CF95D400DCA4D0B3D6B51 /* Perception.framework in Frameworks */, + B15FBED9FEBEFF4C5E31049B /* PerceptionCore.framework in Frameworks */, + 4D34235D228D6EE9C27534F0 /* Sharing.framework in Frameworks */, + F8931CEA6B1AF2B9FE40DCA8 /* Sharing1.framework in Frameworks */, + 653474AB185843E0DF662DD1 /* Sharing2.framework in Frameworks */, + FF4459E15DB7A99E4B62EC27 /* SnapKit.framework in Frameworks */, + 603FE92EDB472C61D8437F72 /* SwiftNavigation.framework in Frameworks */, + BDC04BFA40CBD6A5E3B4386C /* SwiftUINavigation.framework in Frameworks */, + 6E0BC5259BA7934681AA91D5 /* Then.framework in Frameworks */, + 78AC8F364BB31C11BB2FEC02 /* ThirdParty.framework in Frameworks */, + A1E39C81459EE28C97417885 /* UIKitNavigation.framework in Frameworks */, + A268E18642DBC591738B7F88 /* UIKitNavigationShim.framework in Frameworks */, + 96668040EAC7FFF193982EC5 /* XCTestDynamicOverlay.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + DF60B20FC14E28485B38A625 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 0365DBEA82B1C4221A8016A5 /* Sources */ = { + isa = PBXGroup; + children = ( + 21178B4A2A59C6B2EADC5B6C /* Test.swift */, + ); + path = Sources; + sourceTree = ""; + }; + 22F4DB808DB715B983941F2D /* Derived */ = { + isa = PBXGroup; + children = ( + B9BC6479EB78F11E324D181D /* InfoPlists */, + F7071116F296C75BB5187CF7 /* Sources */, + ); + path = Derived; + sourceTree = ""; + }; + 8CE2A6F935A4D19FF8E66FE5 /* ThirdPartyTests */ = { + isa = PBXGroup; + children = ( + 0365DBEA82B1C4221A8016A5 /* Sources */, + ); + path = ThirdPartyTests; + sourceTree = ""; + }; + B36E18C7964263762EDFD9B3 = { + isa = PBXGroup; + children = ( + E8CAC09490FDE4FD320C5225 /* Project */, + C04DB49BAFD37E93F4993806 /* Products */, + ); + sourceTree = ""; + }; + B9BC6479EB78F11E324D181D /* InfoPlists */ = { + isa = PBXGroup; + children = ( + 7CD96CC9A07F20F545BD7529 /* ThirdParty-Debug-Info.plist */, + 4DA72FC8EB1C71648466B851 /* ThirdParty-Info.plist */, + AAA036898E83738C48199540 /* ThirdParty-Prod-Info.plist */, + F142D3247F8A749C15AED28C /* ThirdParty-Stage-Info.plist */, + 526B092377E8662E33B120BD /* ThirdPartyTests-Info.plist */, + ); + path = InfoPlists; + sourceTree = ""; + }; + C04DB49BAFD37E93F4993806 /* Products */ = { + isa = PBXGroup; + children = ( + 3F1193D224A436351DC8E329 /* CasePaths.framework */, + 7224F70B4CF69C652CE68E87 /* CasePathsCore.framework */, + 4FDA5D0BD3E8E323677EB026 /* Clocks.framework */, + 529D683020BDA42AF2A467E4 /* CombineSchedulers.framework */, + 3BB088CFCF5B751E961933C0 /* ComposableArchitecture.framework */, + 9510426F57C0386AD282AAA8 /* ConcurrencyExtras.framework */, + 075BC2A5FD001078D38856E6 /* CustomDump.framework */, + E057B5A6C190B51DEA95A52C /* Dependencies.framework */, + F6A7606444B2A24E9A29BE1F /* DependenciesMacros.framework */, + A0F3DB55EAF01D251BFF4B56 /* IdentifiedCollections.framework */, + E8CE454E7ACF464177DC1FB6 /* InternalCollectionsUtilities.framework */, + 5AB4F2063102023E996F015D /* IssueReporting.framework */, + FE34E7FD7B776485C4F5686B /* IssueReportingPackageSupport.framework */, + C32AF99B4D617683E25151E3 /* OrderedCollections.framework */, + BE127F8400BF4F674847DF5D /* Perception.framework */, + D9FB87EE5D02B2E41676C721 /* PerceptionCore.framework */, + A9AE888EDA3909F45835B514 /* Sharing.framework */, + 1F14DEE44EEA5E5AE73AB020 /* Sharing1.framework */, + 2EBE83BD9D8603167735DBA2 /* Sharing2.framework */, + EB15BAC581DBAA67EFA4A2F8 /* SnapKit_SnapKit.bundle */, + 550FD29325E806542CEFA72A /* SnapKit.framework */, + 876C0F3CB0FC08A46906C3D9 /* swift-composable-architecture_ComposableArchitecture.bundle */, + 76271C889E6D86C7D22CB056 /* swift-sharing_Sharing.bundle */, + B36F1CA8CC4B96FA2609B4DF /* SwiftNavigation.framework */, + 0606655A5FEF1EA3A2F658DD /* SwiftUINavigation.framework */, + 4624958689CA4574D6DE5569 /* Then.framework */, + 23C9FE08FD9C2C513D1679DB /* ThirdParty_Debug.framework */, + B3E1A842F278744F11160DFB /* ThirdParty_Prod.framework */, + 6865A708D3CFBD5D900FD8EA /* ThirdParty_Stage.framework */, + DBCBFAAA9644395883C4A718 /* ThirdParty.framework */, + E40944E96BB05F258649A6B0 /* ThirdPartyTests.xctest */, + 9962B6781CF429287378C23C /* UIKitNavigation.framework */, + 6049E02DD59C6B27D4CC5A57 /* UIKitNavigationShim.framework */, + 6F7E5510FEC285549404D23A /* XCTestDynamicOverlay.framework */, + ); + name = Products; + sourceTree = ""; + }; + C426EDCDEF7DA4DFFA504091 /* Sources */ = { + isa = PBXGroup; + children = ( + 88DC163A6902C6C732FD855A /* Base.swift */, + ); + path = Sources; + sourceTree = ""; + }; + E8CAC09490FDE4FD320C5225 /* Project */ = { + isa = PBXGroup; + children = ( + 22F4DB808DB715B983941F2D /* Derived */, + C426EDCDEF7DA4DFFA504091 /* Sources */, + 8CE2A6F935A4D19FF8E66FE5 /* ThirdPartyTests */, + ); + name = Project; + sourceTree = ""; + }; + F7071116F296C75BB5187CF7 /* Sources */ = { + isa = PBXGroup; + children = ( + A77AA96439A830D80E228086 /* TuistBundle+ThirdPartyTests.swift */, + ); + path = Sources; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 07574058ECF9A3CBB9BE60B3 /* ThirdParty-Prod */ = { + isa = PBXNativeTarget; + buildConfigurationList = CBC4C36DEA58064A668432DC /* Build configuration list for PBXNativeTarget "ThirdParty-Prod" */; + buildPhases = ( + 7449342BA97709270E49D21B /* Sources */, + FFDE8BD1B6FD2B55DCE3AE72 /* Resources */, + 03ED0EEAA84ABC551FCBEDF0 /* Frameworks */, + 0772368432AD871F10E82268 /* Embed Frameworks */, + 83B1E4DEB29E49212D7C4188 /* Dependencies */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "ThirdParty-Prod"; + packageProductDependencies = ( + ); + productName = ThirdParty_Prod; + productReference = B3E1A842F278744F11160DFB /* ThirdParty_Prod.framework */; + productType = "com.apple.product-type.framework"; + }; + 1E0DE906E275F69AAAD21623 /* ThirdParty-Debug */ = { + isa = PBXNativeTarget; + buildConfigurationList = 96F11787B1D214252DC59A7A /* Build configuration list for PBXNativeTarget "ThirdParty-Debug" */; + buildPhases = ( + 52A9256DD99C510E5845F399 /* Sources */, + F794C4524487BDD72E419E15 /* Resources */, + DF60B20FC14E28485B38A625 /* Frameworks */, + 14FBB7F2441108A2A7E4731F /* Embed Frameworks */, + D3A481C3AFC897F2EB9E93AE /* Dependencies */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "ThirdParty-Debug"; + packageProductDependencies = ( + ); + productName = ThirdParty_Debug; + productReference = 23C9FE08FD9C2C513D1679DB /* ThirdParty_Debug.framework */; + productType = "com.apple.product-type.framework"; + }; + 2814480D97205597FD2F2158 /* ThirdParty-Stage */ = { + isa = PBXNativeTarget; + buildConfigurationList = 3EB359336F8BD13E97A40005 /* Build configuration list for PBXNativeTarget "ThirdParty-Stage" */; + buildPhases = ( + 34C78801AF3A797445309D46 /* Sources */, + 800446304272D60AA3E43A30 /* Resources */, + 0FA85EEADD78627B6675EB67 /* Frameworks */, + C69C5529F4E0A7A46B9B8188 /* Embed Frameworks */, + 50B4899019456DEF2177DB2D /* Dependencies */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "ThirdParty-Stage"; + packageProductDependencies = ( + ); + productName = ThirdParty_Stage; + productReference = 6865A708D3CFBD5D900FD8EA /* ThirdParty_Stage.framework */; + productType = "com.apple.product-type.framework"; + }; + 5D711CEA43FFAD6AD6BDA3FC /* ThirdParty */ = { + isa = PBXNativeTarget; + buildConfigurationList = B50A39FE609B217F5A8FF882 /* Build configuration list for PBXNativeTarget "ThirdParty" */; + buildPhases = ( + 0858CECE3B9BAC2E2EFADBAB /* Sources */, + 1CC96EBE68334AAE6C71F84A /* Resources */, + 10B8669291682D314505CE05 /* Frameworks */, + CFBFB14026F1D132E10A9468 /* Embed Frameworks */, + 966315BB9CA1C67A6E4DD818 /* Dependencies */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = ThirdParty; + packageProductDependencies = ( + ); + productName = ThirdParty; + productReference = DBCBFAAA9644395883C4A718 /* ThirdParty.framework */; + productType = "com.apple.product-type.framework"; + }; + A24DB7EFCD0D37CD8EB40097 /* ThirdPartyTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 5E066877D2E851FD74C3AE5F /* Build configuration list for PBXNativeTarget "ThirdPartyTests" */; + buildPhases = ( + 5F0E5D01509A95AF15B6E03C /* Sources */, + BEFAB4F04FC833C795DD158C /* Resources */, + 1B3023E437EC9C772D7F002A /* Frameworks */, + 39933C724C9B061B385A9E24 /* Embed Frameworks */, + B1933C3D9403DB4254F1EF94 /* Dependencies */, + ); + buildRules = ( + ); + dependencies = ( + D4620F1F3B01E75B21418D83 /* PBXTargetDependency */, + ); + name = ThirdPartyTests; + packageProductDependencies = ( + ); + productName = ThirdPartyTests; + productReference = E40944E96BB05F258649A6B0 /* ThirdPartyTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + A1C969001B135EC8AB74F870 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + TargetAttributes = { + }; + }; + buildConfigurationList = 4CD8B50099143787D87496D2 /* Build configuration list for PBXProject "ThirdParty" */; + compatibilityVersion = "Xcode 14.0"; + developmentRegion = ko; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ko, + ); + mainGroup = B36E18C7964263762EDFD9B3; + productRefGroup = C04DB49BAFD37E93F4993806 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 5D711CEA43FFAD6AD6BDA3FC /* ThirdParty */, + 1E0DE906E275F69AAAD21623 /* ThirdParty-Debug */, + 07574058ECF9A3CBB9BE60B3 /* ThirdParty-Prod */, + 2814480D97205597FD2F2158 /* ThirdParty-Stage */, + A24DB7EFCD0D37CD8EB40097 /* ThirdPartyTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 1CC96EBE68334AAE6C71F84A /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 800446304272D60AA3E43A30 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BEFAB4F04FC833C795DD158C /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 8C8B39AD0F1762FFDC793228 /* Test.swift in Resources */, + DE67F660AFC056E6F6C01E08 /* SnapKit_SnapKit.bundle in Resources */, + 0074469DB831813B3CF710CC /* swift-composable-architecture_ComposableArchitecture.bundle in Resources */, + C2E18D714C5C12B8DD0A521B /* swift-sharing_Sharing.bundle in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F794C4524487BDD72E419E15 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + FFDE8BD1B6FD2B55DCE3AE72 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 0858CECE3B9BAC2E2EFADBAB /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B24DF497249FDEACB5D8334F /* Base.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 34C78801AF3A797445309D46 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + CDD2ABB41363C0E333172654 /* Base.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 52A9256DD99C510E5845F399 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + B0E03937330DFF6BED21D35C /* Base.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5F0E5D01509A95AF15B6E03C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 6E6162BB191893B5D743D52C /* TuistBundle+ThirdPartyTests.swift in Sources */, + 2A8020A3F07A908E497F1B9E /* Test.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7449342BA97709270E49D21B /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 199156A4DC68D0F4387CCDA6 /* Base.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + D4620F1F3B01E75B21418D83 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = ThirdParty; + target = 5D711CEA43FFAD6AD6BDA3FC /* ThirdParty */; + targetProxy = B889311A24C6B9DBC222F087 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 2AC02EB9CE656833F8ECCD9A /* 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; + }; + 37B1FB6AC79657921207DC2D /* 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/ThirdPartyTests-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/PerceptionMacros#PerceptionMacros", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.ThirdParty.ThirdPartyTests; + PRODUCT_NAME = ThirdPartyTests; + 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; + }; + 5C7A2E61E1967E5F2EB2732C /* 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/ThirdParty-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/PerceptionMacros#PerceptionMacros", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.ThirdParty; + PRODUCT_NAME = ThirdParty_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; + }; + 850C81B3D29CD2EE57DC35AD /* 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/ThirdParty-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/PerceptionMacros#PerceptionMacros", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.ThirdParty; + PRODUCT_NAME = ThirdParty_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; + }; + A4BEF060AF57E1F74B4CCD00 /* 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/ThirdParty-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/PerceptionMacros#PerceptionMacros", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.ThirdParty; + PRODUCT_NAME = ThirdParty_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; + }; + A6F8D7AAFC226D8A4677D869 /* 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/ThirdParty-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/PerceptionMacros#PerceptionMacros", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.ThirdParty; + PRODUCT_NAME = ThirdParty_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; + }; + ADE94715EF5BAF407ACD0BAF /* 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/ThirdParty-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/PerceptionMacros#PerceptionMacros", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.ThirdParty; + PRODUCT_NAME = ThirdParty_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; + }; + BFF312870D5CB8CDFA75D18F /* 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/ThirdParty-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/PerceptionMacros#PerceptionMacros", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.ThirdParty; + PRODUCT_NAME = ThirdParty; + 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; + }; + CD14E019635081FC32C97899 /* 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/ThirdParty-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/PerceptionMacros#PerceptionMacros", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.ThirdParty; + PRODUCT_NAME = ThirdParty_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; + }; + CE1EECBAC6F029A27FB1DE83 /* 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/ThirdPartyTests-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/PerceptionMacros#PerceptionMacros", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.ThirdParty.ThirdPartyTests; + PRODUCT_NAME = ThirdPartyTests; + 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; + }; + E8885F47869B403E84D33ABD /* 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; + }; + EC5679B63C3EC0AA53849DB0 /* 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/ThirdParty-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/PerceptionMacros#PerceptionMacros", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.ThirdParty; + PRODUCT_NAME = ThirdParty; + 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 */ + 3EB359336F8BD13E97A40005 /* Build configuration list for PBXNativeTarget "ThirdParty-Stage" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + CD14E019635081FC32C97899 /* Debug */, + ADE94715EF5BAF407ACD0BAF /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 4CD8B50099143787D87496D2 /* Build configuration list for PBXProject "ThirdParty" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E8885F47869B403E84D33ABD /* Debug */, + 2AC02EB9CE656833F8ECCD9A /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 5E066877D2E851FD74C3AE5F /* Build configuration list for PBXNativeTarget "ThirdPartyTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + CE1EECBAC6F029A27FB1DE83 /* Debug */, + 37B1FB6AC79657921207DC2D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 96F11787B1D214252DC59A7A /* Build configuration list for PBXNativeTarget "ThirdParty-Debug" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 850C81B3D29CD2EE57DC35AD /* Debug */, + A4BEF060AF57E1F74B4CCD00 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + B50A39FE609B217F5A8FF882 /* Build configuration list for PBXNativeTarget "ThirdParty" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + BFF312870D5CB8CDFA75D18F /* Debug */, + EC5679B63C3EC0AA53849DB0 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + CBC4C36DEA58064A668432DC /* Build configuration list for PBXNativeTarget "ThirdParty-Prod" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 5C7A2E61E1967E5F2EB2732C /* Debug */, + A6F8D7AAFC226D8A4677D869 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = A1C969001B135EC8AB74F870 /* Project object */; +} diff --git a/Projects/Shared/ThirdParty/ThirdParty.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Projects/Shared/ThirdParty/ThirdParty.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/Projects/Shared/ThirdParty/ThirdParty.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Projects/Shared/ThirdParty/ThirdParty.xcodeproj/xcshareddata/xcschemes/ThirdParty-Debug.xcscheme b/Projects/Shared/ThirdParty/ThirdParty.xcodeproj/xcshareddata/xcschemes/ThirdParty-Debug.xcscheme new file mode 100644 index 0000000..10d456c --- /dev/null +++ b/Projects/Shared/ThirdParty/ThirdParty.xcodeproj/xcshareddata/xcschemes/ThirdParty-Debug.xcscheme @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/Shared/ThirdParty/ThirdParty.xcodeproj/xcshareddata/xcschemes/ThirdParty-Prod.xcscheme b/Projects/Shared/ThirdParty/ThirdParty.xcodeproj/xcshareddata/xcschemes/ThirdParty-Prod.xcscheme new file mode 100644 index 0000000..7ad4df2 --- /dev/null +++ b/Projects/Shared/ThirdParty/ThirdParty.xcodeproj/xcshareddata/xcschemes/ThirdParty-Prod.xcscheme @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/Shared/ThirdParty/ThirdParty.xcodeproj/xcshareddata/xcschemes/ThirdParty-Stage.xcscheme b/Projects/Shared/ThirdParty/ThirdParty.xcodeproj/xcshareddata/xcschemes/ThirdParty-Stage.xcscheme new file mode 100644 index 0000000..720d8c3 --- /dev/null +++ b/Projects/Shared/ThirdParty/ThirdParty.xcodeproj/xcshareddata/xcschemes/ThirdParty-Stage.xcscheme @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/Shared/ThirdParty/ThirdParty.xcodeproj/xcshareddata/xcschemes/ThirdParty.xcscheme b/Projects/Shared/ThirdParty/ThirdParty.xcodeproj/xcshareddata/xcschemes/ThirdParty.xcscheme new file mode 100644 index 0000000..90b4348 --- /dev/null +++ b/Projects/Shared/ThirdParty/ThirdParty.xcodeproj/xcshareddata/xcschemes/ThirdParty.xcscheme @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/Shared/ThirdParty/ThirdPartyTests/Sources/Test.swift b/Projects/Shared/ThirdParty/ThirdPartyTests/Sources/Test.swift new file mode 100644 index 0000000..a9c810e --- /dev/null +++ b/Projects/Shared/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/Shared/Utill/Derived/InfoPlists/Utill-Debug-Info.plist b/Projects/Shared/Utill/Derived/InfoPlists/Utill-Debug-Info.plist new file mode 100644 index 0000000..323e5ec --- /dev/null +++ b/Projects/Shared/Utill/Derived/InfoPlists/Utill-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/Shared/Utill/Derived/InfoPlists/Utill-Info.plist b/Projects/Shared/Utill/Derived/InfoPlists/Utill-Info.plist new file mode 100644 index 0000000..323e5ec --- /dev/null +++ b/Projects/Shared/Utill/Derived/InfoPlists/Utill-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/Shared/Utill/Derived/InfoPlists/Utill-Prod-Info.plist b/Projects/Shared/Utill/Derived/InfoPlists/Utill-Prod-Info.plist new file mode 100644 index 0000000..323e5ec --- /dev/null +++ b/Projects/Shared/Utill/Derived/InfoPlists/Utill-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/Shared/Utill/Derived/InfoPlists/Utill-Stage-Info.plist b/Projects/Shared/Utill/Derived/InfoPlists/Utill-Stage-Info.plist new file mode 100644 index 0000000..323e5ec --- /dev/null +++ b/Projects/Shared/Utill/Derived/InfoPlists/Utill-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/Shared/Utill/Derived/InfoPlists/UtillTests-Info.plist b/Projects/Shared/Utill/Derived/InfoPlists/UtillTests-Info.plist new file mode 100644 index 0000000..6c40a6c --- /dev/null +++ b/Projects/Shared/Utill/Derived/InfoPlists/UtillTests-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/Shared/Utill/Derived/Sources/TuistBundle+UtillTests.swift b/Projects/Shared/Utill/Derived/Sources/TuistBundle+UtillTests.swift new file mode 100644 index 0000000..2de7344 --- /dev/null +++ b/Projects/Shared/Utill/Derived/Sources/TuistBundle+UtillTests.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 UtillTests 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 UtillTestsResources: 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/Shared/Utill/Project.swift b/Projects/Shared/Utill/Project.swift new file mode 100644 index 0000000..7b47df3 --- /dev/null +++ b/Projects/Shared/Utill/Project.swift @@ -0,0 +1,17 @@ +import Foundation +import ProjectDescription +import DependencyPlugin +import ProjectTemplatePlugin +import ProjectTemplatePlugin +import DependencyPackagePlugin + +let project = Project.makeAppModule( + name: "Utill", + bundleId: .appBundleID(name: ".Utill"), + product: .staticFramework, + settings: .settings(), + dependencies: [ + + ], + sources: ["Sources/**"] +) diff --git a/Projects/Shared/Utill/Sources/Coordinator/Coordinator.swift b/Projects/Shared/Utill/Sources/Coordinator/Coordinator.swift new file mode 100644 index 0000000..464b043 --- /dev/null +++ b/Projects/Shared/Utill/Sources/Coordinator/Coordinator.swift @@ -0,0 +1,13 @@ +// +// Coordinator.swift +// Utill +// +// Created by Wonji Suh on 9/8/25. +// + +import UIKit + +@MainActor +public protocol Coordinator: AnyObject { + func start() +} diff --git a/Projects/Shared/Utill/Sources/String/Extension+String.swift b/Projects/Shared/Utill/Sources/String/Extension+String.swift new file mode 100644 index 0000000..5320f53 --- /dev/null +++ b/Projects/Shared/Utill/Sources/String/Extension+String.swift @@ -0,0 +1,61 @@ +// +// Extension+String.swift +// Utill +// +// Created by Wonji Suh on 9/9/25. +// + +import Foundation + +public extension String { + /// "yyyy-M-d" → "yyyy-MM-dd"로 0패딩 정규화 + func normalizedYMD() -> String { + let parts = split(separator: "-") + guard parts.count == 3 else { return self } + let y = parts[0] + let m = parts[1].count == 1 ? "0\(parts[1])" : String(parts[1]) + let d = parts[2].count == 1 ? "0\(parts[2])" : String(parts[2]) + return "\(y)-\(m)-\(d)" + } + + func toLongUSDate( + inputFormats: [String] = [ + "yyyy-MM-dd", // 1997-06-26 + "yyyy-M-d", // 2007-7-2 + "yyyy/MM/dd", // 1997/06/26 + "yyyy.M.d" // 1997.6.26 + ] + ) -> String? { + let posix = Locale(identifier: "en_US_POSIX") + let gmt = TimeZone(secondsFromGMT: 0)! + + let out = DateFormatter() + out.locale = posix + out.timeZone = gmt + out.dateFormat = "MMMM d, yyyy" // 예: June 26, 1997 + + let df = DateFormatter() + df.locale = posix + df.timeZone = gmt + + for fmt in inputFormats { + df.dateFormat = fmt + if let date = df.date(from: self) { + return out.string(from: date) + } + } + return nil + } + + /// 파싱 실패 시 원본 문자열을 그대로 반환하는 편의 메서드 + func toLongUSDateOrSelf() -> String { + return toLongUSDate() ?? self + } + + + func truncated(to maxChars: Int, suffix: String = "…") -> String { + guard count > maxChars else { return self } + let end = index(startIndex, offsetBy: maxChars) + return String(self[.. AnyPublisher { + ControlEventPublisher(control: self, events: events).eraseToAnyPublisher() + } +} + +private final class ControlEventSubscription: Subscription where S.Input == Void, S.Failure == Never { + private var subscriber: S? + weak var control: UIControl? + let events: UIControl.Event + + init(subscriber: S, control: UIControl, events: UIControl.Event) { + self.subscriber = subscriber + self.control = control + self.events = events + control.addTarget(self, action: #selector(eventHandler), for: events) + } + + func request(_ demand: Subscribers.Demand) { /* no-op */ } + + func cancel() { + control?.removeTarget(self, action: #selector(eventHandler), for: events) + subscriber = nil + } + + @objc private func eventHandler() { + _ = subscriber?.receive(()) + } +} + +private struct ControlEventPublisher: Publisher { + typealias Output = Void + typealias Failure = Never + + let control: UIControl + let events: UIControl.Event + + func receive(subscriber: S) where S : Subscriber, Failure == S.Failure, Output == S.Input { + let subscription = ControlEventSubscription(subscriber: subscriber, control: control, events: events) + subscriber.receive(subscription: subscription) + } +} diff --git a/Projects/Shared/Utill/Sources/ViewController/FallbackViewController.swift b/Projects/Shared/Utill/Sources/ViewController/FallbackViewController.swift new file mode 100644 index 0000000..bc4ec3d --- /dev/null +++ b/Projects/Shared/Utill/Sources/ViewController/FallbackViewController.swift @@ -0,0 +1,16 @@ +// +// FallbackViewController.swift +// Utill +// +// Created by Wonji Suh on 9/8/25. +// + +import UIKit + +@MainActor +public final class FallbackViewController: UIViewController { + public init(title: String) { super.init(nibName: nil, bundle: nil); self.title = title } + public required init?(coder: NSCoder) { fatalError() } + public override func viewDidLoad() { super.viewDidLoad(); view.backgroundColor = .white } +} + diff --git a/Projects/Shared/Utill/Utill.xcodeproj/project.pbxproj b/Projects/Shared/Utill/Utill.xcodeproj/project.pbxproj new file mode 100644 index 0000000..a91a5bc --- /dev/null +++ b/Projects/Shared/Utill/Utill.xcodeproj/project.pbxproj @@ -0,0 +1,1035 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 55; + objects = { + +/* Begin PBXBuildFile section */ + 0E47A277F0CA676A95C8630D /* Extension+String.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A0795BA43DE074C8CCBB7A0 /* Extension+String.swift */; }; + 107A19A67E9503C9676C7746 /* Test.swift in Sources */ = {isa = PBXBuildFile; fileRef = F70DD74259D9330B7727DDCB /* Test.swift */; }; + 315D6AAF969604C836231974 /* Coordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EC0D46F57A1A3D7763457AF /* Coordinator.swift */; }; + 36CA7F6C6162D86B2615AE3E /* Coordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EC0D46F57A1A3D7763457AF /* Coordinator.swift */; }; + 42CAAA3854DF88F4D01D4AD7 /* Extension+UiControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71C895B6507A3D0F7F8166CD /* Extension+UiControl.swift */; }; + 464E039B0B5EC544B95F5F92 /* Extension+String.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A0795BA43DE074C8CCBB7A0 /* Extension+String.swift */; }; + 5908B1C326C32B74145D4FB2 /* Extension+UiControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71C895B6507A3D0F7F8166CD /* Extension+UiControl.swift */; }; + 59B61B616A49B7D487D580E9 /* TuistBundle+UtillTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC3D04E12913C088603F9E19 /* TuistBundle+UtillTests.swift */; }; + 5C7D08BCCCC3E8C17FBBD76F /* Extension+UIView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A88BFC509C4E721067C1E64A /* Extension+UIView.swift */; }; + 64D21F9B5DE1EBE164AC3048 /* Utill.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 136D114982ED83CB9F5177A1 /* Utill.framework */; }; + 6F52CBB612C713222F56B2F2 /* FallbackViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A86FDF3DE145F3C61C29A358 /* FallbackViewController.swift */; }; + 765F9F2106BCED0D647F6236 /* Extension+String.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A0795BA43DE074C8CCBB7A0 /* Extension+String.swift */; }; + 7C0B95DAF0A8E9B6163FC814 /* Coordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EC0D46F57A1A3D7763457AF /* Coordinator.swift */; }; + 7CECC3BBEDE2979A1AEB97A1 /* Extension+UIView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A88BFC509C4E721067C1E64A /* Extension+UIView.swift */; }; + 8D996B7B8089181D282768BD /* FallbackViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A86FDF3DE145F3C61C29A358 /* FallbackViewController.swift */; }; + A7E32AFA50F587B2FF22DA91 /* Extension+UIView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A88BFC509C4E721067C1E64A /* Extension+UIView.swift */; }; + C6FF96E464FEDA096AD289EE /* Extension+UiControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71C895B6507A3D0F7F8166CD /* Extension+UiControl.swift */; }; + CE69D53048C9C5ABF578F216 /* Coordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0EC0D46F57A1A3D7763457AF /* Coordinator.swift */; }; + D6F822207F3868214086878A /* Test.swift in Resources */ = {isa = PBXBuildFile; fileRef = F70DD74259D9330B7727DDCB /* Test.swift */; }; + D93D6D3EB478EDD29CF3AF29 /* FallbackViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A86FDF3DE145F3C61C29A358 /* FallbackViewController.swift */; }; + D9629EE732464FDF10489EC3 /* Extension+UiControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71C895B6507A3D0F7F8166CD /* Extension+UiControl.swift */; }; + EFD1AB28A01A1967D34920FA /* Extension+String.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A0795BA43DE074C8CCBB7A0 /* Extension+String.swift */; }; + F941DEDAECACF0B478FA85DA /* Extension+UIView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A88BFC509C4E721067C1E64A /* Extension+UIView.swift */; }; + FF1F31C6764A19E4E39761D8 /* FallbackViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A86FDF3DE145F3C61C29A358 /* FallbackViewController.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 348272C2D0134CBE86B950CD /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 962FCF0D2E9C0B6F2641ECC6 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 587CEAB978FBB8C3B98D8B47; + remoteInfo = Utill; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 680DD83D472680B34E39A022 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + 87A046C77FDA15E9C3E89DE2 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + 88FF061799C10B6E30D6082B /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + F66F6068704A8F7CAD31BD5C /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + FB801875A8657BC0A70A8C93 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 0EC0D46F57A1A3D7763457AF /* Coordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Coordinator.swift; sourceTree = ""; }; + 136D114982ED83CB9F5177A1 /* Utill.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Utill.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2645A47F83A3E035E22B5A8A /* Utill-Stage-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Utill-Stage-Info.plist"; sourceTree = ""; }; + 2877CF2EE2FF204F9102660B /* Utill-Prod-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Utill-Prod-Info.plist"; sourceTree = ""; }; + 2C11E09952BEF672B7CC9E8A /* Utill_Stage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Utill_Stage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 3A0795BA43DE074C8CCBB7A0 /* Extension+String.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Extension+String.swift"; sourceTree = ""; }; + 465A15DE52F39A8755A63FE0 /* Utill_Prod.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Utill_Prod.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4ED860F216F9BD3E312F51EE /* Utill_Debug.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Utill_Debug.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 71C895B6507A3D0F7F8166CD /* Extension+UiControl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Extension+UiControl.swift"; sourceTree = ""; }; + 7B9A8A431FB3EEAE4AE3FB1D /* Utill-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Utill-Info.plist"; sourceTree = ""; }; + 7F64C3861EDE4F8C24989C2A /* UtillTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "UtillTests-Info.plist"; sourceTree = ""; }; + 9ACBE78CB421425304897A41 /* Utill-Debug-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Utill-Debug-Info.plist"; sourceTree = ""; }; + 9BED8B1D6BCFDB676A34B628 /* UtillTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = UtillTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + A86FDF3DE145F3C61C29A358 /* FallbackViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FallbackViewController.swift; sourceTree = ""; }; + A88BFC509C4E721067C1E64A /* Extension+UIView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Extension+UIView.swift"; sourceTree = ""; }; + CC3D04E12913C088603F9E19 /* TuistBundle+UtillTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistBundle+UtillTests.swift"; sourceTree = ""; }; + F70DD74259D9330B7727DDCB /* Test.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Test.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 4562074B0316CA682552AA3B /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4F078419F51790A57065ED81 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 68A512F4CF8FADAC131562F4 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + CF27EA1D21067E5A60312379 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 64D21F9B5DE1EBE164AC3048 /* Utill.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F6E663311DCC39492E908CE4 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 0C029641F7FF65E2202591AA /* Project */ = { + isa = PBXGroup; + children = ( + E09290D672D0F4B81148D9AB /* Derived */, + EB9C926E257290120423250D /* Sources */, + 5E6F6153D278044B2AEF7A31 /* UtillTests */, + ); + name = Project; + sourceTree = ""; + }; + 0E619CA89098AE697F924DCC /* ViewController */ = { + isa = PBXGroup; + children = ( + A86FDF3DE145F3C61C29A358 /* FallbackViewController.swift */, + ); + path = ViewController; + sourceTree = ""; + }; + 121AE6757CE71D84E578D4A9 /* Products */ = { + isa = PBXGroup; + children = ( + 4ED860F216F9BD3E312F51EE /* Utill_Debug.framework */, + 465A15DE52F39A8755A63FE0 /* Utill_Prod.framework */, + 2C11E09952BEF672B7CC9E8A /* Utill_Stage.framework */, + 136D114982ED83CB9F5177A1 /* Utill.framework */, + 9BED8B1D6BCFDB676A34B628 /* UtillTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 1B24ACABA340C77228DCA968 /* Sources */ = { + isa = PBXGroup; + children = ( + F70DD74259D9330B7727DDCB /* Test.swift */, + ); + path = Sources; + sourceTree = ""; + }; + 3CBC3E55EA5879873DAA0C9A /* String */ = { + isa = PBXGroup; + children = ( + 3A0795BA43DE074C8CCBB7A0 /* Extension+String.swift */, + ); + path = String; + sourceTree = ""; + }; + 5E6F6153D278044B2AEF7A31 /* UtillTests */ = { + isa = PBXGroup; + children = ( + 1B24ACABA340C77228DCA968 /* Sources */, + ); + path = UtillTests; + sourceTree = ""; + }; + 6A79B669B600FDF2152316C7 /* View */ = { + isa = PBXGroup; + children = ( + 71C895B6507A3D0F7F8166CD /* Extension+UiControl.swift */, + A88BFC509C4E721067C1E64A /* Extension+UIView.swift */, + ); + path = View; + sourceTree = ""; + }; + A7B070AF27B848C0C81F9769 /* Coordinator */ = { + isa = PBXGroup; + children = ( + 0EC0D46F57A1A3D7763457AF /* Coordinator.swift */, + ); + path = Coordinator; + sourceTree = ""; + }; + A9A9ADE9F2B399CE6F4B1EB7 /* InfoPlists */ = { + isa = PBXGroup; + children = ( + 9ACBE78CB421425304897A41 /* Utill-Debug-Info.plist */, + 7B9A8A431FB3EEAE4AE3FB1D /* Utill-Info.plist */, + 2877CF2EE2FF204F9102660B /* Utill-Prod-Info.plist */, + 2645A47F83A3E035E22B5A8A /* Utill-Stage-Info.plist */, + 7F64C3861EDE4F8C24989C2A /* UtillTests-Info.plist */, + ); + path = InfoPlists; + sourceTree = ""; + }; + B3A111E009BCDFA3CF4F8703 = { + isa = PBXGroup; + children = ( + 0C029641F7FF65E2202591AA /* Project */, + 121AE6757CE71D84E578D4A9 /* Products */, + ); + sourceTree = ""; + }; + B87164E69E930A020FF3266A /* Sources */ = { + isa = PBXGroup; + children = ( + CC3D04E12913C088603F9E19 /* TuistBundle+UtillTests.swift */, + ); + path = Sources; + sourceTree = ""; + }; + E09290D672D0F4B81148D9AB /* Derived */ = { + isa = PBXGroup; + children = ( + A9A9ADE9F2B399CE6F4B1EB7 /* InfoPlists */, + B87164E69E930A020FF3266A /* Sources */, + ); + path = Derived; + sourceTree = ""; + }; + EB9C926E257290120423250D /* Sources */ = { + isa = PBXGroup; + children = ( + A7B070AF27B848C0C81F9769 /* Coordinator */, + 3CBC3E55EA5879873DAA0C9A /* String */, + 6A79B669B600FDF2152316C7 /* View */, + 0E619CA89098AE697F924DCC /* ViewController */, + ); + path = Sources; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 0C296440CB64A9B292999335 /* Utill-Debug */ = { + isa = PBXNativeTarget; + buildConfigurationList = 29CD2E1627AFF56B7FEF5E66 /* Build configuration list for PBXNativeTarget "Utill-Debug" */; + buildPhases = ( + FB4CC2F0114D5279C8B47676 /* Sources */, + 8D4BD370C2AEF74741C432F4 /* Resources */, + 68A512F4CF8FADAC131562F4 /* Frameworks */, + 87A046C77FDA15E9C3E89DE2 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Utill-Debug"; + packageProductDependencies = ( + ); + productName = Utill_Debug; + productReference = 4ED860F216F9BD3E312F51EE /* Utill_Debug.framework */; + productType = "com.apple.product-type.framework"; + }; + 587CEAB978FBB8C3B98D8B47 /* Utill */ = { + isa = PBXNativeTarget; + buildConfigurationList = 01D43D73CD41CEC0A6C9543A /* Build configuration list for PBXNativeTarget "Utill" */; + buildPhases = ( + CE383A0564C68C43905CB957 /* Sources */, + 71BF5EAD8FE67CD16E8D85F7 /* Resources */, + 4F078419F51790A57065ED81 /* Frameworks */, + FB801875A8657BC0A70A8C93 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Utill; + packageProductDependencies = ( + ); + productName = Utill; + productReference = 136D114982ED83CB9F5177A1 /* Utill.framework */; + productType = "com.apple.product-type.framework"; + }; + 6FC233445B85A0ABE8E350EC /* Utill-Stage */ = { + isa = PBXNativeTarget; + buildConfigurationList = 321477EA57F1C272C16BE15C /* Build configuration list for PBXNativeTarget "Utill-Stage" */; + buildPhases = ( + 5240AFE02605BEDF391B5CB0 /* Sources */, + FE7262345F4908C647239A13 /* Resources */, + F6E663311DCC39492E908CE4 /* Frameworks */, + 88FF061799C10B6E30D6082B /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Utill-Stage"; + packageProductDependencies = ( + ); + productName = Utill_Stage; + productReference = 2C11E09952BEF672B7CC9E8A /* Utill_Stage.framework */; + productType = "com.apple.product-type.framework"; + }; + D0CAB6E08B002F5ABC1A010F /* Utill-Prod */ = { + isa = PBXNativeTarget; + buildConfigurationList = 2079BFE2EF5C8698AD4104A4 /* Build configuration list for PBXNativeTarget "Utill-Prod" */; + buildPhases = ( + 34F76D8B94AC84A25210D571 /* Sources */, + B9A178B845E9D265A23D4E19 /* Resources */, + 4562074B0316CA682552AA3B /* Frameworks */, + F66F6068704A8F7CAD31BD5C /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Utill-Prod"; + packageProductDependencies = ( + ); + productName = Utill_Prod; + productReference = 465A15DE52F39A8755A63FE0 /* Utill_Prod.framework */; + productType = "com.apple.product-type.framework"; + }; + D504B8BB21F57415468ECBAD /* UtillTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 88FC0058CB80A69E3DB9226D /* Build configuration list for PBXNativeTarget "UtillTests" */; + buildPhases = ( + C796A958668EDC9EACA09677 /* Sources */, + 0057BEA6AA1C44CD3BE87F1A /* Resources */, + CF27EA1D21067E5A60312379 /* Frameworks */, + 680DD83D472680B34E39A022 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 737D85BB685B79A5E0790265 /* PBXTargetDependency */, + ); + name = UtillTests; + packageProductDependencies = ( + ); + productName = UtillTests; + productReference = 9BED8B1D6BCFDB676A34B628 /* UtillTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 962FCF0D2E9C0B6F2641ECC6 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + TargetAttributes = { + }; + }; + buildConfigurationList = 817DAE8E8FEF1C2850504165 /* Build configuration list for PBXProject "Utill" */; + compatibilityVersion = "Xcode 14.0"; + developmentRegion = ko; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ko, + ); + mainGroup = B3A111E009BCDFA3CF4F8703; + productRefGroup = 121AE6757CE71D84E578D4A9 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 587CEAB978FBB8C3B98D8B47 /* Utill */, + 0C296440CB64A9B292999335 /* Utill-Debug */, + D0CAB6E08B002F5ABC1A010F /* Utill-Prod */, + 6FC233445B85A0ABE8E350EC /* Utill-Stage */, + D504B8BB21F57415468ECBAD /* UtillTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 0057BEA6AA1C44CD3BE87F1A /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D6F822207F3868214086878A /* Test.swift in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 71BF5EAD8FE67CD16E8D85F7 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 8D4BD370C2AEF74741C432F4 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + B9A178B845E9D265A23D4E19 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + FE7262345F4908C647239A13 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 34F76D8B94AC84A25210D571 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 7C0B95DAF0A8E9B6163FC814 /* Coordinator.swift in Sources */, + EFD1AB28A01A1967D34920FA /* Extension+String.swift in Sources */, + F941DEDAECACF0B478FA85DA /* Extension+UIView.swift in Sources */, + C6FF96E464FEDA096AD289EE /* Extension+UiControl.swift in Sources */, + D93D6D3EB478EDD29CF3AF29 /* FallbackViewController.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 5240AFE02605BEDF391B5CB0 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 315D6AAF969604C836231974 /* Coordinator.swift in Sources */, + 464E039B0B5EC544B95F5F92 /* Extension+String.swift in Sources */, + 7CECC3BBEDE2979A1AEB97A1 /* Extension+UIView.swift in Sources */, + 5908B1C326C32B74145D4FB2 /* Extension+UiControl.swift in Sources */, + FF1F31C6764A19E4E39761D8 /* FallbackViewController.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + C796A958668EDC9EACA09677 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 59B61B616A49B7D487D580E9 /* TuistBundle+UtillTests.swift in Sources */, + 107A19A67E9503C9676C7746 /* Test.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + CE383A0564C68C43905CB957 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + CE69D53048C9C5ABF578F216 /* Coordinator.swift in Sources */, + 0E47A277F0CA676A95C8630D /* Extension+String.swift in Sources */, + 5C7D08BCCCC3E8C17FBBD76F /* Extension+UIView.swift in Sources */, + 42CAAA3854DF88F4D01D4AD7 /* Extension+UiControl.swift in Sources */, + 8D996B7B8089181D282768BD /* FallbackViewController.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + FB4CC2F0114D5279C8B47676 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 36CA7F6C6162D86B2615AE3E /* Coordinator.swift in Sources */, + 765F9F2106BCED0D647F6236 /* Extension+String.swift in Sources */, + A7E32AFA50F587B2FF22DA91 /* Extension+UIView.swift in Sources */, + D9629EE732464FDF10489EC3 /* Extension+UiControl.swift in Sources */, + 6F52CBB612C713222F56B2F2 /* FallbackViewController.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 737D85BB685B79A5E0790265 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Utill; + target = 587CEAB978FBB8C3B98D8B47 /* Utill */; + targetProxy = 348272C2D0134CBE86B950CD /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 02F501117F22627BB87EE2F7 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "iPhone Developer"; + INFOPLIST_FILE = "Derived/InfoPlists/UtillTests-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 17.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Utill.UtillTests; + PRODUCT_NAME = UtillTests; + 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; + }; + 14477BA0BF3D5FC5D47EE30F /* 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/Utill-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.Utill; + PRODUCT_NAME = Utill_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; + }; + 18CE4E05D76C35805CF7DCDB /* 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; + }; + 29BFD5AF1259271BB2AC0507 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "iPhone Developer"; + INFOPLIST_FILE = "Derived/InfoPlists/UtillTests-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 17.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.BookSeries.Utill.UtillTests; + PRODUCT_NAME = UtillTests; + 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; + }; + 50903936723FE09D0505F912 /* 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/Utill-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.Utill; + PRODUCT_NAME = Utill_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; + }; + 84598060F77D285325E30C57 /* 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/Utill-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.Utill; + PRODUCT_NAME = Utill_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; + }; + 94E6848D8A976B342900C2F6 /* 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/Utill-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.Utill; + PRODUCT_NAME = Utill_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; + }; + A148B250C36A83B7759D733C /* 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/Utill-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.Utill; + PRODUCT_NAME = Utill; + 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; + }; + ABD1CFB703EB96BDA26A4580 /* 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/Utill-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.Utill; + PRODUCT_NAME = Utill; + 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; + }; + D313F3AF028EF50D4AFBB35F /* 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/Utill-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.Utill; + PRODUCT_NAME = Utill_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; + }; + E5A3FCD27AD90B6AFE8F2AB1 /* 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/Utill-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.Utill; + PRODUCT_NAME = Utill_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; + }; + FB4FB858E695ED5FF3E1EDD0 /* 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 */ + 01D43D73CD41CEC0A6C9543A /* Build configuration list for PBXNativeTarget "Utill" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + ABD1CFB703EB96BDA26A4580 /* Debug */, + A148B250C36A83B7759D733C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 2079BFE2EF5C8698AD4104A4 /* Build configuration list for PBXNativeTarget "Utill-Prod" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + D313F3AF028EF50D4AFBB35F /* Debug */, + 50903936723FE09D0505F912 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 29CD2E1627AFF56B7FEF5E66 /* Build configuration list for PBXNativeTarget "Utill-Debug" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E5A3FCD27AD90B6AFE8F2AB1 /* Debug */, + 14477BA0BF3D5FC5D47EE30F /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 321477EA57F1C272C16BE15C /* Build configuration list for PBXNativeTarget "Utill-Stage" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 84598060F77D285325E30C57 /* Debug */, + 94E6848D8A976B342900C2F6 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 817DAE8E8FEF1C2850504165 /* Build configuration list for PBXProject "Utill" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 18CE4E05D76C35805CF7DCDB /* Debug */, + FB4FB858E695ED5FF3E1EDD0 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 88FC0058CB80A69E3DB9226D /* Build configuration list for PBXNativeTarget "UtillTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 02F501117F22627BB87EE2F7 /* Debug */, + 29BFD5AF1259271BB2AC0507 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 962FCF0D2E9C0B6F2641ECC6 /* Project object */; +} diff --git a/Projects/Shared/Utill/Utill.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Projects/Shared/Utill/Utill.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/Projects/Shared/Utill/Utill.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Projects/Shared/Utill/Utill.xcodeproj/xcshareddata/xcschemes/Utill-Debug.xcscheme b/Projects/Shared/Utill/Utill.xcodeproj/xcshareddata/xcschemes/Utill-Debug.xcscheme new file mode 100644 index 0000000..79c0f3e --- /dev/null +++ b/Projects/Shared/Utill/Utill.xcodeproj/xcshareddata/xcschemes/Utill-Debug.xcscheme @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/Shared/Utill/Utill.xcodeproj/xcshareddata/xcschemes/Utill-Prod.xcscheme b/Projects/Shared/Utill/Utill.xcodeproj/xcshareddata/xcschemes/Utill-Prod.xcscheme new file mode 100644 index 0000000..b39bf6c --- /dev/null +++ b/Projects/Shared/Utill/Utill.xcodeproj/xcshareddata/xcschemes/Utill-Prod.xcscheme @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/Shared/Utill/Utill.xcodeproj/xcshareddata/xcschemes/Utill-Stage.xcscheme b/Projects/Shared/Utill/Utill.xcodeproj/xcshareddata/xcschemes/Utill-Stage.xcscheme new file mode 100644 index 0000000..541bfc8 --- /dev/null +++ b/Projects/Shared/Utill/Utill.xcodeproj/xcshareddata/xcschemes/Utill-Stage.xcscheme @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/Shared/Utill/Utill.xcodeproj/xcshareddata/xcschemes/Utill.xcscheme b/Projects/Shared/Utill/Utill.xcodeproj/xcshareddata/xcschemes/Utill.xcscheme new file mode 100644 index 0000000..a7a0f6e --- /dev/null +++ b/Projects/Shared/Utill/Utill.xcodeproj/xcshareddata/xcschemes/Utill.xcscheme @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/Shared/Utill/UtillTests/Sources/Test.swift b/Projects/Shared/Utill/UtillTests/Sources/Test.swift new file mode 100644 index 0000000..a9c810e --- /dev/null +++ b/Projects/Shared/Utill/UtillTests/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/README.md b/README.md index f59c4a5..6926b59 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,18 @@ -# BookSeries -내일배움 캠프 책시리즈 과제 +# 📚 BookSeries - Harry Potter Series App -내일배움 캠프 3주차 앱 개발 기초 과제 +> **내일배움 캠프 iOS 개발 과제** +> Clean Architecture와 TCA를 활용한 해리포터 시리즈 정보 앱 -이 저장소는 Swift 문법 학습을 위해 작성된 과제 코드와 컨벤션을 포함하고 있습니다. -코드를 작성할 때는 **컨벤션**과 **Git 전략**을 준수하며, 협업 시 일관된 개발 환경을 유지하는 것을 목표로 합니다. +해리포터 7부작의 상세 정보를 제공하는 iOS 애플리케이션입니다. +Clean Architecture 기반의 모듈화된 구조와 Composable Architecture(TCA)를 사용하여 안정적이고 확장 가능한 앱을 구현했습니다. + +## 주요 기능 + +- **해리포터 시리즈 탐색**: 7권의 책 정보를 시리즈 버튼으로 쉽게 전환 +- **반응형 UI**: 기기 회전에 대응하는 적응형 레이아웃 +- **스켈레톤 로딩**: 부드러운 로딩 경험 제공 +- **요약 토글**: 책 요약을 펼치고 접을 수 있는 인터랙티브 UI +- **종합 테스트**: Unit Test, UI Test로 안정성 보장 --- @@ -43,3 +51,196 @@ 일관된 커밋 메시지를 작성하기 위한 가이드입니다. --- + + +## 🏗 프로젝트 아키텍처 + +### Clean Architecture + TCA +``` +📱 Presentation Layer + ├── BookListViewController # TCA Store 연결 + ├── BookListView # UI 컴포넌트 조립 + └── Components/ # 재사용 가능한 UI 컴포넌트 + ├── SeriesButtonsView # 시리즈 선택 버튼 (기기 회전 대응) + ├── BookCardView # 책 정보 카드 + ├── BookDetailsView # 상세 정보 (요약 토글) + └── ChaptersView # 목차 리스트 + +🧠 Domain Layer + ├── UseCase/ # 비즈니스 로직 + │ ├── BookListUseCaseImpl + │ └── SummaryPersistenceUseCaseImpl + └── Model/ # 도메인 엔티티 + ├── Book # 책 정보 모델 + └── BookDisplayData # UI 표시용 데이터 + +💾 Data Layer + ├── Repository/ # 데이터 소스 추상화 + │ ├── BookListRepositoryImpl + │ └── SummaryPersistenceRepositoryImpl + └── Service/ # JSON 파일 읽기 + └── JSONManager + +🔧 Infrastructure + ├── Network/ # 네트워크 설정 + ├── DesignSystem/ # 디자인 토큰, 공통 UI + └── Shared/ # 유틸리티, 확장 +``` + +### 모듈 구조 +``` +BookSeries/ +├── Workspace.swift +├── Projects/ +│ ├── App/ # 앱 진입점 & DI 설정 +│ ├── Presentation/ # UI Layer (TCA) +│ ├── Core/ +│ │ ├── Domain/ # UseCase, Model, Interface +│ │ ├── Data/ # Repository, Model 구현 +│ │ └── Network/ # Service, JSONManager +│ └── Shared/ +│ ├── DesignSystem/ # BaseView, 컬러, 폰트 +│ ├── ThirdParty/ # TCA, SnapKit, Then 등 +│ └── Util/ # 공통 유틸리티 +└── Tuist/ # 프로젝트 설정 +``` + +## 🚀 시작하기 + +### 필수 요구사항 +- iOS 17.0+ +- Xcode 15.0+ +- Swift 5.9+ +- Tuist 4.50+ + +### 개발환경 설정 +```bash +# Tuist 설치 (Homebrew) +brew install tuist + +# 의존성 및 플러그인 설치 +tuist up + +# 환경 검증 +tuist doctor +``` + +### 프로젝트 생성 및 실행 +```bash +# Xcode 프로젝트 생성 +tuist generate + +# 빌드 및 실행 +tuist build +open BookSeries.xcworkspace +``` + + +## 주요 기술 스택 + +### 아키텍처 & 상태 관리 +- ** Clean Architecture**: 레이어 분리로 유지보수성 향상 +- ** TCA (Composable Architecture)**: 단방향 데이터 플로우 +- ** Dependency Injection**: 의존성 주입으로 테스트 용이성 확보 + +### UI & 레이아웃 +- ** SnapKit**: AutoLayout DSL +- ** Then**: 선언적 UI 구성 +- ** BaseView**: 공통 UI 컴포넌트 아키텍처 +- ** Adaptive Layout**: 기기 회전 대응 반응형 UI + +### 데이터 & 네트워킹 +- ** JSONManager**: 로컬 JSON 파일 파싱 +- ** Repository Pattern**: 데이터 소스 추상화 +- ** UseCase Pattern**: 데이터 소스 추상화 +- ** UserDefaults**: 요약 펼침 상태 지속성 + +## 🎯 핵심 구현 기능 + +### 1. **반응형 시리즈 버튼** +```swift +// SeriesButtonsView - 기기 회전 대응 +private func updateLayoutForOrientation() { + let availableWidth = frame.width + let minTotalWidth = totalButtonsWidth + spacing + + if minTotalWidth <= availableWidth { + // 중앙 정렬 + seriesScrollView.isScrollEnabled = false + seriesButtonStack.distribution = .equalSpacing + } else { + // 스크롤 활성화 + seriesScrollView.isScrollEnabled = true + } +} +``` + +### 2. **TCA 상태 관리** +```swift +// BookList Reducer - 단방향 데이터 플로우 +public struct BookList: Reducer { + public struct State { + var book: [Book] = [] + var selectedBookIndex: Int = 0 + var displayData: BookDisplayData? + var isLoading: Bool = false + } + + public enum Action { + case view(ViewAction) + case async(AsyncAction) + } +} +``` + +### 3. **의존성 주입** +```swift +// Repository Factory Pattern +extension RepositoryModuleFactory { + func resolve() -> BookListRepositoryInterface { + return BookListRepositoryImpl(service: JSONManager()) + } +} +``` +## 📸 앱 스크린샷 + +| 메인 화면 | 시리즈 전환 | 요약 펼치기 | +|:---:|:---:|:---:| +| ![메인](docs/screenshots/main.png) | ![시리즈](docs/screenshots/series.png) | ![요약](docs/screenshots/summary.png) | + +## 🔧 개발 도구 & 설정 + +### Tuist 설정 +```swift +// Workspace.swift +let workspace = Workspace( + name: "BookSeries", + projects: ["Projects/**"] +) + +// 모듈별 독립적인 빌드 설정 +// 의존성 그래프 최적화 +``` + +### 폴더 구조 가이드 +``` +📁 BookList/ +├── 📄 BookListViewController.swift # TCA Store 연결점 +├── 📄 BookListView.swift # 메인 UI 조립 +├── 📄 BookList.swift # TCA Reducer +├── 📁 View/Components/ # 재사용 컴포넌트 +│ ├── 📄 SeriesButtonsView.swift +│ ├── 📄 BookCardView.swift +│ └── 📄 BookDetailsView.swift +└── 📁 Coordinator/ # 화면 전환 로직 +``` + +## 📚 참고 자료 + +- [Clean Architecture (Uncle Bob)](https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html) +- [Composable Architecture](https://github.com/pointfreeco/swift-composable-architecture) +- [Tuist Documentation](https://docs.tuist.io/) +- [SnapKit Layout Guide](https://snapkit.github.io/SnapKit/) + +--- + diff --git a/Tuist.swift b/Tuist.swift new file mode 100644 index 0000000..5b16bc8 --- /dev/null +++ b/Tuist.swift @@ -0,0 +1,15 @@ +import ProjectDescription + +let tuist = Tuist( + project: .tuist( + compatibleXcodeVersions: .all, + swiftVersion: .some("6.0.0"), + plugins: [ + .local(path: .relativeToRoot("Plugins/ProjectTemplatePlugin")), + .local(path: .relativeToRoot("Plugins/DependencyPackagePlugin")), + .local(path: .relativeToRoot("Plugins/DependencyPlugin")), + ], + generationOptions: .options(), + installOptions: .options() + ) +) diff --git a/Tuist/Package.resolved b/Tuist/Package.resolved new file mode 100644 index 0000000..be9825f --- /dev/null +++ b/Tuist/Package.resolved @@ -0,0 +1,168 @@ +{ + "originHash" : "75cda85470a4a9f57d7d301969afaf4fd5564a2166ce697ef8f07369fe20910d", + "pins" : [ + { + "identity" : "combine-schedulers", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/combine-schedulers", + "state" : { + "revision" : "5928286acce13def418ec36d05a001a9641086f2", + "version" : "1.0.3" + } + }, + { + "identity" : "dicontainer", + "kind" : "remoteSourceControl", + "location" : "https://github.com/Roy-wonji/DiContainer.git", + "state" : { + "branch" : "main", + "revision" : "85b375b4b11edaf15528f45de9a4c04eb98fc965" + } + }, + { + "identity" : "logmacro", + "kind" : "remoteSourceControl", + "location" : "https://github.com/Roy-wonji/LogMacro.git", + "state" : { + "revision" : "b3925408303ea8efa580112131d7118b09e102d1", + "version" : "1.1.0" + } + }, + { + "identity" : "snapkit", + "kind" : "remoteSourceControl", + "location" : "https://github.com/SnapKit/SnapKit.git", + "state" : { + "revision" : "2842e6e84e82eb9a8dac0100ca90d9444b0307f4", + "version" : "5.7.1" + } + }, + { + "identity" : "swift-case-paths", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/swift-case-paths", + "state" : { + "revision" : "9810c8d6c2914de251e072312f01d3bf80071852", + "version" : "1.7.1" + } + }, + { + "identity" : "swift-clocks", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/swift-clocks", + "state" : { + "revision" : "cc46202b53476d64e824e0b6612da09d84ffde8e", + "version" : "1.0.6" + } + }, + { + "identity" : "swift-collections", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-collections", + "state" : { + "revision" : "8c0c0a8b49e080e54e5e328cc552821ff07cd341", + "version" : "1.2.1" + } + }, + { + "identity" : "swift-composable-architecture", + "kind" : "remoteSourceControl", + "location" : "http://github.com/pointfreeco/swift-composable-architecture", + "state" : { + "revision" : "76c4411e02cc7768a3f27ca058bd2143c342e5b2", + "version" : "1.18.0" + } + }, + { + "identity" : "swift-concurrency-extras", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/swift-concurrency-extras", + "state" : { + "revision" : "5a3825302b1a0d744183200915a47b508c828e6f", + "version" : "1.3.2" + } + }, + { + "identity" : "swift-custom-dump", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/swift-custom-dump", + "state" : { + "revision" : "82645ec760917961cfa08c9c0c7104a57a0fa4b1", + "version" : "1.3.3" + } + }, + { + "identity" : "swift-dependencies", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/swift-dependencies", + "state" : { + "revision" : "a501eebe552fd23691c560adf474fca2169ad8aa", + "version" : "1.9.4" + } + }, + { + "identity" : "swift-identified-collections", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/swift-identified-collections", + "state" : { + "revision" : "322d9ffeeba85c9f7c4984b39422ec7cc3c56597", + "version" : "1.1.1" + } + }, + { + "identity" : "swift-navigation", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/swift-navigation", + "state" : { + "revision" : "6b7f44d218e776bb7a5246efb940440d57c8b2cf", + "version" : "2.4.2" + } + }, + { + "identity" : "swift-perception", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/swift-perception", + "state" : { + "revision" : "d924c62a70fca5f43872f286dbd7cef0957f1c01", + "version" : "1.6.0" + } + }, + { + "identity" : "swift-sharing", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/swift-sharing", + "state" : { + "revision" : "aaf605733bd93126d1a3658b4021146d95c94cb6", + "version" : "2.7.3" + } + }, + { + "identity" : "swift-syntax", + "kind" : "remoteSourceControl", + "location" : "https://github.com/apple/swift-syntax.git", + "state" : { + "revision" : "0687f71944021d616d34d922343dcef086855920", + "version" : "600.0.1" + } + }, + { + "identity" : "then", + "kind" : "remoteSourceControl", + "location" : "https://github.com/Roy-wonji/Then", + "state" : { + "revision" : "e421a7b3440a271834337694e6050133a3958bc7", + "version" : "2.7.0" + } + }, + { + "identity" : "xctest-dynamic-overlay", + "kind" : "remoteSourceControl", + "location" : "https://github.com/pointfreeco/xctest-dynamic-overlay", + "state" : { + "revision" : "b2ed9eabefe56202ee4939dd9fc46b6241c88317", + "version" : "1.6.1" + } + } + ], + "version" : 3 +} diff --git a/Tuist/Package.swift b/Tuist/Package.swift new file mode 100644 index 0000000..188c913 --- /dev/null +++ b/Tuist/Package.swift @@ -0,0 +1,26 @@ +// swift-tools-version: 6.0 +import PackageDescription + +#if TUIST + import struct ProjectDescription.PackageSettings + + let packageSettings = PackageSettings( + productTypes: [ + + : + ] + ) +#endif + +let package = Package( + name: "BookSeries", + dependencies: [ + .package(url: "http://github.com/pointfreeco/swift-composable-architecture", exact: "1.18.0"), + .package(url: "https://github.com/Roy-wonji/DiContainer.git", branch: "main"), +// .package(url: "https://github.com/layoutBox/FlexLayout.git", from: "2.2.2"), +// .package(url: "https://github.com/layoutBox/PinLayout", from: "1.10.6"), + .package(url: "https://github.com/SnapKit/SnapKit.git", from: "5.7.1"), + .package(url: "https://github.com/Roy-wonji/Then", from: "2.7.0"), + .package(url: "https://github.com/Roy-wonji/LogMacro.git", from: "1.1.0") + ] +) diff --git a/Tuist/Templates/DemoModule/Assets.xcassets/AppIcon.appiconset/Contents.json b/Tuist/Templates/DemoModule/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000..9221b9b --- /dev/null +++ b/Tuist/Templates/DemoModule/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,98 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "60x60" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "60x60" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "83.5x83.5" + }, + { + "idiom" : "ios-marketing", + "scale" : "1x", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Tuist/Templates/DemoModule/Assets.xcassets/Contents.json b/Tuist/Templates/DemoModule/Assets.xcassets/Contents.json new file mode 100644 index 0000000..73c0059 --- /dev/null +++ b/Tuist/Templates/DemoModule/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Tuist/Templates/DemoModule/DemoModule.swift b/Tuist/Templates/DemoModule/DemoModule.swift new file mode 100644 index 0000000..f513953 --- /dev/null +++ b/Tuist/Templates/DemoModule/DemoModule.swift @@ -0,0 +1,85 @@ +// +// DemoModule.swift +// Templates +// +// Created by 서원지 on 1/14/24. +// + +import Foundation +import ProjectDescription + + +let demoModuleLayer = Template.Attribute.required("layer") +let demoModuleName = Template.Attribute.required("name") +let demoModuleAuthor: Template.Attribute = .required("author") +let demoModuleCurrentDate: Template.Attribute = .optional("currentDate", default: demoDefaultDate) +let demoModuleYear: Template.Attribute = .optional("year", default: demoDefaultYear) + + +let deomoModuletemplate = Template( + description: "A template for a new modules", + attributes: [ +// path, + demoModuleLayer, + demoModuleName, + demoModuleAuthor, + demoModuleCurrentDate, + demoModuleYear + ], + items: DemoModuleTemplate.allCases.map { $0.item } + +) + + + +enum DemoModuleTemplate: CaseIterable { + case appFile + case project + case baseFile + case testProject + case resources + + var item: Template.Item { + switch self { + case .appFile: + return .file(path: .demoBasePath + "/Sources/Application/demoApplication.swift", templatePath: "demoApplication.stencil") + case .project: + return .file(path: .demoBasePath + "/Project.swift", templatePath: "Project.stencil") + case .baseFile: + return .file(path: .demoBasePath + "/Sources/Base.swift", templatePath: "base.stencil") + case .testProject: + return .file(path: .demoTestBasePath + "/Sources/Test.swift", templatePath: "test.stencil") + case .resources: + return .directory(path: .demoBasePath + "Resources/Assets.xcassets" , sourcePath: "Assets.xcassets") + } + } +} + +extension String { + static var demoBasePath: Self { + return "Projects/\(demoModuleLayer)/\(demoModuleName)" + } + + static var demoTestBasePath: Self { + return "Projects/\(demoModuleLayer)/\(demoModuleName)/\(demoModuleName)Tests" + } + + static var assetBasePath: Self { + return "Projects/\(demoModuleLayer)/\(demoModuleName)/" + } +} + + +var demoDefaultDate: Template.Attribute.Value { + let today = Date() + let formatter = DateFormatter() + formatter.dateFormat = "yyyy/MM/dd" + let formattedDate = formatter.string(from: today) + return .string(formattedDate) +} + +var demoDefaultYear: Template.Attribute.Value { + let dateFormatter = DateFormatter() + dateFormatter.dateFormat = "yyyy" + return .string(dateFormatter.string(from: Date())) +} diff --git a/Tuist/Templates/DemoModule/Project.stencil b/Tuist/Templates/DemoModule/Project.stencil new file mode 100644 index 0000000..d2e0359 --- /dev/null +++ b/Tuist/Templates/DemoModule/Project.stencil @@ -0,0 +1,21 @@ +import Foundation +import ProjectDescription +import MyPlugin + +let localHelper = LocalHelper(name: "MyPlugin") + +let project = Project.makeAppModule( +name: "{{ name }}", +bundleId: .appBundleID(name: ".{{name}}"), +product: .staticFramework, +settings: .appDemoSetting, +dependencies: [ + .Core(implements: .Core), + .Shared(implements: .Shareds), + .Networking(implements: .Networkings) +], +sources: ["Sources/**"], +resources: ["Resources/**"], +entitlements: .file(path: "Entitlements/BeatMasterDemo.entitlements") + +) diff --git a/Tuist/Templates/DemoModule/base.stencil b/Tuist/Templates/DemoModule/base.stencil new file mode 100644 index 0000000..1b2680d --- /dev/null +++ b/Tuist/Templates/DemoModule/base.stencil @@ -0,0 +1,22 @@ +// +// base.swift +// BeatMaster +// +// Created by {{ author }} on {{ currentDate }} +// Copyright © {{ year }} Team.hae.jo, 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/Tuist/Templates/DemoModule/demoApplication.stencil b/Tuist/Templates/DemoModule/demoApplication.stencil new file mode 100644 index 0000000..419885e --- /dev/null +++ b/Tuist/Templates/DemoModule/demoApplication.stencil @@ -0,0 +1,19 @@ +// +// demoApplication.stencil.swift +// BeatMaster +// +// Created by {{ author }} on {{ currentDate }} +// Copyright © {{ year }} Team.hae.jo , Ltd. All rights reserved. +// + +import SwiftUI + + +@main +struct {{ name }}: App { + var body: some Scene { + WindowGroup { + ContentView() + } + } +} diff --git a/Tuist/Templates/DemoModule/test.stencil b/Tuist/Templates/DemoModule/test.stencil new file mode 100644 index 0000000..105b9d6 --- /dev/null +++ b/Tuist/Templates/DemoModule/test.stencil @@ -0,0 +1,8 @@ +// +// base.swift +// BeatMaster +// +// Created by {{ author }} on {{ currentDate }} +// Copyright © {{ year }} Team.hae.jo , Ltd. All rights reserved. +// + diff --git a/Tuist/Templates/Module/Module.swift b/Tuist/Templates/Module/Module.swift new file mode 100644 index 0000000..8063d01 --- /dev/null +++ b/Tuist/Templates/Module/Module.swift @@ -0,0 +1,77 @@ +// +// Module.swift +// Manifests +// +// Created by 서원지 on 10/31/23. +// + +import ProjectDescription +import Foundation + +let layer = Template.Attribute.required("layer") +let name = Template.Attribute.required("name") +let author: Template.Attribute = .required("author") +let currentDate: Template.Attribute = .optional("currentDate", default: defaultDate) +let year: Template.Attribute = .optional("year", default: defaultYear) + +let template = Template( + description: "A template for a new modules", + attributes: [ +// path, + layer, + name, + author, + currentDate, + year + ], + items: ModuleTemplate.allCases.map { $0.item } + +) + + +enum ModuleTemplate: CaseIterable { + case project + case baseFile + case testProject + + var item: Template.Item { + switch self { + case .project: + return .file(path: .basePath + "/Project.swift", templatePath: "Project.stencil") + + case .baseFile: + return .file(path: .basePath + "/Sources/Base.swift", templatePath: "base.stencil") + + case .testProject: + return .file(path: .testBasePath + "/Sources/Test.swift", templatePath: "test.stencil") + + } + } +} + + +extension String { + static var basePath: Self { + return "Projects/\(layer)/\(name)" + } + static var testBasePath: Self { + return "Projects/\(layer)/\(name)/\(name)Tests" + } +} + + +var defaultDate: Template.Attribute.Value { + let today = Date() + let formatter = DateFormatter() + formatter.dateFormat = "yyyy/MM/dd" + let formattedDate = formatter.string(from: today) + return .string(formattedDate) +} + +var defaultYear: Template.Attribute.Value { + let dateFormatter = DateFormatter() + dateFormatter.dateFormat = "yyyy" + return .string(dateFormatter.string(from: Date())) +} + + diff --git a/Tuist/Templates/Module/Project.stencil b/Tuist/Templates/Module/Project.stencil new file mode 100644 index 0000000..dcb057e --- /dev/null +++ b/Tuist/Templates/Module/Project.stencil @@ -0,0 +1,17 @@ +import Foundation +import ProjectDescription +import DependencyPlugin +import ProjectTemplatePlugin +import ProjectTemplatePlugin +import DependencyPackagePlugin + +let project = Project.makeAppModule( + name: "{{ name }}", + bundleId: .appBundleID(name: ".{{name}}"), + product: .staticFramework, + settings: .settings(), + dependencies: [ + + ], + sources: ["Sources/**"] +) diff --git a/Tuist/Templates/Module/base.stencil b/Tuist/Templates/Module/base.stencil new file mode 100644 index 0000000..22a6997 --- /dev/null +++ b/Tuist/Templates/Module/base.stencil @@ -0,0 +1,22 @@ +// +// base.swift +// DDDAttendance. +// +// Created by {{ author }} on {{ currentDate }} +// Copyright © {{ year }} 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/Tuist/Templates/Module/test.stencil b/Tuist/Templates/Module/test.stencil new file mode 100644 index 0000000..9f5b457 --- /dev/null +++ b/Tuist/Templates/Module/test.stencil @@ -0,0 +1,8 @@ +// +// base.swift +// DDDAttendance +// +// Created by {{ author }} on {{ currentDate }} +// Copyright © {{ year }} DDD , Ltd. All rights reserved. +// + diff --git a/TuistTool.swift b/TuistTool.swift new file mode 100644 index 0000000..7ec066d --- /dev/null +++ b/TuistTool.swift @@ -0,0 +1,263 @@ +// +// tuisttool.swift +// + +import Foundation + +@discardableResult +func run(_ command: String, arguments: [String] = []) -> Int32 { + let process = Process() + process.executableURL = URL(fileURLWithPath: "/usr/bin/env") + process.arguments = [command] + arguments + process.standardOutput = FileHandle.standardOutput + process.standardError = FileHandle.standardError + do { + try process.run() + process.waitUntilExit() + return process.terminationStatus + } catch { + print("❌ 실행 실패: \(error)") + return -1 + } +} + +func runCapture(_ command: String, arguments: [String] = []) throws -> String { + let process = Process() + let pipe = Pipe() + process.executableURL = URL(fileURLWithPath: "/usr/bin/env") + process.arguments = [command] + arguments + process.standardOutput = pipe + try process.run() + let data = pipe.fileHandleForReading.readDataToEndOfFile() + return String(decoding: data, as: UTF8.self).trimmingCharacters(in: .whitespacesAndNewlines) +} + +func prompt(_ message: String) -> String { + print("\(message): ", terminator: "") + return readLine()?.trimmingCharacters(in: .whitespacesAndNewlines) ?? "" +} + +// MARK: - Tuist 명령어 +func generate() { setenv("TUIST_ROOT_DIR", FileManager.default.currentDirectoryPath, 1); run("tuist", arguments: ["generate"]) } + +func fetch() { run("tuist", arguments: ["fetch"]) } +func build() { clean(); fetch(); generate() } +func edit() { run("tuist", arguments: ["edit"]) } +func clean() { run("tuist", arguments: ["clean"]) } +func install() { run("tuist", arguments: ["install"]) } +func cache() { run("tuist", arguments: ["cache", "DDDAttendance"]) } +func reset() { + print("🧹 캐시 및 로컬 빌드 정리 중...") + run("rm", arguments: ["-rf", "\(NSHomeDirectory())/Library/Caches/Tuist"]) + run("rm", arguments: ["-rf", "\(NSHomeDirectory())/Library/Developer/Xcode/DerivedData"]) + run("rm", arguments: ["-rf", ".tuist", ".build"]) + fetch(); generate() +} + +// MARK: - Parsers (Modules.swift / SPM 목록에서 자동 파싱) +func availableModuleTypes() -> [String] { + let filePath = "Plugins/DependencyPlugin/ProjectDescriptionHelpers/TargetDependency+Module/Modules.swift" + guard let content = try? String(contentsOfFile: filePath, encoding: .utf8) else { return [] } + let pattern = "enum (\\w+):" + let regex = try? NSRegularExpression(pattern: pattern) + let matches = regex?.matches(in: content, range: NSRange(content.startIndex..., in: content)) ?? [] + return matches.compactMap { + guard let range = Range($0.range(at: 1), in: content) else { return nil } + let name = String(content[range]) + return name.hasSuffix("s") ? String(name.dropLast()) : name + } +} + +func parseModulesFromFile(keyword: String) -> [String] { + let filePath = "Plugins/DependencyPlugin/ProjectDescriptionHelpers/TargetDependency+Module/Modules.swift" + guard let content = try? String(contentsOfFile: filePath, encoding: .utf8) else { + print("❗️ Modules.swift 파일을 읽을 수 없습니다.") + return [] + } + let pattern = "enum \(keyword).*?\\{([\\s\\S]*?)\\}" + guard let regex = try? NSRegularExpression(pattern: pattern), + let match = regex.firstMatch(in: content, range: NSRange(content.startIndex..., in: content)), + let innerRange = Range(match.range(at: 1), in: content) else { + return [] + } + let innerContent = content[innerRange] + let casePattern = "case (\\w+)" + let caseRegex = try? NSRegularExpression(pattern: casePattern) + let lines = innerContent.components(separatedBy: .newlines) + return lines.compactMap { line in + guard let match = caseRegex?.firstMatch(in: line, range: NSRange(line.startIndex..., in: line)), + let range = Range(match.range(at: 1), in: line) else { return nil } + return String(line[range]) + } +} + +func parseSPMLibraries() -> [String] { + let filePath = "Plugins/DependencyPackagePlugin/ProjectDescriptionHelpers/DependencyPackage/Extension+TargetDependencySPM.swift" + guard let content = try? String(contentsOfFile: filePath, encoding: .utf8) else { + print("❗️ SPM 목록 파일을 읽을 수 없습니다.") + return [] + } + let pattern = "static let (\\w+)" + let regex = try? NSRegularExpression(pattern: pattern) + let lines = content.components(separatedBy: .newlines) + return lines.compactMap { line in + guard let match = regex?.firstMatch(in: line, range: NSRange(line.startIndex..., in: line)), + let range = Range(match.range(at: 1), in: line) else { return nil } + return String(line[range]) + } +} + +// MARK: - registerModule +func registerModule() { + print("\n🚀 새 모듈 등록을 시작합니다.") + let moduleInput = prompt("모듈 이름을 입력하세요 (예: Presentation_Home, Shared_Logger, Domain_Auth 등)") + let moduleName = prompt("생성할 모듈 이름을 입력하세요 (예: Home)") + + var dependencies: [String] = [] + while true { + print("의존성 종류 선택:") + print(" 1) SPM") + print(" 2) 내부 모듈") + print(" 3) 종료") + let choice = prompt("번호 선택") + if choice == "3" { break } + + if choice == "1" { + let options = parseSPMLibraries() + for (i, lib) in options.enumerated() { print(" \(i + 1). \(lib)") } + let selected = Int(prompt("선택할 번호 입력")) ?? 0 + if (1...options.count).contains(selected) { + dependencies.append(".SPM.\(options[selected - 1])") + } + } else if choice == "2" { + let types = availableModuleTypes() + for (i, type) in types.enumerated() { print(" \(i + 1). \(type)") } + let typeIndex = Int(prompt("의존할 모듈 타입 번호 입력")) ?? 0 + guard (1...types.count).contains(typeIndex) else { continue } + let keyword = types[typeIndex - 1] + + let options = parseModulesFromFile(keyword: keyword) + for (i, opt) in options.enumerated() { print(" \(i + 1). \(opt)") } + let moduleIndex = Int(prompt("선택할 번호 입력")) ?? 0 + if (1...options.count).contains(moduleIndex) { + dependencies.append(".\(keyword)(implements: .\(options[moduleIndex - 1]))") + } + } + } + + let author = (try? runCapture("git", arguments: ["config", "--get", "user.name"])) ?? "Unknown" + let formatter = DateFormatter(); formatter.dateFormat = "yyyy-MM-dd" + let currentDate = formatter.string(from: Date()) + + let layer: String = { + let lower = moduleInput.lowercased() + if lower.starts(with: "presentation") { return "Presentation" } + else if lower.starts(with: "shared") { return "Shared" } + else if lower.starts(with: "domain") { return "Core/Domain" } + else if lower.starts(with: "interface"){ return "Core/Interface" } + else if lower.starts(with: "network"){ return "Core/Network" } + else if lower.starts(with: "data") { return "Core/Data" } + else { return "Core" } + }() + + let result = run("tuist", arguments: [ + "scaffold", "Module", + "--layer", layer, + "--name", moduleName, + "--author", author, + "--current-date", currentDate + ]) + + if result == 0 { + let projectFile = "Projects/\(layer)/\(moduleName)/Project.swift" + if var content = try? String(contentsOfFile: projectFile, encoding: .utf8), + let range = content.range(of: "dependencies: [") { + let insertIndex = content.index(after: range.upperBound) + let dependencyList = dependencies.map { " \($0)" }.joined(separator: ",\n") + content.insert(contentsOf: "\n\(dependencyList),", at: insertIndex) + try? content.write(toFile: projectFile, atomically: true, encoding: .utf8) + print("✅ 의존성 추가 완료:\n\(dependencyList)") + } + print("✅ 모듈 생성 완료: Projects/\(layer)/\(moduleName)") + + // ────────────────────────────── + // ✅ Domain 모듈일 경우 Interface 폴더 생성 여부 확인 + if layer == "Core/Domain" { + let askInterface = prompt("이 Domain 모듈에 Interface 폴더를 생성할까요? (y/N)").lowercased() + if askInterface == "y" { + let interfaceDir = "Projects/Core/Domain/\(moduleName)/Interface/Sources" + let baseFilePath = "\(interfaceDir)/Base.swift" + + if !FileManager.default.fileExists(atPath: interfaceDir) { + do { + try FileManager.default.createDirectory(atPath: interfaceDir, withIntermediateDirectories: true, attributes: nil) + print("📂 Interface 폴더 생성 → \(interfaceDir)") + } catch { + print("❌ Interface 폴더 생성 실패: \(error)") + } + } else { + print("ℹ️ Interface 폴더 이미 존재 → 건너뜀") + } + + // Base.swift 생성(없으면) + if !FileManager.default.fileExists(atPath: baseFilePath) { + let baseTemplate = """ + // + // Base.swift + // Domain.\(moduleName).Interface + // + // Created by \(author) on \(currentDate). + // + + import Foundation + + public protocol \(moduleName)Interface { + // TODO: 정의 추가 + } + """ + do { + try baseTemplate.write(toFile: baseFilePath, atomically: true, encoding: .utf8) + print("✅ Base.swift 생성 → \(baseFilePath)") + } catch { + print("❌ Base.swift 생성 실패: \(error)") + } + } else { + print("ℹ️ Base.swift 이미 존재 → 건너뜀") + } + } + } + } else { + print("❌ 모듈 생성 실패") + } +} + +// MARK: - Entrypoint +enum Command: String { + case edit, generate, fetch, build, clean, install, cache, reset, moduleinit +} + +let args = CommandLine.arguments.dropFirst() +guard let cmd = args.first, let command = Command(rawValue: cmd) else { + print(""" + 사용법: + ./tuisttool generate + ./tuisttool build + ./tuisttool cache + ./tuisttool clean + ./tuisttool reset + ./tuisttool moduleinit + """) + exit(1) +} + +switch command { + case .edit: edit() + case .generate: generate() + case .fetch: fetch() + case .build: build() + case .clean: clean() + case .install: install() + case .cache: cache() + case .reset: reset() + case .moduleinit: registerModule() +} diff --git a/WorkSpace.swift b/WorkSpace.swift new file mode 100644 index 0000000..7a9d72d --- /dev/null +++ b/WorkSpace.swift @@ -0,0 +1,17 @@ +// +// WorkSpace.swift +// Manifests +// +// Created by 서원지 on 6/7/24. +// + +import Foundation +import ProjectDescription +import ProjectTemplatePlugin + + +let workspace = Workspace( +name: Project.Environment.appName, +projects: [ + "Projects/**" +]) diff --git a/graph.png b/graph.png new file mode 100644 index 0000000..20b22ec Binary files /dev/null and b/graph.png differ diff --git a/mise.toml b/mise.toml new file mode 100644 index 0000000..ee27ddd --- /dev/null +++ b/mise.toml @@ -0,0 +1,2 @@ +[tools] +tuist = "4.50.2" diff --git a/tuisttool b/tuisttool new file mode 100755 index 0000000..320541f Binary files /dev/null and b/tuisttool differ