diff --git a/Config/Dev.xcconfig b/Config/Dev.xcconfig index 740fe7f..3aceee6 100644 --- a/Config/Dev.xcconfig +++ b/Config/Dev.xcconfig @@ -10,3 +10,4 @@ OTHER_SWIFT_FLAGS[config=STAGE][sdk=*] = $(inherited) -DDEBUG SWIFT_ACTIVE_COMPILATION_CONDITIONS = STAGE BUNDLE_DISPLAY_NAME = Bandscape-Dev +BASE_URL = itunes.apple.com/ diff --git a/Config/Prod.xcconfig b/Config/Prod.xcconfig index 453572a..4709989 100644 --- a/Config/Prod.xcconfig +++ b/Config/Prod.xcconfig @@ -10,5 +10,5 @@ OTHER_SWIFT_FLAGS[config=PROD][sdk=*] = $(inherited) -DPROD SWIFT_ACTIVE_COMPILATION_CONDITIONS = PROD BUNDLE_DISPLAY_NAME = Bandscape - +BASE_URL = itunes.apple.com/ diff --git a/Config/Release.xcconfig b/Config/Release.xcconfig index 8b3850a..c13d898 100644 --- a/Config/Release.xcconfig +++ b/Config/Release.xcconfig @@ -10,7 +10,7 @@ OTHER_SWIFT_FLAGS[config=PROD][sdk=*] = $(inherited) -PROD SWIFT_ACTIVE_COMPILATION_CONDITIONS = PROD BUNDLE_DISPLAY_NAME = Bandscape - +BASE_URL = itunes.apple.com/ diff --git a/Config/Stage.xcconfig b/Config/Stage.xcconfig index 101180d..6899fa3 100644 --- a/Config/Stage.xcconfig +++ b/Config/Stage.xcconfig @@ -10,3 +10,4 @@ OTHER_SWIFT_FLAGS[config=STAGE][sdk=*] = $(inherited) -DDEBUG SWIFT_ACTIVE_COMPILATION_CONDITIONS = STAGE BUNDLE_DISPLAY_NAME = Bandscape-Stage +BASE_URL = itunes.apple.com/ diff --git a/MultiModuleTemplate.xcworkspace/.tuist-generated b/MultiModuleTemplate.xcworkspace/.tuist-generated deleted file mode 100644 index e69de29..0000000 diff --git a/MultiModuleTemplate.xcworkspace/contents.xcworkspacedata b/MultiModuleTemplate.xcworkspace/contents.xcworkspacedata index ad78f04..df47d85 100644 --- a/MultiModuleTemplate.xcworkspace/contents.xcworkspacedata +++ b/MultiModuleTemplate.xcworkspace/contents.xcworkspacedata @@ -59,6 +59,9 @@ + + diff --git a/MultiModuleTemplate.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/MultiModuleTemplate.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings deleted file mode 100644 index 08de0be..0000000 --- a/MultiModuleTemplate.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings +++ /dev/null @@ -1,8 +0,0 @@ - - - - - IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded - - - diff --git a/MusicBandscape.xcworkspace/contents.xcworkspacedata b/MusicBandscape.xcworkspace/contents.xcworkspacedata index 883d4a9..4c532d8 100644 --- a/MusicBandscape.xcworkspace/contents.xcworkspacedata +++ b/MusicBandscape.xcworkspace/contents.xcworkspacedata @@ -59,9 +59,18 @@ + + + + + + + + + + + + + + + + diff --git a/MusicBandscape.xcworkspace/xcshareddata/xcschemes/MultiModuleTemplate-Workspace.xcscheme b/MusicBandscape.xcworkspace/xcshareddata/xcschemes/MultiModuleTemplate-Workspace.xcscheme deleted file mode 100644 index 657701f..0000000 --- a/MusicBandscape.xcworkspace/xcshareddata/xcschemes/MultiModuleTemplate-Workspace.xcscheme +++ /dev/null @@ -1,2209 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/MultiModuleTemplate.xcworkspace/xcshareddata/xcschemes/MultiModuleTemplate-Workspace.xcscheme b/MusicBandscape.xcworkspace/xcshareddata/xcschemes/MusicBandscape-Workspace.xcscheme similarity index 93% rename from MultiModuleTemplate.xcworkspace/xcshareddata/xcschemes/MultiModuleTemplate-Workspace.xcscheme rename to MusicBandscape.xcworkspace/xcshareddata/xcschemes/MusicBandscape-Workspace.xcscheme index 8348fec..9370e75 100644 --- a/MultiModuleTemplate.xcworkspace/xcshareddata/xcschemes/MultiModuleTemplate-Workspace.xcscheme +++ b/MusicBandscape.xcworkspace/xcshareddata/xcschemes/MusicBandscape-Workspace.xcscheme @@ -510,6 +510,76 @@ ReferencedContainer = "container:Projects/Shared/DesignSystem/DesignSystem.xcodeproj"> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -2177,6 +2328,17 @@ ReferencedContainer = "container:Projects/Core/Network/Foundations/Foundations.xcodeproj"> + + + + diff --git a/Plugins/DependencyPlugin/ProjectDescriptionHelpers/TargetDependency+Module/Modules.swift b/Plugins/DependencyPlugin/ProjectDescriptionHelpers/TargetDependency+Module/Modules.swift index 8212eac..387d055 100644 --- a/Plugins/DependencyPlugin/ProjectDescriptionHelpers/TargetDependency+Module/Modules.swift +++ b/Plugins/DependencyPlugin/ProjectDescriptionHelpers/TargetDependency+Module/Modules.swift @@ -22,6 +22,8 @@ public extension ModulePath { enum Presentations: String, CaseIterable { case Presentation case Splash + case Home + case Detail public static let name: String = "Presentation" @@ -69,7 +71,6 @@ public extension ModulePath { case Entity case UseCase case DomainInterface - case QRCode public static let name: String = "Domain" diff --git a/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/Project+Templete/Project+Template.swift b/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/Project+Templete/Project+Template.swift index 40b7754..cd4085e 100644 --- a/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/Project+Templete/Project+Template.swift +++ b/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/Project+Templete/Project+Template.swift @@ -25,7 +25,7 @@ public extension Project { entitlements: ProjectDescription.Entitlements? = nil, schemes: [ProjectDescription.Scheme] = [] ) -> Project { - + let appTarget: Target = .target( name: name, destinations: destinations, @@ -39,7 +39,7 @@ public extension Project { scripts: scripts, dependencies: dependencies ) - + let appProdTarget: Target = .target( name: "\(name)-Prod", destinations: destinations, @@ -53,8 +53,8 @@ public extension Project { scripts: scripts, dependencies: dependencies ) - - + + let appStageTarget: Target = .target( name: "\(name)-Stage", destinations: destinations, @@ -68,8 +68,8 @@ public extension Project { scripts: scripts, dependencies: dependencies ) - - + + let appDevTarget: Target = .target( name: "\(name)-Debug", destinations: destinations, @@ -83,7 +83,7 @@ public extension Project { scripts: scripts, dependencies: dependencies ) - + let appTestTarget : Target = .target( name: "\(name)Tests", destinations: destinations, @@ -94,9 +94,9 @@ public extension Project { sources: ["\(name)Tests/Sources/**"], dependencies: [.target(name: name)] ) - + let targets = [appTarget, appDevTarget, appStageTarget, appProdTarget ,appTestTarget] - + return Project( name: name, options: .options( @@ -109,7 +109,7 @@ public extension Project { schemes: schemes ) } - + static func makeModule( name: String = Environment.appName, bundleId: String, @@ -201,25 +201,36 @@ extension Scheme { } - + public 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) - ) + 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/Setting/Project+Settings.swift b/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/Setting/Project+Settings.swift index 956771a..0cd18e5 100644 --- a/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/Setting/Project+Settings.swift +++ b/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/Setting/Project+Settings.swift @@ -54,50 +54,46 @@ extension Settings { configurations: [ .debug( name: .debug, - settings: - commonSettings( - appName: Project.Environment.appName, - displayName: Project.Environment.appName, - provisioningProfile: "match Development \(Project.Environment.bundlePrefix)", - setSkipInstall: false - ), + 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 - ), + 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 - ), + 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 - ), + settings: commonSettings( + appName: Project.Environment.appProdName, + displayName: Project.Environment.appName, + provisioningProfile: "match AppStore \(Project.Environment.bundlePrefix)", + setSkipInstall: false + ), xcconfig: .path(.prod) ), - - ], defaultSettings: .recommended + ], + defaultSettings: .recommended ) public static func appBaseSetting(appName: String) -> Settings { diff --git a/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/infoPlist/Project+InfoPlist.swift b/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/infoPlist/Project+InfoPlist.swift index 5b66d1a..f3dc340 100644 --- a/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/infoPlist/Project+InfoPlist.swift +++ b/Plugins/ProjectTemplatePlugin/ProjectDescriptionHelpers/infoPlist/Project+InfoPlist.swift @@ -26,6 +26,7 @@ public extension InfoPlist { .setAppUseExemptEncryption(value: false) .setCFBundleVersion(.appBuildVersion()) .setLSRequiresIPhoneOS(true) + .setBaseURL("$(BASE_URL)") .setUIAppFonts(["PretendardVariable.ttf"]) .setUIApplicationSceneManifest([ "UIApplicationSupportsMultipleScenes": true, diff --git a/Projects/App/Derived/InfoPlists/MusicBandscape-Debug-Info.plist b/Projects/App/Derived/InfoPlists/MusicBandscape-Debug-Info.plist index b36811e..e458555 100644 --- a/Projects/App/Derived/InfoPlists/MusicBandscape-Debug-Info.plist +++ b/Projects/App/Derived/InfoPlists/MusicBandscape-Debug-Info.plist @@ -2,6 +2,8 @@ + BASE_URL + $(BASE_URL) CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleExecutable diff --git a/Projects/App/Derived/InfoPlists/MusicBandscape-Info.plist b/Projects/App/Derived/InfoPlists/MusicBandscape-Info.plist index b36811e..e458555 100644 --- a/Projects/App/Derived/InfoPlists/MusicBandscape-Info.plist +++ b/Projects/App/Derived/InfoPlists/MusicBandscape-Info.plist @@ -2,6 +2,8 @@ + BASE_URL + $(BASE_URL) CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleExecutable diff --git a/Projects/App/Derived/InfoPlists/MusicBandscape-Prod-Info.plist b/Projects/App/Derived/InfoPlists/MusicBandscape-Prod-Info.plist index b36811e..e458555 100644 --- a/Projects/App/Derived/InfoPlists/MusicBandscape-Prod-Info.plist +++ b/Projects/App/Derived/InfoPlists/MusicBandscape-Prod-Info.plist @@ -2,6 +2,8 @@ + BASE_URL + $(BASE_URL) CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleExecutable diff --git a/Projects/App/Derived/InfoPlists/MusicBandscape-Stage-Info.plist b/Projects/App/Derived/InfoPlists/MusicBandscape-Stage-Info.plist index b36811e..e458555 100644 --- a/Projects/App/Derived/InfoPlists/MusicBandscape-Stage-Info.plist +++ b/Projects/App/Derived/InfoPlists/MusicBandscape-Stage-Info.plist @@ -2,6 +2,8 @@ + BASE_URL + $(BASE_URL) CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleExecutable diff --git a/Projects/App/MusicBandscape.xcodeproj/project.pbxproj b/Projects/App/MusicBandscape.xcodeproj/project.pbxproj index f872ce4..59cd0fd 100644 --- a/Projects/App/MusicBandscape.xcodeproj/project.pbxproj +++ b/Projects/App/MusicBandscape.xcodeproj/project.pbxproj @@ -7,6 +7,8 @@ objects = { /* Begin PBXBuildFile section */ + 00187AE36AFC9B5FCA21CA2A /* CombineMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9DF508258988278547FE5B80 /* CombineMoya.framework */; }; + 00888A58AFF8D1E20C6378E4 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9667DEBDA963F835C11D7C43 /* Alamofire.framework */; }; 01A76D1DC81101903570C066 /* Sharing2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 231A43872666DF88A28DD747 /* Sharing2.framework */; }; 02999AE872F2D7264BFB9644 /* Shared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D707E92A8606642B65BD396E /* Shared.framework */; }; 03FA1EA594510152A7E37E10 /* AppView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A606187803BB35995C539CBE /* AppView.swift */; }; @@ -17,16 +19,21 @@ 095E1C34AD98B15576EDA183 /* TuistBundle+MusicBandscapeStage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CE5174E23FF503454B351D0 /* TuistBundle+MusicBandscapeStage.swift */; }; 09698CF6617F6A4076D432CB /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 775A68474E15E389ED55BAE0 /* ContentView.swift */; }; 0F0DC4BDAC74D383908779E8 /* ComposableArchitecture.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AE8A6C266799AA0040D02D3C /* ComposableArchitecture.framework */; }; + 0F80058EE9FBCBC7D0F40DA6 /* API.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6917459D148660C9C70CD13A /* API.framework */; }; 103C1E47CE9302D7E2C1E1F6 /* Model.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 413317E40D5AE9F8B00F11B4 /* Model.framework */; }; 1080E68724006109CA5DEF96 /* ConcurrencyExtras.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 91DA118562B109C921D0685F /* ConcurrencyExtras.framework */; }; 109C2F9553C32E40B5FC6653 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03E7BCFCABCE54FB5BF27CCF /* AppDelegate.swift */; }; 112B2AEA816447F6E7DD9FCE /* AppView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A606187803BB35995C539CBE /* AppView.swift */; }; 113B50E4E0C4F8B18AB2FC58 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03E7BCFCABCE54FB5BF27CCF /* AppDelegate.swift */; }; + 119D99F19D1455C10FA8003F /* AsyncMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 480A5664FAB6068DDCE71572 /* AsyncMoya.framework */; }; + 11D46C35D4DA034AC02E0D28 /* Home.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 633D81E49B01245A23526EAA /* Home.framework */; }; 12C97453E70BA04E84FCD72F /* swift-composable-architecture_ComposableArchitecture.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 1D69065C85EC798035AC4AB9 /* swift-composable-architecture_ComposableArchitecture.bundle */; }; 13613CEA220E35AE3D27FDC5 /* RxSwift.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = C13D89327BE43AEDA4158E57 /* RxSwift.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 16CC3434FAD35867903E78F4 /* UIKitNavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D3316577AFAD65218F8A2C92 /* UIKitNavigation.framework */; }; 16DAC66076E00401E1A7E49B /* CasePaths.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C0DDFC2DF9F3C204A6914AC8 /* CasePaths.framework */; }; 17BE53728A8481CC6DB724ED /* AppView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A606187803BB35995C539CBE /* AppView.swift */; }; + 18014DA2EDBE4A0F9214D9C4 /* CombineMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9DF508258988278547FE5B80 /* CombineMoya.framework */; }; + 18577D62D8AB2B6FF61E0DBD /* EventLimiter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 85E5215AD6585588E565D635 /* EventLimiter.framework */; }; 19129F72FC108837445381BD /* DomainInterface.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = B5C65B0CE0DCC55D3B1A5F18 /* DomainInterface.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 19792F6DEC76F6115FB9C648 /* IssueReportingPackageSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B1E7FA98AACEE22BF4820CBB /* IssueReportingPackageSupport.framework */; }; 19899E692BC9EC93748A9E06 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D832A4B430AA3814E6204086 /* Preview Assets.xcassets */; }; @@ -34,12 +41,17 @@ 1D7ECE8ADBFA8C8636FD27A9 /* Perception.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C71784E02676A94DD3F2769F /* Perception.framework */; }; 1D8E8EE85DF455F4FCC9806D /* Extension+AppDIContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C14805FE94EF3765996C07B0 /* Extension+AppDIContainer.swift */; }; 1E414DEBE946F3A1204F1145 /* ComposableArchitecture.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AE8A6C266799AA0040D02D3C /* ComposableArchitecture.framework */; }; + 1E8D45C2A48DEA0B5CBE0E4C /* Detail.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 58B948E83814547DA1AA621F /* Detail.framework */; }; 1F98BA3428887A7F4A0CEA6D /* Dependencies.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B71EAB450CC1B9A4574705B7 /* Dependencies.framework */; }; 1FABFFE76B56EB1D5ADEEDCE /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 775A68474E15E389ED55BAE0 /* ContentView.swift */; }; 207C31F3E6095A4001216DCC /* MusicBandscapeApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA6F3BD01DC326535CC27C0E /* MusicBandscapeApp.swift */; }; 209CFE4298E0ACC900642B63 /* TuistAssets+MusicBandscapeStage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D2D50290E2D6846E7D497B1 /* TuistAssets+MusicBandscapeStage.swift */; }; 20D2E9B74B64938D6530FE3F /* swift-composable-architecture_ComposableArchitecture.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 1D69065C85EC798035AC4AB9 /* swift-composable-architecture_ComposableArchitecture.bundle */; }; + 21F27F18D8004F22E0DD91A4 /* RxMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 395E5488BE9250C59B36DF9C /* RxMoya.framework */; }; 2231692E58FB97F573B4718B /* DependenciesMacros.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E8E7AA4D74461DB96AC2B339 /* DependenciesMacros.framework */; }; + 22902484E3BDBD14FDD2E6CF /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C13D89327BE43AEDA4158E57 /* RxSwift.framework */; }; + 249D8DA61CF53AF69AA4C463 /* API.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6917459D148660C9C70CD13A /* API.framework */; }; + 24F1FEADC3D5EC01CE0491D4 /* Core.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = DDC077BB211E002675BC4ECC /* Core.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 2690A55EF6B269628E8A5E38 /* CustomDump.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 01C16DECD42832FD64B818E8 /* CustomDump.framework */; }; 28AB0A7E3710415E6C2C378B /* Repository.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 411F373429BD20116338B0AA /* Repository.framework */; }; 29345DEC8E3241483FDB996F /* DesignSystem.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = AFB49684525727EFB0970AF8 /* DesignSystem.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; @@ -47,14 +59,18 @@ 2B7D97BA92BDE712CAFBD867 /* IdentifiedCollections.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 42A0EE8840D11F2011CBBE29 /* IdentifiedCollections.framework */; }; 2C5187E0291D57929DD4F836 /* Sharing.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 76A534AB24BB749761EA470B /* Sharing.framework */; }; 2DC88D55883A2BD20D72D963 /* CombineSchedulers.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B9B081EA03877CDCBBF9BE37 /* CombineSchedulers.framework */; }; + 2EB19116E83244076587A072 /* Service.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A2D171B46B205C23D969EB9 /* Service.framework */; }; + 2FAF2D8C0E1DBFAD0A8CFC8C /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B61FCA46004C4BD4749B5256 /* CFNetwork.framework */; }; 30C644F3367299B83A3D96AD /* CustomDump.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 01C16DECD42832FD64B818E8 /* CustomDump.framework */; }; 34AA23EF0FE92343E32207A1 /* InternalCollectionsUtilities.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F1944849178F0F088B629386 /* InternalCollectionsUtilities.framework */; }; + 34B112E33FF22C09C02D3A76 /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C13D89327BE43AEDA4158E57 /* RxSwift.framework */; }; 34FC252CD5691A4DC067D36D /* PerceptionCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7EB317F5B4B2AB2E48EE33CE /* PerceptionCore.framework */; }; 36A6141E92762883CDEDDDD5 /* Extension+AppDIContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = C14805FE94EF3765996C07B0 /* Extension+AppDIContainer.swift */; }; 374EFDD303140699CE46C85F /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 775A68474E15E389ED55BAE0 /* ContentView.swift */; }; 387B8A6781CB3186E2ABEABE /* WeaveDI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0CC6E60F5C37B152D39D3C58 /* WeaveDI.framework */; }; 38A58F2C9825B7715775DD0F /* Sharing1.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D520AFDBB02070A3950E589F /* Sharing1.framework */; }; 38F043BE1981689A9DCC4A13 /* ConcurrencyExtras.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 91DA118562B109C921D0685F /* ConcurrencyExtras.framework */; }; + 3907410A7D8DB8CEE5FBB243 /* Moya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05BEF1E973143D576A633AB8 /* Moya.framework */; }; 396EDF51665172C1BC35775A /* DomainInterface.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = B5C65B0CE0DCC55D3B1A5F18 /* DomainInterface.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 39F585994C9399B7A55F14E0 /* OSLog.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 656A76A3F9531FBAF5913CE9 /* OSLog.framework */; }; 3B58F9E77DB3853AAB3AFBFB /* DIRegistry.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA1091972177A91D9F23CA9F /* DIRegistry.swift */; }; @@ -71,6 +87,7 @@ 44CB53534615ED1E6CA9AF68 /* swift-composable-architecture_ComposableArchitecture.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 1D69065C85EC798035AC4AB9 /* swift-composable-architecture_ComposableArchitecture.bundle */; }; 452E85DC60B4E3609D8707FF /* Clocks.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 26124569BEFB3D3A35E09AFA /* Clocks.framework */; }; 46F287AD07744B435C330C64 /* SwiftUINavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6DFBAD740D0240ED8AB5B996 /* SwiftUINavigation.framework */; }; + 4777A4E62C02F124EF8FE238 /* API.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6917459D148660C9C70CD13A /* API.framework */; }; 47F664E31003FC94E204568D /* ConcurrencyExtras.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 91DA118562B109C921D0685F /* ConcurrencyExtras.framework */; }; 48A20832854C6392C96EACE9 /* Splash.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED7469DE63483013B7B833EC /* Splash.framework */; }; 49DAA98F1E5AD6646FB071EE /* Presentation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C573F4851906C8B99E226721 /* Presentation.framework */; }; @@ -78,7 +95,9 @@ 4D9F32A73B1EFFCB720B4EA9 /* Foundations.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FCB8003953A2A0ECE6821067 /* Foundations.framework */; }; 4DEBECD7775181F7B565FF9A /* DesignSystem.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = AFB49684525727EFB0970AF8 /* DesignSystem.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 4ED6D2374A2EC5623A46C25D /* UIKitNavigationShim.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D006C847C2DA20A43AABF87B /* UIKitNavigationShim.framework */; }; + 532B4DB0CC5C8E7C740EEEA4 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9667DEBDA963F835C11D7C43 /* Alamofire.framework */; }; 53E34108E0045F59D09C7102 /* LogMacro.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F79EEE27CCE4F5746C6818F5 /* LogMacro.framework */; }; + 5577B019AB39BCC38C8E4BAD /* EventLimiter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 85E5215AD6585588E565D635 /* EventLimiter.framework */; }; 56D4728B61D9E85DEC86ACFA /* PerceptionCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7EB317F5B4B2AB2E48EE33CE /* PerceptionCore.framework */; }; 5841FE4CB6F2FB088D9CDB72 /* OSLog.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 656A76A3F9531FBAF5913CE9 /* OSLog.framework */; }; 594804F084FB8691DCDBF19A /* swift-composable-architecture_ComposableArchitecture.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 1D69065C85EC798035AC4AB9 /* swift-composable-architecture_ComposableArchitecture.bundle */; }; @@ -93,11 +112,14 @@ 5DCE878363FD355EBC979C13 /* Networking.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9411676F514298935939D705 /* Networking.framework */; }; 600C241DFD37E58D2FAC1D0C /* IssueReporting.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 511C13A7FBEFC14FAF80CED3 /* IssueReporting.framework */; }; 60ECA104DFE0D556B08C937C /* Shared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D707E92A8606642B65BD396E /* Shared.framework */; }; + 61794716B7B25F2CD961E712 /* Core.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = DDC077BB211E002675BC4ECC /* Core.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 62CA2FBB50D76CCCC2326C7D /* Shared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D707E92A8606642B65BD396E /* Shared.framework */; }; 63B1E6DDF43CB617B800F935 /* MusicBandscapeApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA6F3BD01DC326535CC27C0E /* MusicBandscapeApp.swift */; }; + 66356491F981BF41ED9FCABB /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B61FCA46004C4BD4749B5256 /* CFNetwork.framework */; }; 66AB6A6B941F649DC0799724 /* Networking.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9411676F514298935939D705 /* Networking.framework */; }; 6C10E8D8155EC59D62E04999 /* Sharing1.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D520AFDBB02070A3950E589F /* Sharing1.framework */; }; 6C1155DC97B24373F5613807 /* InternalCollectionsUtilities.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F1944849178F0F088B629386 /* InternalCollectionsUtilities.framework */; }; + 6C303DFB9DE5E8A78376D834 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9667DEBDA963F835C11D7C43 /* Alamofire.framework */; }; 6CCF9792EB2E79424016CA03 /* CombineSchedulers.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B9B081EA03877CDCBBF9BE37 /* CombineSchedulers.framework */; }; 6D9632F0C002E06CCB6E4BC9 /* Splash.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED7469DE63483013B7B833EC /* Splash.framework */; }; 6DA856B174DAA4D26A74F414 /* OrderedCollections.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DFE6209A123984B3049F45D6 /* OrderedCollections.framework */; }; @@ -105,11 +127,18 @@ 6DCFF4C4FEBCF3F5A8AF3378 /* IssueReporting.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 511C13A7FBEFC14FAF80CED3 /* IssueReporting.framework */; }; 6DF4E5A18AA13FC0969E3AF2 /* Perception.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C71784E02676A94DD3F2769F /* Perception.framework */; }; 6EC832D502F6B4E6524AB997 /* TuistAssets+MusicBandscape.swift in Sources */ = {isa = PBXBuildFile; fileRef = B971390A619B2A0D7861BBC7 /* TuistAssets+MusicBandscape.swift */; }; + 6EF65707305D0CB1A1D5D17C /* AsyncMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 480A5664FAB6068DDCE71572 /* AsyncMoya.framework */; }; 6FCF5EB10E9EF8D7C8E92CFA /* DataInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 52627BE6269218B735B5E759 /* DataInterface.framework */; }; + 7055F55BF74FDF32CB3E67DD /* Detail.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 58B948E83814547DA1AA621F /* Detail.framework */; }; + 70A417A983226300E6E2AF70 /* Detail.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 58B948E83814547DA1AA621F /* Detail.framework */; }; + 70F02FEB13D3C312C64B81C0 /* Detail.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 58B948E83814547DA1AA621F /* Detail.framework */; }; 71D5300B4ACA0FCE672D81FA /* SwiftUINavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6DFBAD740D0240ED8AB5B996 /* SwiftUINavigation.framework */; }; + 732A953A5CD41FF771F862D2 /* Core.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DDC077BB211E002675BC4ECC /* Core.framework */; }; 73E75D8C2C3B169D137688EC /* swift-sharing_Sharing.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 4569B0A760683D02BA6841B0 /* swift-sharing_Sharing.bundle */; }; 76DA7F385AA10AD071DB4D95 /* Dependencies.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B71EAB450CC1B9A4574705B7 /* Dependencies.framework */; }; 770AAE48507720E77F803510 /* InternalCollectionsUtilities.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F1944849178F0F088B629386 /* InternalCollectionsUtilities.framework */; }; + 771B500CFACD51F987C52BAE /* Core.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DDC077BB211E002675BC4ECC /* Core.framework */; }; + 77D6191D5726DF9C180A27BA /* Moya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05BEF1E973143D576A633AB8 /* Moya.framework */; }; 78004232F7EEDA3DFAB0882A /* TuistBundle+MusicBandscapeDebug.swift in Sources */ = {isa = PBXBuildFile; fileRef = 253807948382C2A1EC6B46D9 /* TuistBundle+MusicBandscapeDebug.swift */; }; 79FDF888A460382A2E188D72 /* DomainInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B5C65B0CE0DCC55D3B1A5F18 /* DomainInterface.framework */; }; 7A75B60720507B0E0CE0AAE7 /* swift-sharing_Sharing.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 4569B0A760683D02BA6841B0 /* swift-sharing_Sharing.bundle */; }; @@ -121,6 +150,7 @@ 7C7EFF754682FB37B1737CBF /* Clocks.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 26124569BEFB3D3A35E09AFA /* Clocks.framework */; }; 7DE5FCAD228DCAD0626BCF25 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03E7BCFCABCE54FB5BF27CCF /* AppDelegate.swift */; }; 7E4BD95C1835A47936878555 /* DIRegistry.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA1091972177A91D9F23CA9F /* DIRegistry.swift */; }; + 7E5FD26A2C61E4C08F675D5F /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9667DEBDA963F835C11D7C43 /* Alamofire.framework */; }; 7F6A8E4FF734803C883ECA2A /* Alamofire_Alamofire.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 3137B03D6FE498BCE89B5E2A /* Alamofire_Alamofire.bundle */; }; 7F9376AF58E4B6EB42F7A47F /* Clocks.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 26124569BEFB3D3A35E09AFA /* Clocks.framework */; }; 7FC148B306184C007675A9E2 /* DependenciesMacros.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E8E7AA4D74461DB96AC2B339 /* DependenciesMacros.framework */; }; @@ -130,7 +160,9 @@ 848782307FF545C29EEA71EC /* LogMacro.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F79EEE27CCE4F5746C6818F5 /* LogMacro.framework */; }; 84E223E0CB9EA5A910F18B8C /* UIKitNavigationShim.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D006C847C2DA20A43AABF87B /* UIKitNavigationShim.framework */; }; 8503C6FB429209F16F95F286 /* Repository.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 411F373429BD20116338B0AA /* Repository.framework */; }; + 88E75B2B4F5EF77708D49096 /* Home.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 633D81E49B01245A23526EAA /* Home.framework */; }; 88FC846179FBE9E5AFD559FF /* CasePathsCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C14C8BBC1AA0C2769371AC2B /* CasePathsCore.framework */; }; + 8A5898D4E30A48B591EBA05A /* EventLimiter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 85E5215AD6585588E565D635 /* EventLimiter.framework */; }; 8D0164DFA69BB946CF649A88 /* Alamofire_Alamofire.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 3137B03D6FE498BCE89B5E2A /* Alamofire_Alamofire.bundle */; }; 8D303EA61135134B93CA432E /* UIKitNavigationShim.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D006C847C2DA20A43AABF87B /* UIKitNavigationShim.framework */; }; 8F6860F4062E92BCEE77AF3E /* SwiftUINavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6DFBAD740D0240ED8AB5B996 /* SwiftUINavigation.framework */; }; @@ -140,7 +172,9 @@ 93E498020C9BC27AA94EE6BA /* AppReducer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61CEC763095584133896B334 /* AppReducer.swift */; }; 94235C980B9582C523B090A6 /* SwiftNavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1FE28007811CD964F977CC9D /* SwiftNavigation.framework */; }; 94357CA205F16167D1DFD8BC /* UseCase.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8BE0F8B39244CF15BDE3E932 /* UseCase.framework */; }; + 9489F9E763012FFC7B34896D /* AsyncMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 480A5664FAB6068DDCE71572 /* AsyncMoya.framework */; }; 9650B3D8118625AF979BC44C /* Shared.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = D707E92A8606642B65BD396E /* Shared.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 97EB1B35613FD2BD998B1926 /* Home.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 633D81E49B01245A23526EAA /* Home.framework */; }; 9A3E5238D1678C2CC6FD6D74 /* Shared.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = D707E92A8606642B65BD396E /* Shared.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 9B01A55CE2B1E7815AF74165 /* AppReducer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61CEC763095584133896B334 /* AppReducer.swift */; }; 9B116939F500D89073601CCE /* CasePaths.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C0DDFC2DF9F3C204A6914AC8 /* CasePaths.framework */; }; @@ -149,6 +183,7 @@ 9EB7730B1CC8F38F8C67A30B /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03E7BCFCABCE54FB5BF27CCF /* AppDelegate.swift */; }; 9F66597643D9B15E9FE53CEE /* swift-composable-architecture_ComposableArchitecture.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 1D69065C85EC798035AC4AB9 /* swift-composable-architecture_ComposableArchitecture.bundle */; }; A1158C9EF0E46BCF87E13FC4 /* DomainInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B5C65B0CE0DCC55D3B1A5F18 /* DomainInterface.framework */; }; + A1596EB4F873069DBD59FE85 /* Core.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DDC077BB211E002675BC4ECC /* Core.framework */; }; A25532A961ECF73CF77713B9 /* Repository.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 411F373429BD20116338B0AA /* Repository.framework */; }; A2EC191DB6CEE041CCE16542 /* OrderedCollections.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DFE6209A123984B3049F45D6 /* OrderedCollections.framework */; }; A3030DD56A268A76CFA08B5B /* TuistAssets+MusicBandscapeDebug.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3993B75BFDF29111C7AE41F /* TuistAssets+MusicBandscapeDebug.swift */; }; @@ -157,7 +192,10 @@ A3C328894FB4915C5950048C /* XCTestDynamicOverlay.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C27CB3EE673A8884BB3A50EC /* XCTestDynamicOverlay.framework */; }; A641AA89043BB0804B92047C /* CasePathsCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C14C8BBC1AA0C2769371AC2B /* CasePathsCore.framework */; }; A87509248F84AE1D4875D930 /* MusicBandscapeApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA6F3BD01DC326535CC27C0E /* MusicBandscapeApp.swift */; }; + A974B14C3A1D6B7A271D071B /* Service.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A2D171B46B205C23D969EB9 /* Service.framework */; }; ABF2A5EEE254C50344F72337 /* CasePaths.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C0DDFC2DF9F3C204A6914AC8 /* CasePaths.framework */; }; + AC2536418C0DADB608D84032 /* Moya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05BEF1E973143D576A633AB8 /* Moya.framework */; }; + ACDD61A4F6CEB6F6D42562DD /* Service.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A2D171B46B205C23D969EB9 /* Service.framework */; }; AEE3DEE75747C11BC9038499 /* IssueReportingPackageSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B1E7FA98AACEE22BF4820CBB /* IssueReportingPackageSupport.framework */; }; B0451F7BD603A23C1FDA995E /* DomainInterface.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = B5C65B0CE0DCC55D3B1A5F18 /* DomainInterface.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; B2D36260114BA601CD14CC0B /* UIKitNavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D3316577AFAD65218F8A2C92 /* UIKitNavigation.framework */; }; @@ -165,16 +203,20 @@ B3C54C02068B7CB10526A85F /* ComposableArchitecture.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AE8A6C266799AA0040D02D3C /* ComposableArchitecture.framework */; }; B43421DEC28D6C8AF8CB2C02 /* swift-sharing_Sharing.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 4569B0A760683D02BA6841B0 /* swift-sharing_Sharing.bundle */; }; B478121F3DA77608A0BF504C /* RxSwift.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = C13D89327BE43AEDA4158E57 /* RxSwift.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + B4A168D48DED5F717DCD37D4 /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C13D89327BE43AEDA4158E57 /* RxSwift.framework */; }; B5045C3701B4A7AECFA3DC12 /* AppView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A606187803BB35995C539CBE /* AppView.swift */; }; B9C778A6A414D93E55FC56E5 /* Foundations.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FCB8003953A2A0ECE6821067 /* Foundations.framework */; }; BA623B0A43D4FE5778BCD68D /* swift-composable-architecture_ComposableArchitecture.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 1D69065C85EC798035AC4AB9 /* swift-composable-architecture_ComposableArchitecture.bundle */; }; BB18171DC0BE28CB33192C19 /* UseCase.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8BE0F8B39244CF15BDE3E932 /* UseCase.framework */; }; + BB441E033241DCE5B0CEB5D1 /* AsyncMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 480A5664FAB6068DDCE71572 /* AsyncMoya.framework */; }; BBCC2B1F74DE619F2AFF659A /* WeaveDI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0CC6E60F5C37B152D39D3C58 /* WeaveDI.framework */; }; BBEF5FEA4F38D8430CC6638F /* CustomDump.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 01C16DECD42832FD64B818E8 /* CustomDump.framework */; }; BE59704F4E0027E95EBDC94A /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 775A68474E15E389ED55BAE0 /* ContentView.swift */; }; BEDC6CF5CCE457292CCE6AB8 /* CustomDump.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 01C16DECD42832FD64B818E8 /* CustomDump.framework */; }; BF0E68187A602D5E81EE2CED /* OrderedCollections.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DFE6209A123984B3049F45D6 /* OrderedCollections.framework */; }; + C0AD5C8671D79F527F74F98B /* RxMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 395E5488BE9250C59B36DF9C /* RxMoya.framework */; }; C164851C815324F021A2AD90 /* DomainInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B5C65B0CE0DCC55D3B1A5F18 /* DomainInterface.framework */; }; + C1921976063265D696745C41 /* Core.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DDC077BB211E002675BC4ECC /* Core.framework */; }; C1A75A439543DE1C2643BFD6 /* Sharing1.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D520AFDBB02070A3950E589F /* Sharing1.framework */; }; C44ACA93D7619ED35029D8E3 /* MusicBandscapeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D27EAE3B4F4B2B162F1F0721 /* MusicBandscapeTests.swift */; }; C4CDC0E30B1844B4BACD9927 /* OSLog.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 656A76A3F9531FBAF5913CE9 /* OSLog.framework */; }; @@ -183,8 +225,11 @@ C810A7323BADBAF6B396F919 /* Networking.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9411676F514298935939D705 /* Networking.framework */; }; C8C1D8D99D77E35E30306B85 /* IdentifiedCollections.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 42A0EE8840D11F2011CBBE29 /* IdentifiedCollections.framework */; }; C8C56465F11060A83D5D9CA8 /* WeaveDI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0CC6E60F5C37B152D39D3C58 /* WeaveDI.framework */; }; + C92491FC9BC7E28BDB3BDF80 /* Core.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = DDC077BB211E002675BC4ECC /* Core.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; C9D2086529DD7DEB9EDADF2E /* DomainInterface.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = B5C65B0CE0DCC55D3B1A5F18 /* DomainInterface.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; CA421CF5698819BEB2B1A95B /* DataInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 52627BE6269218B735B5E759 /* DataInterface.framework */; }; + CA54D24DDAD4839EF81F2F29 /* Core.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = DDC077BB211E002675BC4ECC /* Core.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + CB606C9185FD7CF9F4BD0C9D /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B61FCA46004C4BD4749B5256 /* CFNetwork.framework */; }; CC03D39B7CE48BE4BB1B48FB /* Sharing.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 76A534AB24BB749761EA470B /* Sharing.framework */; }; CD74C4FA7B9FF93DC62B9F46 /* IdentifiedCollections.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 42A0EE8840D11F2011CBBE29 /* IdentifiedCollections.framework */; }; CE2601525DBFD43B55EA21FF /* ConcurrencyExtras.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 91DA118562B109C921D0685F /* ConcurrencyExtras.framework */; }; @@ -192,6 +237,8 @@ CEBB4CF785BDF0E5FB48996B /* Perception.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C71784E02676A94DD3F2769F /* Perception.framework */; }; CFAB72774713C5A74A88712E /* LogMacro.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F79EEE27CCE4F5746C6818F5 /* LogMacro.framework */; }; D00CC2FBE319C715102EC81A /* IssueReportingPackageSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B1E7FA98AACEE22BF4820CBB /* IssueReportingPackageSupport.framework */; }; + D0CCAAE2C27BDBBC1532989A /* CombineMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9DF508258988278547FE5B80 /* CombineMoya.framework */; }; + D144B3AD310BEF3600826F88 /* Service.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A2D171B46B205C23D969EB9 /* Service.framework */; }; D340899029B0D880BB041CFD /* DIRegistry.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA1091972177A91D9F23CA9F /* DIRegistry.swift */; }; D50007DEBA099BB03470A146 /* TuistAssets+MusicBandscapeProd.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B20A5B048CC92D24837B48D /* TuistAssets+MusicBandscapeProd.swift */; }; D5C60A087093A7288543A24B /* Shared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D707E92A8606642B65BD396E /* Shared.framework */; }; @@ -211,10 +258,12 @@ E40BD2B2AF4EEFCF26ABD48D /* Networking.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9411676F514298935939D705 /* Networking.framework */; }; E43C826A264FCD8A0B8CA776 /* Shared.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = D707E92A8606642B65BD396E /* Shared.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; E571D9E22D19F4C209EFD50A /* DataInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 52627BE6269218B735B5E759 /* DataInterface.framework */; }; + E6037681E50B0836E9286585 /* CombineMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9DF508258988278547FE5B80 /* CombineMoya.framework */; }; E7D17982C8FD721DE74B1ADB /* SwiftNavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1FE28007811CD964F977CC9D /* SwiftNavigation.framework */; }; E82CFB5DEBB5655E13F494ED /* Perception.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C71784E02676A94DD3F2769F /* Perception.framework */; }; E8B2FFA8517FD43B2851135D /* OSLog.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 656A76A3F9531FBAF5913CE9 /* OSLog.framework */; }; EA0DBE74807A5E5BBE7E9BF8 /* Shared.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = D707E92A8606642B65BD396E /* Shared.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + EA1BEDA046EE1B95B2CA9208 /* RxMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 395E5488BE9250C59B36DF9C /* RxMoya.framework */; }; EB356288F593E8D5322C9878 /* Presentation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C573F4851906C8B99E226721 /* Presentation.framework */; }; EC0C91BA77526B95BC789C8C /* swift-sharing_Sharing.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 4569B0A760683D02BA6841B0 /* swift-sharing_Sharing.bundle */; }; ED7A7D511EB1AB13A08B899A /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D832A4B430AA3814E6204086 /* Preview Assets.xcassets */; }; @@ -226,17 +275,24 @@ F07A4351E337D837D6B929DE /* Sharing2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 231A43872666DF88A28DD747 /* Sharing2.framework */; }; F0FB73620EB0C81C8809EE70 /* Presentation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C573F4851906C8B99E226721 /* Presentation.framework */; }; F2F03065DD539FD481A2E12C /* Repository.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 411F373429BD20116338B0AA /* Repository.framework */; }; + F320E7AB7BCBC099003E78CB /* Home.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 633D81E49B01245A23526EAA /* Home.framework */; }; F34EC509A9052BC45B851E55 /* TuistBundle+MusicBandscape.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FAB22CD95B1FF8D294304D1 /* TuistBundle+MusicBandscape.swift */; }; F3A83EDEBA1D690B65AB53C6 /* Alamofire_Alamofire.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 3137B03D6FE498BCE89B5E2A /* Alamofire_Alamofire.bundle */; }; F40275D2E1B44407ED9924D0 /* Model.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 413317E40D5AE9F8B00F11B4 /* Model.framework */; }; F5D07C428EF89713A449C1DB /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0BC0C9BBD68A6C292BD0CB8A /* Assets.xcassets */; }; + F5E2BE71EAA7681F47D661BA /* API.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6917459D148660C9C70CD13A /* API.framework */; }; + F603206E69DAEF2E6DBC60AE /* RxMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 395E5488BE9250C59B36DF9C /* RxMoya.framework */; }; + F6373301C2FBD9BFD7C718F9 /* Moya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05BEF1E973143D576A633AB8 /* Moya.framework */; }; F64B9E2E9C6AE606F25BFC2D /* swift-sharing_Sharing.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 4569B0A760683D02BA6841B0 /* swift-sharing_Sharing.bundle */; }; F692C1C5CCE12F5743214080 /* Alamofire_Alamofire.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 3137B03D6FE498BCE89B5E2A /* Alamofire_Alamofire.bundle */; }; + F69C0CB73F21D42046C3F76C /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C13D89327BE43AEDA4158E57 /* RxSwift.framework */; }; + F6CA52864421691CCB584EC0 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B61FCA46004C4BD4749B5256 /* CFNetwork.framework */; }; F83F3819CB1E0D793A46BDF9 /* swift-composable-architecture_ComposableArchitecture.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 1D69065C85EC798035AC4AB9 /* swift-composable-architecture_ComposableArchitecture.bundle */; }; FBB65C2118A64FCC984E4989 /* swift-sharing_Sharing.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 4569B0A760683D02BA6841B0 /* swift-sharing_Sharing.bundle */; }; FC299174352E0628DF06D433 /* Model.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 413317E40D5AE9F8B00F11B4 /* Model.framework */; }; FC4753E546DC52CCAE6B62E1 /* LogMacro.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F79EEE27CCE4F5746C6818F5 /* LogMacro.framework */; }; FCF374B6FBB610A5B6F12C0E /* IssueReportingPackageSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B1E7FA98AACEE22BF4820CBB /* IssueReportingPackageSupport.framework */; }; + FD87A112CE631BC27D1826CD /* EventLimiter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 85E5215AD6585588E565D635 /* EventLimiter.framework */; }; FE82AE5DC3FFBBA968C01919 /* Model.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 413317E40D5AE9F8B00F11B4 /* Model.framework */; }; FF53B2E5BC9888579E4BA2C8 /* DesignSystem.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = AFB49684525727EFB0970AF8 /* DesignSystem.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; FF97DF9DB347120789D79A07 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0BC0C9BBD68A6C292BD0CB8A /* Assets.xcassets */; }; @@ -259,6 +315,7 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( + 61794716B7B25F2CD961E712 /* Core.framework in Embed Frameworks */, FF53B2E5BC9888579E4BA2C8 /* DesignSystem.framework in Embed Frameworks */, 396EDF51665172C1BC35775A /* DomainInterface.framework in Embed Frameworks */, 13613CEA220E35AE3D27FDC5 /* RxSwift.framework in Embed Frameworks */, @@ -285,6 +342,7 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( + 24F1FEADC3D5EC01CE0491D4 /* Core.framework in Embed Frameworks */, 29345DEC8E3241483FDB996F /* DesignSystem.framework in Embed Frameworks */, B0451F7BD603A23C1FDA995E /* DomainInterface.framework in Embed Frameworks */, B478121F3DA77608A0BF504C /* RxSwift.framework in Embed Frameworks */, @@ -323,6 +381,7 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( + C92491FC9BC7E28BDB3BDF80 /* Core.framework in Embed Frameworks */, 81631FCB891831314EE9F9D7 /* DesignSystem.framework in Embed Frameworks */, C9D2086529DD7DEB9EDADF2E /* DomainInterface.framework in Embed Frameworks */, 411C3359354A01F2DF746588 /* RxSwift.framework in Embed Frameworks */, @@ -359,6 +418,7 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( + CA54D24DDAD4839EF81F2F29 /* Core.framework in Embed Frameworks */, 4DEBECD7775181F7B565FF9A /* DesignSystem.framework in Embed Frameworks */, 19129F72FC108837445381BD /* DomainInterface.framework in Embed Frameworks */, DA0EE7195656474C108C9E75 /* RxSwift.framework in Embed Frameworks */, @@ -372,6 +432,7 @@ /* Begin PBXFileReference section */ 01C16DECD42832FD64B818E8 /* CustomDump.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CustomDump.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 03E7BCFCABCE54FB5BF27CCF /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 05BEF1E973143D576A633AB8 /* Moya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Moya.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 0BC0C9BBD68A6C292BD0CB8A /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 0CC6E60F5C37B152D39D3C58 /* WeaveDI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = WeaveDI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1D69065C85EC798035AC4AB9 /* swift-composable-architecture_ComposableArchitecture.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "swift-composable-architecture_ComposableArchitecture.bundle"; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -381,30 +442,39 @@ 253807948382C2A1EC6B46D9 /* TuistBundle+MusicBandscapeDebug.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistBundle+MusicBandscapeDebug.swift"; sourceTree = ""; }; 26124569BEFB3D3A35E09AFA /* Clocks.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Clocks.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3137B03D6FE498BCE89B5E2A /* Alamofire_Alamofire.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Alamofire_Alamofire.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 395E5488BE9250C59B36DF9C /* RxMoya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RxMoya.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3CE5174E23FF503454B351D0 /* TuistBundle+MusicBandscapeStage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistBundle+MusicBandscapeStage.swift"; sourceTree = ""; }; 3F2D795A0123868CB07940C6 /* MusicBandscape.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MusicBandscape.app; sourceTree = BUILT_PRODUCTS_DIR; }; 411F373429BD20116338B0AA /* Repository.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Repository.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 413317E40D5AE9F8B00F11B4 /* Model.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Model.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 42A0EE8840D11F2011CBBE29 /* IdentifiedCollections.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = IdentifiedCollections.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 4569B0A760683D02BA6841B0 /* swift-sharing_Sharing.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "swift-sharing_Sharing.bundle"; sourceTree = BUILT_PRODUCTS_DIR; }; + 480A5664FAB6068DDCE71572 /* AsyncMoya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AsyncMoya.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 511C13A7FBEFC14FAF80CED3 /* IssueReporting.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = IssueReporting.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 52627BE6269218B735B5E759 /* DataInterface.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DataInterface.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 570A6337715AFB04E4E1D798 /* Prod.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Prod.xcconfig; sourceTree = ""; }; + 58B948E83814547DA1AA621F /* Detail.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Detail.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 5BB2805AC10C551A4BE08A59 /* Stage.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Stage.xcconfig; sourceTree = ""; }; 61CEC763095584133896B334 /* AppReducer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppReducer.swift; sourceTree = ""; }; + 633D81E49B01245A23526EAA /* Home.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Home.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 656A76A3F9531FBAF5913CE9 /* 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; }; + 6917459D148660C9C70CD13A /* API.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = API.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 6DFBAD740D0240ED8AB5B996 /* SwiftUINavigation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftUINavigation.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 76A534AB24BB749761EA470B /* Sharing.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Sharing.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 775A68474E15E389ED55BAE0 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; 796FF69BF9405F4ADE4E81DC /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; 7EB317F5B4B2AB2E48EE33CE /* PerceptionCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PerceptionCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 85990DA767BCC280E4E8B21B /* MusicBandscape-Debug-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "MusicBandscape-Debug-Info.plist"; sourceTree = ""; }; + 85E5215AD6585588E565D635 /* EventLimiter.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = EventLimiter.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 8BE0F8B39244CF15BDE3E932 /* UseCase.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = UseCase.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 91DA118562B109C921D0685F /* ConcurrencyExtras.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ConcurrencyExtras.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9411676F514298935939D705 /* Networking.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Networking.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9667DEBDA963F835C11D7C43 /* Alamofire.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Alamofire.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9A2D171B46B205C23D969EB9 /* Service.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Service.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9B20A5B048CC92D24837B48D /* TuistAssets+MusicBandscapeProd.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistAssets+MusicBandscapeProd.swift"; sourceTree = ""; }; 9BDF2DF7FFEF91EF96175DF4 /* MusicBandscape-Prod-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "MusicBandscape-Prod-Info.plist"; sourceTree = ""; }; 9D2D50290E2D6846E7D497B1 /* TuistAssets+MusicBandscapeStage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistAssets+MusicBandscapeStage.swift"; sourceTree = ""; }; + 9DF508258988278547FE5B80 /* CombineMoya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CombineMoya.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 9E151F04AB4CBB63289F7271 /* MusicBandscape_Prod.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MusicBandscape_Prod.app; sourceTree = BUILT_PRODUCTS_DIR; }; A606187803BB35995C539CBE /* AppView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppView.swift; sourceTree = ""; }; AE8A6C266799AA0040D02D3C /* ComposableArchitecture.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ComposableArchitecture.framework; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -413,6 +483,7 @@ B1E7FA98AACEE22BF4820CBB /* IssueReportingPackageSupport.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = IssueReportingPackageSupport.framework; sourceTree = BUILT_PRODUCTS_DIR; }; B3993B75BFDF29111C7AE41F /* TuistAssets+MusicBandscapeDebug.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistAssets+MusicBandscapeDebug.swift"; sourceTree = ""; }; B5C65B0CE0DCC55D3B1A5F18 /* DomainInterface.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DomainInterface.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B61FCA46004C4BD4749B5256 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; }; B71EAB450CC1B9A4574705B7 /* Dependencies.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Dependencies.framework; sourceTree = BUILT_PRODUCTS_DIR; }; B971390A619B2A0D7861BBC7 /* TuistAssets+MusicBandscape.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistAssets+MusicBandscape.swift"; sourceTree = ""; }; B9B081EA03877CDCBBF9BE37 /* CombineSchedulers.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CombineSchedulers.framework; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -431,6 +502,7 @@ D520AFDBB02070A3950E589F /* Sharing1.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Sharing1.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D707E92A8606642B65BD396E /* Shared.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Shared.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D832A4B430AA3814E6204086 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; }; + DDC077BB211E002675BC4ECC /* Core.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Core.framework; sourceTree = BUILT_PRODUCTS_DIR; }; DFE6209A123984B3049F45D6 /* OrderedCollections.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = OrderedCollections.framework; sourceTree = BUILT_PRODUCTS_DIR; }; E4D5A80744E6B95AD36B124D /* MusicBandscape_Debug.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MusicBandscape_Debug.app; sourceTree = BUILT_PRODUCTS_DIR; }; E5C124EB35DE5EF18DF6A461 /* Dev.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Dev.xcconfig; sourceTree = ""; }; @@ -451,31 +523,44 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 66356491F981BF41ED9FCABB /* CFNetwork.framework in Frameworks */, C4CDC0E30B1844B4BACD9927 /* OSLog.framework in Frameworks */, + 4777A4E62C02F124EF8FE238 /* API.framework in Frameworks */, + 7E5FD26A2C61E4C08F675D5F /* Alamofire.framework in Frameworks */, + 6EF65707305D0CB1A1D5D17C /* AsyncMoya.framework in Frameworks */, ABF2A5EEE254C50344F72337 /* CasePaths.framework in Frameworks */, 88FC846179FBE9E5AFD559FF /* CasePathsCore.framework in Frameworks */, 5C71B8A14F9C6EF22CE73975 /* Clocks.framework in Frameworks */, + D0CCAAE2C27BDBBC1532989A /* CombineMoya.framework in Frameworks */, 3EF7D51083FC1BCFE254FFB4 /* CombineSchedulers.framework in Frameworks */, EE465CD6537FB7197A537CD5 /* ComposableArchitecture.framework in Frameworks */, 1080E68724006109CA5DEF96 /* ConcurrencyExtras.framework in Frameworks */, + A1596EB4F873069DBD59FE85 /* Core.framework in Frameworks */, BBEF5FEA4F38D8430CC6638F /* CustomDump.framework in Frameworks */, 92C8B757E860A286B9534288 /* DataInterface.framework in Frameworks */, 1F98BA3428887A7F4A0CEA6D /* Dependencies.framework in Frameworks */, 7FC148B306184C007675A9E2 /* DependenciesMacros.framework in Frameworks */, + 70F02FEB13D3C312C64B81C0 /* Detail.framework in Frameworks */, 79FDF888A460382A2E188D72 /* DomainInterface.framework in Frameworks */, + 5577B019AB39BCC38C8E4BAD /* EventLimiter.framework in Frameworks */, A32531DFD3EB28748EF73999 /* Foundations.framework in Frameworks */, + 88E75B2B4F5EF77708D49096 /* Home.framework in Frameworks */, C8C1D8D99D77E35E30306B85 /* IdentifiedCollections.framework in Frameworks */, 770AAE48507720E77F803510 /* InternalCollectionsUtilities.framework in Frameworks */, C774659FBB75A2D79F9FBA24 /* IssueReporting.framework in Frameworks */, FCF374B6FBB610A5B6F12C0E /* IssueReportingPackageSupport.framework in Frameworks */, FC4753E546DC52CCAE6B62E1 /* LogMacro.framework in Frameworks */, FE82AE5DC3FFBBA968C01919 /* Model.framework in Frameworks */, + 3907410A7D8DB8CEE5FBB243 /* Moya.framework in Frameworks */, E40BD2B2AF4EEFCF26ABD48D /* Networking.framework in Frameworks */, BF0E68187A602D5E81EE2CED /* OrderedCollections.framework in Frameworks */, 6DF4E5A18AA13FC0969E3AF2 /* Perception.framework in Frameworks */, 56D4728B61D9E85DEC86ACFA /* PerceptionCore.framework in Frameworks */, 5BF20279A167123B42FA7D78 /* Presentation.framework in Frameworks */, 28AB0A7E3710415E6C2C378B /* Repository.framework in Frameworks */, + F603206E69DAEF2E6DBC60AE /* RxMoya.framework in Frameworks */, + 34B112E33FF22C09C02D3A76 /* RxSwift.framework in Frameworks */, + A974B14C3A1D6B7A271D071B /* Service.framework in Frameworks */, 62CA2FBB50D76CCCC2326C7D /* Shared.framework in Frameworks */, 4092C1E5AAB583D68A729F59 /* Sharing.framework in Frameworks */, 38A58F2C9825B7715775DD0F /* Sharing1.framework in Frameworks */, @@ -495,31 +580,44 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + CB606C9185FD7CF9F4BD0C9D /* CFNetwork.framework in Frameworks */, 5841FE4CB6F2FB088D9CDB72 /* OSLog.framework in Frameworks */, + F5E2BE71EAA7681F47D661BA /* API.framework in Frameworks */, + 532B4DB0CC5C8E7C740EEEA4 /* Alamofire.framework in Frameworks */, + 9489F9E763012FFC7B34896D /* AsyncMoya.framework in Frameworks */, DF899AF99ECDC68948EE8159 /* CasePaths.framework in Frameworks */, A641AA89043BB0804B92047C /* CasePathsCore.framework in Frameworks */, 7C7EFF754682FB37B1737CBF /* Clocks.framework in Frameworks */, + E6037681E50B0836E9286585 /* CombineMoya.framework in Frameworks */, 2DC88D55883A2BD20D72D963 /* CombineSchedulers.framework in Frameworks */, B3C54C02068B7CB10526A85F /* ComposableArchitecture.framework in Frameworks */, 47F664E31003FC94E204568D /* ConcurrencyExtras.framework in Frameworks */, + C1921976063265D696745C41 /* Core.framework in Frameworks */, 2690A55EF6B269628E8A5E38 /* CustomDump.framework in Frameworks */, E571D9E22D19F4C209EFD50A /* DataInterface.framework in Frameworks */, 76DA7F385AA10AD071DB4D95 /* Dependencies.framework in Frameworks */, 7C54C84D5960A2D6B9B89B25 /* DependenciesMacros.framework in Frameworks */, + 1E8D45C2A48DEA0B5CBE0E4C /* Detail.framework in Frameworks */, 4D766551F478B2C0EC178C42 /* DomainInterface.framework in Frameworks */, + FD87A112CE631BC27D1826CD /* EventLimiter.framework in Frameworks */, 4D9F32A73B1EFFCB720B4EA9 /* Foundations.framework in Frameworks */, + F320E7AB7BCBC099003E78CB /* Home.framework in Frameworks */, 2B7D97BA92BDE712CAFBD867 /* IdentifiedCollections.framework in Frameworks */, 34AA23EF0FE92343E32207A1 /* InternalCollectionsUtilities.framework in Frameworks */, 600C241DFD37E58D2FAC1D0C /* IssueReporting.framework in Frameworks */, 19792F6DEC76F6115FB9C648 /* IssueReportingPackageSupport.framework in Frameworks */, 848782307FF545C29EEA71EC /* LogMacro.framework in Frameworks */, FC299174352E0628DF06D433 /* Model.framework in Frameworks */, + 77D6191D5726DF9C180A27BA /* Moya.framework in Frameworks */, 66AB6A6B941F649DC0799724 /* Networking.framework in Frameworks */, 3E4A6A42D1187D90A3295DA2 /* OrderedCollections.framework in Frameworks */, E82CFB5DEBB5655E13F494ED /* Perception.framework in Frameworks */, 5C0AC2BF1A2748C2E821D3E3 /* PerceptionCore.framework in Frameworks */, EB356288F593E8D5322C9878 /* Presentation.framework in Frameworks */, 8503C6FB429209F16F95F286 /* Repository.framework in Frameworks */, + EA1BEDA046EE1B95B2CA9208 /* RxMoya.framework in Frameworks */, + 22902484E3BDBD14FDD2E6CF /* RxSwift.framework in Frameworks */, + D144B3AD310BEF3600826F88 /* Service.framework in Frameworks */, D5C60A087093A7288543A24B /* Shared.framework in Frameworks */, 2C5187E0291D57929DD4F836 /* Sharing.framework in Frameworks */, 6C10E8D8155EC59D62E04999 /* Sharing1.framework in Frameworks */, @@ -539,31 +637,44 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + F6CA52864421691CCB584EC0 /* CFNetwork.framework in Frameworks */, E8B2FFA8517FD43B2851135D /* OSLog.framework in Frameworks */, + 0F80058EE9FBCBC7D0F40DA6 /* API.framework in Frameworks */, + 6C303DFB9DE5E8A78376D834 /* Alamofire.framework in Frameworks */, + 119D99F19D1455C10FA8003F /* AsyncMoya.framework in Frameworks */, 9B116939F500D89073601CCE /* CasePaths.framework in Frameworks */, CE6196FADF639EA32E10B3D6 /* CasePathsCore.framework in Frameworks */, 452E85DC60B4E3609D8707FF /* Clocks.framework in Frameworks */, + 18014DA2EDBE4A0F9214D9C4 /* CombineMoya.framework in Frameworks */, 095340E0B267BE3E2F7D4FE5 /* CombineSchedulers.framework in Frameworks */, 1E414DEBE946F3A1204F1145 /* ComposableArchitecture.framework in Frameworks */, CE2601525DBFD43B55EA21FF /* ConcurrencyExtras.framework in Frameworks */, + 732A953A5CD41FF771F862D2 /* Core.framework in Frameworks */, BEDC6CF5CCE457292CCE6AB8 /* CustomDump.framework in Frameworks */, CA421CF5698819BEB2B1A95B /* DataInterface.framework in Frameworks */, 40C0A0B24CAA6F054E2A094D /* Dependencies.framework in Frameworks */, 2231692E58FB97F573B4718B /* DependenciesMacros.framework in Frameworks */, + 7055F55BF74FDF32CB3E67DD /* Detail.framework in Frameworks */, A1158C9EF0E46BCF87E13FC4 /* DomainInterface.framework in Frameworks */, + 8A5898D4E30A48B591EBA05A /* EventLimiter.framework in Frameworks */, 07D03935AC9D779EBDDB65F8 /* Foundations.framework in Frameworks */, + 97EB1B35613FD2BD998B1926 /* Home.framework in Frameworks */, EEF14FFA14ACA3315480F7B3 /* IdentifiedCollections.framework in Frameworks */, 6C1155DC97B24373F5613807 /* InternalCollectionsUtilities.framework in Frameworks */, 6DCFF4C4FEBCF3F5A8AF3378 /* IssueReporting.framework in Frameworks */, D00CC2FBE319C715102EC81A /* IssueReportingPackageSupport.framework in Frameworks */, CFAB72774713C5A74A88712E /* LogMacro.framework in Frameworks */, F40275D2E1B44407ED9924D0 /* Model.framework in Frameworks */, + AC2536418C0DADB608D84032 /* Moya.framework in Frameworks */, C810A7323BADBAF6B396F919 /* Networking.framework in Frameworks */, 6DA856B174DAA4D26A74F414 /* OrderedCollections.framework in Frameworks */, CEBB4CF785BDF0E5FB48996B /* Perception.framework in Frameworks */, B345022AA79812B5088CEAD7 /* PerceptionCore.framework in Frameworks */, F0FB73620EB0C81C8809EE70 /* Presentation.framework in Frameworks */, F2F03065DD539FD481A2E12C /* Repository.framework in Frameworks */, + 21F27F18D8004F22E0DD91A4 /* RxMoya.framework in Frameworks */, + B4A168D48DED5F717DCD37D4 /* RxSwift.framework in Frameworks */, + 2EB19116E83244076587A072 /* Service.framework in Frameworks */, 02999AE872F2D7264BFB9644 /* Shared.framework in Frameworks */, D9520494BF429BCFD8A0202D /* Sharing.framework in Frameworks */, A36A560333CB11B5331C6229 /* Sharing1.framework in Frameworks */, @@ -583,31 +694,44 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 2FAF2D8C0E1DBFAD0A8CFC8C /* CFNetwork.framework in Frameworks */, 39F585994C9399B7A55F14E0 /* OSLog.framework in Frameworks */, + 249D8DA61CF53AF69AA4C463 /* API.framework in Frameworks */, + 00888A58AFF8D1E20C6378E4 /* Alamofire.framework in Frameworks */, + BB441E033241DCE5B0CEB5D1 /* AsyncMoya.framework in Frameworks */, 16DAC66076E00401E1A7E49B /* CasePaths.framework in Frameworks */, 3B8849DE60A8F791F79B5E47 /* CasePathsCore.framework in Frameworks */, 7F9376AF58E4B6EB42F7A47F /* Clocks.framework in Frameworks */, + 00187AE36AFC9B5FCA21CA2A /* CombineMoya.framework in Frameworks */, 6CCF9792EB2E79424016CA03 /* CombineSchedulers.framework in Frameworks */, 0F0DC4BDAC74D383908779E8 /* ComposableArchitecture.framework in Frameworks */, 38F043BE1981689A9DCC4A13 /* ConcurrencyExtras.framework in Frameworks */, + 771B500CFACD51F987C52BAE /* Core.framework in Frameworks */, 30C644F3367299B83A3D96AD /* CustomDump.framework in Frameworks */, 6FCF5EB10E9EF8D7C8E92CFA /* DataInterface.framework in Frameworks */, 9CE6032ED7F870CD6AAB9864 /* Dependencies.framework in Frameworks */, 5BAFDC5C3522526D0D1F77D0 /* DependenciesMacros.framework in Frameworks */, + 70A417A983226300E6E2AF70 /* Detail.framework in Frameworks */, C164851C815324F021A2AD90 /* DomainInterface.framework in Frameworks */, + 18577D62D8AB2B6FF61E0DBD /* EventLimiter.framework in Frameworks */, B9C778A6A414D93E55FC56E5 /* Foundations.framework in Frameworks */, + 11D46C35D4DA034AC02E0D28 /* Home.framework in Frameworks */, CD74C4FA7B9FF93DC62B9F46 /* IdentifiedCollections.framework in Frameworks */, EF25FEDE01BAF331D61CEA7C /* InternalCollectionsUtilities.framework in Frameworks */, 82785D8A8F16F2A670563257 /* IssueReporting.framework in Frameworks */, AEE3DEE75747C11BC9038499 /* IssueReportingPackageSupport.framework in Frameworks */, 53E34108E0045F59D09C7102 /* LogMacro.framework in Frameworks */, 103C1E47CE9302D7E2C1E1F6 /* Model.framework in Frameworks */, + F6373301C2FBD9BFD7C718F9 /* Moya.framework in Frameworks */, 5DCE878363FD355EBC979C13 /* Networking.framework in Frameworks */, A2EC191DB6CEE041CCE16542 /* OrderedCollections.framework in Frameworks */, 1D7ECE8ADBFA8C8636FD27A9 /* Perception.framework in Frameworks */, 34FC252CD5691A4DC067D36D /* PerceptionCore.framework in Frameworks */, 49DAA98F1E5AD6646FB071EE /* Presentation.framework in Frameworks */, A25532A961ECF73CF77713B9 /* Repository.framework in Frameworks */, + C0AD5C8671D79F527F74F98B /* RxMoya.framework in Frameworks */, + F69C0CB73F21D42046C3F76C /* RxSwift.framework in Frameworks */, + ACDD61A4F6CEB6F6D42562DD /* Service.framework in Frameworks */, 60ECA104DFE0D556B08C937C /* Shared.framework in Frameworks */, CC03D39B7CE48BE4BB1B48FB /* Sharing.framework in Frameworks */, C1A75A439543DE1C2643BFD6 /* Sharing1.framework in Frameworks */, @@ -636,6 +760,7 @@ 10F1A87143CFF18DF9910472 /* Frameworks */ = { isa = PBXGroup; children = ( + B61FCA46004C4BD4749B5256 /* CFNetwork.framework */, 656A76A3F9531FBAF5913CE9 /* OSLog.framework */, ); name = Frameworks; @@ -654,25 +779,34 @@ isa = PBXGroup; children = ( 3137B03D6FE498BCE89B5E2A /* Alamofire_Alamofire.bundle */, + 9667DEBDA963F835C11D7C43 /* Alamofire.framework */, + 6917459D148660C9C70CD13A /* API.framework */, + 480A5664FAB6068DDCE71572 /* AsyncMoya.framework */, C0DDFC2DF9F3C204A6914AC8 /* CasePaths.framework */, C14C8BBC1AA0C2769371AC2B /* CasePathsCore.framework */, 26124569BEFB3D3A35E09AFA /* Clocks.framework */, + 9DF508258988278547FE5B80 /* CombineMoya.framework */, B9B081EA03877CDCBBF9BE37 /* CombineSchedulers.framework */, AE8A6C266799AA0040D02D3C /* ComposableArchitecture.framework */, 91DA118562B109C921D0685F /* ConcurrencyExtras.framework */, + DDC077BB211E002675BC4ECC /* Core.framework */, 01C16DECD42832FD64B818E8 /* CustomDump.framework */, 52627BE6269218B735B5E759 /* DataInterface.framework */, B71EAB450CC1B9A4574705B7 /* Dependencies.framework */, E8E7AA4D74461DB96AC2B339 /* DependenciesMacros.framework */, AFB49684525727EFB0970AF8 /* DesignSystem.framework */, + 58B948E83814547DA1AA621F /* Detail.framework */, B5C65B0CE0DCC55D3B1A5F18 /* DomainInterface.framework */, + 85E5215AD6585588E565D635 /* EventLimiter.framework */, FCB8003953A2A0ECE6821067 /* Foundations.framework */, + 633D81E49B01245A23526EAA /* Home.framework */, 42A0EE8840D11F2011CBBE29 /* IdentifiedCollections.framework */, F1944849178F0F088B629386 /* InternalCollectionsUtilities.framework */, 511C13A7FBEFC14FAF80CED3 /* IssueReporting.framework */, B1E7FA98AACEE22BF4820CBB /* IssueReportingPackageSupport.framework */, F79EEE27CCE4F5746C6818F5 /* LogMacro.framework */, 413317E40D5AE9F8B00F11B4 /* Model.framework */, + 05BEF1E973143D576A633AB8 /* Moya.framework */, E4D5A80744E6B95AD36B124D /* MusicBandscape_Debug.app */, 9E151F04AB4CBB63289F7271 /* MusicBandscape_Prod.app */, AF727E6387CE846197F0C57E /* MusicBandscape_Stage.app */, @@ -684,7 +818,9 @@ 7EB317F5B4B2AB2E48EE33CE /* PerceptionCore.framework */, C573F4851906C8B99E226721 /* Presentation.framework */, 411F373429BD20116338B0AA /* Repository.framework */, + 395E5488BE9250C59B36DF9C /* RxMoya.framework */, C13D89327BE43AEDA4158E57 /* RxSwift.framework */, + 9A2D171B46B205C23D969EB9 /* Service.framework */, D707E92A8606642B65BD396E /* Shared.framework */, 76A534AB24BB749761EA470B /* Sharing.framework */, D520AFDBB02070A3950E589F /* Sharing1.framework */, diff --git a/Projects/App/MusicBandscape.xcodeproj/xcshareddata/xcschemes/MusicBandscape.xcscheme b/Projects/App/MusicBandscape.xcodeproj/xcshareddata/xcschemes/MusicBandscape.xcscheme index ac3e523..169c640 100644 --- a/Projects/App/MusicBandscape.xcodeproj/xcshareddata/xcschemes/MusicBandscape.xcscheme +++ b/Projects/App/MusicBandscape.xcodeproj/xcshareddata/xcschemes/MusicBandscape.xcscheme @@ -1,7 +1,7 @@ + version = "1.7"> @@ -20,17 +20,12 @@ ReferencedContainer = "container:MusicBandscape.xcodeproj"> - - - - - + - - + + + + + + + + diff --git a/Projects/App/MusicBandscapeTests/Sources/MusicBandTestPlan.xctestplan b/Projects/App/MusicBandscapeTests/Sources/MusicBandTestPlan.xctestplan new file mode 100644 index 0000000..78347c8 --- /dev/null +++ b/Projects/App/MusicBandscapeTests/Sources/MusicBandTestPlan.xctestplan @@ -0,0 +1,31 @@ +{ + "configurations" : [ + { + "id" : "A4BA7A36-6E29-4F0C-AFCA-77405B6796A7", + "name" : "Configuration 1", + "options" : { + + } + } + ], + "defaultOptions" : { + "testTimeoutsEnabled" : true + }, + "testTargets" : [ + { + "target" : { + "containerPath" : "container:..\/Core\/Data\/Repository\/Repository.xcodeproj", + "identifier" : "E227DA11F88E56EFAEBAD447", + "name" : "RepositoryTests" + } + }, + { + "target" : { + "containerPath" : "container:..\/Core\/Domain\/UseCase\/UseCase.xcodeproj", + "identifier" : "3DF3057AD58FAE5A14CAF9E4", + "name" : "UseCaseTests" + } + } + ], + "version" : 1 +} diff --git a/Projects/App/MusicBandscapeTests/Sources/MusicBandscapeTestPlan.xctestplan b/Projects/App/MusicBandscapeTests/Sources/MusicBandscapeTestPlan.xctestplan new file mode 100644 index 0000000..253d2e9 --- /dev/null +++ b/Projects/App/MusicBandscapeTests/Sources/MusicBandscapeTestPlan.xctestplan @@ -0,0 +1,52 @@ +{ + "configurations" : [ + { + "id" : "EF54D80E-8A66-4254-9BC1-D4B56D4DE045", + "name" : "Configuration 1", + "options" : { + + } + } + ], + "defaultOptions" : { + "testTimeoutsEnabled" : true + }, + "testTargets" : [ + { + "target" : { + "containerPath" : "container:..\/Presentation\/Splash\/Splash.xcodeproj", + "identifier" : "9165A57EA536D2AB06CC46C8", + "name" : "SplashTests" + } + }, + { + "target" : { + "containerPath" : "container:..\/Presentation\/Home\/Home.xcodeproj", + "identifier" : "AF31213DA71B06E9B09EA3F0", + "name" : "HomeTests" + } + }, + { + "target" : { + "containerPath" : "container:..\/Core\/Domain\/UseCase\/UseCase.xcodeproj", + "identifier" : "3DF3057AD58FAE5A14CAF9E4", + "name" : "UseCaseTests" + } + }, + { + "target" : { + "containerPath" : "container:..\/Presentation\/Detail\/Detail.xcodeproj", + "identifier" : "378027671B59764DC5831691", + "name" : "DetailTests" + } + }, + { + "target" : { + "containerPath" : "container:..\/Core\/Data\/Repository\/Repository.xcodeproj", + "identifier" : "E227DA11F88E56EFAEBAD447", + "name" : "RepositoryTests" + } + } + ], + "version" : 1 +} diff --git a/Projects/App/Project.swift b/Projects/App/Project.swift index fe6e854..7ad9716 100644 --- a/Projects/App/Project.swift +++ b/Projects/App/Project.swift @@ -15,6 +15,8 @@ let project = Project.makeAppModule( sources: ["Sources/**"], resources: ["Resources/**"], infoPlist: .appInfoPlist, - + schemes: [ + Scheme.makeTestPlanScheme(target: .debug, name: Project.Environment.appName) + ] ) diff --git a/Projects/App/Sources/Di/DIRegistry.swift b/Projects/App/Sources/Di/DIRegistry.swift index da0d6b5..86f4569 100644 --- a/Projects/App/Sources/Di/DIRegistry.swift +++ b/Projects/App/Sources/Di/DIRegistry.swift @@ -7,6 +7,7 @@ import WeaveDI +import Core /// 모든 의존성을 자동으로 등록하는 레지스트리 extension WeaveDI.Container { @@ -15,7 +16,8 @@ extension WeaveDI.Container { /// Repository 등록 static func registerRepositories() async { let repositories: [Module] = [ - + helper.musicRepositoryModule(), + helper.musicDetailRepositoryModule() ] await repositories.asyncForEach { module in @@ -27,7 +29,8 @@ extension WeaveDI.Container { static func registerUseCases() async { let useCases: [Module] = [ - + helper.musicUseCaseModule(), + helper.musicDetailUseCaseModule() ] await useCases.asyncForEach { module in diff --git a/Projects/App/Sources/Reducer/AppReducer.swift b/Projects/App/Sources/Reducer/AppReducer.swift index 3f37618..29b862d 100644 --- a/Projects/App/Sources/Reducer/AppReducer.swift +++ b/Projects/App/Sources/Reducer/AppReducer.swift @@ -15,7 +15,7 @@ struct AppReducer { @ObservableState enum State { case splash(SplashReducer.State) -// case mainTab(MainTabFeature.State) + case home(HomeCoordinator.State) init() { self = .splash(.init()) @@ -35,7 +35,7 @@ struct AppReducer { @CasePathable enum ScopeAction { case splash(SplashReducer.Action) -// case mainTab(MainTabFeature.Action) + case home(HomeCoordinator.Action) } @@ -54,9 +54,9 @@ struct AppReducer { .ifCaseLet(\.splash, action: \.scope.splash) { SplashReducer() } -// .ifCaseLet(\.mainTab, action: \.scope.mainTab) { -// MainTabFeature() -// } + .ifCaseLet(\.home, action: \.scope.home) { + HomeCoordinator() + } } } @@ -67,7 +67,7 @@ extension AppReducer { ) -> Effect { switch action { case .presentMain: -// state = .mainTab(.init()) + state = .home(.init()) // return .send(.scope(.mainTab(.scope(.movieCoordinator)))) return .none } diff --git a/Projects/App/Sources/View/AppView.swift b/Projects/App/Sources/View/AppView.swift index 55831b9..fc31f42 100644 --- a/Projects/App/Sources/View/AppView.swift +++ b/Projects/App/Sources/View/AppView.swift @@ -21,6 +21,11 @@ struct AppView: View { if let store = store.scope(state: \.splash, action: \.scope.splash) { SplashView(store: store) } + + case .home: + if let store = store.scope(state: \.home, action: \.scope.home) { + HomeCoordinatorView(store: store) + } } } } diff --git a/Projects/App/Sources/View/ContentView.swift b/Projects/App/Sources/View/ContentView.swift index 2f9baba..1aea452 100644 --- a/Projects/App/Sources/View/ContentView.swift +++ b/Projects/App/Sources/View/ContentView.swift @@ -17,9 +17,38 @@ public struct ContentView: View { ContentView() } -#Preview { - SplashView(store: .init(initialState: SplashReducer.State(), reducer: { - SplashReducer() +#Preview("스플래쉬 화면") { + SplashView( + store: .init( + initialState: SplashReducer.State(), + reducer: { + SplashReducer() + }) + ) +} + +#Preview("홈 코디네이터 화면") { + HomeCoordinatorView(store: .init(initialState: HomeCoordinator.State(), reducer: { + HomeCoordinator() })) } +#Preview("홈 화면 ") { + HomeView( + store: .init( + initialState: HomeReducer.State(), + reducer: { + HomeReducer() + }) + ) +} + +#Preview("상세 화면") { + DetailView( + store: .init( + initialState: DetailReducer.State(musicItem: .detailMusicItem), + reducer: { + DetailReducer() + }) + ) +} diff --git a/Projects/Core/Core/Core.xcodeproj/project.pbxproj b/Projects/Core/Core/Core.xcodeproj/project.pbxproj index f74e3a0..745d37e 100644 --- a/Projects/Core/Core/Core.xcodeproj/project.pbxproj +++ b/Projects/Core/Core/Core.xcodeproj/project.pbxproj @@ -12,14 +12,20 @@ 04950684383BD50C3C3F0634 /* DomainInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B89ECB181A314C23A60BB911 /* DomainInterface.framework */; }; 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 */; }; + 07897CF48250E12FD0CDDABF /* RxMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AC0E7A7D8E049C47C0D8DBAF /* RxMoya.framework */; }; 0887602F05D5297DFF9512B6 /* CasePaths.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 37D454E3D3DEA3106FC5B1D9 /* CasePaths.framework */; }; + 0896DB8B98BB19DA55088E13 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA3F13E23B6662B1FDAD4536 /* CFNetwork.framework */; }; 090FFCC091BDCB28F3096CE7 /* SwiftUINavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B3F3F8C53FB3A64C8A67E329 /* SwiftUINavigation.framework */; }; + 0983A91432A19C762F00C066 /* CombineMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C0B99D7CBDD38E8D23D59A25 /* CombineMoya.framework */; }; 0A6F0AAF346955B125A6D78E /* Sharing2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2690CFF7D8527FFE80ABE74D /* Sharing2.framework */; }; 0ABD067AC835C34B144A119C /* Repository.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A6B638D8DB02624DD45D49E2 /* Repository.framework */; }; 0AC161F8F43479EF47B65273 /* IssueReporting.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03E9AE72F3054B4A5B3FA955 /* IssueReporting.framework */; }; 0B2DBBBB0D34113CBC8D6045 /* UIKitNavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AEC4F1585F46781177064EC7 /* UIKitNavigation.framework */; }; + 0C990308784F2D3A574761BE /* Alamofire_Alamofire.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 64BC3B8469A7FF9C669EFC3F /* Alamofire_Alamofire.bundle */; }; + 0EF10848EB1E5A8ED6641F12 /* Service.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3ED045ECCC0A0126F7A4BC13 /* Service.framework */; }; 153DA734BD15A3E83170B825 /* Foundations.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6AC2DBA35091C70DC51D960D /* Foundations.framework */; }; 193C3045681EE3E35615EEF4 /* IdentifiedCollections.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DF63D412AA4B009EF483F4BE /* IdentifiedCollections.framework */; }; + 197C9F3FF97991D3BCFD6149 /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C59ACF63375043BBA6AB53F /* RxSwift.framework */; }; 1A4CE5864E3E0A793F262D04 /* Sharing1.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 141E57E374A54F7AB6E29DC2 /* Sharing1.framework */; }; 1B0450341B849AEFCC59BC15 /* InternalCollectionsUtilities.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 12A713B47F2AAA89018EAC9F /* InternalCollectionsUtilities.framework */; }; 1B86A8C6675D3D06F3A4B422 /* Clocks.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE351E328C333744FEAAACEF /* Clocks.framework */; }; @@ -28,8 +34,10 @@ 20A6B1A5AF0BE97B60B780AE /* Foundations.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6AC2DBA35091C70DC51D960D /* Foundations.framework */; }; 21306BFBBC8970FA6C09C67A /* IssueReportingPackageSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9297D43D2BEFCC0B514EFC04 /* IssueReportingPackageSupport.framework */; }; 226AA78C1A3143B0A5EC1D8E /* IssueReporting.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03E9AE72F3054B4A5B3FA955 /* IssueReporting.framework */; }; + 23623C8CAA0D5B0C48DBC33E /* AsyncMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ADD660C81381F8C73A9A8893 /* AsyncMoya.framework */; }; 23C8B915134EFE977A0AF44C /* InternalCollectionsUtilities.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 12A713B47F2AAA89018EAC9F /* InternalCollectionsUtilities.framework */; }; 25331ABA2B62C93B801F42C7 /* IdentifiedCollections.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DF63D412AA4B009EF483F4BE /* IdentifiedCollections.framework */; }; + 27ECE37DA37CDC0E38D78AEB /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA3F13E23B6662B1FDAD4536 /* CFNetwork.framework */; }; 28179AACF7CEE8F379C94168 /* IssueReportingPackageSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9297D43D2BEFCC0B514EFC04 /* IssueReportingPackageSupport.framework */; }; 283B75BE810668074615A488 /* XCTestDynamicOverlay.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B0E1BE020E6058D897035F31 /* XCTestDynamicOverlay.framework */; }; 2D5D4F61040CC8BFD8179471 /* Dependencies.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB917DE30C69F723BDF65353 /* Dependencies.framework */; }; @@ -40,15 +48,22 @@ 356A4BB64B50FE64EFEC39A0 /* OSLog.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F52A0D92C684C59849570BB /* OSLog.framework */; }; 36993172D516F95C289F2335 /* UseCase.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE81E51C38BC7DF49AD255BD /* UseCase.framework */; }; 3AFA724175D614A70532C76C /* IssueReporting.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03E9AE72F3054B4A5B3FA955 /* IssueReporting.framework */; }; + 3B6E24246242E5B45041A961 /* EventLimiter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EEAF02179EA24FA0AA10E102 /* EventLimiter.framework */; }; + 3EF87DF18AEF093172128201 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA3F13E23B6662B1FDAD4536 /* CFNetwork.framework */; }; 4112B6136D7137512BB47137 /* SwiftNavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 091619AA614A7C59B502D9D5 /* SwiftNavigation.framework */; }; + 4136091B0498B913CAF09504 /* Service.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3ED045ECCC0A0126F7A4BC13 /* Service.framework */; }; 44EF53FEAA0FD1F604AFA623 /* CombineSchedulers.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED856AD323CCEEC229B2C7F9 /* CombineSchedulers.framework */; }; 4584FA74CCA4B45BDFBC2B84 /* PerceptionCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70750465C5300D484ABA9F60 /* PerceptionCore.framework */; }; + 458BC20C8B3061D32FA23B4E /* AsyncMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ADD660C81381F8C73A9A8893 /* AsyncMoya.framework */; }; 4A8A4FF21E2466F27305A4B8 /* UseCase.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE81E51C38BC7DF49AD255BD /* UseCase.framework */; }; + 4ABE35EBE06A40EB2418C11F /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A672C80AC40AD7ADFD38507 /* Alamofire.framework */; }; 525351E14EA04957F3C37AAE /* CombineSchedulers.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED856AD323CCEEC229B2C7F9 /* CombineSchedulers.framework */; }; 52B4AD0DF0AC04F86A07FB86 /* Networking.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 69722B72879FA3302F07EF38 /* Networking.framework */; }; + 5320D016B9469C3BA540AC1B /* RxMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AC0E7A7D8E049C47C0D8DBAF /* RxMoya.framework */; }; 53CBEAA13C914C361402B056 /* OrderedCollections.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FC6EA3166EAE3B4E5C3A3655 /* OrderedCollections.framework */; }; 543E087427D4A8420C2134C1 /* Sharing2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2690CFF7D8527FFE80ABE74D /* Sharing2.framework */; }; 54DA91BADE1E4B3FBC17C12A /* SwiftNavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 091619AA614A7C59B502D9D5 /* SwiftNavigation.framework */; }; + 572AE4DF1DA76FD5E04593C3 /* CombineMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C0B99D7CBDD38E8D23D59A25 /* CombineMoya.framework */; }; 57C0F9688A74616539B65893 /* UseCase.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE81E51C38BC7DF49AD255BD /* UseCase.framework */; }; 581BA75F50FE6547B2732D10 /* OrderedCollections.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FC6EA3166EAE3B4E5C3A3655 /* OrderedCollections.framework */; }; 5A4BF0C9B10E7CA35A6A16F2 /* DataInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FCA4FDADB9D94372F0DF1DAB /* DataInterface.framework */; }; @@ -57,6 +72,7 @@ 5CB29D72D1FE671A3BFE6D7B /* swift-composable-architecture_ComposableArchitecture.bundle in Resources */ = {isa = PBXBuildFile; fileRef = D965F19D7CDBE741D5E4BC67 /* swift-composable-architecture_ComposableArchitecture.bundle */; }; 5CDBF2E2AB4CD3E5B01496BE /* WeaveDI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FCE691F2EA62E8BF6F213DF9 /* WeaveDI.framework */; }; 60F926638241B9ADFD8E2777 /* PerceptionCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70750465C5300D484ABA9F60 /* PerceptionCore.framework */; }; + 611872CC02AF7F6F12BCF33D /* EventLimiter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EEAF02179EA24FA0AA10E102 /* EventLimiter.framework */; }; 6483116BE3903CA8C541C34C /* CustomDump.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B6739389F41AD55401939AA3 /* CustomDump.framework */; }; 657042F9411772AD1F67B4F8 /* ConcurrencyExtras.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 10C2E0E9FA89653EBA928FFB /* ConcurrencyExtras.framework */; }; 65D9C904FC575380ED1A65F6 /* Networking.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 69722B72879FA3302F07EF38 /* Networking.framework */; }; @@ -71,34 +87,48 @@ 71592F799F7E3F1E40CE7D14 /* InternalCollectionsUtilities.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 12A713B47F2AAA89018EAC9F /* InternalCollectionsUtilities.framework */; }; 71EF0FF722D9341DE7489E26 /* Dependencies.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB917DE30C69F723BDF65353 /* Dependencies.framework */; }; 720F08719A20288CF9AAFA7E /* UIKitNavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AEC4F1585F46781177064EC7 /* UIKitNavigation.framework */; }; + 73588A177644EDE0C3A5C627 /* Moya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6260F75C087362295DDE52AE /* Moya.framework */; }; 73E8511D2CFD4034A1050AA0 /* Networking.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 69722B72879FA3302F07EF38 /* Networking.framework */; }; 741A5006FF2D931F1EFAC7E4 /* swift-sharing_Sharing.bundle in Resources */ = {isa = PBXBuildFile; fileRef = B8D5448233F039D5A9089DCB /* swift-sharing_Sharing.bundle */; }; 743EB41AABC12C12649285B2 /* CasePathsCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3FFF727FDBE22876C8AC9A3D /* CasePathsCore.framework */; }; + 752111023EFADD3DC64D75AC /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A672C80AC40AD7ADFD38507 /* Alamofire.framework */; }; 774D915DCAFDDA823F514A4D /* Networking.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 69722B72879FA3302F07EF38 /* Networking.framework */; }; + 78DE9E2870EA091066A98F3E /* Moya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6260F75C087362295DDE52AE /* Moya.framework */; }; 796E9382BC2BE4D1E6889FD7 /* Model.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3F9C516A0389461EC9B5D46E /* Model.framework */; }; 7A83E67FEDA6E2128A0DBE82 /* Model.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3F9C516A0389461EC9B5D46E /* Model.framework */; }; 7B3D1F3D101ADF89557F377A /* CombineSchedulers.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED856AD323CCEEC229B2C7F9 /* CombineSchedulers.framework */; }; + 7D03527D8FB5F023D08762D7 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CA3F13E23B6662B1FDAD4536 /* CFNetwork.framework */; }; 7E0F7A2E919A8E3E252C6E5E /* Sharing2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2690CFF7D8527FFE80ABE74D /* Sharing2.framework */; }; 7E892CACFFDCC68BB417358D /* DependenciesMacros.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C175D576FC2CE0FF66645233 /* DependenciesMacros.framework */; }; + 7EDF61ED9570CCFAE8A34322 /* Moya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6260F75C087362295DDE52AE /* Moya.framework */; }; 7F1A303924CE85716B92157B /* Perception.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F8CC6237F3D4AE8F77CAE48 /* Perception.framework */; }; + 801FEBC6DE1D5D54EB0FF73B /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A672C80AC40AD7ADFD38507 /* Alamofire.framework */; }; 81254654BE4451E86130BA54 /* WeaveDI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FCE691F2EA62E8BF6F213DF9 /* WeaveDI.framework */; }; 822DF876BB668FF81689C7E4 /* LogMacro.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABF88C39763A84B856476973 /* LogMacro.framework */; }; 83AE0163C0E55279C04C6B35 /* UIKitNavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AEC4F1585F46781177064EC7 /* UIKitNavigation.framework */; }; 8460A0263EB5BB299A2ABD2E /* Sharing1.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 141E57E374A54F7AB6E29DC2 /* Sharing1.framework */; }; 84F29B64D24E2F2F7E7C75AF /* UIKitNavigationShim.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84F99CA60AD1F77541E67E93 /* UIKitNavigationShim.framework */; }; + 85AE440AE710D600F1CB23EE /* EventLimiter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EEAF02179EA24FA0AA10E102 /* EventLimiter.framework */; }; 887EBC2FF03A101E2EAA63DA /* ComposableArchitecture.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB18C1565FE3EAC96777EC0F /* ComposableArchitecture.framework */; }; 8C85E8CCC8F4BAC32A1F8956 /* ConcurrencyExtras.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 10C2E0E9FA89653EBA928FFB /* ConcurrencyExtras.framework */; }; 8C935BC4799F8B6E3A6223E1 /* OSLog.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F52A0D92C684C59849570BB /* OSLog.framework */; }; + 8E227E6CDAE631A87FCFDF58 /* Alamofire_Alamofire.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 64BC3B8469A7FF9C669EFC3F /* Alamofire_Alamofire.bundle */; }; 8EC393B68B27E55ED82E5D5F /* IssueReportingPackageSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9297D43D2BEFCC0B514EFC04 /* IssueReportingPackageSupport.framework */; }; 9020315D7561610CEF9526ED /* DomainInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B89ECB181A314C23A60BB911 /* DomainInterface.framework */; }; + 908239751BB5B44F306AF1B5 /* API.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9208035A4D93E76DE8390864 /* API.framework */; }; 90F9749BFCF03B4AB847C6B1 /* Test.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E427963EEC5B2C6424367BB /* Test.swift */; }; 912F15FB808EFD42963B2181 /* CasePaths.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 37D454E3D3DEA3106FC5B1D9 /* CasePaths.framework */; }; 91CA37E449BC98542266178B /* Sharing.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4E7A1228CBFFBBC21B6F7108 /* Sharing.framework */; }; 928BF1612A4C4B5382E83F0A /* ConcurrencyExtras.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 10C2E0E9FA89653EBA928FFB /* ConcurrencyExtras.framework */; }; 9759622C07EB4108F92C7BFC /* CasePathsCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3FFF727FDBE22876C8AC9A3D /* CasePathsCore.framework */; }; + 9B78C94AA0A23A21657A19F1 /* RxMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AC0E7A7D8E049C47C0D8DBAF /* RxMoya.framework */; }; 9B8EF829A7ECBDD6C160A24C /* ComposableArchitecture.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB18C1565FE3EAC96777EC0F /* ComposableArchitecture.framework */; }; 9CC12E9DD61D2CE1545340E1 /* SwiftUINavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B3F3F8C53FB3A64C8A67E329 /* SwiftUINavigation.framework */; }; + 9D8D8ED7780C590C68245944 /* API.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9208035A4D93E76DE8390864 /* API.framework */; }; 9FBB462562FD1381FCB33831 /* Model.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3F9C516A0389461EC9B5D46E /* Model.framework */; }; + A1184A3F47A920166064C21A /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A672C80AC40AD7ADFD38507 /* Alamofire.framework */; }; + A137588D3CE14A4135ED662A /* AsyncMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ADD660C81381F8C73A9A8893 /* AsyncMoya.framework */; }; + A2614DABD633325C390C1E23 /* AsyncMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ADD660C81381F8C73A9A8893 /* AsyncMoya.framework */; }; A32EBE1E2A8BBF14B91E5477 /* IssueReportingPackageSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9297D43D2BEFCC0B514EFC04 /* IssueReportingPackageSupport.framework */; }; A3F778774B61770A1BCA5078 /* SwiftUINavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B3F3F8C53FB3A64C8A67E329 /* SwiftUINavigation.framework */; }; A7B8C8A10E30EC8A4499A4D7 /* CoreExport.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEB3C68C2ED81026636D7F75 /* CoreExport.swift */; }; @@ -113,23 +143,30 @@ B3F6238BD291CB7780E63545 /* InternalCollectionsUtilities.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 12A713B47F2AAA89018EAC9F /* InternalCollectionsUtilities.framework */; }; B49C0C48B313FA48AB6B5397 /* LogMacro.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABF88C39763A84B856476973 /* LogMacro.framework */; }; BAC14B2B430CF2FEC6001708 /* XCTestDynamicOverlay.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B0E1BE020E6058D897035F31 /* XCTestDynamicOverlay.framework */; }; + BB7607FFD4AFB70D473FF4FA /* CombineMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C0B99D7CBDD38E8D23D59A25 /* CombineMoya.framework */; }; BC8595A1E286E2F5B6EF15C9 /* Core.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B0FA7F85F3573FB522F9478 /* Core.framework */; }; BDB24F99EF91F73F88E48FDB /* DataInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FCA4FDADB9D94372F0DF1DAB /* DataInterface.framework */; }; BDF58A4C856FFC3CBE67FBBD /* LogMacro.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABF88C39763A84B856476973 /* LogMacro.framework */; }; BE2A82C9C8D2B6E2E0078C59 /* Clocks.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE351E328C333744FEAAACEF /* Clocks.framework */; }; BF97AB1F1286F02D88CDF7BF /* CustomDump.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B6739389F41AD55401939AA3 /* CustomDump.framework */; }; + C1234BEE27DE517F8CE3A864 /* Service.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3ED045ECCC0A0126F7A4BC13 /* Service.framework */; }; C19440D7C9DE70C6EDF16A45 /* Sharing1.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 141E57E374A54F7AB6E29DC2 /* Sharing1.framework */; }; + C4B19E5C873780D6AA661A00 /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C59ACF63375043BBA6AB53F /* RxSwift.framework */; }; + C670CC47F85EAD32C8DDD147 /* RxMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AC0E7A7D8E049C47C0D8DBAF /* RxMoya.framework */; }; C6A9D0FB7BC398F04CF131AE /* LogMacro.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ABF88C39763A84B856476973 /* LogMacro.framework */; }; C817E90B41D7B129CAAF83C4 /* Perception.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F8CC6237F3D4AE8F77CAE48 /* Perception.framework */; }; C9297C4ECC3FA3DD0DA1BB43 /* CustomDump.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B6739389F41AD55401939AA3 /* CustomDump.framework */; }; C9DC1FC3181E0BCA557D445D /* Model.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3F9C516A0389461EC9B5D46E /* Model.framework */; }; C9F3B80FA983FA575F9B735A /* XCTestDynamicOverlay.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B0E1BE020E6058D897035F31 /* XCTestDynamicOverlay.framework */; }; CAA8F9C0C53A1F3B80F97228 /* IdentifiedCollections.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DF63D412AA4B009EF483F4BE /* IdentifiedCollections.framework */; }; + CD5695821CEC5EAC1D117155 /* Moya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6260F75C087362295DDE52AE /* Moya.framework */; }; CD91F1D61C226F8316805D3C /* CasePathsCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3FFF727FDBE22876C8AC9A3D /* CasePathsCore.framework */; }; CE60BFE1DCA1494561D5F3F0 /* DataInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FCA4FDADB9D94372F0DF1DAB /* DataInterface.framework */; }; CFD8561A3158F0E8D1F37E31 /* CoreExport.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEB3C68C2ED81026636D7F75 /* CoreExport.swift */; }; D1B3E19A5BAFD54933477B6F /* ComposableArchitecture.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB18C1565FE3EAC96777EC0F /* ComposableArchitecture.framework */; }; D35EE132FCBD9B30CFA96C65 /* Clocks.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE351E328C333744FEAAACEF /* Clocks.framework */; }; + D67B83859DB2A4BC50429596 /* CombineMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C0B99D7CBDD38E8D23D59A25 /* CombineMoya.framework */; }; + D6FB16CDB69D52FF171AE043 /* Service.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3ED045ECCC0A0126F7A4BC13 /* Service.framework */; }; D807263AF515DA4FF704F991 /* Perception.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F8CC6237F3D4AE8F77CAE48 /* Perception.framework */; }; D8D02BB84AD77216D6013F99 /* Sharing1.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 141E57E374A54F7AB6E29DC2 /* Sharing1.framework */; }; D8D0B2291F7B85620B6DC4BF /* PerceptionCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70750465C5300D484ABA9F60 /* PerceptionCore.framework */; }; @@ -138,17 +175,22 @@ DC7456DBD2DBD2754C15EEAF /* CasePathsCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3FFF727FDBE22876C8AC9A3D /* CasePathsCore.framework */; }; DE189ECAFE1EA2BAEA572638 /* UIKitNavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AEC4F1585F46781177064EC7 /* UIKitNavigation.framework */; }; DE99CE98396610B0D19BD58F /* DependenciesMacros.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C175D576FC2CE0FF66645233 /* DependenciesMacros.framework */; }; + E0066E5EF9D00B1B646002AB /* EventLimiter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EEAF02179EA24FA0AA10E102 /* EventLimiter.framework */; }; E02460EECD57C6BE33A4759B /* UIKitNavigationShim.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84F99CA60AD1F77541E67E93 /* UIKitNavigationShim.framework */; }; + E332090F0D2AF223B729735D /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C59ACF63375043BBA6AB53F /* RxSwift.framework */; }; E5B720287B07983F7221D2EA /* CombineSchedulers.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED856AD323CCEEC229B2C7F9 /* CombineSchedulers.framework */; }; E5D416E83E8404C167333304 /* Repository.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A6B638D8DB02624DD45D49E2 /* Repository.framework */; }; E6F8049D9D48859398776FE3 /* XCTestDynamicOverlay.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B0E1BE020E6058D897035F31 /* XCTestDynamicOverlay.framework */; }; E8229BE9614ACFBDD107F8D2 /* DependenciesMacros.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C175D576FC2CE0FF66645233 /* DependenciesMacros.framework */; }; E9700F067B085ED1D5953E61 /* WeaveDI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FCE691F2EA62E8BF6F213DF9 /* WeaveDI.framework */; }; EE7267C14BD554AC1D7AABA6 /* ConcurrencyExtras.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 10C2E0E9FA89653EBA928FFB /* ConcurrencyExtras.framework */; }; + EF7D11FB741433BF83E0FC02 /* API.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9208035A4D93E76DE8390864 /* API.framework */; }; F24CE72CE67DF688867DB06D /* SwiftNavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 091619AA614A7C59B502D9D5 /* SwiftNavigation.framework */; }; F42B79B8E602391E1A37BE6A /* CasePaths.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 37D454E3D3DEA3106FC5B1D9 /* CasePaths.framework */; }; F4B05E023463D745BA025CD8 /* CoreExport.swift in Sources */ = {isa = PBXBuildFile; fileRef = DEB3C68C2ED81026636D7F75 /* CoreExport.swift */; }; + F6AAD53AE5AF84CA56570AE1 /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C59ACF63375043BBA6AB53F /* RxSwift.framework */; }; F6E21EB1CFC6005190879EAC /* WeaveDI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FCE691F2EA62E8BF6F213DF9 /* WeaveDI.framework */; }; + F7A50D3659506E90ACA01167 /* API.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9208035A4D93E76DE8390864 /* API.framework */; }; F9048C1176F9E1EE1743760B /* DependenciesMacros.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C175D576FC2CE0FF66645233 /* DependenciesMacros.framework */; }; F965D44749FBCF0F5B2DA464 /* Sharing.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4E7A1228CBFFBBC21B6F7108 /* Sharing.framework */; }; FA3AE178AFC2EC94AE27EDDF /* Repository.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A6B638D8DB02624DD45D49E2 /* Repository.framework */; }; @@ -201,6 +243,7 @@ buildActionMask = 8; dstSubfolderSpec = 16; files = ( + 0C990308784F2D3A574761BE /* Alamofire_Alamofire.bundle in Dependencies */, 0741B662DD021EE9DC285449 /* swift-composable-architecture_ComposableArchitecture.bundle in Dependencies */, ACD998D5ED2BDF9CEE159409 /* swift-sharing_Sharing.bundle in Dependencies */, ); @@ -242,21 +285,29 @@ 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; }; 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; }; + 4A672C80AC40AD7ADFD38507 /* Alamofire.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Alamofire.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 = ""; }; + 6260F75C087362295DDE52AE /* Moya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Moya.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 64BC3B8469A7FF9C669EFC3F /* Alamofire_Alamofire.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Alamofire_Alamofire.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; 69722B72879FA3302F07EF38 /* Networking.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Networking.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 6AC2DBA35091C70DC51D960D /* Foundations.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Foundations.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6C59ACF63375043BBA6AB53F /* RxSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RxSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 70750465C5300D484ABA9F60 /* PerceptionCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PerceptionCore.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 = ""; }; + 9208035A4D93E76DE8390864 /* API.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = API.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 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; }; + AC0E7A7D8E049C47C0D8DBAF /* RxMoya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RxMoya.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + ADD660C81381F8C73A9A8893 /* AsyncMoya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AsyncMoya.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 = ""; }; @@ -265,9 +316,11 @@ 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; }; + C0B99D7CBDD38E8D23D59A25 /* CombineMoya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CombineMoya.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; }; + CA3F13E23B6662B1FDAD4536 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_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; }; @@ -275,6 +328,7 @@ 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; }; + EEAF02179EA24FA0AA10E102 /* EventLimiter.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = EventLimiter.framework; sourceTree = BUILT_PRODUCTS_DIR; }; FC6EA3166EAE3B4E5C3A3655 /* OrderedCollections.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = OrderedCollections.framework; sourceTree = BUILT_PRODUCTS_DIR; }; FCA4FDADB9D94372F0DF1DAB /* DataInterface.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DataInterface.framework; sourceTree = BUILT_PRODUCTS_DIR; }; FCE691F2EA62E8BF6F213DF9 /* WeaveDI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = WeaveDI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -285,10 +339,15 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 7D03527D8FB5F023D08762D7 /* CFNetwork.framework in Frameworks */, FC5B5B01425E3F711E6994B8 /* OSLog.framework in Frameworks */, + EF7D11FB741433BF83E0FC02 /* API.framework in Frameworks */, + 752111023EFADD3DC64D75AC /* Alamofire.framework in Frameworks */, + 458BC20C8B3061D32FA23B4E /* AsyncMoya.framework in Frameworks */, F42B79B8E602391E1A37BE6A /* CasePaths.framework in Frameworks */, CD91F1D61C226F8316805D3C /* CasePathsCore.framework in Frameworks */, A7E32CD107B343A3CD465C4C /* Clocks.framework in Frameworks */, + 0983A91432A19C762F00C066 /* CombineMoya.framework in Frameworks */, 525351E14EA04957F3C37AAE /* CombineSchedulers.framework in Frameworks */, 3155400E555574E62DE20452 /* ComposableArchitecture.framework in Frameworks */, 657042F9411772AD1F67B4F8 /* ConcurrencyExtras.framework in Frameworks */, @@ -297,6 +356,7 @@ 71EF0FF722D9341DE7489E26 /* Dependencies.framework in Frameworks */, 7E892CACFFDCC68BB417358D /* DependenciesMacros.framework in Frameworks */, A94DFA8DD7548315BB0CF161 /* DomainInterface.framework in Frameworks */, + E0066E5EF9D00B1B646002AB /* EventLimiter.framework in Frameworks */, 20A6B1A5AF0BE97B60B780AE /* Foundations.framework in Frameworks */, 25331ABA2B62C93B801F42C7 /* IdentifiedCollections.framework in Frameworks */, 23C8B915134EFE977A0AF44C /* InternalCollectionsUtilities.framework in Frameworks */, @@ -304,11 +364,15 @@ 8EC393B68B27E55ED82E5D5F /* IssueReportingPackageSupport.framework in Frameworks */, BDF58A4C856FFC3CBE67FBBD /* LogMacro.framework in Frameworks */, 9FBB462562FD1381FCB33831 /* Model.framework in Frameworks */, + 7EDF61ED9570CCFAE8A34322 /* Moya.framework in Frameworks */, 774D915DCAFDDA823F514A4D /* Networking.framework in Frameworks */, 581BA75F50FE6547B2732D10 /* OrderedCollections.framework in Frameworks */, 7F1A303924CE85716B92157B /* Perception.framework in Frameworks */, D8D0B2291F7B85620B6DC4BF /* PerceptionCore.framework in Frameworks */, 0ABD067AC835C34B144A119C /* Repository.framework in Frameworks */, + 9B78C94AA0A23A21657A19F1 /* RxMoya.framework in Frameworks */, + E332090F0D2AF223B729735D /* RxSwift.framework in Frameworks */, + D6FB16CDB69D52FF171AE043 /* Service.framework in Frameworks */, 6ADBD1397C6A44688E9A4170 /* Sharing.framework in Frameworks */, 1A4CE5864E3E0A793F262D04 /* Sharing1.framework in Frameworks */, 2E139BFE929C679F3FA93456 /* Sharing2.framework in Frameworks */, @@ -326,10 +390,15 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 0896DB8B98BB19DA55088E13 /* CFNetwork.framework in Frameworks */, 1EF87D70918A73AFB220707D /* OSLog.framework in Frameworks */, + 9D8D8ED7780C590C68245944 /* API.framework in Frameworks */, + 801FEBC6DE1D5D54EB0FF73B /* Alamofire.framework in Frameworks */, + 23623C8CAA0D5B0C48DBC33E /* AsyncMoya.framework in Frameworks */, 0887602F05D5297DFF9512B6 /* CasePaths.framework in Frameworks */, 9759622C07EB4108F92C7BFC /* CasePathsCore.framework in Frameworks */, D35EE132FCBD9B30CFA96C65 /* Clocks.framework in Frameworks */, + BB7607FFD4AFB70D473FF4FA /* CombineMoya.framework in Frameworks */, 7B3D1F3D101ADF89557F377A /* CombineSchedulers.framework in Frameworks */, 9B8EF829A7ECBDD6C160A24C /* ComposableArchitecture.framework in Frameworks */, 928BF1612A4C4B5382E83F0A /* ConcurrencyExtras.framework in Frameworks */, @@ -338,6 +407,7 @@ 6E1098966CBE1B64D1958523 /* Dependencies.framework in Frameworks */, DE99CE98396610B0D19BD58F /* DependenciesMacros.framework in Frameworks */, AA2C8708317F5556E909D43A /* DomainInterface.framework in Frameworks */, + 3B6E24246242E5B45041A961 /* EventLimiter.framework in Frameworks */, 153DA734BD15A3E83170B825 /* Foundations.framework in Frameworks */, 193C3045681EE3E35615EEF4 /* IdentifiedCollections.framework in Frameworks */, B3F6238BD291CB7780E63545 /* InternalCollectionsUtilities.framework in Frameworks */, @@ -345,11 +415,15 @@ A32EBE1E2A8BBF14B91E5477 /* IssueReportingPackageSupport.framework in Frameworks */, B49C0C48B313FA48AB6B5397 /* LogMacro.framework in Frameworks */, 796E9382BC2BE4D1E6889FD7 /* Model.framework in Frameworks */, + 73588A177644EDE0C3A5C627 /* Moya.framework in Frameworks */, 52B4AD0DF0AC04F86A07FB86 /* Networking.framework in Frameworks */, 53CBEAA13C914C361402B056 /* OrderedCollections.framework in Frameworks */, 666209C52E74FB8C6EFA853B /* Perception.framework in Frameworks */, AC6749F009C54AB3B22C385D /* PerceptionCore.framework in Frameworks */, 70D5DB78FC01271FA17127DB /* Repository.framework in Frameworks */, + C670CC47F85EAD32C8DDD147 /* RxMoya.framework in Frameworks */, + F6AAD53AE5AF84CA56570AE1 /* RxSwift.framework in Frameworks */, + C1234BEE27DE517F8CE3A864 /* Service.framework in Frameworks */, F965D44749FBCF0F5B2DA464 /* Sharing.framework in Frameworks */, C19440D7C9DE70C6EDF16A45 /* Sharing1.framework in Frameworks */, 7E0F7A2E919A8E3E252C6E5E /* Sharing2.framework in Frameworks */, @@ -367,10 +441,15 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 27ECE37DA37CDC0E38D78AEB /* CFNetwork.framework in Frameworks */, 8C935BC4799F8B6E3A6223E1 /* OSLog.framework in Frameworks */, + F7A50D3659506E90ACA01167 /* API.framework in Frameworks */, + 4ABE35EBE06A40EB2418C11F /* Alamofire.framework in Frameworks */, + A2614DABD633325C390C1E23 /* AsyncMoya.framework in Frameworks */, 912F15FB808EFD42963B2181 /* CasePaths.framework in Frameworks */, DC7456DBD2DBD2754C15EEAF /* CasePathsCore.framework in Frameworks */, 1B86A8C6675D3D06F3A4B422 /* Clocks.framework in Frameworks */, + 572AE4DF1DA76FD5E04593C3 /* CombineMoya.framework in Frameworks */, 44EF53FEAA0FD1F604AFA623 /* CombineSchedulers.framework in Frameworks */, 887EBC2FF03A101E2EAA63DA /* ComposableArchitecture.framework in Frameworks */, 8C85E8CCC8F4BAC32A1F8956 /* ConcurrencyExtras.framework in Frameworks */, @@ -379,6 +458,7 @@ DB2E5FD322F40A6D95B7C5FB /* Dependencies.framework in Frameworks */, E8229BE9614ACFBDD107F8D2 /* DependenciesMacros.framework in Frameworks */, 04950684383BD50C3C3F0634 /* DomainInterface.framework in Frameworks */, + 85AE440AE710D600F1CB23EE /* EventLimiter.framework in Frameworks */, 6828F2D9954A65FFC9EC1ADA /* Foundations.framework in Frameworks */, 0361917575288BC2EAD1F718 /* IdentifiedCollections.framework in Frameworks */, 71592F799F7E3F1E40CE7D14 /* InternalCollectionsUtilities.framework in Frameworks */, @@ -386,11 +466,15 @@ 28179AACF7CEE8F379C94168 /* IssueReportingPackageSupport.framework in Frameworks */, 822DF876BB668FF81689C7E4 /* LogMacro.framework in Frameworks */, 7A83E67FEDA6E2128A0DBE82 /* Model.framework in Frameworks */, + 78DE9E2870EA091066A98F3E /* Moya.framework in Frameworks */, 73E8511D2CFD4034A1050AA0 /* Networking.framework in Frameworks */, 30C165DDDBA521864ADED55A /* OrderedCollections.framework in Frameworks */, D807263AF515DA4FF704F991 /* Perception.framework in Frameworks */, 60F926638241B9ADFD8E2777 /* PerceptionCore.framework in Frameworks */, E5D416E83E8404C167333304 /* Repository.framework in Frameworks */, + 07897CF48250E12FD0CDDABF /* RxMoya.framework in Frameworks */, + C4B19E5C873780D6AA661A00 /* RxSwift.framework in Frameworks */, + 4136091B0498B913CAF09504 /* Service.framework in Frameworks */, 91CA37E449BC98542266178B /* Sharing.framework in Frameworks */, D8D02BB84AD77216D6013F99 /* Sharing1.framework in Frameworks */, 0A6F0AAF346955B125A6D78E /* Sharing2.framework in Frameworks */, @@ -408,10 +492,15 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 3EF87DF18AEF093172128201 /* CFNetwork.framework in Frameworks */, 356A4BB64B50FE64EFEC39A0 /* OSLog.framework in Frameworks */, + 908239751BB5B44F306AF1B5 /* API.framework in Frameworks */, + A1184A3F47A920166064C21A /* Alamofire.framework in Frameworks */, + A137588D3CE14A4135ED662A /* AsyncMoya.framework in Frameworks */, AF2B0313CE26DE7442DA3E5F /* CasePaths.framework in Frameworks */, 743EB41AABC12C12649285B2 /* CasePathsCore.framework in Frameworks */, BE2A82C9C8D2B6E2E0078C59 /* Clocks.framework in Frameworks */, + D67B83859DB2A4BC50429596 /* CombineMoya.framework in Frameworks */, E5B720287B07983F7221D2EA /* CombineSchedulers.framework in Frameworks */, D1B3E19A5BAFD54933477B6F /* ComposableArchitecture.framework in Frameworks */, EE7267C14BD554AC1D7AABA6 /* ConcurrencyExtras.framework in Frameworks */, @@ -420,6 +509,7 @@ 2D5D4F61040CC8BFD8179471 /* Dependencies.framework in Frameworks */, F9048C1176F9E1EE1743760B /* DependenciesMacros.framework in Frameworks */, 9020315D7561610CEF9526ED /* DomainInterface.framework in Frameworks */, + 611872CC02AF7F6F12BCF33D /* EventLimiter.framework in Frameworks */, 5B26B9E172329F680E1F0DC8 /* Foundations.framework in Frameworks */, CAA8F9C0C53A1F3B80F97228 /* IdentifiedCollections.framework in Frameworks */, 1B0450341B849AEFCC59BC15 /* InternalCollectionsUtilities.framework in Frameworks */, @@ -427,11 +517,15 @@ 21306BFBBC8970FA6C09C67A /* IssueReportingPackageSupport.framework in Frameworks */, C6A9D0FB7BC398F04CF131AE /* LogMacro.framework in Frameworks */, C9DC1FC3181E0BCA557D445D /* Model.framework in Frameworks */, + CD5695821CEC5EAC1D117155 /* Moya.framework in Frameworks */, 65D9C904FC575380ED1A65F6 /* Networking.framework in Frameworks */, 02C8AC5E9D8916ADD6307109 /* OrderedCollections.framework in Frameworks */, C817E90B41D7B129CAAF83C4 /* Perception.framework in Frameworks */, 4584FA74CCA4B45BDFBC2B84 /* PerceptionCore.framework in Frameworks */, FA3AE178AFC2EC94AE27EDDF /* Repository.framework in Frameworks */, + 5320D016B9469C3BA540AC1B /* RxMoya.framework in Frameworks */, + 197C9F3FF97991D3BCFD6149 /* RxSwift.framework in Frameworks */, + 0EF10848EB1E5A8ED6641F12 /* Service.framework in Frameworks */, AD8CB953E5D441B8542F4323 /* Sharing.framework in Frameworks */, 8460A0263EB5BB299A2ABD2E /* Sharing1.framework in Frameworks */, 543E087427D4A8420C2134C1 /* Sharing2.framework in Frameworks */, @@ -475,9 +569,14 @@ 250C62EE12DB56ECEBB473C3 /* Products */ = { isa = PBXGroup; children = ( + 64BC3B8469A7FF9C669EFC3F /* Alamofire_Alamofire.bundle */, + 4A672C80AC40AD7ADFD38507 /* Alamofire.framework */, + 9208035A4D93E76DE8390864 /* API.framework */, + ADD660C81381F8C73A9A8893 /* AsyncMoya.framework */, 37D454E3D3DEA3106FC5B1D9 /* CasePaths.framework */, 3FFF727FDBE22876C8AC9A3D /* CasePathsCore.framework */, DE351E328C333744FEAAACEF /* Clocks.framework */, + C0B99D7CBDD38E8D23D59A25 /* CombineMoya.framework */, ED856AD323CCEEC229B2C7F9 /* CombineSchedulers.framework */, BB18C1565FE3EAC96777EC0F /* ComposableArchitecture.framework */, 10C2E0E9FA89653EBA928FFB /* ConcurrencyExtras.framework */, @@ -491,6 +590,7 @@ AB917DE30C69F723BDF65353 /* Dependencies.framework */, C175D576FC2CE0FF66645233 /* DependenciesMacros.framework */, B89ECB181A314C23A60BB911 /* DomainInterface.framework */, + EEAF02179EA24FA0AA10E102 /* EventLimiter.framework */, 6AC2DBA35091C70DC51D960D /* Foundations.framework */, DF63D412AA4B009EF483F4BE /* IdentifiedCollections.framework */, 12A713B47F2AAA89018EAC9F /* InternalCollectionsUtilities.framework */, @@ -498,11 +598,15 @@ 9297D43D2BEFCC0B514EFC04 /* IssueReportingPackageSupport.framework */, ABF88C39763A84B856476973 /* LogMacro.framework */, 3F9C516A0389461EC9B5D46E /* Model.framework */, + 6260F75C087362295DDE52AE /* Moya.framework */, 69722B72879FA3302F07EF38 /* Networking.framework */, FC6EA3166EAE3B4E5C3A3655 /* OrderedCollections.framework */, 1F8CC6237F3D4AE8F77CAE48 /* Perception.framework */, 70750465C5300D484ABA9F60 /* PerceptionCore.framework */, A6B638D8DB02624DD45D49E2 /* Repository.framework */, + AC0E7A7D8E049C47C0D8DBAF /* RxMoya.framework */, + 6C59ACF63375043BBA6AB53F /* RxSwift.framework */, + 3ED045ECCC0A0126F7A4BC13 /* Service.framework */, 4E7A1228CBFFBBC21B6F7108 /* Sharing.framework */, 141E57E374A54F7AB6E29DC2 /* Sharing1.framework */, 2690CFF7D8527FFE80ABE74D /* Sharing2.framework */, @@ -551,6 +655,7 @@ 64E34141D18153ACC8D4E5F8 /* Frameworks */ = { isa = PBXGroup; children = ( + CA3F13E23B6662B1FDAD4536 /* CFNetwork.framework */, 4F52A0D92C684C59849570BB /* OSLog.framework */, ); name = Frameworks; @@ -731,6 +836,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 8E227E6CDAE631A87FCFDF58 /* Alamofire_Alamofire.bundle in Resources */, 5CB29D72D1FE671A3BFE6D7B /* swift-composable-architecture_ComposableArchitecture.bundle in Resources */, 741A5006FF2D931F1EFAC7E4 /* swift-sharing_Sharing.bundle in Resources */, ); diff --git a/Projects/Core/Core/Project.swift b/Projects/Core/Core/Project.swift index ff8b1d1..b44aa79 100644 --- a/Projects/Core/Core/Project.swift +++ b/Projects/Core/Core/Project.swift @@ -2,7 +2,6 @@ import Foundation import ProjectDescription import DependencyPlugin import ProjectTemplatePlugin -import ProjectTemplatePlugin import DependencyPackagePlugin let project = Project.makeAppModule( diff --git a/Projects/Core/Core/Sources/Exported/CoreExport.swift b/Projects/Core/Core/Sources/Exported/CoreExport.swift index a76e006..63d94df 100644 --- a/Projects/Core/Core/Sources/Exported/CoreExport.swift +++ b/Projects/Core/Core/Sources/Exported/CoreExport.swift @@ -7,3 +7,4 @@ @_exported import UseCase @_exported import Network +@_exported import Entity diff --git a/Projects/Core/Data/API/API.xcodeproj/project.pbxproj b/Projects/Core/Data/API/API.xcodeproj/project.pbxproj index e708554..d456ed7 100644 --- a/Projects/Core/Data/API/API.xcodeproj/project.pbxproj +++ b/Projects/Core/Data/API/API.xcodeproj/project.pbxproj @@ -7,12 +7,38 @@ objects = { /* Begin PBXBuildFile section */ - 13D959CCB3ADBDE44D278578 /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = E891D811EB51DBCAECC37DE3 /* Base.swift */; }; + 2377568350EF27110A67EF26 /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 472D6F32E9C50DD66CBC8D4B /* RxSwift.framework */; }; + 2391DDB659B78C967D812EA6 /* MusicSearchAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = D80AE578E573347AF217BE39 /* MusicSearchAPI.swift */; }; + 26F913A7BDC1EC35FB022B5A /* Alamofire_Alamofire.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 6D222B7035FBC5C09D70CE74 /* Alamofire_Alamofire.bundle */; }; + 2A725E51BCB00DF96DD04BEF /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 467928869F0330445A43681D /* CFNetwork.framework */; }; + 2C39692A6D5E262577C7DA11 /* BaseAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDF8F5C1C8511117DED7C32D /* BaseAPI.swift */; }; 326120F7DEDEE20D49589709 /* API.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5D08E0F64E9B1564D1F3BE20 /* API.framework */; }; - 5D6453AFA01D99595E8ACFA4 /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = E891D811EB51DBCAECC37DE3 /* Base.swift */; }; - A99B588065180EE85FA8EFF8 /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = E891D811EB51DBCAECC37DE3 /* Base.swift */; }; - DDD529AB9C452897A14D0321 /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = E891D811EB51DBCAECC37DE3 /* Base.swift */; }; + 424D6B07220EF984A7660C10 /* Networking.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = B55825E06DF5800D5E7B92B1 /* Networking.framework */; }; + 446712090A64D68B41376EDF /* Networking.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = B55825E06DF5800D5E7B92B1 /* Networking.framework */; }; + 45686C3230194FEBE92C47C4 /* Moya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B5F5459F7C7A914C44B78C63 /* Moya.framework */; }; + 464273F5C8509D75F4E5CE0D /* MusicScapeDomain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D5A8B6CC4F833EE22FDB280 /* MusicScapeDomain.swift */; }; + 4C87D46AAF34C39554311DD0 /* MusicScapeDomain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D5A8B6CC4F833EE22FDB280 /* MusicScapeDomain.swift */; }; + 5CB72B5AEC230AE868694508 /* MusicSearchAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = D80AE578E573347AF217BE39 /* MusicSearchAPI.swift */; }; + 6874210E61D58FE3741BCD7F /* BaseAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDF8F5C1C8511117DED7C32D /* BaseAPI.swift */; }; + 705C16C8D7193AD52D519182 /* BaseAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDF8F5C1C8511117DED7C32D /* BaseAPI.swift */; }; + 76399F79E790AB939D04B4E7 /* MusicScapeDomain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D5A8B6CC4F833EE22FDB280 /* MusicScapeDomain.swift */; }; + 787258EBAED885612AE6DDF3 /* Networking.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B55825E06DF5800D5E7B92B1 /* Networking.framework */; }; + 8395EB280FD89889C2C30F5A /* Networking.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = B55825E06DF5800D5E7B92B1 /* Networking.framework */; }; + 959108CF04166C6CD1A89985 /* OSLog.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 74C6D6CCC5698CC9F32CA7A8 /* OSLog.framework */; }; + 95FFB31918D81FD4F965E4B9 /* CombineMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B730D5DA27A18E33BF191E00 /* CombineMoya.framework */; }; + 9EF23D1E2AD59DFFC53FA6A7 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 90F44E15E3483E7217B0EF5A /* Alamofire.framework */; }; + A01FE3E9DCF7C4C2C9B6615D /* Networking.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = B55825E06DF5800D5E7B92B1 /* Networking.framework */; }; + A6D5C7224A17990A7C0FB9F0 /* MusicSearchAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = D80AE578E573347AF217BE39 /* MusicSearchAPI.swift */; }; + A9CD4EE7C7AA74FF2A8CA956 /* BaseAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDF8F5C1C8511117DED7C32D /* BaseAPI.swift */; }; + B731F554778E6210E87A6970 /* RxMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 34FF1478B98299D89CF66553 /* RxMoya.framework */; }; + C7318B609C11C678CFFB9891 /* EventLimiter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 32BB3579E1451ABF2D031DB2 /* EventLimiter.framework */; }; + D98CD404FB68BFEE28C4968C /* MusicScapeDomain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D5A8B6CC4F833EE22FDB280 /* MusicScapeDomain.swift */; }; + E052AEF1BE007990FD64A154 /* AsyncMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 638745AFE81658B33FE2955D /* AsyncMoya.framework */; }; + E2B5A0C34F19ECE5A11F4864 /* LogMacro.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8D55D892B1CA70A9ACE56649 /* LogMacro.framework */; }; + E7DD476D92C5F08137D9E184 /* Alamofire_Alamofire.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 6D222B7035FBC5C09D70CE74 /* Alamofire_Alamofire.bundle */; }; EDD7AF31FB853974BD32D1B1 /* Test.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDC5107087DD4CAD1DAFD982 /* Test.swift */; }; + F40AB41766E3E6689ABF71CC /* Foundations.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F251FE64BB13DCE866AECBEC /* Foundations.framework */; }; + F9568D04D12F838EA8231DAE /* MusicSearchAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = D80AE578E573347AF217BE39 /* MusicSearchAPI.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -26,6 +52,16 @@ /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ + 2A8E14DADB551E85EE1D39D0 /* Dependencies */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 8; + dstSubfolderSpec = 16; + files = ( + A01FE3E9DCF7C4C2C9B6615D /* Networking.framework in Dependencies */, + ); + name = Dependencies; + runOnlyForDeploymentPostprocessing = 1; + }; 516837D94F6DF600DEB88F30 /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; @@ -36,6 +72,16 @@ name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; }; + 6306EE4EB808DEFE0F3DB241 /* Dependencies */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 8; + dstSubfolderSpec = 16; + files = ( + 446712090A64D68B41376EDF /* Networking.framework in Dependencies */, + ); + name = Dependencies; + runOnlyForDeploymentPostprocessing = 1; + }; 6A0CFB42668CB8B8496B3776 /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; @@ -46,6 +92,26 @@ name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; }; + 747B00A2EF6631EACB564F6B /* Dependencies */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 8; + dstSubfolderSpec = 16; + files = ( + E7DD476D92C5F08137D9E184 /* Alamofire_Alamofire.bundle in Dependencies */, + ); + name = Dependencies; + runOnlyForDeploymentPostprocessing = 1; + }; + 9E195E2A7D5F616FAF402110 /* Dependencies */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 8; + dstSubfolderSpec = 16; + files = ( + 8395EB280FD89889C2C30F5A /* Networking.framework in Dependencies */, + ); + name = Dependencies; + runOnlyForDeploymentPostprocessing = 1; + }; AEC4083920A077C2FB7A0AA6 /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; @@ -76,20 +142,45 @@ name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; }; + DFD6EA1650A7E2BA12ECEFB8 /* Dependencies */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 8; + dstSubfolderSpec = 16; + files = ( + 424D6B07220EF984A7660C10 /* Networking.framework in Dependencies */, + ); + name = Dependencies; + runOnlyForDeploymentPostprocessing = 1; + }; /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ 01BFD62433105EDCC6DD235E /* API-Prod-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "API-Prod-Info.plist"; sourceTree = ""; }; 29C2CCF9059AD0C15B8DBFCC /* API-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "API-Info.plist"; sourceTree = ""; }; + 32BB3579E1451ABF2D031DB2 /* EventLimiter.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = EventLimiter.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 34FF1478B98299D89CF66553 /* RxMoya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RxMoya.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 3900B943343DFF0CC5321425 /* API_Prod.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = API_Prod.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 442647C48CD19D443F514CA1 /* API-Debug-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "API-Debug-Info.plist"; sourceTree = ""; }; + 467928869F0330445A43681D /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; }; + 472D6F32E9C50DD66CBC8D4B /* RxSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RxSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 5D08E0F64E9B1564D1F3BE20 /* API.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = API.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 638745AFE81658B33FE2955D /* AsyncMoya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AsyncMoya.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6D222B7035FBC5C09D70CE74 /* Alamofire_Alamofire.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Alamofire_Alamofire.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 6D5A8B6CC4F833EE22FDB280 /* MusicScapeDomain.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MusicScapeDomain.swift; sourceTree = ""; }; + 74C6D6CCC5698CC9F32CA7A8 /* 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; }; + 8D55D892B1CA70A9ACE56649 /* LogMacro.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = LogMacro.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 90F44E15E3483E7217B0EF5A /* Alamofire.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Alamofire.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 99D0BC597D0A73FD7BCE371A /* API_Debug.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = API_Debug.framework; sourceTree = BUILT_PRODUCTS_DIR; }; AC7E14D23ABCC017862D9D94 /* API_Stage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = API_Stage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; B30E5F9F07B71E43C1E8CE1A /* API-Stage-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "API-Stage-Info.plist"; sourceTree = ""; }; + B55825E06DF5800D5E7B92B1 /* Networking.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Networking.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B5F5459F7C7A914C44B78C63 /* Moya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Moya.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B730D5DA27A18E33BF191E00 /* CombineMoya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CombineMoya.framework; sourceTree = BUILT_PRODUCTS_DIR; }; BD1AB1E609C14C52E15D2A9F /* APITests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "APITests-Info.plist"; sourceTree = ""; }; C036FD16D211498CCFEED5BD /* APITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = APITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - E891D811EB51DBCAECC37DE3 /* Base.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Base.swift; sourceTree = ""; }; + D80AE578E573347AF217BE39 /* MusicSearchAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MusicSearchAPI.swift; sourceTree = ""; }; + EDF8F5C1C8511117DED7C32D /* BaseAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseAPI.swift; sourceTree = ""; }; + F251FE64BB13DCE866AECBEC /* Foundations.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Foundations.framework; sourceTree = BUILT_PRODUCTS_DIR; }; FDC5107087DD4CAD1DAFD982 /* Test.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Test.swift; sourceTree = ""; }; /* End PBXFileReference section */ @@ -105,7 +196,19 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 2A725E51BCB00DF96DD04BEF /* CFNetwork.framework in Frameworks */, + 959108CF04166C6CD1A89985 /* OSLog.framework in Frameworks */, 326120F7DEDEE20D49589709 /* API.framework in Frameworks */, + 9EF23D1E2AD59DFFC53FA6A7 /* Alamofire.framework in Frameworks */, + E052AEF1BE007990FD64A154 /* AsyncMoya.framework in Frameworks */, + 95FFB31918D81FD4F965E4B9 /* CombineMoya.framework in Frameworks */, + C7318B609C11C678CFFB9891 /* EventLimiter.framework in Frameworks */, + F40AB41766E3E6689ABF71CC /* Foundations.framework in Frameworks */, + E2B5A0C34F19ECE5A11F4864 /* LogMacro.framework in Frameworks */, + 45686C3230194FEBE92C47C4 /* Moya.framework in Frameworks */, + 787258EBAED885612AE6DDF3 /* Networking.framework in Frameworks */, + B731F554778E6210E87A6970 /* RxMoya.framework in Frameworks */, + 2377568350EF27110A67EF26 /* RxSwift.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -133,14 +236,35 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 2307192CA72EC0C1441328F6 /* API */ = { + isa = PBXGroup; + children = ( + EDF8F5C1C8511117DED7C32D /* BaseAPI.swift */, + 6D5A8B6CC4F833EE22FDB280 /* MusicScapeDomain.swift */, + D80AE578E573347AF217BE39 /* MusicSearchAPI.swift */, + ); + path = API; + sourceTree = ""; + }; 23C7451DD542BDD28A544137 /* Products */ = { isa = PBXGroup; children = ( + 6D222B7035FBC5C09D70CE74 /* Alamofire_Alamofire.bundle */, + 90F44E15E3483E7217B0EF5A /* Alamofire.framework */, 99D0BC597D0A73FD7BCE371A /* API_Debug.framework */, 3900B943343DFF0CC5321425 /* API_Prod.framework */, AC7E14D23ABCC017862D9D94 /* API_Stage.framework */, 5D08E0F64E9B1564D1F3BE20 /* API.framework */, C036FD16D211498CCFEED5BD /* APITests.xctest */, + 638745AFE81658B33FE2955D /* AsyncMoya.framework */, + B730D5DA27A18E33BF191E00 /* CombineMoya.framework */, + 32BB3579E1451ABF2D031DB2 /* EventLimiter.framework */, + F251FE64BB13DCE866AECBEC /* Foundations.framework */, + 8D55D892B1CA70A9ACE56649 /* LogMacro.framework */, + B5F5459F7C7A914C44B78C63 /* Moya.framework */, + B55825E06DF5800D5E7B92B1 /* Networking.framework */, + 34FF1478B98299D89CF66553 /* RxMoya.framework */, + 472D6F32E9C50DD66CBC8D4B /* RxSwift.framework */, ); name = Products; sourceTree = ""; @@ -165,6 +289,15 @@ path = InfoPlists; sourceTree = ""; }; + 4B32F83A0DB8AA186E087669 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 467928869F0330445A43681D /* CFNetwork.framework */, + 74C6D6CCC5698CC9F32CA7A8 /* OSLog.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 58E6D454C155FBA7DF9F664B /* APITests */ = { isa = PBXGroup; children = ( @@ -186,7 +319,7 @@ B1AAB50C0DD5F9DE7B4B27CC /* Sources */ = { isa = PBXGroup; children = ( - E891D811EB51DBCAECC37DE3 /* Base.swift */, + 2307192CA72EC0C1441328F6 /* API */, ); path = Sources; sourceTree = ""; @@ -196,6 +329,7 @@ children = ( AAA92C3553C7494F48F3BB89 /* Project */, 23C7451DD542BDD28A544137 /* Products */, + 4B32F83A0DB8AA186E087669 /* Frameworks */, ); sourceTree = ""; }; @@ -218,6 +352,7 @@ 7F2C6193546D83DC682DD356 /* Resources */, A021E87C4AAFBF3B9B1C632C /* Frameworks */, B17C8A55A21A2F1D0F1C2F43 /* Embed Frameworks */, + 9E195E2A7D5F616FAF402110 /* Dependencies */, ); buildRules = ( ); @@ -238,6 +373,7 @@ A84314C22D7E98ED57463E6E /* Resources */, A85547301D3A29D74C89BBEE /* Frameworks */, B5BC942D071BBD3DE3546476 /* Embed Frameworks */, + 2A8E14DADB551E85EE1D39D0 /* Dependencies */, ); buildRules = ( ); @@ -258,6 +394,7 @@ 30ED6015E399AFD96B1F9425 /* Resources */, C31E173EF3797C25D29CE619 /* Frameworks */, AEC4083920A077C2FB7A0AA6 /* Embed Frameworks */, + 6306EE4EB808DEFE0F3DB241 /* Dependencies */, ); buildRules = ( ); @@ -278,6 +415,7 @@ 0AE834B0B7D86446B69FC200 /* Resources */, CA3CAF75E5C25BD00AF887E4 /* Frameworks */, 516837D94F6DF600DEB88F30 /* Embed Frameworks */, + DFD6EA1650A7E2BA12ECEFB8 /* Dependencies */, ); buildRules = ( ); @@ -298,6 +436,7 @@ CFA9D359E3790667E03F0772 /* Resources */, A6AAFE8E0C96467ED83304E7 /* Frameworks */, 6A0CFB42668CB8B8496B3776 /* Embed Frameworks */, + 747B00A2EF6631EACB564F6B /* Dependencies */, ); buildRules = ( ); @@ -376,6 +515,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 26F913A7BDC1EC35FB022B5A /* Alamofire_Alamofire.bundle in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -394,7 +534,9 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 13D959CCB3ADBDE44D278578 /* Base.swift in Sources */, + A9CD4EE7C7AA74FF2A8CA956 /* BaseAPI.swift in Sources */, + 464273F5C8509D75F4E5CE0D /* MusicScapeDomain.swift in Sources */, + 2391DDB659B78C967D812EA6 /* MusicSearchAPI.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -402,7 +544,9 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 5D6453AFA01D99595E8ACFA4 /* Base.swift in Sources */, + 705C16C8D7193AD52D519182 /* BaseAPI.swift in Sources */, + 76399F79E790AB939D04B4E7 /* MusicScapeDomain.swift in Sources */, + A6D5C7224A17990A7C0FB9F0 /* MusicSearchAPI.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -410,7 +554,9 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - A99B588065180EE85FA8EFF8 /* Base.swift in Sources */, + 6874210E61D58FE3741BCD7F /* BaseAPI.swift in Sources */, + 4C87D46AAF34C39554311DD0 /* MusicScapeDomain.swift in Sources */, + F9568D04D12F838EA8231DAE /* MusicSearchAPI.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -418,7 +564,9 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - DDD529AB9C452897A14D0321 /* Base.swift in Sources */, + 2C39692A6D5E262577C7DA11 /* BaseAPI.swift in Sources */, + D98CD404FB68BFEE28C4968C /* MusicScapeDomain.swift in Sources */, + 5CB72B5AEC230AE868694508 /* MusicSearchAPI.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -443,6 +591,10 @@ 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/API-Debug-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 16.6; @@ -452,6 +604,17 @@ "@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.Bandscape.API; PRODUCT_NAME = API_Debug; SDKROOT = iphoneos; @@ -477,6 +640,10 @@ 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/API-Prod-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 16.6; @@ -486,6 +653,17 @@ "@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.Bandscape.API; PRODUCT_NAME = API_Prod; SDKROOT = iphoneos; @@ -627,6 +805,10 @@ 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/API-Stage-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 16.6; @@ -636,6 +818,17 @@ "@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.Bandscape.API; PRODUCT_NAME = API_Stage; SDKROOT = iphoneos; @@ -665,6 +858,10 @@ 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/API-Prod-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 16.6; @@ -674,6 +871,17 @@ "@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.Bandscape.API; PRODUCT_NAME = API_Prod; SDKROOT = iphoneos; @@ -694,6 +902,10 @@ 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/APITests-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 16.6; LD_RUNPATH_SEARCH_PATHS = ( @@ -701,6 +913,17 @@ "@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.Bandscape.API.APITests; PRODUCT_NAME = APITests; SDKROOT = iphoneos; @@ -727,6 +950,10 @@ 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/API-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 16.6; @@ -736,6 +963,17 @@ "@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.Bandscape.API; PRODUCT_NAME = API; SDKROOT = iphoneos; @@ -760,6 +998,10 @@ 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/APITests-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 16.6; LD_RUNPATH_SEARCH_PATHS = ( @@ -767,6 +1009,17 @@ "@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.Bandscape.API.APITests; PRODUCT_NAME = APITests; SDKROOT = iphoneos; @@ -789,6 +1042,10 @@ 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/API-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 16.6; @@ -798,6 +1055,17 @@ "@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.Bandscape.API; PRODUCT_NAME = API; SDKROOT = iphoneos; @@ -823,6 +1091,10 @@ 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/API-Debug-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 16.6; @@ -832,6 +1104,17 @@ "@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.Bandscape.API; PRODUCT_NAME = API_Debug; SDKROOT = iphoneos; @@ -861,6 +1144,10 @@ 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/API-Stage-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 16.6; @@ -870,6 +1157,17 @@ "@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.Bandscape.API; PRODUCT_NAME = API_Stage; SDKROOT = iphoneos; diff --git a/Projects/Core/Data/API/Derived/InfoPlists/API-Debug-Info.plist b/Projects/Core/Data/API/Derived/InfoPlists/API-Debug-Info.plist index 323e5ec..65905e5 100644 --- a/Projects/Core/Data/API/Derived/InfoPlists/API-Debug-Info.plist +++ b/Projects/Core/Data/API/Derived/InfoPlists/API-Debug-Info.plist @@ -2,6 +2,8 @@ + BASE_URL + $(BASE_URL) CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleExecutable @@ -13,10 +15,12 @@ CFBundleName $(PRODUCT_NAME) CFBundlePackageType - FMWK + APPL CFBundleShortVersionString - 1.0 + 1.0.0 CFBundleVersion 1 + UIUserInterfaceStyle + Light diff --git a/Projects/Core/Data/API/Derived/InfoPlists/API-Info.plist b/Projects/Core/Data/API/Derived/InfoPlists/API-Info.plist index 323e5ec..65905e5 100644 --- a/Projects/Core/Data/API/Derived/InfoPlists/API-Info.plist +++ b/Projects/Core/Data/API/Derived/InfoPlists/API-Info.plist @@ -2,6 +2,8 @@ + BASE_URL + $(BASE_URL) CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleExecutable @@ -13,10 +15,12 @@ CFBundleName $(PRODUCT_NAME) CFBundlePackageType - FMWK + APPL CFBundleShortVersionString - 1.0 + 1.0.0 CFBundleVersion 1 + UIUserInterfaceStyle + Light diff --git a/Projects/Core/Data/API/Derived/InfoPlists/API-Prod-Info.plist b/Projects/Core/Data/API/Derived/InfoPlists/API-Prod-Info.plist index 323e5ec..65905e5 100644 --- a/Projects/Core/Data/API/Derived/InfoPlists/API-Prod-Info.plist +++ b/Projects/Core/Data/API/Derived/InfoPlists/API-Prod-Info.plist @@ -2,6 +2,8 @@ + BASE_URL + $(BASE_URL) CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleExecutable @@ -13,10 +15,12 @@ CFBundleName $(PRODUCT_NAME) CFBundlePackageType - FMWK + APPL CFBundleShortVersionString - 1.0 + 1.0.0 CFBundleVersion 1 + UIUserInterfaceStyle + Light diff --git a/Projects/Core/Data/API/Derived/InfoPlists/API-Stage-Info.plist b/Projects/Core/Data/API/Derived/InfoPlists/API-Stage-Info.plist index 323e5ec..65905e5 100644 --- a/Projects/Core/Data/API/Derived/InfoPlists/API-Stage-Info.plist +++ b/Projects/Core/Data/API/Derived/InfoPlists/API-Stage-Info.plist @@ -2,6 +2,8 @@ + BASE_URL + $(BASE_URL) CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleExecutable @@ -13,10 +15,12 @@ CFBundleName $(PRODUCT_NAME) CFBundlePackageType - FMWK + APPL CFBundleShortVersionString - 1.0 + 1.0.0 CFBundleVersion 1 + UIUserInterfaceStyle + Light diff --git a/Projects/Core/Data/API/Project.swift b/Projects/Core/Data/API/Project.swift index 6f95c1c..ab03655 100644 --- a/Projects/Core/Data/API/Project.swift +++ b/Projects/Core/Data/API/Project.swift @@ -2,7 +2,6 @@ import Foundation import ProjectDescription import DependencyPlugin import ProjectTemplatePlugin -import ProjectTemplatePlugin import DependencyPackagePlugin let project = Project.makeAppModule( @@ -11,7 +10,9 @@ let project = Project.makeAppModule( product: .staticFramework, settings: .settings(), dependencies: [ - + .Network(implements: .Networking), + ], - sources: ["Sources/**"] + sources: ["Sources/**"], + infoPlist: .moduleInfoPlist ) diff --git a/Projects/Core/Data/API/Sources/API/BaseAPI.swift b/Projects/Core/Data/API/Sources/API/BaseAPI.swift new file mode 100644 index 0000000..99fb1c7 --- /dev/null +++ b/Projects/Core/Data/API/Sources/API/BaseAPI.swift @@ -0,0 +1,22 @@ +// +// BaseAPI.swift +// API +// +// Created by Wonji Suh on 10/23/25. +// + +import Foundation + +public enum BaseAPI : String { + case base + + + public var description: String { + switch self { + case .base: + return "https://\(Bundle.main.object(forInfoDictionaryKey: "BASE_URL") as? String ?? "")" + + } + } +} + diff --git a/Projects/Core/Data/API/Sources/API/MusicScapeDomain.swift b/Projects/Core/Data/API/Sources/API/MusicScapeDomain.swift new file mode 100644 index 0000000..5c7bf2c --- /dev/null +++ b/Projects/Core/Data/API/Sources/API/MusicScapeDomain.swift @@ -0,0 +1,31 @@ +// +// MusicScapeDomain.swift +// API +// +// Created by Wonji Suh on 10/23/25. +// + +import Foundation +import Networking + + +public enum MusicScapeDomain { + case searchMusic + case searchDetailMusic +} + +extension MusicScapeDomain: DomainType { + public var baseURLString: String { + return BaseAPI.base.description + } + + public var url: String { + switch self { + case .searchMusic: + return "search" + + case .searchDetailMusic: + return "lookup" + } + } +} diff --git a/Projects/Core/Data/API/Sources/API/MusicSearchAPI.swift b/Projects/Core/Data/API/Sources/API/MusicSearchAPI.swift new file mode 100644 index 0000000..dbcd240 --- /dev/null +++ b/Projects/Core/Data/API/Sources/API/MusicSearchAPI.swift @@ -0,0 +1,23 @@ +// +// MusicSearchAPI.swift +// API +// +// Created by Wonji Suh on 10/23/25. +// + +import Foundation + +public enum MusicSearchAPI: String { + case search + case detail + + public var description: String { + switch self { + case .search: + return "" + + case .detail: + return "" + } + } +} diff --git a/Projects/Core/Data/API/Sources/Base.swift b/Projects/Core/Data/API/Sources/Base.swift deleted file mode 100644 index fc5212e..0000000 --- a/Projects/Core/Data/API/Sources/Base.swift +++ /dev/null @@ -1,22 +0,0 @@ -// -// base.swift -// DDDAttendance. -// -// Created by Roy on 2025-10-22 -// 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/Data/DataInterface/DataInterface.xcodeproj/project.pbxproj b/Projects/Core/Data/DataInterface/DataInterface.xcodeproj/project.pbxproj index 7f2a4e3..78eaf9f 100644 --- a/Projects/Core/Data/DataInterface/DataInterface.xcodeproj/project.pbxproj +++ b/Projects/Core/Data/DataInterface/DataInterface.xcodeproj/project.pbxproj @@ -3,21 +3,29 @@ archiveVersion = 1; classes = { }; - objectVersion = 55; + objectVersion = 56; objects = { /* Begin PBXBuildFile section */ - 2069D2DAC09B8BBF632CF0F3 /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B4D4C1979EC3168F2C7C011 /* Base.swift */; }; 26060CCCFA00BBCEE172C51E /* Model.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = B0883D5D36210798EE6A8723 /* Model.framework */; }; 2A88F5D99E78F45A949EE062 /* DataInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DEFA4D170743668E55DC05FB /* DataInterface.framework */; }; - 376A8E134F2D077D9551A786 /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B4D4C1979EC3168F2C7C011 /* Base.swift */; }; + 36DB32E2003952DFD64DDB8A /* DataInterfaceExported.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B4EE422C6BDF1092569EFBE /* DataInterfaceExported.swift */; }; + 54C61C91CF82013A39EA6247 /* DataInterfaceExported.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B4EE422C6BDF1092569EFBE /* DataInterfaceExported.swift */; }; 5B20A84AC1E129B86D1B4E6D /* Test.swift in Sources */ = {isa = PBXBuildFile; fileRef = FA1E1C0477536B6ADA014FE8 /* Test.swift */; }; + 62709A2606CACE187E695F0F /* DataInterfaceExported.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B4EE422C6BDF1092569EFBE /* DataInterfaceExported.swift */; }; + 740D0895932BCEC508B46E55 /* DataInterfaceExported.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1B4EE422C6BDF1092569EFBE /* DataInterfaceExported.swift */; }; + 7F1AC7292EB44D7700C82441 /* MusicDetailRepositoryProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F1AC7282EB44D6900C82441 /* MusicDetailRepositoryProtocol.swift */; }; + 7F1AC72A2EB44D7700C82441 /* MusicDetailRepositoryProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F1AC7282EB44D6900C82441 /* MusicDetailRepositoryProtocol.swift */; }; + 7F1AC72B2EB44D7700C82441 /* MusicDetailRepositoryProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F1AC7282EB44D6900C82441 /* MusicDetailRepositoryProtocol.swift */; }; + 7F1AC72C2EB44D7700C82441 /* MusicDetailRepositoryProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F1AC7282EB44D6900C82441 /* MusicDetailRepositoryProtocol.swift */; }; + 856868F5062A841E55BC418C /* MusicSearchRepositoryProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC3BA308B30101EEC71E16F6 /* MusicSearchRepositoryProtocol.swift */; }; 9D3E93041916AC43128C9A07 /* Model.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B0883D5D36210798EE6A8723 /* Model.framework */; }; + A878759C9D55CE7F06A93989 /* MusicSearchRepositoryProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC3BA308B30101EEC71E16F6 /* MusicSearchRepositoryProtocol.swift */; }; + AFF879F6BB1B0481DFAA9662 /* MusicSearchRepositoryProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC3BA308B30101EEC71E16F6 /* MusicSearchRepositoryProtocol.swift */; }; + B31B321ED8D7BCF199CACE3D /* MusicSearchRepositoryProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC3BA308B30101EEC71E16F6 /* MusicSearchRepositoryProtocol.swift */; }; D0EAC38B2859EDF62A580653 /* Model.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = B0883D5D36210798EE6A8723 /* Model.framework */; }; - D90AD887D4D0EFE4BF2A26A2 /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B4D4C1979EC3168F2C7C011 /* Base.swift */; }; E18B0AE27410B4BED0F4B68A /* Model.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = B0883D5D36210798EE6A8723 /* Model.framework */; }; ED6C9407A2FC3B095C3CF271 /* Model.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = B0883D5D36210798EE6A8723 /* Model.framework */; }; - F6112CF50D6145699B915F25 /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2B4D4C1979EC3168F2C7C011 /* Base.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -126,12 +134,14 @@ /* Begin PBXFileReference section */ 1500A4957FAD95EA59FF720C /* DataInterface_Stage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DataInterface_Stage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1A95EC07094854AC4F4215FE /* DataInterface-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "DataInterface-Info.plist"; sourceTree = ""; }; - 2B4D4C1979EC3168F2C7C011 /* Base.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Base.swift; sourceTree = ""; }; + 1B4EE422C6BDF1092569EFBE /* DataInterfaceExported.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataInterfaceExported.swift; sourceTree = ""; }; 47E60E5F70543438834B1B29 /* DataInterface-Prod-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "DataInterface-Prod-Info.plist"; sourceTree = ""; }; 6A88F55149AF95EB216E8E4B /* DataInterface_Debug.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DataInterface_Debug.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 7F1AC7282EB44D6900C82441 /* MusicDetailRepositoryProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MusicDetailRepositoryProtocol.swift; sourceTree = ""; }; 8867B26BFB94DB9064D550A6 /* DataInterfaceTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DataInterfaceTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 981778211ECAE8C9F3519723 /* DataInterface-Stage-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "DataInterface-Stage-Info.plist"; sourceTree = ""; }; B0883D5D36210798EE6A8723 /* Model.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Model.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BC3BA308B30101EEC71E16F6 /* MusicSearchRepositoryProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MusicSearchRepositoryProtocol.swift; sourceTree = ""; }; C4588FFF4FA1A9F35AB3D39B /* DataInterface_Prod.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DataInterface_Prod.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D41877E7A655281D9C631C30 /* DataInterfaceTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "DataInterfaceTests-Info.plist"; sourceTree = ""; }; DEFA4D170743668E55DC05FB /* DataInterface.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DataInterface.framework; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -238,11 +248,21 @@ F5C64B89EAABF4CDCBD2F2D1 /* Sources */ = { isa = PBXGroup; children = ( - 2B4D4C1979EC3168F2C7C011 /* Base.swift */, + 7F1AC7282EB44D6900C82441 /* MusicDetailRepositoryProtocol.swift */, + FA220A1DB1B1B5FC5B819578 /* Exported */, + BC3BA308B30101EEC71E16F6 /* MusicSearchRepositoryProtocol.swift */, ); path = Sources; sourceTree = ""; }; + FA220A1DB1B1B5FC5B819578 /* Exported */ = { + isa = PBXGroup; + children = ( + 1B4EE422C6BDF1092569EFBE /* DataInterfaceExported.swift */, + ); + path = Exported; + sourceTree = ""; + }; FBB6E72A4974E94551B96D17 /* InfoPlists */ = { isa = PBXGroup; children = ( @@ -370,8 +390,6 @@ isa = PBXProject; attributes = { BuildIndependentTargetsInParallel = YES; - TargetAttributes = { - }; }; buildConfigurationList = A05AC6214B7656319D995795 /* Build configuration list for PBXProject "DataInterface" */; compatibilityVersion = "Xcode 14.0"; @@ -446,7 +464,9 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - D90AD887D4D0EFE4BF2A26A2 /* Base.swift in Sources */, + 62709A2606CACE187E695F0F /* DataInterfaceExported.swift in Sources */, + 7F1AC72B2EB44D7700C82441 /* MusicDetailRepositoryProtocol.swift in Sources */, + AFF879F6BB1B0481DFAA9662 /* MusicSearchRepositoryProtocol.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -454,7 +474,9 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 376A8E134F2D077D9551A786 /* Base.swift in Sources */, + 740D0895932BCEC508B46E55 /* DataInterfaceExported.swift in Sources */, + 7F1AC72C2EB44D7700C82441 /* MusicDetailRepositoryProtocol.swift in Sources */, + B31B321ED8D7BCF199CACE3D /* MusicSearchRepositoryProtocol.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -462,7 +484,9 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 2069D2DAC09B8BBF632CF0F3 /* Base.swift in Sources */, + 36DB32E2003952DFD64DDB8A /* DataInterfaceExported.swift in Sources */, + 7F1AC72A2EB44D7700C82441 /* MusicDetailRepositoryProtocol.swift in Sources */, + A878759C9D55CE7F06A93989 /* MusicSearchRepositoryProtocol.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -470,7 +494,9 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - F6112CF50D6145699B915F25 /* Base.swift in Sources */, + 54C61C91CF82013A39EA6247 /* DataInterfaceExported.swift in Sources */, + 7F1AC7292EB44D7700C82441 /* MusicDetailRepositoryProtocol.swift in Sources */, + 856868F5062A841E55BC418C /* MusicSearchRepositoryProtocol.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -594,10 +620,7 @@ SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = ( - "$(inherited)", - DEBUG, - ); + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; SWIFT_COMPILATION_MODE = singlefile; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; @@ -768,10 +791,7 @@ SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = ( - "$(inherited)", - DEBUG, - ); + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; SWIFT_COMPILATION_MODE = singlefile; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; @@ -859,10 +879,7 @@ SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = ( - "$(inherited)", - DEBUG, - ); + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; SWIFT_COMPILATION_MODE = singlefile; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; @@ -897,10 +914,7 @@ SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = ( - "$(inherited)", - DEBUG, - ); + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; SWIFT_COMPILATION_MODE = singlefile; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; @@ -927,10 +941,7 @@ SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = ( - "$(inherited)", - DEBUG, - ); + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; SWIFT_COMPILATION_MODE = singlefile; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; diff --git a/Projects/Core/Data/DataInterface/Project.swift b/Projects/Core/Data/DataInterface/Project.swift index ed92f25..59780e3 100644 --- a/Projects/Core/Data/DataInterface/Project.swift +++ b/Projects/Core/Data/DataInterface/Project.swift @@ -2,7 +2,6 @@ import Foundation import ProjectDescription import DependencyPlugin import ProjectTemplatePlugin -import ProjectTemplatePlugin import DependencyPackagePlugin let project = Project.makeAppModule( diff --git a/Projects/Core/Data/DataInterface/Sources/Base.swift b/Projects/Core/Data/DataInterface/Sources/Base.swift deleted file mode 100644 index fc5212e..0000000 --- a/Projects/Core/Data/DataInterface/Sources/Base.swift +++ /dev/null @@ -1,22 +0,0 @@ -// -// base.swift -// DDDAttendance. -// -// Created by Roy on 2025-10-22 -// 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/Data/DataInterface/Sources/Exported/DataInterfaceExported.swift b/Projects/Core/Data/DataInterface/Sources/Exported/DataInterfaceExported.swift new file mode 100644 index 0000000..e22f529 --- /dev/null +++ b/Projects/Core/Data/DataInterface/Sources/Exported/DataInterfaceExported.swift @@ -0,0 +1,8 @@ +// +// DataInterfaceExported.swift +// DataInterface +// +// Created by Wonji Suh on 10/24/25. +// + +@_exported import Model diff --git a/Projects/Core/Data/DataInterface/Sources/MusicDetailRepositoryProtocol.swift b/Projects/Core/Data/DataInterface/Sources/MusicDetailRepositoryProtocol.swift new file mode 100644 index 0000000..7fdfa95 --- /dev/null +++ b/Projects/Core/Data/DataInterface/Sources/MusicDetailRepositoryProtocol.swift @@ -0,0 +1,13 @@ +// +// MusicDetailRepositoryProtocol.swift +// DataInterface +// +// Created by Wonji Suh on 10/31/25. +// + +import Foundation +import Model + +public protocol MusicDetailRepositoryProtocol : Sendable { + func fetchDetailMusic(id: String) async throws -> [ITunesTrack] +} diff --git a/Projects/Core/Data/DataInterface/Sources/MusicSearchRepositoryProtocol.swift b/Projects/Core/Data/DataInterface/Sources/MusicSearchRepositoryProtocol.swift new file mode 100644 index 0000000..75a8e36 --- /dev/null +++ b/Projects/Core/Data/DataInterface/Sources/MusicSearchRepositoryProtocol.swift @@ -0,0 +1,13 @@ +// +// MusicSearchRepositoryProtocol.swift +// DataInterface +// +// Created by Wonji Suh on 10/24/25. +// + +import Foundation +import Model + +public protocol MusicSearchRepositoryProtocol: Sendable { + func fetchMusic(search: String) async throws -> [ITunesTrack] +} diff --git a/Projects/Core/Data/Model/Model.xcodeproj/project.pbxproj b/Projects/Core/Data/Model/Model.xcodeproj/project.pbxproj index a492754..022017b 100644 --- a/Projects/Core/Data/Model/Model.xcodeproj/project.pbxproj +++ b/Projects/Core/Data/Model/Model.xcodeproj/project.pbxproj @@ -7,11 +7,11 @@ objects = { /* Begin PBXBuildFile section */ + 3881AB75ED56AB34318CCB8E /* ITunesSearchResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = F66A0A5F7AC6F5B8BB54D584 /* ITunesSearchResponseDTO.swift */; }; 5D3A99ACAAD60C2C3B198646 /* Model.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BD19E51E52BA74F9617F5F81 /* Model.framework */; }; - 78911C6E462B87C91C44BD2F /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94DF26FC571CCDF104E7773B /* Base.swift */; }; - 7E2B716A5FCCDA9D59D34E97 /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94DF26FC571CCDF104E7773B /* Base.swift */; }; - 896C20964C4D86D613A867B2 /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94DF26FC571CCDF104E7773B /* Base.swift */; }; - F2863E014C0338E68C6CFB86 /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94DF26FC571CCDF104E7773B /* Base.swift */; }; + 68C591D741E826F458381AA7 /* ITunesSearchResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = F66A0A5F7AC6F5B8BB54D584 /* ITunesSearchResponseDTO.swift */; }; + AA5DDD4E1A67E381ACFEC726 /* ITunesSearchResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = F66A0A5F7AC6F5B8BB54D584 /* ITunesSearchResponseDTO.swift */; }; + AEBBD8A22CB5AE1F4FC67C56 /* ITunesSearchResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = F66A0A5F7AC6F5B8BB54D584 /* ITunesSearchResponseDTO.swift */; }; F9E1B4E53E741BE102D9B7CE /* Test.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9984A08C45315A297D59E054 /* Test.swift */; }; /* End PBXBuildFile section */ @@ -83,7 +83,6 @@ 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 = ""; }; - 94DF26FC571CCDF104E7773B /* Base.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Base.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 = ""; }; AFD27768F488C1D25C3CF526 /* Model_Stage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Model_Stage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -91,6 +90,7 @@ BD19E51E52BA74F9617F5F81 /* Model.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Model.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; }; + F66A0A5F7AC6F5B8BB54D584 /* ITunesSearchResponseDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ITunesSearchResponseDTO.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -186,7 +186,7 @@ BD6D8EACB20C945F687C5726 /* Sources */ = { isa = PBXGroup; children = ( - 94DF26FC571CCDF104E7773B /* Base.swift */, + F66A0A5F7AC6F5B8BB54D584 /* ITunesSearchResponseDTO.swift */, ); path = Sources; sourceTree = ""; @@ -386,7 +386,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 78911C6E462B87C91C44BD2F /* Base.swift in Sources */, + AEBBD8A22CB5AE1F4FC67C56 /* ITunesSearchResponseDTO.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -394,7 +394,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 896C20964C4D86D613A867B2 /* Base.swift in Sources */, + 3881AB75ED56AB34318CCB8E /* ITunesSearchResponseDTO.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -402,7 +402,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - F2863E014C0338E68C6CFB86 /* Base.swift in Sources */, + AA5DDD4E1A67E381ACFEC726 /* ITunesSearchResponseDTO.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -418,7 +418,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 7E2B716A5FCCDA9D59D34E97 /* Base.swift in Sources */, + 68C591D741E826F458381AA7 /* ITunesSearchResponseDTO.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Projects/Core/Data/Model/Project.swift b/Projects/Core/Data/Model/Project.swift index 1d2a7fe..e75d889 100644 --- a/Projects/Core/Data/Model/Project.swift +++ b/Projects/Core/Data/Model/Project.swift @@ -2,7 +2,6 @@ import Foundation import ProjectDescription import DependencyPlugin import ProjectTemplatePlugin -import ProjectTemplatePlugin import DependencyPackagePlugin let project = Project.makeAppModule( diff --git a/Projects/Core/Data/Model/Sources/Base.swift b/Projects/Core/Data/Model/Sources/Base.swift deleted file mode 100644 index 6297cc4..0000000 --- a/Projects/Core/Data/Model/Sources/Base.swift +++ /dev/null @@ -1,22 +0,0 @@ -// -// 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/Data/Model/Sources/ITunesSearchResponseDTO.swift b/Projects/Core/Data/Model/Sources/ITunesSearchResponseDTO.swift new file mode 100644 index 0000000..d4f65d1 --- /dev/null +++ b/Projects/Core/Data/Model/Sources/ITunesSearchResponseDTO.swift @@ -0,0 +1,102 @@ +// +// ITunesSearchResponseDTO.swift +// Model +// +// Created by Wonji Suh on 10/24/25. +// + +import Foundation + +public struct ITunesSearchResponseDTO: Decodable { + public let resultCount: Int + public let results: [ITunesTrack] +} + +// 트랙 항목 +public struct ITunesTrack: Decodable { + public let wrapperType: String? + public let kind: String? + + public let artistId: Int? + public let collectionId: Int? + public let trackId: Int + + public let artistName: String + public let collectionName: String? + public let trackName: String + + public let previewUrl: URL? + public let artworkUrl100: URL? + + public let releaseDate: String + public let primaryGenreName: String + public let collectionCensoredName: String + + enum CodingKeys: String, CodingKey { + case wrapperType, kind, artistId, collectionId, trackId + case artistName, collectionName, trackName, collectionCensoredName + case previewUrl, artworkUrl100 + case releaseDate, primaryGenreName + } + + public init( + wrapperType: String?, + kind: String?, + artistId: Int?, + collectionId: Int?, + trackId: Int, + artistName: String, + collectionName: String?, + trackName: String, + previewUrl: URL?, + artworkUrl100: URL?, + releaseDate: String, + primaryGenreName: String, + collectionCensoredName: String + ) { + self.wrapperType = wrapperType + self.kind = kind + self.artistId = artistId + self.collectionId = collectionId + self.trackId = trackId + self.artistName = artistName + self.collectionName = collectionName + self.trackName = trackName + self.previewUrl = previewUrl + self.artworkUrl100 = artworkUrl100 + self.releaseDate = releaseDate + self.primaryGenreName = primaryGenreName + self.collectionCensoredName = collectionCensoredName + } +} + + +public extension ITunesTrack { + static func mock( + id: Int, + artist: String = "IU", + album: String = "Spring Album", + name: String = "Spring Love", + art: String = "https://example.com/art.jpg", + preview: String = "https://example.com/prev.m4a", + release: String = "2024-03-18T12:00:00Z", + genre: String = "K-Pop", + collectionCensoredName: String = "봄 사랑 벚꽃 말고 - Single" + ) -> Self { + .init( + wrapperType: "track", + kind: "song", + artistId: 1, + collectionId: 10, + trackId: id, + artistName: artist, + collectionName: album, + trackName: name, + previewUrl: URL(string: preview), + artworkUrl100: URL(string: art), + releaseDate: release, + primaryGenreName: genre, + collectionCensoredName: collectionCensoredName + ) + } +} diff --git a/Projects/Core/Data/Repository/Project.swift b/Projects/Core/Data/Repository/Project.swift index 4e65d9c..aa16a2c 100644 --- a/Projects/Core/Data/Repository/Project.swift +++ b/Projects/Core/Data/Repository/Project.swift @@ -2,7 +2,6 @@ import Foundation import ProjectDescription import DependencyPlugin import ProjectTemplatePlugin -import ProjectTemplatePlugin import DependencyPackagePlugin let project = Project.makeAppModule( @@ -12,7 +11,8 @@ let project = Project.makeAppModule( settings: .settings(), dependencies: [ .Network(implements: .Networking), - .Data(implements: .DataInterface) + .Data(implements: .DataInterface), + .Data(implements: .Service) ], sources: ["Sources/**"] ) diff --git a/Projects/Core/Data/Repository/Repository.xcodeproj/project.pbxproj b/Projects/Core/Data/Repository/Repository.xcodeproj/project.pbxproj index 58bb496..9d78560 100644 --- a/Projects/Core/Data/Repository/Repository.xcodeproj/project.pbxproj +++ b/Projects/Core/Data/Repository/Repository.xcodeproj/project.pbxproj @@ -3,28 +3,59 @@ archiveVersion = 1; classes = { }; - objectVersion = 55; + objectVersion = 56; objects = { /* Begin PBXBuildFile section */ 065CDD9E3F159CCEC6E1A6C0 /* Repository.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03D39D8FFA6B36EC82B3C778 /* Repository.framework */; }; - 09F9D30287D045A836B62E64 /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8577FA41D47DE037F2387BE /* Base.swift */; }; - 1188C881A64450A8DE7F1643 /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8577FA41D47DE037F2387BE /* Base.swift */; }; + 08A491E1067C93EFC4474817 /* Moya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C1CC14A70BD175D51D4A7EEB /* Moya.framework */; }; + 0E8E0386D1DD34B39FB8C982 /* API.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BC8B445ECB8E6566CF649974 /* API.framework */; }; 233EAF0D96C6FF11DCB925F5 /* Networking.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = E9256A28824CD986ECC1EF08 /* Networking.framework */; }; 2346B53A47FF5D90E70215B7 /* DataInterface.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 0C051AEF60DC4BF2E9179E04 /* DataInterface.framework */; }; - 3709BFB37049001BA7A8182C /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8577FA41D47DE037F2387BE /* Base.swift */; }; + 29734DE54DCB5E7218BF8203 /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFD6BEF4EEDC73B527495BB6 /* RxSwift.framework */; }; + 2C23766DA5EC5A267DB2DE38 /* Service.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 549C82A8C41E9EBA4FDC62C7 /* Service.framework */; }; 41FC709A51F996C647FD9DFC /* DataInterface.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 0C051AEF60DC4BF2E9179E04 /* DataInterface.framework */; }; + 45C48AEEAADB0663CA55BCE9 /* MusicSearchRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60A1061A0F7A5DEF2B3433B7 /* MusicSearchRepository.swift */; }; 4878837B4312F041BF286CD0 /* Networking.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = E9256A28824CD986ECC1EF08 /* Networking.framework */; }; - 5E341F17BAE8AF7203AD0E94 /* Test.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB490D15B7B70995BF4D615B /* Test.swift */; }; + 5FF9785CD2D8ABD53E784222 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4AA1CFA625141FD7F9B1DB22 /* Alamofire.framework */; }; + 6705DA518DEFDF32D0CD39D8 /* MusicSearchRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60A1061A0F7A5DEF2B3433B7 /* MusicSearchRepository.swift */; }; + 6F837F554EA43B635EE2C5CC /* MockMusicSearchRepositoryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FED9E1BBAF2A605DF08D38F /* MockMusicSearchRepositoryTests.swift */; }; + 7355412663C7423424F3A245 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F43CDC33501823FDC6E616D3 /* CFNetwork.framework */; }; + 7BA89C01047091FDCCB28455 /* Alamofire_Alamofire.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 6C8A7366562A815FBE2C7810 /* Alamofire_Alamofire.bundle */; }; + 7F1AC7302EB44DE100C82441 /* MusicDetailRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F1AC72F2EB44DD900C82441 /* MusicDetailRepository.swift */; }; + 7F1AC7312EB44DE100C82441 /* MusicDetailRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F1AC72F2EB44DD900C82441 /* MusicDetailRepository.swift */; }; + 7F1AC7322EB44DE100C82441 /* MusicDetailRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F1AC72F2EB44DD900C82441 /* MusicDetailRepository.swift */; }; + 7F1AC7332EB44DE100C82441 /* MusicDetailRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F1AC72F2EB44DD900C82441 /* MusicDetailRepository.swift */; }; + 7F1AC7362EB44ED300C82441 /* MockMusicDetailRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F1AC7342EB44E3200C82441 /* MockMusicDetailRepository.swift */; }; + 7F1AC7372EB44ED300C82441 /* MockMusicDetailRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F1AC7342EB44E3200C82441 /* MockMusicDetailRepository.swift */; }; + 7F1AC7382EB44ED300C82441 /* MockMusicDetailRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F1AC7342EB44E3200C82441 /* MockMusicDetailRepository.swift */; }; + 7F1AC7392EB44ED300C82441 /* MockMusicDetailRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F1AC7342EB44E3200C82441 /* MockMusicDetailRepository.swift */; }; + 7F1AC7482EB4518E00C82441 /* MockMusicDetailRepositoryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F1AC7472EB4518A00C82441 /* MockMusicDetailRepositoryTests.swift */; }; + 81C2AF9977596554B4F5A0F2 /* MockMusicSearchRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 588E92682ED2660339A34860 /* MockMusicSearchRepository.swift */; }; 8A4EA2436DC81B20486209C6 /* DataInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0C051AEF60DC4BF2E9179E04 /* DataInterface.framework */; }; 8D3EE4A12A835297EA66F043 /* Model.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B001E4EB12F1B31552843EC8 /* Model.framework */; }; + 8E479DDB904E8ABBD71E8302 /* MusicSearchRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60A1061A0F7A5DEF2B3433B7 /* MusicSearchRepository.swift */; }; + A2333F1CDF2EE173146917D2 /* Alamofire_Alamofire.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 6C8A7366562A815FBE2C7810 /* Alamofire_Alamofire.bundle */; }; A698F595B604CF8C68EA6FF2 /* Networking.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = E9256A28824CD986ECC1EF08 /* Networking.framework */; }; + A6F8318AFCC8184F57011D50 /* MusicSearchRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60A1061A0F7A5DEF2B3433B7 /* MusicSearchRepository.swift */; }; B4CC4F2D8A5386E268661131 /* DataInterface.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 0C051AEF60DC4BF2E9179E04 /* DataInterface.framework */; }; + BC3E81878EF9E2A2651B2F87 /* LogMacro.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B6CD10CD4A587CB9F328BD12 /* LogMacro.framework */; }; + C1271844DE5B9D13E9E7CBC0 /* Service.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 549C82A8C41E9EBA4FDC62C7 /* Service.framework */; }; + C1669AB5BB04B11E566D8683 /* AsyncMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 19A290AEAD111F015CBFDADB /* AsyncMoya.framework */; }; + CA96831896F9A6B6811C6C3E /* EventLimiter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 39FAE0770B930CBF414B8F54 /* EventLimiter.framework */; }; + CD59907F5FF407743514DB95 /* Service.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 549C82A8C41E9EBA4FDC62C7 /* Service.framework */; }; + DA272BEA4FC48206CDC3E121 /* RxMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F9C30B633FFEC1DE967352E8 /* RxMoya.framework */; }; + DB3850164E364C8631CF1E02 /* MockMusicSearchRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 588E92682ED2660339A34860 /* MockMusicSearchRepository.swift */; }; + DCD884BEF59149765121ADBC /* Service.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 549C82A8C41E9EBA4FDC62C7 /* Service.framework */; }; DEEC771D534965D1D392318A /* Foundations.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1B285930F3594266FEB0BC20 /* Foundations.framework */; }; + DFE6A1AEA515B11BA230F73B /* MockMusicSearchRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 588E92682ED2660339A34860 /* MockMusicSearchRepository.swift */; }; + E3B07C5281726FE5EFA47795 /* Service.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 549C82A8C41E9EBA4FDC62C7 /* Service.framework */; }; EAA7EA5BDD8E847A1A0A5854 /* Networking.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = E9256A28824CD986ECC1EF08 /* Networking.framework */; }; ED7ABEC4AB9FBA1707BB2752 /* DataInterface.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 0C051AEF60DC4BF2E9179E04 /* DataInterface.framework */; }; - F1278FBC5969E918EE44DB42 /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8577FA41D47DE037F2387BE /* Base.swift */; }; + F8B52702933627F2493EF0EB /* MockMusicSearchRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 588E92682ED2660339A34860 /* MockMusicSearchRepository.swift */; }; + FD0FCD7CCB8F7E01AA5683F1 /* OSLog.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C2B6D597B16E9CDDB21DA680 /* OSLog.framework */; }; FEFB0DA0A60E3FBF3A1B1416 /* Networking.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E9256A28824CD986ECC1EF08 /* Networking.framework */; }; + FFDACF7E5B91FBAE76D131B1 /* CombineMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A402D4C6F1E028A1FF6A15B9 /* CombineMoya.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -75,6 +106,7 @@ files = ( B4CC4F2D8A5386E268661131 /* DataInterface.framework in Dependencies */, 233EAF0D96C6FF11DCB925F5 /* Networking.framework in Dependencies */, + 2C23766DA5EC5A267DB2DE38 /* Service.framework in Dependencies */, ); name = Dependencies; runOnlyForDeploymentPostprocessing = 1; @@ -89,6 +121,16 @@ name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; }; + 6262AF5C39AFA9F1F33CBA3C /* Dependencies */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 8; + dstSubfolderSpec = 16; + files = ( + A2333F1CDF2EE173146917D2 /* Alamofire_Alamofire.bundle in Dependencies */, + ); + name = Dependencies; + runOnlyForDeploymentPostprocessing = 1; + }; 91EE5845A923942DC21F97E3 /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; @@ -106,6 +148,7 @@ files = ( ED7ABEC4AB9FBA1707BB2752 /* DataInterface.framework in Dependencies */, EAA7EA5BDD8E847A1A0A5854 /* Networking.framework in Dependencies */, + DCD884BEF59149765121ADBC /* Service.framework in Dependencies */, ); name = Dependencies; runOnlyForDeploymentPostprocessing = 1; @@ -117,6 +160,7 @@ files = ( 41FC709A51F996C647FD9DFC /* DataInterface.framework in Dependencies */, 4878837B4312F041BF286CD0 /* Networking.framework in Dependencies */, + CD59907F5FF407743514DB95 /* Service.framework in Dependencies */, ); name = Dependencies; runOnlyForDeploymentPostprocessing = 1; @@ -128,6 +172,7 @@ files = ( 2346B53A47FF5D90E70215B7 /* DataInterface.framework in Dependencies */, A698F595B604CF8C68EA6FF2 /* Networking.framework in Dependencies */, + E3B07C5281726FE5EFA47795 /* Service.framework in Dependencies */, ); name = Dependencies; runOnlyForDeploymentPostprocessing = 1; @@ -140,17 +185,34 @@ 132E678FD0ADA70C08C1A39A /* Repository-Debug-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Repository-Debug-Info.plist"; 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 = ""; }; + 19A290AEAD111F015CBFDADB /* AsyncMoya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AsyncMoya.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1B285930F3594266FEB0BC20 /* Foundations.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Foundations.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 34E66E9088F97B1F320BF8B4 /* Repository_Stage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Repository_Stage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 39FAE0770B930CBF414B8F54 /* EventLimiter.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = EventLimiter.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 4131E6C825DB8588F94C2088 /* Repository_Prod.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Repository_Prod.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4AA1CFA625141FD7F9B1DB22 /* Alamofire.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Alamofire.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 549C82A8C41E9EBA4FDC62C7 /* Service.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Service.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 588E92682ED2660339A34860 /* MockMusicSearchRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockMusicSearchRepository.swift; sourceTree = ""; }; + 60A1061A0F7A5DEF2B3433B7 /* MusicSearchRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MusicSearchRepository.swift; sourceTree = ""; }; 67D7E950058188008115D32D /* Repository_Debug.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Repository_Debug.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6C8A7366562A815FBE2C7810 /* Alamofire_Alamofire.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Alamofire_Alamofire.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; 7DB3288BD804BE671D5A9E6C /* RepositoryTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "RepositoryTests-Info.plist"; sourceTree = ""; }; + 7F1AC72F2EB44DD900C82441 /* MusicDetailRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MusicDetailRepository.swift; sourceTree = ""; }; + 7F1AC7342EB44E3200C82441 /* MockMusicDetailRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockMusicDetailRepository.swift; sourceTree = ""; }; + 7F1AC7472EB4518A00C82441 /* MockMusicDetailRepositoryTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockMusicDetailRepositoryTests.swift; sourceTree = ""; }; + 7FED9E1BBAF2A605DF08D38F /* MockMusicSearchRepositoryTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockMusicSearchRepositoryTests.swift; sourceTree = ""; }; 8434724C7BDFEA2B4A08E1DC /* Repository-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Repository-Info.plist"; sourceTree = ""; }; 9EE453BD6A8A16DC688113B4 /* Repository-Stage-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Repository-Stage-Info.plist"; sourceTree = ""; }; + A402D4C6F1E028A1FF6A15B9 /* CombineMoya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CombineMoya.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + AFD6BEF4EEDC73B527495BB6 /* RxSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RxSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; B001E4EB12F1B31552843EC8 /* Model.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Model.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - B8577FA41D47DE037F2387BE /* Base.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Base.swift; sourceTree = ""; }; + B6CD10CD4A587CB9F328BD12 /* LogMacro.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = LogMacro.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BC8B445ECB8E6566CF649974 /* API.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = API.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C1CC14A70BD175D51D4A7EEB /* Moya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Moya.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; }; E9256A28824CD986ECC1EF08 /* Networking.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Networking.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - FB490D15B7B70995BF4D615B /* Test.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Test.swift; sourceTree = ""; }; + F43CDC33501823FDC6E616D3 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; }; + F9C30B633FFEC1DE967352E8 /* RxMoya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RxMoya.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -172,11 +234,23 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 7355412663C7423424F3A245 /* CFNetwork.framework in Frameworks */, + FD0FCD7CCB8F7E01AA5683F1 /* OSLog.framework in Frameworks */, + 0E8E0386D1DD34B39FB8C982 /* API.framework in Frameworks */, + 5FF9785CD2D8ABD53E784222 /* Alamofire.framework in Frameworks */, + C1669AB5BB04B11E566D8683 /* AsyncMoya.framework in Frameworks */, + FFDACF7E5B91FBAE76D131B1 /* CombineMoya.framework in Frameworks */, 8A4EA2436DC81B20486209C6 /* DataInterface.framework in Frameworks */, + CA96831896F9A6B6811C6C3E /* EventLimiter.framework in Frameworks */, DEEC771D534965D1D392318A /* Foundations.framework in Frameworks */, + BC3E81878EF9E2A2651B2F87 /* LogMacro.framework in Frameworks */, 8D3EE4A12A835297EA66F043 /* Model.framework in Frameworks */, + 08A491E1067C93EFC4474817 /* Moya.framework in Frameworks */, FEFB0DA0A60E3FBF3A1B1416 /* Networking.framework in Frameworks */, 065CDD9E3F159CCEC6E1A6C0 /* Repository.framework in Frameworks */, + DA272BEA4FC48206CDC3E121 /* RxMoya.framework in Frameworks */, + 29734DE54DCB5E7218BF8203 /* RxSwift.framework in Frameworks */, + C1271844DE5B9D13E9E7CBC0 /* Service.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -200,7 +274,8 @@ 280ACB745E0A714E9FEB0344 /* Sources */ = { isa = PBXGroup; children = ( - FB490D15B7B70995BF4D615B /* Test.swift */, + 7F1AC7472EB4518A00C82441 /* MockMusicDetailRepositoryTests.swift */, + 7FED9E1BBAF2A605DF08D38F /* MockMusicSearchRepositoryTests.swift */, ); path = Sources; sourceTree = ""; @@ -208,7 +283,8 @@ 2D734AC98FF0BE5BAB8E93F5 /* Sources */ = { isa = PBXGroup; children = ( - B8577FA41D47DE037F2387BE /* Base.swift */, + 7F1AC72E2EB44DC500C82441 /* Detail */, + 7F1AC72D2EB44DB700C82441 /* Search */, ); path = Sources; sourceTree = ""; @@ -236,21 +312,60 @@ children = ( 4CBA9A858B0C70334F132096 /* Project */, B9E40665B322982A6453CC4E /* Products */, + AAE649489D78DD6539EEB5FF /* Frameworks */, ); sourceTree = ""; }; + 7F1AC72D2EB44DB700C82441 /* Search */ = { + isa = PBXGroup; + children = ( + 588E92682ED2660339A34860 /* MockMusicSearchRepository.swift */, + 60A1061A0F7A5DEF2B3433B7 /* MusicSearchRepository.swift */, + ); + path = Search; + sourceTree = ""; + }; + 7F1AC72E2EB44DC500C82441 /* Detail */ = { + isa = PBXGroup; + children = ( + 7F1AC7342EB44E3200C82441 /* MockMusicDetailRepository.swift */, + 7F1AC72F2EB44DD900C82441 /* MusicDetailRepository.swift */, + ); + path = Detail; + sourceTree = ""; + }; + AAE649489D78DD6539EEB5FF /* Frameworks */ = { + isa = PBXGroup; + children = ( + F43CDC33501823FDC6E616D3 /* CFNetwork.framework */, + C2B6D597B16E9CDDB21DA680 /* OSLog.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; B9E40665B322982A6453CC4E /* Products */ = { isa = PBXGroup; children = ( + 6C8A7366562A815FBE2C7810 /* Alamofire_Alamofire.bundle */, + 4AA1CFA625141FD7F9B1DB22 /* Alamofire.framework */, + BC8B445ECB8E6566CF649974 /* API.framework */, + 19A290AEAD111F015CBFDADB /* AsyncMoya.framework */, + A402D4C6F1E028A1FF6A15B9 /* CombineMoya.framework */, 0C051AEF60DC4BF2E9179E04 /* DataInterface.framework */, + 39FAE0770B930CBF414B8F54 /* EventLimiter.framework */, 1B285930F3594266FEB0BC20 /* Foundations.framework */, + B6CD10CD4A587CB9F328BD12 /* LogMacro.framework */, B001E4EB12F1B31552843EC8 /* Model.framework */, + C1CC14A70BD175D51D4A7EEB /* Moya.framework */, E9256A28824CD986ECC1EF08 /* Networking.framework */, 67D7E950058188008115D32D /* Repository_Debug.framework */, 4131E6C825DB8588F94C2088 /* Repository_Prod.framework */, 34E66E9088F97B1F320BF8B4 /* Repository_Stage.framework */, 03D39D8FFA6B36EC82B3C778 /* Repository.framework */, 18618E5B5CE8E0BEE5F43988 /* RepositoryTests.xctest */, + F9C30B633FFEC1DE967352E8 /* RxMoya.framework */, + AFD6BEF4EEDC73B527495BB6 /* RxSwift.framework */, + 549C82A8C41E9EBA4FDC62C7 /* Service.framework */, ); name = Products; sourceTree = ""; @@ -349,6 +464,7 @@ 6D03AC647552D7EADB48606C /* Resources */, 38FFD09AE8882DA767050547 /* Frameworks */, 91EE5845A923942DC21F97E3 /* Embed Frameworks */, + 6262AF5C39AFA9F1F33CBA3C /* Dependencies */, ); buildRules = ( ); @@ -390,8 +506,6 @@ isa = PBXProject; attributes = { BuildIndependentTargetsInParallel = YES; - TargetAttributes = { - }; }; buildConfigurationList = DAEAABCA4F1BDA57B6C50343 /* Build configuration list for PBXProject "Repository" */; compatibilityVersion = "Xcode 14.0"; @@ -441,6 +555,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 7BA89C01047091FDCCB28455 /* Alamofire_Alamofire.bundle in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -458,7 +573,10 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 3709BFB37049001BA7A8182C /* Base.swift in Sources */, + 7F1AC7372EB44ED300C82441 /* MockMusicDetailRepository.swift in Sources */, + 7F1AC7302EB44DE100C82441 /* MusicDetailRepository.swift in Sources */, + DFE6A1AEA515B11BA230F73B /* MockMusicSearchRepository.swift in Sources */, + 8E479DDB904E8ABBD71E8302 /* MusicSearchRepository.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -466,7 +584,10 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - F1278FBC5969E918EE44DB42 /* Base.swift in Sources */, + 7F1AC7392EB44ED300C82441 /* MockMusicDetailRepository.swift in Sources */, + 7F1AC7322EB44DE100C82441 /* MusicDetailRepository.swift in Sources */, + F8B52702933627F2493EF0EB /* MockMusicSearchRepository.swift in Sources */, + 45C48AEEAADB0663CA55BCE9 /* MusicSearchRepository.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -474,7 +595,10 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 09F9D30287D045A836B62E64 /* Base.swift in Sources */, + 7F1AC7382EB44ED300C82441 /* MockMusicDetailRepository.swift in Sources */, + 7F1AC7312EB44DE100C82441 /* MusicDetailRepository.swift in Sources */, + 81C2AF9977596554B4F5A0F2 /* MockMusicSearchRepository.swift in Sources */, + 6705DA518DEFDF32D0CD39D8 /* MusicSearchRepository.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -482,7 +606,10 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 1188C881A64450A8DE7F1643 /* Base.swift in Sources */, + 7F1AC7362EB44ED300C82441 /* MockMusicDetailRepository.swift in Sources */, + 7F1AC7332EB44DE100C82441 /* MusicDetailRepository.swift in Sources */, + DB3850164E364C8631CF1E02 /* MockMusicSearchRepository.swift in Sources */, + A6F8318AFCC8184F57011D50 /* MusicSearchRepository.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -490,7 +617,8 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 5E341F17BAE8AF7203AD0E94 /* Test.swift in Sources */, + 7F1AC7482EB4518E00C82441 /* MockMusicDetailRepositoryTests.swift in Sources */, + 6F837F554EA43B635EE2C5CC /* MockMusicSearchRepositoryTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -510,6 +638,10 @@ 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 = 16.6; LD_RUNPATH_SEARCH_PATHS = ( @@ -517,6 +649,11 @@ "@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.Bandscape.Repository.RepositoryTests; PRODUCT_NAME = RepositoryTests; SDKROOT = iphoneos; @@ -539,6 +676,10 @@ 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 = 16.6; @@ -548,6 +689,11 @@ "@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.Bandscape.Repository; PRODUCT_NAME = Repository_Stage; SDKROOT = iphoneos; @@ -573,6 +719,10 @@ 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 = 16.6; @@ -582,6 +732,11 @@ "@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.Bandscape.Repository; PRODUCT_NAME = Repository_Prod; SDKROOT = iphoneos; @@ -589,10 +744,7 @@ SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = ( - "$(inherited)", - DEBUG, - ); + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; SWIFT_COMPILATION_MODE = singlefile; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; @@ -611,6 +763,10 @@ 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 = 16.6; @@ -620,6 +776,11 @@ "@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.Bandscape.Repository; PRODUCT_NAME = Repository_Debug; SDKROOT = iphoneos; @@ -645,6 +806,10 @@ 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 = 16.6; @@ -654,6 +819,11 @@ "@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.Bandscape.Repository; PRODUCT_NAME = Repository_Prod; SDKROOT = iphoneos; @@ -674,6 +844,10 @@ 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 = 16.6; LD_RUNPATH_SEARCH_PATHS = ( @@ -681,16 +855,18 @@ "@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.Bandscape.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_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; SWIFT_COMPILATION_MODE = singlefile; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; @@ -707,6 +883,10 @@ 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 = 16.6; @@ -716,6 +896,11 @@ "@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.Bandscape.Repository; PRODUCT_NAME = Repository; SDKROOT = iphoneos; @@ -741,6 +926,10 @@ 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 = 16.6; @@ -750,6 +939,11 @@ "@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.Bandscape.Repository; PRODUCT_NAME = Repository_Debug; SDKROOT = iphoneos; @@ -757,10 +951,7 @@ SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = ( - "$(inherited)", - DEBUG, - ); + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; SWIFT_COMPILATION_MODE = singlefile; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; @@ -779,6 +970,10 @@ 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 = 16.6; @@ -788,6 +983,11 @@ "@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.Bandscape.Repository; PRODUCT_NAME = Repository_Stage; SDKROOT = iphoneos; @@ -795,10 +995,7 @@ SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = ( - "$(inherited)", - DEBUG, - ); + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; SWIFT_COMPILATION_MODE = singlefile; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; @@ -929,6 +1126,10 @@ 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 = 16.6; @@ -938,6 +1139,11 @@ "@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.Bandscape.Repository; PRODUCT_NAME = Repository; SDKROOT = iphoneos; @@ -945,10 +1151,7 @@ SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = ( - "$(inherited)", - DEBUG, - ); + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; SWIFT_COMPILATION_MODE = singlefile; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; diff --git a/Projects/Core/Data/Repository/RepositoryTests/Sources/MockMusicDetailRepositoryTests.swift b/Projects/Core/Data/Repository/RepositoryTests/Sources/MockMusicDetailRepositoryTests.swift new file mode 100644 index 0000000..719adb8 --- /dev/null +++ b/Projects/Core/Data/Repository/RepositoryTests/Sources/MockMusicDetailRepositoryTests.swift @@ -0,0 +1,71 @@ +// +// MockMusicDetailRepositoryTests.swift +// Repository +// +// Created by Wonji Suh on 10/31/25. +// + +import Testing +@testable import DataInterface +@testable import Model +@testable import Repository +import Foundation + + +@Suite("MockMusicDetailRepositoryTests Unit Tests", .tags(.unit, .mock, .repository)) +struct MockMusicDetailRepositoryTests { + + @Test("상세 id 검색 성공시 결과가 올바 르게 반환") + func testFetchMusicIdDetailSuccess() async throws { + let mockTracks: [ITunesTrack] = [ + .init( + wrapperType: "track", + kind: "song", + artistId: 1, + collectionId: 10, + trackId: 100, + artistName: "IU", + collectionName: "Spring Album", + trackName: "Spring Love", + previewUrl: URL(string: "https://example.com/prev.m4a"), + artworkUrl100: URL(string: "https://example.com/art.jpg"), + releaseDate: "2024-03-18T12:00:00Z", + primaryGenreName: "K-Pop", + collectionCensoredName: "봄 사랑 벚꽃 말고 - Single" + ) + ] + + let repository = MockMusicDetailRepository() + repository.setResult(.success(mockTracks)) + + // when + let result = try await repository.fetchDetailMusic(id: "100") + + // then + #expect(result.count == 1) + #expect(result.first?.trackId == 100) + #expect(result.first?.artistName == "IU") + #expect(result.first?.trackName == "Spring Love") + #expect(result.first?.collectionCensoredName == "봄 사랑 벚꽃 말고 - Single") + } + + @Test("검색 id 실패 시 에러를 던져야 함.") + func testFetchIdDetailMusicFailure() async throws { + // given + let repository = MockMusicDetailRepository() + repository.setResult(.failure(MockMusicDetailRepository.MockError.forced)) + + // when / then + await #expect(throws: MockMusicDetailRepository.MockError.forced) { + try await repository.fetchDetailMusic(id: "fail") + } + } + + @Test("fetchDetailMusic 호출 시 검색어가 기록되어야 함") + func testReceivedIdQuery() async throws { + let repository = MockMusicDetailRepository(result: .success([])) + _ = try await repository.fetchDetailMusic(id: "100") + + #expect(repository.receivedQueries == ["100"]) + } +} diff --git a/Projects/Core/Data/Repository/RepositoryTests/Sources/MockMusicSearchRepositoryTests.swift b/Projects/Core/Data/Repository/RepositoryTests/Sources/MockMusicSearchRepositoryTests.swift new file mode 100644 index 0000000..399d6cd --- /dev/null +++ b/Projects/Core/Data/Repository/RepositoryTests/Sources/MockMusicSearchRepositoryTests.swift @@ -0,0 +1,79 @@ +// +// MockMusicSearchRepositoryTests.swift +// Repository +// +// Created by Wonji Suh on 10/25/25. +// + +import Testing +@testable import DataInterface +@testable import Model +@testable import Repository +import Foundation + +extension Tag { + @Tag static var mock: Self + @Tag static var unit: Self + @Tag static var repository: Self + @Tag static var moyaStub: Self +} + +@Suite("MusicSearchRepository Unit Tests", .tags(.unit, .mock, .repository)) +struct MockMusicSearchRepositoryTests { + + // 🎯 1) 성공 케이스 테스트 + @Test("검색 성공 시 결과가 올바르게 반환 ") + func testFetchMusicSuccess() async throws { + // given + let mockTracks: [Model.ITunesTrack] = [ + .init( + wrapperType: "track", + kind: "song", + artistId: 1, + collectionId: 10, + trackId: 100, + artistName: "IU", + collectionName: "Spring Album", + trackName: "Spring Love", + previewUrl: URL(string: "https://example.com/prev.m4a"), + artworkUrl100: URL(string: "https://example.com/art.jpg"), + releaseDate: "2024-03-18T12:00:00Z", + primaryGenreName: "K-Pop", + collectionCensoredName: "봄 사랑 벚꽃 말고 - Single" + ) + ] + + let repository = MockMusicSearchRepository() + await repository.setResult(.success(mockTracks)) + + // when + let result = try await repository.fetchMusic(search: "봄") + + // then + #expect(result.count == 1) + #expect(result.first?.artistName == "IU") + #expect(result.first?.trackName == "Spring Love") + #expect(result.first?.collectionCensoredName == "봄 사랑 벚꽃 말고 - Single") + } + + // 🎯 2) 실패 케이스 테스트 + @Test("검색 실패 시 에러를 던져야 함.") + func testFetchMusicFailure() async throws { + // given + let repository = MockMusicSearchRepository() + repository.setResult(.failure(MockMusicSearchRepository.MockError.forced)) + + // when / then + await #expect(throws: MockMusicSearchRepository.MockError.forced) { + try await repository.fetchMusic(search: "fail") + } + } + + @Test("fetchMusic 호출 시 검색어가 기록되어야 함") + func testReceivedQuery() async throws { + let repository = MockMusicSearchRepository(result: .success([])) + _ = try await repository.fetchMusic(search: "유다빈밴드") + + #expect(repository.receivedQueries == ["유다빈밴드"]) + } +} diff --git a/Projects/Core/Data/Repository/RepositoryTests/Sources/Test.swift b/Projects/Core/Data/Repository/RepositoryTests/Sources/Test.swift deleted file mode 100644 index a9c810e..0000000 --- a/Projects/Core/Data/Repository/RepositoryTests/Sources/Test.swift +++ /dev/null @@ -1,8 +0,0 @@ -// -// base.swift -// DDDAttendance -// -// Created by Roy on 2025-09-04 -// Copyright © 2025 DDD , Ltd. All rights reserved. -// - diff --git a/Projects/Core/Data/Repository/Sources/Base.swift b/Projects/Core/Data/Repository/Sources/Base.swift deleted file mode 100644 index 6297cc4..0000000 --- a/Projects/Core/Data/Repository/Sources/Base.swift +++ /dev/null @@ -1,22 +0,0 @@ -// -// 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/Data/Repository/Sources/Detail/MockMusicDetailRepository.swift b/Projects/Core/Data/Repository/Sources/Detail/MockMusicDetailRepository.swift new file mode 100644 index 0000000..60c5419 --- /dev/null +++ b/Projects/Core/Data/Repository/Sources/Detail/MockMusicDetailRepository.swift @@ -0,0 +1,30 @@ +// +// MockMusicDetailRepository.swift +// Repository +// +// Created by Wonji Suh on 10/31/25. +// + +import DataInterface + +public final class MockMusicDetailRepository: MusicDetailRepositoryProtocol, @unchecked Sendable { + + public enum MockError: Error { case forced } + + public var result: Result<[Model.ITunesTrack], Error> + public private(set) var receivedQueries: [String] = [] + + public init(result: Result<[Model.ITunesTrack], Error> = .success([])) { + self.result = result + } + + public func setResult(_ newResult: Result<[Model.ITunesTrack], Error>) { + self.result = newResult + } + + public func fetchDetailMusic(id: String) async throws -> [Model.ITunesTrack] { + self.receivedQueries.append(id) // 호출 파라미터 검증용 + return try result.get() + } + +} diff --git a/Projects/Core/Data/Repository/Sources/Detail/MusicDetailRepository.swift b/Projects/Core/Data/Repository/Sources/Detail/MusicDetailRepository.swift new file mode 100644 index 0000000..c2c88da --- /dev/null +++ b/Projects/Core/Data/Repository/Sources/Detail/MusicDetailRepository.swift @@ -0,0 +1,24 @@ +// +// MusicDetailRepository.swift +// Repository +// +// Created by Wonji Suh on 10/31/25. +// + + +import Foundation +import Service +import DataInterface + +import AsyncMoya + +public final class MusicDetailRepository: MusicDetailRepositoryProtocol { + @MainActor private let provider = MoyaProvider(plugins: [MoyaLoggingPlugin()]) + + nonisolated public init() {} + + public func fetchDetailMusic(id: String) async throws -> [Model.ITunesTrack] { + let data = try await provider.request(.detailMusic(id: id), decodeTo: ITunesSearchResponseDTO.self) + return data.results + } +} diff --git a/Projects/Core/Data/Repository/Sources/Search/MockMusicSearchRepository.swift b/Projects/Core/Data/Repository/Sources/Search/MockMusicSearchRepository.swift new file mode 100644 index 0000000..d5fa21c --- /dev/null +++ b/Projects/Core/Data/Repository/Sources/Search/MockMusicSearchRepository.swift @@ -0,0 +1,29 @@ +// +// MockMusicSearchRepository.swift +// Repository +// +// Created by Wonji Suh on 10/24/25. +// + +@preconcurrency import DataInterface + +public final class MockMusicSearchRepository: MusicSearchRepositoryProtocol, @unchecked Sendable { + + public enum MockError: Error { case forced } + + public var result: Result<[Model.ITunesTrack], Error> + public private(set) var receivedQueries: [String] = [] + + public init(result: Result<[Model.ITunesTrack], Error> = .success([])) { + self.result = result + } + + public func setResult(_ newResult: Result<[Model.ITunesTrack], Error>) { + self.result = newResult + } + + public func fetchMusic(search: String) async throws -> [Model.ITunesTrack] { + self.receivedQueries.append(search) // 호출 파라미터 검증용 + return try result.get() + } +} diff --git a/Projects/Core/Data/Repository/Sources/Search/MusicSearchRepository.swift b/Projects/Core/Data/Repository/Sources/Search/MusicSearchRepository.swift new file mode 100644 index 0000000..526f0df --- /dev/null +++ b/Projects/Core/Data/Repository/Sources/Search/MusicSearchRepository.swift @@ -0,0 +1,23 @@ +// +// MusicSearchRepository.swift +// Repository +// +// Created by Wonji Suh on 10/24/25. +// + +import Foundation +import Service +import DataInterface + +import AsyncMoya + +public final class MusicSearchRepository: MusicSearchRepositoryProtocol { + @MainActor private let provider = MoyaProvider(plugins: [MoyaLoggingPlugin()]) + + nonisolated public init() {} + + public func fetchMusic(search: String) async throws -> [Model.ITunesTrack] { + let data = try await provider.request(.searchMusic(query: search), decodeTo: ITunesSearchResponseDTO.self) + return data.results + } +} diff --git a/Projects/Core/Data/Service/Project.swift b/Projects/Core/Data/Service/Project.swift index ebf60dd..bbbee98 100644 --- a/Projects/Core/Data/Service/Project.swift +++ b/Projects/Core/Data/Service/Project.swift @@ -2,7 +2,6 @@ import Foundation import ProjectDescription import DependencyPlugin import ProjectTemplatePlugin -import ProjectTemplatePlugin import DependencyPackagePlugin let project = Project.makeAppModule( @@ -11,7 +10,9 @@ let project = Project.makeAppModule( product: .staticFramework, settings: .settings(), dependencies: [ - + .SPM.asyncMoya, + .Network(implements: .Networking), + .Data(implements: .API) ], sources: ["Sources/**"] ) diff --git a/Projects/Core/Data/Service/Service.xcodeproj/project.pbxproj b/Projects/Core/Data/Service/Service.xcodeproj/project.pbxproj index 56e4831..ea6935a 100644 --- a/Projects/Core/Data/Service/Service.xcodeproj/project.pbxproj +++ b/Projects/Core/Data/Service/Service.xcodeproj/project.pbxproj @@ -7,12 +7,39 @@ objects = { /* Begin PBXBuildFile section */ - 0C179C50C350A46353A16552 /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3C4EB962B1FA0CC1DE387EB /* Base.swift */; }; + 08F22BF5A4AA52A128BB1B82 /* AsyncMoya.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 31DFD964165DEDB3D59A47AD /* AsyncMoya.framework */; }; + 08F77FD6DE4E215DD4E32A64 /* API.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 6540F18A92242DF633B90D64 /* API.framework */; }; + 19D2E5C34F726418AFE71E01 /* API.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 6540F18A92242DF633B90D64 /* API.framework */; }; + 22D242B134F5B6A8A32E15BF /* RxMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5D14E81046E0EDA166110285 /* RxMoya.framework */; }; 3C3DA87E8BECAB9DDB4BCB5D /* Service.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7EDFE229DFD7957E8AC64F6F /* Service.framework */; }; - 55CFED0C556294FF98B7DC7B /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3C4EB962B1FA0CC1DE387EB /* Base.swift */; }; + 3E3708439743A2C547ED2492 /* MusicSearchService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CB4FEF4703DFB8A526662E0 /* MusicSearchService.swift */; }; + 4076084473C31650E202BE04 /* LogMacro.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 27118BD665B186D6882DF66A /* LogMacro.framework */; }; + 47FC5E42D9834B9396DCEBAC /* API.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 6540F18A92242DF633B90D64 /* API.framework */; }; + 4E826607AE71154E5DED8059 /* Moya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB5D0A50675F4214269A1E8C /* Moya.framework */; }; + 5E8F9B07396157DD468615A9 /* Networking.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = A05329346434BB988BB12F74 /* Networking.framework */; }; + 60E5E8A6990835086C9E8E06 /* Alamofire_Alamofire.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 829B01728ED34A27080BAED0 /* Alamofire_Alamofire.bundle */; }; + 61316F3746EFE6C53038DE45 /* Networking.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A05329346434BB988BB12F74 /* Networking.framework */; }; + 6C6ED816C134180808202765 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EC1B5EDC0770CED17685915E /* CFNetwork.framework */; }; + 6D0EFA0CE8F5AF49C82D441B /* EventLimiter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A02CA37CD5135A269A3E8B4C /* EventLimiter.framework */; }; + 7CCC2AF836AA226F43D96D69 /* OSLog.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8EBD9486798A0D863BB013E5 /* OSLog.framework */; }; + 80EFAB8A52BEA669C1B9F4D2 /* AsyncMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 31DFD964165DEDB3D59A47AD /* AsyncMoya.framework */; }; 8279A0344BCCCB23F8D07ADA /* Test.swift in Sources */ = {isa = PBXBuildFile; fileRef = BA233B5E4422F71B1E2790B8 /* Test.swift */; }; - C9897CC8537ABDA7B20CA166 /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3C4EB962B1FA0CC1DE387EB /* Base.swift */; }; - E349F88B9335E82E1E48BED5 /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3C4EB962B1FA0CC1DE387EB /* Base.swift */; }; + 843C6AEBBD6B72FD0CD8CA69 /* MusicSearchService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CB4FEF4703DFB8A526662E0 /* MusicSearchService.swift */; }; + 889DD39EC5C731443684AAF0 /* MusicSearchService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CB4FEF4703DFB8A526662E0 /* MusicSearchService.swift */; }; + 8F0B075E16F581A93F0F2950 /* AsyncMoya.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 31DFD964165DEDB3D59A47AD /* AsyncMoya.framework */; }; + 8FC02317926D2E1626741F28 /* Foundations.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3E5F4A58F852E3E9AB2C612B /* Foundations.framework */; }; + 929618209892E127DBC393C4 /* AsyncMoya.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 31DFD964165DEDB3D59A47AD /* AsyncMoya.framework */; }; + 94692EDF2CEFD2E8ABCB552C /* Alamofire_Alamofire.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 829B01728ED34A27080BAED0 /* Alamofire_Alamofire.bundle */; }; + 994173BFEE3E0BD171E595D5 /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E21A286E6E06F7B25DE62E94 /* RxSwift.framework */; }; + 9C463465532AB05D8FCE2664 /* API.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6540F18A92242DF633B90D64 /* API.framework */; }; + A1DEAC5E79ADE9B898A29434 /* CombineMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4252AD026DC875E998C68C29 /* CombineMoya.framework */; }; + A38E04F1E3342BDAFF6EAD94 /* AsyncMoya.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 31DFD964165DEDB3D59A47AD /* AsyncMoya.framework */; }; + A518AF62E3434BFA01D26682 /* Networking.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = A05329346434BB988BB12F74 /* Networking.framework */; }; + CF6860A22642142D4D681090 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F25124380C7599FF946C2474 /* Alamofire.framework */; }; + D8375EA81533102047B7F323 /* Networking.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = A05329346434BB988BB12F74 /* Networking.framework */; }; + EEE15AEC0E9C888A589038F7 /* API.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 6540F18A92242DF633B90D64 /* API.framework */; }; + F57FEB886529599781347F1A /* Networking.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = A05329346434BB988BB12F74 /* Networking.framework */; }; + FBD23A1822182F559DFBDC36 /* MusicSearchService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2CB4FEF4703DFB8A526662E0 /* MusicSearchService.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -36,6 +63,28 @@ name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; }; + 2E2613D1F1E4C4DEE2BD94FF /* Dependencies */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 8; + dstSubfolderSpec = 16; + files = ( + 60E5E8A6990835086C9E8E06 /* Alamofire_Alamofire.bundle in Dependencies */, + ); + name = Dependencies; + runOnlyForDeploymentPostprocessing = 1; + }; + 43672DB00161FEA57F65B408 /* Dependencies */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 8; + dstSubfolderSpec = 16; + files = ( + 08F77FD6DE4E215DD4E32A64 /* API.framework in Dependencies */, + 08F22BF5A4AA52A128BB1B82 /* AsyncMoya.framework in Dependencies */, + A518AF62E3434BFA01D26682 /* Networking.framework in Dependencies */, + ); + name = Dependencies; + runOnlyForDeploymentPostprocessing = 1; + }; 5A4B9E41609D6261A34EF004 /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; @@ -66,6 +115,30 @@ name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; }; + 7B31AB9DAB84DF68E142679F /* Dependencies */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 8; + dstSubfolderSpec = 16; + files = ( + EEE15AEC0E9C888A589038F7 /* API.framework in Dependencies */, + A38E04F1E3342BDAFF6EAD94 /* AsyncMoya.framework in Dependencies */, + 5E8F9B07396157DD468615A9 /* Networking.framework in Dependencies */, + ); + name = Dependencies; + runOnlyForDeploymentPostprocessing = 1; + }; + D2E9552C3D1506E8E42EB8ED /* Dependencies */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 8; + dstSubfolderSpec = 16; + files = ( + 19D2E5C34F726418AFE71E01 /* API.framework in Dependencies */, + 8F0B075E16F581A93F0F2950 /* AsyncMoya.framework in Dependencies */, + F57FEB886529599781347F1A /* Networking.framework in Dependencies */, + ); + name = Dependencies; + runOnlyForDeploymentPostprocessing = 1; + }; E135B70B4BAD281F11E29459 /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; @@ -76,21 +149,47 @@ name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; }; + E9A743867ABF14264AA4F46D /* Dependencies */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 8; + dstSubfolderSpec = 16; + files = ( + 47FC5E42D9834B9396DCEBAC /* API.framework in Dependencies */, + 929618209892E127DBC393C4 /* AsyncMoya.framework in Dependencies */, + D8375EA81533102047B7F323 /* Networking.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 = ""; }; 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; }; + 2CB4FEF4703DFB8A526662E0 /* MusicSearchService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MusicSearchService.swift; sourceTree = ""; }; + 31DFD964165DEDB3D59A47AD /* AsyncMoya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AsyncMoya.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 34D19142035B122118FB9153 /* ServiceTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "ServiceTests-Info.plist"; sourceTree = ""; }; + 3E5F4A58F852E3E9AB2C612B /* Foundations.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Foundations.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4252AD026DC875E998C68C29 /* CombineMoya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CombineMoya.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 49AE8778D00783FC72E9C397 /* Service_Debug.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Service_Debug.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5D14E81046E0EDA166110285 /* RxMoya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RxMoya.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6540F18A92242DF633B90D64 /* API.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = API.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 656243C0336CD9A5FB069256 /* Service_Prod.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Service_Prod.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 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; }; + 829B01728ED34A27080BAED0 /* Alamofire_Alamofire.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Alamofire_Alamofire.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 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; }; + A02CA37CD5135A269A3E8B4C /* EventLimiter.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = EventLimiter.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A05329346434BB988BB12F74 /* Networking.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Networking.framework; sourceTree = BUILT_PRODUCTS_DIR; }; B432785FB9ED34C4A18C0C4C /* Service_Stage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Service_Stage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; BA233B5E4422F71B1E2790B8 /* Test.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Test.swift; sourceTree = ""; }; - C3C4EB962B1FA0CC1DE387EB /* Base.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Base.swift; sourceTree = ""; }; + CB5D0A50675F4214269A1E8C /* Moya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Moya.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D066B46F236811258B579745 /* Service-Stage-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Service-Stage-Info.plist"; sourceTree = ""; }; + E21A286E6E06F7B25DE62E94 /* RxSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RxSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + EC1B5EDC0770CED17685915E /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; }; + F25124380C7599FF946C2474 /* Alamofire.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Alamofire.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -126,6 +225,19 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 6C6ED816C134180808202765 /* CFNetwork.framework in Frameworks */, + 7CCC2AF836AA226F43D96D69 /* OSLog.framework in Frameworks */, + 9C463465532AB05D8FCE2664 /* API.framework in Frameworks */, + CF6860A22642142D4D681090 /* Alamofire.framework in Frameworks */, + 80EFAB8A52BEA669C1B9F4D2 /* AsyncMoya.framework in Frameworks */, + A1DEAC5E79ADE9B898A29434 /* CombineMoya.framework in Frameworks */, + 6D0EFA0CE8F5AF49C82D441B /* EventLimiter.framework in Frameworks */, + 8FC02317926D2E1626741F28 /* Foundations.framework in Frameworks */, + 4076084473C31650E202BE04 /* LogMacro.framework in Frameworks */, + 4E826607AE71154E5DED8059 /* Moya.framework in Frameworks */, + 61316F3746EFE6C53038DE45 /* Networking.framework in Frameworks */, + 22D242B134F5B6A8A32E15BF /* RxMoya.framework in Frameworks */, + 994173BFEE3E0BD171E595D5 /* RxSwift.framework in Frameworks */, 3C3DA87E8BECAB9DDB4BCB5D /* Service.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -144,7 +256,7 @@ 57FF25C92193FDC6FC2E9956 /* Sources */ = { isa = PBXGroup; children = ( - C3C4EB962B1FA0CC1DE387EB /* Base.swift */, + 2CB4FEF4703DFB8A526662E0 /* MusicSearchService.swift */, ); path = Sources; sourceTree = ""; @@ -152,6 +264,18 @@ 6EF9FDD21B7717FD4262395A /* Products */ = { isa = PBXGroup; children = ( + 829B01728ED34A27080BAED0 /* Alamofire_Alamofire.bundle */, + F25124380C7599FF946C2474 /* Alamofire.framework */, + 6540F18A92242DF633B90D64 /* API.framework */, + 31DFD964165DEDB3D59A47AD /* AsyncMoya.framework */, + 4252AD026DC875E998C68C29 /* CombineMoya.framework */, + A02CA37CD5135A269A3E8B4C /* EventLimiter.framework */, + 3E5F4A58F852E3E9AB2C612B /* Foundations.framework */, + 27118BD665B186D6882DF66A /* LogMacro.framework */, + CB5D0A50675F4214269A1E8C /* Moya.framework */, + A05329346434BB988BB12F74 /* Networking.framework */, + 5D14E81046E0EDA166110285 /* RxMoya.framework */, + E21A286E6E06F7B25DE62E94 /* RxSwift.framework */, 49AE8778D00783FC72E9C397 /* Service_Debug.framework */, 656243C0336CD9A5FB069256 /* Service_Prod.framework */, B432785FB9ED34C4A18C0C4C /* Service_Stage.framework */, @@ -191,6 +315,15 @@ name = Project; sourceTree = ""; }; + 951DAE26418A9AE539BF6194 /* Frameworks */ = { + isa = PBXGroup; + children = ( + EC1B5EDC0770CED17685915E /* CFNetwork.framework */, + 8EBD9486798A0D863BB013E5 /* OSLog.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 97CFFBEEA2425324063A8623 /* ServiceTests */ = { isa = PBXGroup; children = ( @@ -204,6 +337,7 @@ children = ( 7D2A1FAC224A4161D0DD025B /* Project */, 6EF9FDD21B7717FD4262395A /* Products */, + 951DAE26418A9AE539BF6194 /* Frameworks */, ); sourceTree = ""; }; @@ -218,6 +352,7 @@ A2AA66D5428A52814A8CF2E2 /* Resources */, 4E5B44339E15D9D7286508BD /* Frameworks */, 5A4B9E41609D6261A34EF004 /* Embed Frameworks */, + 43672DB00161FEA57F65B408 /* Dependencies */, ); buildRules = ( ); @@ -238,6 +373,7 @@ 220D40C297E32C07E0E4144B /* Resources */, B9E255F78ED125E38CFE6433 /* Frameworks */, 7916ECC01EDD8BCB71C5F2CE /* Embed Frameworks */, + 7B31AB9DAB84DF68E142679F /* Dependencies */, ); buildRules = ( ); @@ -258,6 +394,7 @@ DBB59024C51A6B1A99F072A5 /* Resources */, ED4007158FAD7C7CFF0D3491 /* Frameworks */, E135B70B4BAD281F11E29459 /* Embed Frameworks */, + 2E2613D1F1E4C4DEE2BD94FF /* Dependencies */, ); buildRules = ( ); @@ -279,6 +416,7 @@ 099BBED0A3D302533934CC25 /* Resources */, 34B55B2B9613E5178446EFC1 /* Frameworks */, 11D2D814492A2F170FB62D24 /* Embed Frameworks */, + E9A743867ABF14264AA4F46D /* Dependencies */, ); buildRules = ( ); @@ -299,6 +437,7 @@ 5DB916BB3D046F2698257E14 /* Resources */, E46B5D6AB1628CA99D638546 /* Frameworks */, 5B36A939A245B5A27F657AD1 /* Embed Frameworks */, + D2E9552C3D1506E8E42EB8ED /* Dependencies */, ); buildRules = ( ); @@ -376,6 +515,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 94692EDF2CEFD2E8ABCB552C /* Alamofire_Alamofire.bundle in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -386,7 +526,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 0C179C50C350A46353A16552 /* Base.swift in Sources */, + 843C6AEBBD6B72FD0CD8CA69 /* MusicSearchService.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -394,7 +534,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 55CFED0C556294FF98B7DC7B /* Base.swift in Sources */, + FBD23A1822182F559DFBDC36 /* MusicSearchService.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -402,7 +542,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - C9897CC8537ABDA7B20CA166 /* Base.swift in Sources */, + 3E3708439743A2C547ED2492 /* MusicSearchService.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -410,7 +550,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - E349F88B9335E82E1E48BED5 /* Base.swift in Sources */, + 889DD39EC5C731443684AAF0 /* MusicSearchService.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -443,6 +583,10 @@ 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 = 16.6; @@ -452,6 +596,17 @@ "@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.Bandscape.Service; PRODUCT_NAME = Service_Prod; SDKROOT = iphoneos; @@ -477,6 +632,10 @@ 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 = 16.6; @@ -486,6 +645,17 @@ "@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.Bandscape.Service; PRODUCT_NAME = Service; SDKROOT = iphoneos; @@ -511,6 +681,10 @@ 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 = 16.6; @@ -520,6 +694,17 @@ "@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.Bandscape.Service; PRODUCT_NAME = Service_Stage; SDKROOT = iphoneos; @@ -544,6 +729,10 @@ 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 = 16.6; LD_RUNPATH_SEARCH_PATHS = ( @@ -551,6 +740,17 @@ "@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.Bandscape.Service.ServiceTests; PRODUCT_NAME = ServiceTests; SDKROOT = iphoneos; @@ -632,6 +832,10 @@ 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 = 16.6; @@ -641,6 +845,17 @@ "@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.Bandscape.Service; PRODUCT_NAME = Service; SDKROOT = iphoneos; @@ -670,6 +885,10 @@ 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 = 16.6; @@ -679,6 +898,17 @@ "@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.Bandscape.Service; PRODUCT_NAME = Service_Stage; SDKROOT = iphoneos; @@ -704,6 +934,10 @@ 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 = 16.6; @@ -713,6 +947,17 @@ "@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.Bandscape.Service; PRODUCT_NAME = Service_Prod; SDKROOT = iphoneos; @@ -742,6 +987,10 @@ 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 = 16.6; @@ -751,6 +1000,17 @@ "@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.Bandscape.Service; PRODUCT_NAME = Service_Debug; SDKROOT = iphoneos; @@ -775,6 +1035,10 @@ 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 = 16.6; LD_RUNPATH_SEARCH_PATHS = ( @@ -782,6 +1046,17 @@ "@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.Bandscape.Service.ServiceTests; PRODUCT_NAME = ServiceTests; SDKROOT = iphoneos; @@ -861,6 +1136,10 @@ 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 = 16.6; @@ -870,6 +1149,17 @@ "@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.Bandscape.Service; PRODUCT_NAME = Service_Debug; SDKROOT = iphoneos; diff --git a/Projects/Core/Data/Service/Sources/Base.swift b/Projects/Core/Data/Service/Sources/Base.swift deleted file mode 100644 index fc5212e..0000000 --- a/Projects/Core/Data/Service/Sources/Base.swift +++ /dev/null @@ -1,22 +0,0 @@ -// -// base.swift -// DDDAttendance. -// -// Created by Roy on 2025-10-22 -// 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/Data/Service/Sources/MusicSearchService.swift b/Projects/Core/Data/Service/Sources/MusicSearchService.swift new file mode 100644 index 0000000..7aee044 --- /dev/null +++ b/Projects/Core/Data/Service/Sources/MusicSearchService.swift @@ -0,0 +1,73 @@ +// +// MusicSearchService.swift +// Service +// +// Created by Wonji Suh on 10/24/25. +// + +import Foundation +import Foundations +import API +import Moya + +public enum MusicSearchService { + case searchMusic(query: String) + case detailMusic(id: String) +} + + +extension MusicSearchService: BaseTargetType { + public typealias Domain = MusicScapeDomain + + public var domain: API.MusicScapeDomain { + switch self { + case .searchMusic: + return .searchMusic + case .detailMusic(let id): + return .searchDetailMusic + } + } + + public var urlPath: String { + switch self { + case .searchMusic: + return MusicSearchAPI.search.description + + case .detailMusic: + return MusicSearchAPI.detail.description + } + } + + public var error: [Int : Foundations.NetworkError]? { + return nil + } + + public var parameters: [String : Any]? { + switch self { + case .searchMusic(let query): + let parameters: [String: Any] = [ + "term": query, + "country": "KR", + "media": "music", + "entity": "song" + ] + return parameters + + case .detailMusic(let id): + let parameters: [String: Any] = [ + "id": id, + "country": "KR", + ] + return parameters + + + } + } + + public var method: Moya.Method { + switch self { + case .searchMusic, .detailMusic: + return .get + } + } +} diff --git a/Projects/Core/Domain/DomainInterface/DomainInterface.xcodeproj/project.pbxproj b/Projects/Core/Domain/DomainInterface/DomainInterface.xcodeproj/project.pbxproj index a8ad3d2..e1f6fd4 100644 --- a/Projects/Core/Domain/DomainInterface/DomainInterface.xcodeproj/project.pbxproj +++ b/Projects/Core/Domain/DomainInterface/DomainInterface.xcodeproj/project.pbxproj @@ -3,23 +3,27 @@ archiveVersion = 1; classes = { }; - objectVersion = 55; + objectVersion = 56; objects = { /* Begin PBXBuildFile section */ 16A76FED32C6B714CAF33D2B /* Entity.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 06F92106B46658C4D05E4ABB /* Entity.framework */; }; - 253ADDBA7F0F518205DA6086 /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA0CCB4A5101AA202060F9AA /* Base.swift */; }; 353BF1AD56F4CC357E19D719 /* Test.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C8C9CF1C2E1A74CF11222B2 /* Test.swift */; }; 57E5E0940F81FC8D1DFD045E /* DomainInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 35D56B0B55DD9F93D8170AD5 /* DomainInterface.framework */; }; 6DAACDFF7943CB37965B2368 /* Entity.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 06F92106B46658C4D05E4ABB /* Entity.framework */; }; 72E1BB6284DCE3777F9AFFC6 /* Model.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D6EEC0400C29FD0B52020310 /* Model.framework */; }; - 980FB81611FF729E004936AD /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA0CCB4A5101AA202060F9AA /* Base.swift */; }; + 7F1AC73B2EB44EF800C82441 /* MusicDetailUseCaseProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F1AC73A2EB44EF000C82441 /* MusicDetailUseCaseProtocol.swift */; }; + 7F1AC73C2EB44EF800C82441 /* MusicDetailUseCaseProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F1AC73A2EB44EF000C82441 /* MusicDetailUseCaseProtocol.swift */; }; + 7F1AC73D2EB44EF800C82441 /* MusicDetailUseCaseProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F1AC73A2EB44EF000C82441 /* MusicDetailUseCaseProtocol.swift */; }; + 7F1AC73E2EB44EF800C82441 /* MusicDetailUseCaseProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F1AC73A2EB44EF000C82441 /* MusicDetailUseCaseProtocol.swift */; }; + 82EC8CCB6C2A84301319D45F /* MusicSearchUseCaseProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9A1AC6CCA9E4B674786DC31 /* MusicSearchUseCaseProtocol.swift */; }; AB7D4D041B1B69901FBE2092 /* Entity.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 06F92106B46658C4D05E4ABB /* Entity.framework */; }; - B3FF7F599D59926AF7C5431F /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA0CCB4A5101AA202060F9AA /* Base.swift */; }; + AF5BC2589B071B38F7BA40A8 /* MusicSearchUseCaseProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9A1AC6CCA9E4B674786DC31 /* MusicSearchUseCaseProtocol.swift */; }; BC207C9DA5E4673477A9C014 /* Model.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D6EEC0400C29FD0B52020310 /* Model.framework */; }; D9737EB0F4B4152468E4B3C0 /* Entity.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 06F92106B46658C4D05E4ABB /* Entity.framework */; }; - DB51ABC4FB182C4238F4C2BE /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA0CCB4A5101AA202060F9AA /* Base.swift */; }; + DF2884833774231E52AF9EDF /* MusicSearchUseCaseProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9A1AC6CCA9E4B674786DC31 /* MusicSearchUseCaseProtocol.swift */; }; ECB93EACF0EFEE45B37EC544 /* Model.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D6EEC0400C29FD0B52020310 /* Model.framework */; }; + F50AAC1F42DFDBC5F759A4A5 /* MusicSearchUseCaseProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9A1AC6CCA9E4B674786DC31 /* MusicSearchUseCaseProtocol.swift */; }; FCC7D056697F3ACC66085599 /* Model.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D6EEC0400C29FD0B52020310 /* Model.framework */; }; /* End PBXBuildFile section */ @@ -93,7 +97,8 @@ 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 = ""; }; - AA0CCB4A5101AA202060F9AA /* Base.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Base.swift; sourceTree = ""; }; + 7F1AC73A2EB44EF000C82441 /* MusicDetailUseCaseProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MusicDetailUseCaseProtocol.swift; sourceTree = ""; }; + A9A1AC6CCA9E4B674786DC31 /* MusicSearchUseCaseProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MusicSearchUseCaseProtocol.swift; sourceTree = ""; }; 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; }; D5C8C2D4A69E6BEA71EEC953 /* DomainInterface-Stage-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "DomainInterface-Stage-Info.plist"; sourceTree = ""; }; @@ -208,7 +213,8 @@ D5F4384B64B2AC2E7BFC4AB1 /* Sources */ = { isa = PBXGroup; children = ( - AA0CCB4A5101AA202060F9AA /* Base.swift */, + 7F1AC73A2EB44EF000C82441 /* MusicDetailUseCaseProtocol.swift */, + A9A1AC6CCA9E4B674786DC31 /* MusicSearchUseCaseProtocol.swift */, ); path = Sources; sourceTree = ""; @@ -338,8 +344,6 @@ isa = PBXProject; attributes = { BuildIndependentTargetsInParallel = YES; - TargetAttributes = { - }; }; buildConfigurationList = A6A33577101613ED4870CAD3 /* Build configuration list for PBXProject "DomainInterface" */; compatibilityVersion = "Xcode 14.0"; @@ -406,7 +410,8 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - DB51ABC4FB182C4238F4C2BE /* Base.swift in Sources */, + 7F1AC73B2EB44EF800C82441 /* MusicDetailUseCaseProtocol.swift in Sources */, + F50AAC1F42DFDBC5F759A4A5 /* MusicSearchUseCaseProtocol.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -422,7 +427,8 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 980FB81611FF729E004936AD /* Base.swift in Sources */, + 7F1AC73D2EB44EF800C82441 /* MusicDetailUseCaseProtocol.swift in Sources */, + 82EC8CCB6C2A84301319D45F /* MusicSearchUseCaseProtocol.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -430,7 +436,8 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 253ADDBA7F0F518205DA6086 /* Base.swift in Sources */, + 7F1AC73E2EB44EF800C82441 /* MusicDetailUseCaseProtocol.swift in Sources */, + DF2884833774231E52AF9EDF /* MusicSearchUseCaseProtocol.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -438,7 +445,8 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - B3FF7F599D59926AF7C5431F /* Base.swift in Sources */, + 7F1AC73C2EB44EF800C82441 /* MusicDetailUseCaseProtocol.swift in Sources */, + AF5BC2589B071B38F7BA40A8 /* MusicSearchUseCaseProtocol.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -544,10 +552,7 @@ SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = ( - "$(inherited)", - DEBUG, - ); + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; SWIFT_COMPILATION_MODE = singlefile; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; @@ -730,10 +735,7 @@ SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = ( - "$(inherited)", - DEBUG, - ); + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; SWIFT_COMPILATION_MODE = singlefile; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; @@ -767,10 +769,7 @@ SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = ( - "$(inherited)", - DEBUG, - ); + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; SWIFT_COMPILATION_MODE = singlefile; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; @@ -797,10 +796,7 @@ SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = ( - "$(inherited)", - DEBUG, - ); + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; SWIFT_COMPILATION_MODE = singlefile; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; @@ -832,10 +828,7 @@ SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = ( - "$(inherited)", - DEBUG, - ); + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; SWIFT_COMPILATION_MODE = singlefile; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; diff --git a/Projects/Core/Domain/DomainInterface/Project.swift b/Projects/Core/Domain/DomainInterface/Project.swift index 83cd69c..4e343c1 100644 --- a/Projects/Core/Domain/DomainInterface/Project.swift +++ b/Projects/Core/Domain/DomainInterface/Project.swift @@ -2,7 +2,6 @@ import Foundation import ProjectDescription import DependencyPlugin import ProjectTemplatePlugin -import ProjectTemplatePlugin import DependencyPackagePlugin let project = Project.makeAppModule( diff --git a/Projects/Core/Domain/DomainInterface/Sources/Base.swift b/Projects/Core/Domain/DomainInterface/Sources/Base.swift deleted file mode 100644 index 6297cc4..0000000 --- a/Projects/Core/Domain/DomainInterface/Sources/Base.swift +++ /dev/null @@ -1,22 +0,0 @@ -// -// 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/Domain/DomainInterface/Sources/MusicDetailUseCaseProtocol.swift b/Projects/Core/Domain/DomainInterface/Sources/MusicDetailUseCaseProtocol.swift new file mode 100644 index 0000000..1b5f647 --- /dev/null +++ b/Projects/Core/Domain/DomainInterface/Sources/MusicDetailUseCaseProtocol.swift @@ -0,0 +1,13 @@ +// +// MusicDetailUseCaseProtocol.swift +// DomainInterface +// +// Created by Wonji Suh on 10/31/25. +// + +import Entity + +public protocol MusicDetailUseCaseProtocol { + func fetchTrackDetail(id: Int) async throws -> MusicItem +} + diff --git a/Projects/Core/Domain/DomainInterface/Sources/MusicSearchUseCaseProtocol.swift b/Projects/Core/Domain/DomainInterface/Sources/MusicSearchUseCaseProtocol.swift new file mode 100644 index 0000000..021398e --- /dev/null +++ b/Projects/Core/Domain/DomainInterface/Sources/MusicSearchUseCaseProtocol.swift @@ -0,0 +1,13 @@ +// +// MusicSearchUseCaseProtocol.swift +// DomainInterface +// +// Created by Wonji Suh on 10/24/25. +// + +import Entity + +public protocol MusicSearchUseCaseProtocol { + func searchMusic(searchQuery: String) async throws -> [MusicItem] +} + diff --git a/Projects/Core/Domain/Entity/Entity.xcodeproj/project.pbxproj b/Projects/Core/Domain/Entity/Entity.xcodeproj/project.pbxproj index 04f3d1f..01b9c09 100644 --- a/Projects/Core/Domain/Entity/Entity.xcodeproj/project.pbxproj +++ b/Projects/Core/Domain/Entity/Entity.xcodeproj/project.pbxproj @@ -7,17 +7,25 @@ objects = { /* Begin PBXBuildFile section */ - 300A7F2C71E9911B9DE9A5BD /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED41D354D5AE38D5B1280947 /* Base.swift */; }; + 26637FEAAF6E92566882396C /* Extension+ITunesTrack.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C15508F026561321E66FA30 /* Extension+ITunesTrack.swift */; }; + 2D03CA2C570A9109D652BC26 /* MusicItemEntity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73EF97D2E9EB60245C744B49 /* MusicItemEntity.swift */; }; + 31197937A1D4461A2256B3F8 /* MusicMockItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = E971608AC4068DF3CBC8A070 /* MusicMockItem.swift */; }; + 315668DE15E7423930386AD9 /* Extension+ITunesTrack.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C15508F026561321E66FA30 /* Extension+ITunesTrack.swift */; }; + 514358F473B977D6998A5328 /* MusicItemEntity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73EF97D2E9EB60245C744B49 /* MusicItemEntity.swift */; }; 5700ECA6FD38B77D693B0091 /* Model.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 209525459216D5CD40B81F82 /* Model.framework */; }; - 66998A96645025557C41895C /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED41D354D5AE38D5B1280947 /* Base.swift */; }; - 7916B50FD14F5EF38C809048 /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED41D354D5AE38D5B1280947 /* Base.swift */; }; - 8C520704A554D01DC2011903 /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED41D354D5AE38D5B1280947 /* Base.swift */; }; + 7748591064D7F18DEDC170E8 /* Extension+ITunesTrack.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C15508F026561321E66FA30 /* Extension+ITunesTrack.swift */; }; + 8DDFB394D5E113C3B755D22A /* MusicMockItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = E971608AC4068DF3CBC8A070 /* MusicMockItem.swift */; }; 8EFBDFE48EE37EC4A310E3F5 /* Model.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 209525459216D5CD40B81F82 /* Model.framework */; }; 9A0C98812BF5FFA414CFB1CA /* Model.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 209525459216D5CD40B81F82 /* Model.framework */; }; + A6C56B79EAC01CFB56CFA225 /* Extension+ITunesTrack.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C15508F026561321E66FA30 /* Extension+ITunesTrack.swift */; }; A7731722AD26181D6EBEE9A0 /* Entity.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D3D722D8A39C97CE4035A34 /* Entity.framework */; }; + A94899DD76F2414693593542 /* MusicItemEntity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73EF97D2E9EB60245C744B49 /* MusicItemEntity.swift */; }; + AF1789C006A58CA9506AB849 /* MusicItemEntity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73EF97D2E9EB60245C744B49 /* MusicItemEntity.swift */; }; + B8295BFA896386EF552B4F93 /* MusicMockItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = E971608AC4068DF3CBC8A070 /* MusicMockItem.swift */; }; D5AB84F03933D55C5618D8B9 /* Model.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 209525459216D5CD40B81F82 /* Model.framework */; }; E3A1102D7A459CEBD9454CF1 /* Test.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F3475DDDF8FD92B3EADBBA9 /* Test.swift */; }; EAF9FA5186D62449AA07F8B3 /* Model.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 209525459216D5CD40B81F82 /* Model.framework */; }; + F6F50DB9F05530FCCC71AAEB /* MusicMockItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = E971608AC4068DF3CBC8A070 /* MusicMockItem.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -126,7 +134,9 @@ /* Begin PBXFileReference section */ 209525459216D5CD40B81F82 /* Model.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Model.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 40EBC703573820B17E0EC445 /* Entity-Prod-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Entity-Prod-Info.plist"; sourceTree = ""; }; + 6C15508F026561321E66FA30 /* Extension+ITunesTrack.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Extension+ITunesTrack.swift"; sourceTree = ""; }; 6D3D722D8A39C97CE4035A34 /* Entity.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Entity.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 73EF97D2E9EB60245C744B49 /* MusicItemEntity.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MusicItemEntity.swift; sourceTree = ""; }; 7F3475DDDF8FD92B3EADBBA9 /* Test.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Test.swift; sourceTree = ""; }; 84059943E0A3A48A809F3C4C /* Entity-Debug-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Entity-Debug-Info.plist"; sourceTree = ""; }; A74AA0F8625D0A07993367BF /* EntityTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = EntityTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -135,8 +145,8 @@ ADD02B70E9B6457CEA10605C /* Entity-Stage-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Entity-Stage-Info.plist"; sourceTree = ""; }; D11CC460DEE0B2237C4DB35C /* Entity_Stage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Entity_Stage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D8E21D4AEFA7909A196470C7 /* EntityTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "EntityTests-Info.plist"; sourceTree = ""; }; + E971608AC4068DF3CBC8A070 /* MusicMockItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MusicMockItem.swift; sourceTree = ""; }; EC3F3B371A50B9040A79757C /* Entity-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Entity-Info.plist"; sourceTree = ""; }; - ED41D354D5AE38D5B1280947 /* Base.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Base.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -239,6 +249,14 @@ name = Products; sourceTree = ""; }; + CCAF9F5F6A2A60E72936D2C8 /* Mapper */ = { + isa = PBXGroup; + children = ( + 6C15508F026561321E66FA30 /* Extension+ITunesTrack.swift */, + ); + path = Mapper; + sourceTree = ""; + }; E22B0573C6119F4E241BB889 /* Derived */ = { isa = PBXGroup; children = ( @@ -250,7 +268,9 @@ F84F561EE26EEAB65CBD9853 /* Sources */ = { isa = PBXGroup; children = ( - ED41D354D5AE38D5B1280947 /* Base.swift */, + CCAF9F5F6A2A60E72936D2C8 /* Mapper */, + 73EF97D2E9EB60245C744B49 /* MusicItemEntity.swift */, + E971608AC4068DF3CBC8A070 /* MusicMockItem.swift */, ); path = Sources; sourceTree = ""; @@ -446,7 +466,9 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 300A7F2C71E9911B9DE9A5BD /* Base.swift in Sources */, + 315668DE15E7423930386AD9 /* Extension+ITunesTrack.swift in Sources */, + AF1789C006A58CA9506AB849 /* MusicItemEntity.swift in Sources */, + 31197937A1D4461A2256B3F8 /* MusicMockItem.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -454,7 +476,9 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 66998A96645025557C41895C /* Base.swift in Sources */, + 26637FEAAF6E92566882396C /* Extension+ITunesTrack.swift in Sources */, + 514358F473B977D6998A5328 /* MusicItemEntity.swift in Sources */, + F6F50DB9F05530FCCC71AAEB /* MusicMockItem.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -462,7 +486,9 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 8C520704A554D01DC2011903 /* Base.swift in Sources */, + 7748591064D7F18DEDC170E8 /* Extension+ITunesTrack.swift in Sources */, + 2D03CA2C570A9109D652BC26 /* MusicItemEntity.swift in Sources */, + B8295BFA896386EF552B4F93 /* MusicMockItem.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -470,7 +496,9 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 7916B50FD14F5EF38C809048 /* Base.swift in Sources */, + A6C56B79EAC01CFB56CFA225 /* Extension+ITunesTrack.swift in Sources */, + A94899DD76F2414693593542 /* MusicItemEntity.swift in Sources */, + 8DDFB394D5E113C3B755D22A /* MusicMockItem.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Projects/Core/Domain/Entity/Project.swift b/Projects/Core/Domain/Entity/Project.swift index 44f645e..8eccb00 100644 --- a/Projects/Core/Domain/Entity/Project.swift +++ b/Projects/Core/Domain/Entity/Project.swift @@ -2,7 +2,6 @@ import Foundation import ProjectDescription import DependencyPlugin import ProjectTemplatePlugin -import ProjectTemplatePlugin import DependencyPackagePlugin let project = Project.makeAppModule( diff --git a/Projects/Core/Domain/Entity/Sources/Base.swift b/Projects/Core/Domain/Entity/Sources/Base.swift deleted file mode 100644 index fc5212e..0000000 --- a/Projects/Core/Domain/Entity/Sources/Base.swift +++ /dev/null @@ -1,22 +0,0 @@ -// -// base.swift -// DDDAttendance. -// -// Created by Roy on 2025-10-22 -// 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/Domain/Entity/Sources/Mapper/Extension+ITunesTrack.swift b/Projects/Core/Domain/Entity/Sources/Mapper/Extension+ITunesTrack.swift new file mode 100644 index 0000000..2545ce0 --- /dev/null +++ b/Projects/Core/Domain/Entity/Sources/Mapper/Extension+ITunesTrack.swift @@ -0,0 +1,38 @@ +// +// Extension+ITunesTrack.swift +// Entity +// +// Created by Wonji Suh on 10/24/25. +// + + +import Foundation + +import Model + +public extension ITunesTrack { + func toDomain() -> MusicItem? { + guard let artwork = artworkUrl100 else { + return nil + } + + return MusicItem( + trackId: trackId, + trackName: trackName, + album: collectionName ?? "Unknown Album", + artist: artistName, + artworkURL: artwork, + previewURL: previewUrl, + releaseDate: releaseDate, + aboutAlbumInfo: collectionCensoredName, + genre: primaryGenreName + ) + } +} + + +public extension Array where Element == ITunesTrack { + func toDomain() -> [MusicItem] { + compactMap { $0.toDomain() } + } +} diff --git a/Projects/Core/Domain/Entity/Sources/MusicItemEntity.swift b/Projects/Core/Domain/Entity/Sources/MusicItemEntity.swift new file mode 100644 index 0000000..22e6477 --- /dev/null +++ b/Projects/Core/Domain/Entity/Sources/MusicItemEntity.swift @@ -0,0 +1,85 @@ +// +// MusicItemEntity.swift +// Entity +// +// Created by Wonji Suh on 10/23/25. +// + +import Foundation + +public struct MusicItem: Identifiable, Equatable { + public var id = UUID() + public let trackId: Int + public let trackName: String + public let album: String + public let artist: String + public let artworkURL: URL + public let previewURL: URL? + public let releaseDate: String + public let aboutAlbumInfo: String + public let genre: String + + public init( + trackId: Int, + trackName: String, + album: String, + artist: String, + artworkURL: URL, + previewURL: URL? = nil, + releaseDate: String, + aboutAlbumInfo: String = "", + genre: String + ) { + self.trackId = trackId + self.trackName = trackName + self.album = album + self.artist = artist + self.artworkURL = artworkURL + self.previewURL = previewURL + self.releaseDate = releaseDate + self.aboutAlbumInfo = aboutAlbumInfo + self.genre = genre + } +} + +public extension MusicItem { + private static let iso8601Formatter: ISO8601DateFormatter = { + let formatter = ISO8601DateFormatter() + formatter.formatOptions = [.withInternetDateTime] + return formatter + }() + + var releaseDateValue: Date? { + MusicItem.iso8601Formatter.date(from: releaseDate) + } + + var highResolutionArtworkURL: URL { + let targetSizes = ["1080x1080", "1200x1200", "600x600", "400x400", "300x300", "200x200"] + let original = artworkURL.absoluteString + + for size in targetSizes { + if let range = original.range(of: "100x100") { + let upgraded = original.replacingCharacters(in: range, with: size) + if let url = URL(string: upgraded) { + return url + } + } + } + + return artworkURL + } + + static var detailMusicItem: MusicItem { + return MusicItem( + trackId: 1838638363, + trackName: "20s", + album: "CODA", + artist: "유다빈밴드", + artworkURL: URL(string: "https://is1-ssl.mzstatic.com/image/thumb/Music221/v4/56/77/98/567798ec-369a-0cfd-3b0d-5fd55b62d3e3/887928030889.jpg/100x100bb.jpg")!, + previewURL: URL(string: "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview211/v4/21/0e/1e/210e1e3f-2b94-eca8-8a9b-19403bd2ef71/mzaf_5723681619052556286.plus.aac.p.m4a"), + releaseDate: "2025-09-15T12:00:00Z", + aboutAlbumInfo: "CODA", + genre: "록" + ) + } +} diff --git a/Projects/Core/Domain/Entity/Sources/MusicMockItem.swift b/Projects/Core/Domain/Entity/Sources/MusicMockItem.swift new file mode 100644 index 0000000..1bbbc5e --- /dev/null +++ b/Projects/Core/Domain/Entity/Sources/MusicMockItem.swift @@ -0,0 +1,516 @@ +// +// MusicMockItem.swift +// Entity +// +// Created by Wonji Suh on 10/27/25. +// + + +import Foundation + +public extension MusicItem { + static let codaMock: [MusicItem] = [ + MusicItem( + trackId: 1838638363, + trackName: "20s", + album: "CODA", + artist: "유다빈밴드", + artworkURL: URL(string: "https://is1-ssl.mzstatic.com/image/thumb/Music221/v4/56/77/98/567798ec-369a-0cfd-3b0d-5fd55b62d3e3/887928030889.jpg/100x100bb.jpg")!, + previewURL: URL(string: "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview211/v4/21/0e/1e/210e1e3f-2b94-eca8-8a9b-19403bd2ef71/mzaf_5723681619052556286.plus.aac.p.m4a"), + releaseDate: "2025-09-15T12:00:00Z", + genre: "록" + ), + MusicItem( + trackId: 1838638358, + trackName: "LOVE SONG", + album: "CODA", + artist: "유다빈밴드", + artworkURL: URL(string: "https://is1-ssl.mzstatic.com/image/thumb/Music221/v4/56/77/98/567798ec-369a-0cfd-3b0d-5fd55b62d3e3/887928030889.jpg/100x100bb.jpg")!, + previewURL: URL(string: "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview211/v4/35/7a/ab/357aabf8-0eb3-1cc6-fbdf-000d1b9d97c1/mzaf_12744431508815145799.plus.aac.p.m4a"), + releaseDate: "2025-09-15T12:00:00Z", + genre: "록" + ), + MusicItem( + trackId: 1838638364, + trackName: "축배", + album: "CODA", + artist: "유다빈밴드", + artworkURL: URL(string: "https://is1-ssl.mzstatic.com/image/thumb/Music221/v4/56/77/98/567798ec-369a-0cfd-3b0d-5fd55b62d3e3/887928030889.jpg/100x100bb.jpg")!, + previewURL: URL(string: "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview221/v4/2c/21/dd/2c21ddb8-e523-ae86-94bc-0bfcb2c994dc/mzaf_10759651768847444630.plus.aac.p.m4a"), + releaseDate: "2025-09-15T12:00:00Z", + genre: "록" + ), + MusicItem( + trackId: 1838638356, + trackName: "어지러워", + album: "CODA", + artist: "유다빈밴드", + artworkURL: URL(string: "https://is1-ssl.mzstatic.com/image/thumb/Music221/v4/56/77/98/567798ec-369a-0cfd-3b0d-5fd55b62d3e3/887928030889.jpg/100x100bb.jpg")!, + previewURL: URL(string: "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview221/v4/2e/dd/90/2edd90d5-ad72-4773-f00e-52e52f83d82c/mzaf_13285347370880549974.plus.aac.p.m4a"), + releaseDate: "2025-09-15T12:00:00Z", + genre: "록" + ), + MusicItem( + trackId: 1838638359, + trackName: "DROP", + album: "CODA", + artist: "유다빈밴드", + artworkURL: URL(string: "https://is1-ssl.mzstatic.com/image/thumb/Music221/v4/56/77/98/567798ec-369a-0cfd-3b0d-5fd55b62d3e3/887928030889.jpg/100x100bb.jpg")!, + previewURL: URL(string: "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview221/v4/d1/b3/e6/d1b3e6e2-d88f-f55b-bbe9-6d5679d31f3c/mzaf_14642084163081430463.plus.aac.p.m4a"), + releaseDate: "2025-09-15T12:00:00Z", + genre: "록" + ), + MusicItem( + trackId: 1838638360, + trackName: "강가에서", + album: "CODA", + artist: "유다빈밴드", + artworkURL: URL(string: "https://is1-ssl.mzstatic.com/image/thumb/Music221/v4/56/77/98/567798ec-369a-0cfd-3b0d-5fd55b62d3e3/887928030889.jpg/100x100bb.jpg")!, + previewURL: URL(string: "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview221/v4/07/1b/64/071b645b-76b0-39b1-c85b-5e35ca85d68a/mzaf_8265551490018708165.plus.aac.p.m4a"), + releaseDate: "2025-09-15T12:00:00Z", + genre: "록" + ), + MusicItem( + trackId: 1838638365, + trackName: "지나갈 지나간 지나쳐갈", + album: "CODA", + artist: "유다빈밴드", + artworkURL: URL(string: "https://is1-ssl.mzstatic.com/image/thumb/Music221/v4/56/77/98/567798ec-369a-0cfd-3b0d-5fd55b62d3e3/887928030889.jpg/100x100bb.jpg")!, + previewURL: URL(string: "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview221/v4/06/18/ef/0618ef79-0290-719a-775b-cd8876a778fb/mzaf_1256313288189544404.plus.aac.p.m4a"), + releaseDate: "2025-09-15T12:00:00Z", + genre: "록" + ), + MusicItem( + trackId: 1838638366, + trackName: "커튼콜", + album: "CODA", + artist: "유다빈밴드", + artworkURL: URL(string: "https://is1-ssl.mzstatic.com/image/thumb/Music221/v4/56/77/98/567798ec-369a-0cfd-3b0d-5fd55b62d3e3/887928030889.jpg/100x100bb.jpg")!, + previewURL: URL(string: "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview221/v4/59/f2/75/59f27548-68ab-9315-a9fc-87c5540726ec/mzaf_5296437949213812246.plus.aac.p.m4a"), + releaseDate: "2025-09-15T12:00:00Z", + genre: "록" + ), + MusicItem( + trackId: 1838638362, + trackName: "모래성 #Intermission", + album: "CODA", + artist: "유다빈밴드", + artworkURL: URL(string: "https://is1-ssl.mzstatic.com/image/thumb/Music221/v4/56/77/98/567798ec-369a-0cfd-3b0d-5fd55b62d3e3/887928030889.jpg/100x100bb.jpg")!, + previewURL: URL(string: "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview221/v4/e3/06/06/e3060683-89cd-7063-f011-352d423da300/mzaf_11413283642285200194.plus.aac.p.m4a"), + releaseDate: "2025-09-15T12:00:00Z", + genre: "록" + ) + ] + + static let springMockItems: [MusicItem] = [ + MusicItem( + trackId: 1745664127, + trackName: "봄눈", + album: "선재 업고 튀어 (Original Television Soundtrack), Pt. 8 - Single", + artist: "10CM", + artworkURL: URL(string: "https://is1-ssl.mzstatic.com/image/thumb/Music211/v4/13/e6/e8/13e6e889-c2a5-95f0-2936-5c3994fb306e/888272134100_Cover.jpg/100x100bb.jpg")!, + previewURL: URL(string: "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview221/v4/29/e3/85/29e3851f-a741-d6e1-483f-f297b6a88b34/mzaf_7264286878137370459.plus.aac.p.m4a"), + releaseDate: "2024-05-14T12:00:00Z", + genre: "OST" + ), + MusicItem( + trackId: 1744556248, + trackName: "봄", + album: "봄 - Single", + artist: "123", + artworkURL: URL(string: "https://is1-ssl.mzstatic.com/image/thumb/Music221/v4/ba/b2/61/bab261a4-6e08-a1c1-a009-3368f3729fe9/191953363899.jpg/100x100bb.jpg")!, + previewURL: URL(string: "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview221/v4/e1/0e/7b/e10e7baa-cdcf-f6fe-1e75-e73aaa86beb6/mzaf_10687014775639434550.plus.aac.p.m4a"), + releaseDate: "2024-05-08T12:00:00Z", + genre: "힙합/랩" + ), + MusicItem( + trackId: 1740224931, + trackName: "새봄의 노래", + album: "청춘의 포말 - The 1st Album", + artist: "도영", + artworkURL: URL(string: "https://is1-ssl.mzstatic.com/image/thumb/Music211/v4/88/42/27/8842274f-5d07-8fdb-92bb-e526f9a829f0/cover.jpg/100x100bb.jpg")!, + previewURL: URL(string: "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview211/v4/e6/1e/a4/e61ea4b3-29f8-1c39-c083-7e41f0ab275d/mzaf_3308607046669353577.plus.aac.p.m4a"), + releaseDate: "2024-04-22T12:00:00Z", + genre: "K-Pop" + ), + MusicItem( + trackId: 1741512209, + trackName: "봄", + album: "어노인팅 연주곡 시리즈 Vol.7 - 생명 - EP", + artist: "어노인팅", + artworkURL: URL(string: "https://is1-ssl.mzstatic.com/image/thumb/Music211/v4/07/ac/be/07acbe5a-3a50-9870-8593-bb3d02409d23/190335010406.jpg/100x100bb.jpg")!, + previewURL: URL(string: "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview211/v4/75/d8/b1/75d8b1f9-c75c-3391-0148-fd1b27739d86/mzaf_18392196987082603187.plus.aac.p.m4a"), + releaseDate: "2024-04-17T12:00:00Z", + genre: "크리스천" + ), + MusicItem( + trackId: 1739507481, + trackName: "봄", + album: "봄 - Single", + artist: "박혜경", + artworkURL: URL(string: "https://is1-ssl.mzstatic.com/image/thumb/Music211/v4/6c/1a/6d/6c1a6d18-67b9-7429-0700-4f7314b865ba/888272132434_Cover.jpg/100x100bb.jpg")!, + previewURL: URL(string: "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview221/v4/88/b5/1f/88b51f97-f647-f59a-3d5c-174895d9016f/mzaf_6440010930609645237.plus.aac.p.m4a"), + releaseDate: "2024-04-06T12:00:00Z", + genre: "R&B/소울" + ), + MusicItem( + trackId: 1733651784, + trackName: "봄이 와도", + album: "봄이 와도 - Single", + artist: "로이킴", + artworkURL: URL(string: "https://is1-ssl.mzstatic.com/image/thumb/Music122/v4/9b/df/14/9bdf14ee-7912-0484-c2f7-9f63638a7ea3/888272131031_Cover.jpg/100x100bb.jpg")!, + previewURL: URL(string: "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview122/v4/4b/5c/e2/4b5ce276-2198-757e-8937-5be6ab30d328/mzaf_18005562829818797965.plus.aac.p.m4a"), + releaseDate: "2024-03-04T12:00:00Z", + genre: "R&B/소울" + ), + MusicItem( + trackId: 1732025710, + trackName: "봄", + album: "봄 - Single", + artist: "홍진영", + artworkURL: URL(string: "https://is1-ssl.mzstatic.com/image/thumb/Music122/v4/41/c0/81/41c08191-b230-6789-32b4-5d7a9c35a763/888272130560_Cover.jpg/100x100bb.jpg")!, + previewURL: URL(string: "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview112/v4/2c/99/23/2c9923b3-6d81-7306-5f06-921c697af165/mzaf_3085878647002237401.plus.aac.p.m4a"), + releaseDate: "2024-02-25T12:00:00Z", + genre: "K-Pop" + ), + MusicItem( + trackId: 1760912615, + trackName: "봄", + album: "봄 - Single", + artist: "유영진", + artworkURL: URL(string: "https://is1-ssl.mzstatic.com/image/thumb/Music221/v4/4d/c6/bf/4dc6bf7a-0844-1f78-931e-8329916dfb88/190987031408_cover.jpg/100x100bb.jpg")!, + previewURL: URL(string: "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview211/v4/ba/c8/c0/bac8c03b-54eb-f1e1-8686-2a1815c2e7a8/mzaf_15031869304495107113.plus.aac.p.m4a"), + releaseDate: "2023-05-10T12:00:00Z", + genre: "K-Pop" + ), + MusicItem( + trackId: 1676042822, + trackName: "봄", + album: "봄 - Single", + artist: "김형중", + artworkURL: URL(string: "https://is1-ssl.mzstatic.com/image/thumb/Music126/v4/4c/07/e5/4c07e5a8-9d3d-b482-44d6-437b7f3b974c/8809933187213.jpg/100x100bb.jpg")!, + previewURL: URL(string: "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview116/v4/47/89/96/478996d6-15ae-242f-cfe0-986cb244826b/mzaf_9951328211417108284.plus.aac.p.m4a"), + releaseDate: "2023-03-15T12:00:00Z", + genre: "K-Pop" + ), + MusicItem( + trackId: 1644814758, + trackName: "봄", + album: "굿잡 (Original Soundtrack), Pt. 4 - Single", + artist: "예린", + artworkURL: URL(string: "https://is1-ssl.mzstatic.com/image/thumb/Music112/v4/62/ff/45/62ff4525-b402-69d2-fe79-40ac439831df/888272105971.jpg/100x100bb.jpg")!, + previewURL: URL(string: "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview112/v4/f7/1b/b9/f71bb972-ced7-979e-c22e-c3dac927f755/mzaf_3247535676043614166.plus.aac.p.m4a"), + releaseDate: "2022-09-15T12:00:00Z", + genre: "OST" + ) + ] + + static let summerMockItems: [MusicItem] = [ + MusicItem( + trackId: 1579608263, + trackName: "한 여름밤의 꿀: 다시 여름", + album: "한 여름밤의 꿀: 다시 여름, TEN PROJECT, Pt. 3 - Single", + artist: "레이나 & San E", + artworkURL: URL(string: "https://is1-ssl.mzstatic.com/image/thumb/Music125/v4/8d/12/cb/8d12cbda-a1cd-0c54-128c-225978840d30/190296547652.jpg/100x100bb.jpg")!, + previewURL: URL(string: "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview115/v4/8f/14/93/8f149334-8ae6-1a9f-fdb6-e85a1e41248e/mzaf_17169922656692818611.plus.aac.p.m4a"), + releaseDate: "2021-07-05T12:00:00Z", + genre: "K-Pop" + ), + MusicItem( + trackId: 1695671644, + trackName: "여름날 (feat. 하현상)", + album: "여름날 (feat. 하현상) - Single", + artist: "볼빨간사춘기", + artworkURL: URL(string: "https://is1-ssl.mzstatic.com/image/thumb/Music116/v4/f2/5b/47/f25b4723-2d95-be19-7bd5-6e0b1daa6faa/191953291147.jpg/100x100bb.jpg")!, + previewURL: URL(string: "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview126/v4/1a/8c/ea/1a8ceaa7-78f2-9e7f-ec49-a735ad4748a6/mzaf_493021391622708470.plus.aac.p.m4a"), + releaseDate: "2023-07-05T12:00:00Z", + genre: "포크" + ), + MusicItem( + trackId: 1706763680, + trackName: "네 번의 여름", + album: "Harmony", + artist: "카더가든", + artworkURL: URL(string: "https://is1-ssl.mzstatic.com/image/thumb/Music126/v4/34/99/af/3499af12-8c35-0a51-7c26-70f41076dd91/Harmony.jpg/100x100bb.jpg")!, + previewURL: URL(string: "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview116/v4/99/a8/dd/99a8dd27-2c82-9455-ba48-54b991345d3f/mzaf_13182038086014079025.plus.aac.p.m4a"), + releaseDate: "2023-09-12T12:00:00Z", + genre: "R&B/소울" + ), + MusicItem( + trackId: 1132509048, + trackName: "여름 방학", + album: "NCT #127 – The 1st Mini Album", + artist: "NCT 127", + artworkURL: URL(string: "https://is1-ssl.mzstatic.com/image/thumb/Music60/v4/2b/f7/b0/2bf7b080-2731-5e19-8437-4c4ede4f6442/NCT127_4000x4000.jpg/100x100bb.jpg")!, + previewURL: URL(string: "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview115/v4/00/9f/41/009f4173-8383-b36f-c91b-5b7e001269b4/mzaf_14136991519298332306.plus.aac.p.m4a"), + releaseDate: "2016-07-10T07:00:00Z", + genre: "K-Pop" + ), + MusicItem( + trackId: 1622756313, + trackName: "여름가을겨울 봄.", + album: "잔나비 소곡집 ll : 초록을거머쥔우리는 - EP", + artist: "잔나비", + artworkURL: URL(string: "https://is1-ssl.mzstatic.com/image/thumb/Music112/v4/d9/a4/fb/d9a4fb13-9601-62d8-d342-21957312ab06/cover_KM0015239_1.jpg/100x100bb.jpg")!, + previewURL: URL(string: "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview122/v4/62/27/55/622755aa-d468-5126-9a53-0d5978e151f8/mzaf_4351702893853975255.plus.aac.p.m4a"), + releaseDate: "2022-05-10T12:00:00Z", + genre: "K-Pop" + ), + MusicItem( + trackId: 1754047324, + trackName: "여름여름해", + album: "Sunny Summer - EP", + artist: "여자친구", + artworkURL: URL(string: "https://is1-ssl.mzstatic.com/image/thumb/Music221/v4/16/d8/f4/16d8f471-c875-9b34-fea0-cc9517584f7d/8804775094651_Cover.jpg/100x100bb.jpg")!, + previewURL: URL(string: "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview211/v4/ca/cc/38/cacc385a-09ec-3f41-3b73-667b4ff752e8/mzaf_12206334108790096378.plus.aac.p.m4a"), + releaseDate: "2018-07-19T12:00:00Z", + genre: "K-Pop" + ), + MusicItem( + trackId: 1738880065, + trackName: "여름이 들려 (Summer Comes)", + album: "Golden Hourglass - EP", + artist: "오마이걸", + artworkURL: URL(string: "https://is1-ssl.mzstatic.com/image/thumb/Music221/v4/7e/90/9e/7e909ee6-06db-f5a4-a688-52ed6ba6facc/cover_KM0019651_1.jpg/100x100bb.jpg")!, + previewURL: URL(string: "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview221/v4/a6/a6/ff/a6a6ff67-5ab4-5dde-d344-18ba961e84ca/mzaf_7301878448426747868.plus.aac.p.m4a"), + releaseDate: "2023-07-24T12:00:00Z", + genre: "K-Pop" + ), + MusicItem( + trackId: 1704124848, + trackName: "여섯 번째 여름", + album: "ASTERUM : The Shape of Things to Come - EP", + artist: "PLAVE", + artworkURL: URL(string: "https://is1-ssl.mzstatic.com/image/thumb/Music116/v4/72/6b/4a/726b4a3f-ec07-c604-b570-1b15ee1fe77c/PLAVE_ASTERUM_The_Shape_of_Things_to_Come.jpg/100x100bb.jpg")!, + previewURL: URL(string: "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview116/v4/8d/23/13/8d2313b3-a267-ac3f-c036-985e52f1d50a/mzaf_1621910258232319065.plus.aac.p.m4a"), + releaseDate: "2023-08-24T12:00:00Z", + genre: "K-Pop" + ), + MusicItem( + trackId: 1571904978, + trackName: "추적이는 여름 비가 되어", + album: "장범준 싱글 - Single", + artist: "장범준", + artworkURL: URL(string: "https://is1-ssl.mzstatic.com/image/thumb/Music125/v4/bc/85/7e/bc857e78-4348-2417-80bb-b1b8e7c97e2a/2.jpg/100x100bb.jpg")!, + previewURL: URL(string: "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview125/v4/12/ba/1f/12ba1f53-632d-926f-3fb1-87879b23cc82/mzaf_12309832963206625617.plus.aac.p.m4a"), + releaseDate: "2021-06-11T12:00:00Z", + genre: "K-Pop" + ), + MusicItem( + trackId: 1753235827, + trackName: "여름이잖아 (feat. 마크)", + album: "여름이잖아 (feat. 마크) - Single", + artist: "BIG Naughty", + artworkURL: URL(string: "https://is1-ssl.mzstatic.com/image/thumb/Music211/v4/95/03/11/9503119b-a796-4169-e704-1550f84c2406/cover_KM0020031_1.jpg/100x100bb.jpg")!, + previewURL: URL(string: "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview221/v4/84/a5/2e/84a52e32-2b20-b49d-4dff-ea0c0bb9bd60/mzaf_6072339271281697568.plus.aac.p.m4a"), + releaseDate: "2024-06-26T12:00:00Z", + genre: "K-Pop" + ) + ] + + static let autumnMockItems: [MusicItem] = [ + MusicItem( + trackId: 1539127951, + trackName: "가을밤에 든 생각", + album: "잔나비 소곡집 I - EP", + artist: "잔나비", + artworkURL: URL(string: "https://is1-ssl.mzstatic.com/image/thumb/Music124/v4/a9/d6/d4/a9d6d4e2-0f52-be99-abd0-9e5c5338f507/cover_-.jpg/100x100bb.jpg")!, + previewURL: URL(string: "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview125/v4/c6/87/04/c68704d2-660b-0eb0-a74a-2e75818c40f8/mzaf_3587013114541262927.plus.aac.p.m4a"), + releaseDate: "2020-11-06T12:00:00Z", + genre: "K-Pop" + ), + MusicItem( + trackId: 1454764826, + trackName: "가을이 오면", + album: "이문세 4집", + artist: "이문세", + artworkURL: URL(string: "https://is1-ssl.mzstatic.com/image/thumb/Music114/v4/c2/b6/e1/c2b6e151-0dd7-b6bc-a326-505878fe6915/135544.jpg/100x100bb.jpg")!, + previewURL: URL(string: "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview115/v4/92/5f/a8/925fa854-4abc-92d3-ce16-7dd467eb26eb/mzaf_16293190947028765079.plus.aac.p.m4a"), + releaseDate: "1987-03-10T12:00:00Z", + genre: "포크" + ), + MusicItem( + trackId: 1288487937, + trackName: "가을 아침", + album: "꽃갈피 둘 - EP", + artist: "아이유", + artworkURL: URL(string: "https://is1-ssl.mzstatic.com/image/thumb/Music114/v4/b7/12/bc/b712bc53-60c9-9f1b-0c2d-48bb294e0cbf/cover-.jpg/100x100bb.jpg")!, + previewURL: URL(string: "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview125/v4/0e/a4/6a/0ea46a38-12f3-d360-c220-05429681e888/mzaf_16427708665278272337.plus.aac.p.m4a"), + releaseDate: "2017-09-18T12:00:00Z", + genre: "K-Pop" + ), + MusicItem( + trackId: 1804634460, + trackName: "가을 타나 봐", + album: "ABOUT ME", + artist: "바이브", + artworkURL: URL(string: "https://is1-ssl.mzstatic.com/image/thumb/Music211/v4/47/32/62/47326206-f6f1-a9a3-82b0-b4e47c648e54/cover_KM0020969_1.jpg/100x100bb.jpg")!, + previewURL: URL(string: "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview221/v4/cf/1b/38/cf1b386b-a680-d640-c414-392ea68e6de9/mzaf_14247162226518809041.plus.aac.p.m4a"), + releaseDate: "2018-09-18T12:00:00Z", + genre: "K-Pop" + ), + MusicItem( + trackId: 1573740658, + trackName: "가을 우체국 앞에서", + album: "슬기로운 의사생활 시즌 2, Pt. 2 (Original Television Soundtrack) - Single", + artist: "김대명", + artworkURL: URL(string: "https://is1-ssl.mzstatic.com/image/thumb/Music125/v4/3d/7e/72/3d7e7220-f17f-15b4-8e22-d991d54ab516/888272071787_Cover.jpg/100x100bb.jpg")!, + previewURL: URL(string: "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview115/v4/42/57/5a/42575ac5-5a67-d28f-3a72-25a392f2317d/mzaf_4409856118902219837.plus.aac.p.m4a"), + releaseDate: "2021-07-01T12:00:00Z", + genre: "K-Pop" + ), + MusicItem( + trackId: 1700083524, + trackName: "가을에 흩날리는 사랑", + album: "가을에 흩날리는 사랑 - Single", + artist: "멜로망스", + artworkURL: URL(string: "https://is1-ssl.mzstatic.com/image/thumb/Music116/v4/95/59/8d/95598d8e-4c9e-7681-09af-5a562c8905cb/8804775255329_cover.jpg/100x100bb.jpg")!, + previewURL: URL(string: "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview116/v4/2b/21/20/2b2120bb-e099-4307-7c9c-c0bfe4c63ed0/mzaf_5443329292222974503.plus.aac.p.m4a"), + releaseDate: "2023-09-20T12:00:00Z", + genre: "K-Pop" + ), + MusicItem( + trackId: 1435644028, + trackName: "가을 사랑", + album: "Every LETTER I Sent You", + artist: "백예린", + artworkURL: URL(string: "https://is1-ssl.mzstatic.com/image/thumb/Music123/v4/36/3d/03/363d030a-9cf5-8d06-d3bd-949015135c8b/cover.jpg/100x100bb.jpg")!, + previewURL: URL(string: "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview116/v4/4f/4c/cd/4f4ccd54-c46d-68b3-1102-6ae2bc497bb7/mzaf_5571039059281647802.plus.aac.p.m4a"), + releaseDate: "2019-12-10T12:00:00Z", + genre: "K-Pop" + ), + MusicItem( + trackId: 1481004343, + trackName: "가을 속 우리", + album: "가을 속 우리 - Single", + artist: "잔나비", + artworkURL: URL(string: "https://is1-ssl.mzstatic.com/image/thumb/Music125/v4/18/cb/8b/18cb8b23-2b93-213c-6ea3-4a76ada9f759/cover.jpg/100x100bb.jpg")!, + previewURL: URL(string: "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview115/v4/8c/7c/c3/8c7cc3dd-1f9f-6db7-8158-0e0eaa90bf34/mzaf_8819573916407056645.plus.aac.p.m4a"), + releaseDate: "2019-10-06T12:00:00Z", + genre: "K-Pop" + ), + MusicItem( + trackId: 1592293417, + trackName: "가을이 당신에게", + album: "가을이 당신에게 - Single", + artist: "10CM", + artworkURL: URL(string: "https://is1-ssl.mzstatic.com/image/thumb/Music125/v4/07/8d/40/078d40b7-0ed3-1210-2356-5b630a37cb1d/8804775253172_Cover.jpg/100x100bb.jpg")!, + previewURL: URL(string: "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview125/v4/49/aa/30/49aa3011-2ef1-31c3-4e96-1af9dccf2833/mzaf_9165813857796794982.plus.aac.p.m4a"), + releaseDate: "2021-09-16T12:00:00Z", + genre: "K-Pop" + ), + MusicItem( + trackId: 1454188866, + trackName: "가을 하늘 (Autumn Sky)", + album: "가을 하늘", + artist: "정인", + artworkURL: URL(string: "https://is1-ssl.mzstatic.com/image/thumb/Music124/v4/0a/f1/39/0af13986-5d3a-6151-2ed4-fd1c0f684a68/cover.jpg/100x100bb.jpg")!, + previewURL: URL(string: "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview115/v4/6d/0f/7a/6d0f7a1c-1f7c-0db4-c9c6-83b7a04bc5c1/mzaf_15167882922509528975.plus.aac.p.m4a"), + releaseDate: "2018-10-03T12:00:00Z", + genre: "R&B/소울" + ) + ] + + static let winterMockItems: [MusicItem] = [ + MusicItem( + trackId: 1448761484, + trackName: "겨울을 걷는다", + album: "울랄라세션 1st Mini Album - 울랄라 프레이즈", + artist: "울랄라세션", + artworkURL: URL(string: "https://is1-ssl.mzstatic.com/image/thumb/Music115/v4/1e/59/8d/1e598ded-4e73-431a-63b9-99d0ccc038f4/8808678107449.jpg/100x100bb.jpg")!, + previewURL: URL(string: "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview125/v4/f9/b4/09/f9b409a2-5d22-2746-5255-3b2cf184b39d/mzaf_874245251026346515.plus.aac.p.m4a"), + releaseDate: "2011-11-11T08:00:00Z", + genre: "K-Pop" + ), + MusicItem( + trackId: 1451506659, + trackName: "첫눈", + album: "겨울 스페셜 앨범", + artist: "EXO", + artworkURL: URL(string: "https://is1-ssl.mzstatic.com/image/thumb/Music118/v4/05/b9/ce/05b9ce7b-868b-a9ac-bc0d-2bf8b828cc9d/8809269503473.jpg/100x100bb.jpg")!, + previewURL: URL(string: "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview118/v4/09/52/63/0952630a-0428-53b2-1e0f-0a85e0d23677/mzaf_3951040780450219037.plus.aac.p.m4a"), + releaseDate: "2013-12-09T12:00:00Z", + genre: "K-Pop" + ), + MusicItem( + trackId: 1065970172, + trackName: "겨울을 닮은 그대에게", + album: "Winter Garden - Single", + artist: "에일리", + artworkURL: URL(string: "https://is1-ssl.mzstatic.com/image/thumb/Music62/v4/f3/29/2b/f3292bbd-be4d-9591-3c30-ace6ab8dcdb8/cover.jpg/100x100bb.jpg")!, + previewURL: URL(string: "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview115/v4/47/00/1f/47001fe6-3eb4-2f79-9de2-99e9c6b18521/mzaf_13796392794273148621.plus.aac.p.m4a"), + releaseDate: "2015-12-07T12:00:00Z", + genre: "발라드" + ), + MusicItem( + trackId: 1215864496, + trackName: "겨울이 오면", + album: "겨울이 오면 - Single", + artist: "정승환", + artworkURL: URL(string: "https://is1-ssl.mzstatic.com/image/thumb/Music111/v4/29/6e/33/296e3362-f6e1-92bb-97ed-75bf47a16446/8809534466008.jpg/100x100bb.jpg")!, + previewURL: URL(string: "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview115/v4/30/05/e4/3005e4ee-9f3c-84df-14d4-a90e8edd361d/mzaf_10617079995100614104.plus.aac.p.m4a"), + releaseDate: "2016-12-02T12:00:00Z", + genre: "K-Pop" + ), + MusicItem( + trackId: 1523265631, + trackName: "겨울 고백", + album: "Jelly Christmas 2013 - Single", + artist: "성시경, 박효신, 서인국, VIXX & Little Sister", + artworkURL: URL(string: "https://is1-ssl.mzstatic.com/image/thumb/Music124/v4/4a/e8/9f/4ae89fff-59bd-fecf-cc42-0844c29fd91a/1.jpg/100x100bb.jpg")!, + previewURL: URL(string: "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview125/v4/2f/e6/4a/2fe64a61-1b56-ae72-dd26-9f827bff53b5/mzaf_16649112076128580464.plus.aac.p.m4a"), + releaseDate: "2013-12-10T12:00:00Z", + genre: "K-Pop" + ), + MusicItem( + trackId: 1750882663, + trackName: "겨울이 오면", + album: "Winter Wanderer", + artist: "카더가든", + artworkURL: URL(string: "https://is1-ssl.mzstatic.com/image/thumb/Music211/v4/28/86/c4/2886c4a8-5675-f779-fbd8-22f7035e29f2/8804775225003_Cover.jpg/100x100bb.jpg")!, + previewURL: URL(string: "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview221/v4/e2/70/14/e27014bc-7618-403e-ddf2-ab89176bc74f/mzaf_8707378355194012025.plus.aac.p.m4a"), + releaseDate: "2023-12-06T12:00:00Z", + genre: "K-Pop" + ), + MusicItem( + trackId: 983257311, + trackName: "크리스마스니까", + album: "겨울이 좋아", + artist: "별", + artworkURL: URL(string: "https://is1-ssl.mzstatic.com/image/thumb/Music1/v4/53/e1/5b/53e15b5e-84d9-0ae7-6956-2e1f8a133996/cover.jpg/100x100bb.jpg")!, + previewURL: URL(string: "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview125/v4/7d/08/22/7d0822b0-44f6-79ab-f5f0-8718bab3d1b5/mzaf_5394763125869662677.plus.aac.p.m4a"), + releaseDate: "2013-12-10T12:00:00Z", + genre: "K-Pop" + ), + MusicItem( + trackId: 984339217, + trackName: "로맨틱 겨울 (feat. 김진호)", + album: "Romantic 겨울 - EP", + artist: "김진표", + artworkURL: URL(string: "https://is1-ssl.mzstatic.com/image/thumb/Music1/v4/1a/95/a0/1a95a052-5082-e815-0c75-acf2f8b20bd4/romantic.jpg/100x100bb.jpg")!, + previewURL: URL(string: "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview115/v4/32/00/6a/32006a01-aff3-cf04-1b9b-c0aa185908a9/mzaf_12349473351873122100.plus.aac.p.m4a"), + releaseDate: "2009-12-17T12:00:00Z", + genre: "K-Pop" + ), + MusicItem( + trackId: 1659586504, + trackName: "겨울이 오면", + album: "겨울이 오면 - Single", + artist: "하현상", + artworkURL: URL(string: "https://is1-ssl.mzstatic.com/image/thumb/Music112/v4/9f/e8/e1/9fe8e191-36a6-d3f7-5c6f-6a942d81c6df/888272110210_Cover.jpg/100x100bb.jpg")!, + previewURL: URL(string: "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview122/v4/3e/a9/6c/3ea96c2c-c438-74ff-1469-02fbee21f94a/mzaf_8370599763638585591.plus.aac.p.m4a"), + releaseDate: "2022-12-19T12:00:00Z", + genre: "팝/록" + ), + MusicItem( + trackId: 1661608705, + trackName: "겨울 (with 오존)", + album: "부재 - EP", + artist: "카더가든", + artworkURL: URL(string: "https://is1-ssl.mzstatic.com/image/thumb/Music123/v4/a1/f1/d9/a1f1d9ed-4367-b40e-42ac-27992280a208/Car_the_garden.jpg/100x100bb.jpg")!, + previewURL: URL(string: "https://audio-ssl.itunes.apple.com/itunes-assets/AudioPreview123/v4/52/8c/3d/528c3d49-be11-d7d2-52a9-825a05f0235c/mzaf_16033719790487894153.plus.aac.p.m4a"), + releaseDate: "2021-01-28T12:00:00Z", + genre: "K-Pop" + ) + ] +} diff --git a/Projects/Core/Domain/UseCase/Project.swift b/Projects/Core/Domain/UseCase/Project.swift index e32c002..e473034 100644 --- a/Projects/Core/Domain/UseCase/Project.swift +++ b/Projects/Core/Domain/UseCase/Project.swift @@ -2,7 +2,6 @@ import Foundation import ProjectDescription import DependencyPlugin import ProjectTemplatePlugin -import ProjectTemplatePlugin import DependencyPackagePlugin let project = Project.makeAppModule( diff --git a/Projects/Core/Domain/UseCase/Sources/Base.swift b/Projects/Core/Domain/UseCase/Sources/Base.swift deleted file mode 100644 index 6297cc4..0000000 --- a/Projects/Core/Domain/UseCase/Sources/Base.swift +++ /dev/null @@ -1,22 +0,0 @@ -// -// 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/Domain/UseCase/Sources/Detail/MusicDetailUseCase.swift b/Projects/Core/Domain/UseCase/Sources/Detail/MusicDetailUseCase.swift new file mode 100644 index 0000000..a0874bd --- /dev/null +++ b/Projects/Core/Domain/UseCase/Sources/Detail/MusicDetailUseCase.swift @@ -0,0 +1,84 @@ +// +// MusicDetailUseCase.swift +// UseCase +// +// Created by Wonji Suh on 10/31/25. +// + +import Foundation + +import Entity +import DomainInterface +import DataInterface +import Repository + +import WeaveDI +import ComposableArchitecture + +public struct MusicDetailUseCase: MusicDetailUseCaseProtocol { + private let repository: MusicDetailRepositoryProtocol + + nonisolated public init( + repository: MusicDetailRepositoryProtocol + ) { + self.repository = repository + } + + + public func fetchTrackDetail(id: Int) async throws -> MusicItem { + let dtos = try await repository.fetchDetailMusic(id: "\(id)") + + guard let track = dtos.first?.toDomain() else { + throw URLError(.badServerResponse) + } + return track + } +} + + +extension MusicDetailUseCase: DependencyKey { + public static var liveValue: MusicDetailUseCaseProtocol { + let repository = UnifiedDI.register(MusicDetailRepositoryProtocol.self) { + MusicDetailRepository() + } + return MusicDetailUseCase(repository: repository) + } + + public static var testValue = MockMusicDetailRepository() + + public static var previewValue: MusicDetailUseCaseProtocol { + let repository = UnifiedDI.register(MusicDetailRepositoryProtocol.self) { + MusicDetailRepository() + } + return MusicDetailUseCase(repository: repository) + } +} + +@AutoSyncExtension +extension DependencyValues { + var musicDetailUseCase: MusicDetailUseCaseProtocol { + get { self[MusicDetailUseCase.self] } + set { self[MusicDetailUseCase.self] = newValue } + } +} + + +public extension RegisterModule { + var musicDetailUseCaseModule: @Sendable () -> Module { + makeUseCaseWithRepository( + MusicDetailUseCaseProtocol.self, + repositoryProtocol: MusicDetailRepositoryProtocol.self, + repositoryFallback: MockMusicDetailRepository(), + factory: { repo in + return MusicDetailUseCase(repository: repo) + } + ) + } + + var musicDetailRepositoryModule: @Sendable () -> Module { + makeDependency(MusicDetailRepositoryProtocol.self) { + MusicDetailRepository() + } + } +} + diff --git a/Projects/Core/Domain/UseCase/Sources/Search/MusicSearchUseCase.swift b/Projects/Core/Domain/UseCase/Sources/Search/MusicSearchUseCase.swift new file mode 100644 index 0000000..d1215fe --- /dev/null +++ b/Projects/Core/Domain/UseCase/Sources/Search/MusicSearchUseCase.swift @@ -0,0 +1,80 @@ +// +// MusicSearchUseCase.swift +// UseCase +// +// Created by Wonji Suh on 10/24/25. +// + +import Foundation + +import Entity +import DomainInterface +import DataInterface +import Repository + +import WeaveDI +import ComposableArchitecture + +public struct MusicSearchUseCase: MusicSearchUseCaseProtocol { + private let repository: MusicSearchRepositoryProtocol + + nonisolated public init( + repository: MusicSearchRepositoryProtocol + ) { + self.repository = repository + } + + public func searchMusic(searchQuery: String) async throws -> [Entity.MusicItem] { + let dto = try await repository.fetchMusic(search: searchQuery) + return dto.toDomain() + } +} + + +extension MusicSearchUseCase: DependencyKey { + public static var liveValue: MusicSearchUseCaseProtocol { + let repository: MusicSearchRepositoryProtocol = UnifiedDI.register(MusicSearchRepositoryProtocol.self) { + MusicSearchRepository() + } + return MusicSearchUseCase(repository: repository) + } + + + public static var testValue = MockMusicSearchRepository() + + + public static var previewValue: MusicSearchUseCaseProtocol { + let repository: MusicSearchRepositoryProtocol = UnifiedDI.register(MusicSearchRepositoryProtocol.self) { + MusicSearchRepository() + } + return MusicSearchUseCase(repository: repository) + } +} + +@AutoSyncExtension +extension DependencyValues { + var musicUseCase: MusicSearchUseCaseProtocol { + get { self[MusicSearchUseCase.self] } + set { self[MusicSearchUseCase.self] = newValue } + } +} + + +public extension RegisterModule { + var musicUseCaseModule: @Sendable () -> Module { + makeUseCaseWithRepository( + MusicSearchUseCaseProtocol.self, + repositoryProtocol: MusicSearchRepositoryProtocol.self, + repositoryFallback: MockMusicSearchRepository(), + factory: { repo in + return MusicSearchUseCase(repository: repo) + } + ) + } + + var musicRepositoryModule: @Sendable () -> Module { + makeDependency(MusicSearchRepositoryProtocol.self) { + MusicSearchRepository() + } + } +} diff --git a/Projects/Core/Domain/UseCase/UseCase.xcodeproj/project.pbxproj b/Projects/Core/Domain/UseCase/UseCase.xcodeproj/project.pbxproj index 56a056c..05a29bc 100644 --- a/Projects/Core/Domain/UseCase/UseCase.xcodeproj/project.pbxproj +++ b/Projects/Core/Domain/UseCase/UseCase.xcodeproj/project.pbxproj @@ -3,21 +3,26 @@ archiveVersion = 1; classes = { }; - objectVersion = 55; + objectVersion = 56; 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 */; }; - 02F4346C6CDADA6E0A48E81A /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1A794ACF5D341C1C9AFC5BB /* Base.swift */; }; 039F640F54A3DEE46842069F /* ConcurrencyExtras.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B60FF119A6FEF6D0D51AE5B /* ConcurrencyExtras.framework */; }; 03B706DEBBD0E4F94AEBD367 /* ComposableArchitecture.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = A06ABB2F1523CED2E74B4851 /* ComposableArchitecture.framework */; }; + 0518EA00A190B30C0F17D7A1 /* AsyncMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 57E0D39ADB0EDA14D1AECB21 /* AsyncMoya.framework */; }; 071B981F0D2DF826183B79CB /* UIKitNavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D748E68EDF03BA484791AC0E /* UIKitNavigation.framework */; }; + 0E8079E210A702DE84224A0F /* MusicSearchUseCaseTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 736374D98427021184233CEA /* MusicSearchUseCaseTests.swift */; }; 13D48166F46D9317D55B2CF3 /* Clocks.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6AA0797B504174C847E8FE95 /* Clocks.framework */; }; 1F52B4C183ED7440BB0008C5 /* ComposableArchitecture.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = A06ABB2F1523CED2E74B4851 /* ComposableArchitecture.framework */; }; 225CEFCE42B0B52EADC274BD /* CombineSchedulers.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8A7443ABF2BF970A68F68C39 /* CombineSchedulers.framework */; }; + 240DC4A00D69459A8E3245F0 /* MusicSearchUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E8AFBE865C2E9AF6DC86FF8 /* MusicSearchUseCase.swift */; }; + 25E0B791089D72B6B8C172C9 /* Alamofire_Alamofire.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 9F4ACA03FCFFBB51D80448FF /* Alamofire_Alamofire.bundle */; }; 27BC664E66CCF74669CFCB4A /* UIKitNavigationShim.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 44D709557E90FBEF8A8A4305 /* UIKitNavigationShim.framework */; }; 3AD9817DB1EA153D26CA1169 /* DomainInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FB9702202A42059A564824B3 /* DomainInterface.framework */; }; + 3CC8A123B783E8673857C787 /* MusicSearchUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E8AFBE865C2E9AF6DC86FF8 /* MusicSearchUseCase.swift */; }; + 4AD89C18B506171EE4B7B14C /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E18B0DBA8AF99C0DB2DBE2C8 /* Alamofire.framework */; }; 4DEF70A10ABBC302AF66D19B /* Repository.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 6C51192BCDE8A7E9252657C2 /* Repository.framework */; }; 4FA5872040E01A8D68F66F8E /* ComposableArchitecture.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = A06ABB2F1523CED2E74B4851 /* ComposableArchitecture.framework */; }; 504D664D011D018429E293BF /* DomainInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FB9702202A42059A564824B3 /* DomainInterface.framework */; }; @@ -29,6 +34,7 @@ 5C4F067A4986D6C4E2EB4B7F /* DataInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8685E99C5809D7529D75E04 /* DataInterface.framework */; }; 5EBB8D1D64C397045A54E614 /* Repository.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 6C51192BCDE8A7E9252657C2 /* Repository.framework */; }; 5EDB47A27CE022305A0209FB /* OrderedCollections.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 275036982500E63F980B08D3 /* OrderedCollections.framework */; }; + 5FF798A0F87D336CEE09550E /* MusicSearchUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E8AFBE865C2E9AF6DC86FF8 /* MusicSearchUseCase.swift */; }; 639F5DA2F5E386011A7ACD8D /* CasePaths.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 319E89CCC442C21B32EE3C8A /* CasePaths.framework */; }; 657EB28029C3DF0D4B44A8EE /* Repository.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 6C51192BCDE8A7E9252657C2 /* Repository.framework */; }; 664A65FD9E33A7DAD26452DB /* WeaveDI.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = E19624172169EC662A81D26B /* WeaveDI.framework */; }; @@ -40,32 +46,43 @@ 75D5489B5B030315F847CEC7 /* Sharing.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DCE5B4C0845929AAD691396C /* Sharing.framework */; }; 76C16B36E81AF240140426DA /* DomainInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FB9702202A42059A564824B3 /* DomainInterface.framework */; }; 7AC6377C2F512F8932492065 /* ComposableArchitecture.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A06ABB2F1523CED2E74B4851 /* ComposableArchitecture.framework */; }; + 7CACD226B24EC1A16A8C2348 /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DB46CD1936DD40DFF06F6E70 /* RxSwift.framework */; }; 7DAC805575823E4D03899B13 /* Foundations.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 097C8502B89ACBB0F0A6B3DF /* Foundations.framework */; }; + 7F1AC7432EB44F3700C82441 /* MusicDetailUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F1AC7422EB44F3700C82441 /* MusicDetailUseCase.swift */; }; + 7F1AC7442EB44F3700C82441 /* MusicDetailUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F1AC7422EB44F3700C82441 /* MusicDetailUseCase.swift */; }; + 7F1AC7452EB44F3700C82441 /* MusicDetailUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F1AC7422EB44F3700C82441 /* MusicDetailUseCase.swift */; }; + 7F1AC7462EB44F3700C82441 /* MusicDetailUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F1AC7422EB44F3700C82441 /* MusicDetailUseCase.swift */; }; + 7F1AC74A2EB452AF00C82441 /* MusicDetailUseCaseTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F1AC7492EB452AB00C82441 /* MusicDetailUseCaseTests.swift */; }; + 87E1677F90F2EA114F5A9ED7 /* MusicSearchUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4E8AFBE865C2E9AF6DC86FF8 /* MusicSearchUseCase.swift */; }; 89E0A31F51C1EB7029936363 /* DomainInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FB9702202A42059A564824B3 /* DomainInterface.framework */; }; 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 */; }; - A0A6BA747CD25B74B1C8AC63 /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1A794ACF5D341C1C9AFC5BB /* Base.swift */; }; + 9A939653280A5C9E74F74755 /* CombineMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D1A87B170DAF79CF51F0B36C /* CombineMoya.framework */; }; + 9C90DE6CD2E6D84469773EB7 /* Moya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B13814CB96F2A20B29446433 /* Moya.framework */; }; A1C2AEADA890142CC5638C31 /* Repository.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 6C51192BCDE8A7E9252657C2 /* Repository.framework */; }; A705971F0A7C3227E903D5B6 /* LogMacro.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B922F6F0A84360198FB6043A /* LogMacro.framework */; }; + AA2B5ED316624F6155EF75A4 /* RxMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73410F3CAB67ED344CC3D062 /* RxMoya.framework */; }; AD9C424DD9EB3BBDF51C7E00 /* IssueReporting.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B930A91712C71F045FA71426 /* IssueReporting.framework */; }; B2AF891D2D2481ADFD0D1400 /* Model.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 491B7F0EBCB2B579DEE44331 /* Model.framework */; }; 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 */; }; + BA387595B90C5452EC8C9828 /* API.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B1CB2AE5D705F53F062A800 /* API.framework */; }; BB5DA4B960E719E9BC9438A5 /* Repository.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C51192BCDE8A7E9252657C2 /* Repository.framework */; }; - C06337547B7E10930823F58D /* Test.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E4376DB9065359514F63111 /* Test.swift */; }; - C06FD8BDA37BF0EB4D4D928A /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1A794ACF5D341C1C9AFC5BB /* Base.swift */; }; + BE6308218C24F4DC05F90B5E /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DFD5128DC344D8263474C557 /* CFNetwork.framework */; }; C94613A52F9BFA9FB4F53709 /* InternalCollectionsUtilities.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 24F1526402401DBFF6736037 /* InternalCollectionsUtilities.framework */; }; CAA123A29015605C00B054B0 /* CustomDump.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BDC4D3A9CC2456F59785C311 /* CustomDump.framework */; }; D5393DB4DF93417EF9EE85BB /* Sharing1.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 48BCB17D9732330186A8333E /* Sharing1.framework */; }; + DE5D7645FE62EEC5E0714F4E /* Service.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D7D106A44F676A3F66DBD268 /* Service.framework */; }; + DF86D6539983516F0558017B /* Alamofire_Alamofire.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 9F4ACA03FCFFBB51D80448FF /* Alamofire_Alamofire.bundle */; }; E2FCBD579384B0665935A639 /* DomainInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FB9702202A42059A564824B3 /* DomainInterface.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 */; }; - F554A2274148D7BE5A677BC7 /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1A794ACF5D341C1C9AFC5BB /* Base.swift */; }; FB5F5B5975EA6EFA6DBB7A9F /* DependenciesMacros.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B903EEF70DF0FB080EFC7B9B /* DependenciesMacros.framework */; }; + FFD7B5BAED339B1651E23F43 /* EventLimiter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4826D1DE20C63945D7E8813B /* EventLimiter.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -96,6 +113,7 @@ buildActionMask = 8; dstSubfolderSpec = 16; files = ( + DF86D6539983516F0558017B /* Alamofire_Alamofire.bundle in Dependencies */, 937A580AE4C073DC1A3135BF /* swift-composable-architecture_ComposableArchitecture.bundle in Dependencies */, EFF173319EFF0293CFD30604 /* swift-sharing_Sharing.bundle in Dependencies */, ); @@ -199,18 +217,26 @@ 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; }; + 2B1CB2AE5D705F53F062A800 /* API.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = API.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; }; 3EF7E8BB122749DE3A5B8126 /* Networking.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Networking.framework; 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; }; + 4826D1DE20C63945D7E8813B /* EventLimiter.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = EventLimiter.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; }; + 4E8AFBE865C2E9AF6DC86FF8 /* MusicSearchUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MusicSearchUseCase.swift; sourceTree = ""; }; 506286633FC4DF9633A2E0FD /* Dependencies.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Dependencies.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 57E0D39ADB0EDA14D1AECB21 /* AsyncMoya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AsyncMoya.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; }; + 73410F3CAB67ED344CC3D062 /* RxMoya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RxMoya.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 736374D98427021184233CEA /* MusicSearchUseCaseTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MusicSearchUseCaseTests.swift; sourceTree = ""; }; 765D2D0CA936BA6ADB4F5CE8 /* UseCase_Stage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = UseCase_Stage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 7F1AC7422EB44F3700C82441 /* MusicDetailUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MusicDetailUseCase.swift; sourceTree = ""; }; + 7F1AC7492EB452AB00C82441 /* MusicDetailUseCaseTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MusicDetailUseCaseTests.swift; sourceTree = ""; }; 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; }; 8A7443ABF2BF970A68F68C39 /* CombineSchedulers.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CombineSchedulers.framework; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -218,19 +244,24 @@ 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 = ""; }; - 9E4376DB9065359514F63111 /* Test.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Test.swift; sourceTree = ""; }; + 9F4ACA03FCFFBB51D80448FF /* Alamofire_Alamofire.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Alamofire_Alamofire.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; A06ABB2F1523CED2E74B4851 /* ComposableArchitecture.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ComposableArchitecture.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 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; }; + B13814CB96F2A20B29446433 /* Moya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Moya.framework; 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 = ""; }; - D1A794ACF5D341C1C9AFC5BB /* Base.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Base.swift; sourceTree = ""; }; + D1A87B170DAF79CF51F0B36C /* CombineMoya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CombineMoya.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 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; }; + DB46CD1936DD40DFF06F6E70 /* RxSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RxSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; DCE5B4C0845929AAD691396C /* Sharing.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Sharing.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + DFD5128DC344D8263474C557 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; }; + E18B0DBA8AF99C0DB2DBE2C8 /* Alamofire.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Alamofire.framework; sourceTree = BUILT_PRODUCTS_DIR; }; E19624172169EC662A81D26B /* WeaveDI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = WeaveDI.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; }; @@ -253,10 +284,15 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + BE6308218C24F4DC05F90B5E /* CFNetwork.framework in Frameworks */, 6F8C0740809FF4FA4ECB5419 /* OSLog.framework in Frameworks */, + BA387595B90C5452EC8C9828 /* API.framework in Frameworks */, + 4AD89C18B506171EE4B7B14C /* Alamofire.framework in Frameworks */, + 0518EA00A190B30C0F17D7A1 /* AsyncMoya.framework in Frameworks */, 639F5DA2F5E386011A7ACD8D /* CasePaths.framework in Frameworks */, B56BA2CAB8E95C0B318816C5 /* CasePathsCore.framework in Frameworks */, 13D48166F46D9317D55B2CF3 /* Clocks.framework in Frameworks */, + 9A939653280A5C9E74F74755 /* CombineMoya.framework in Frameworks */, 225CEFCE42B0B52EADC274BD /* CombineSchedulers.framework in Frameworks */, 7AC6377C2F512F8932492065 /* ComposableArchitecture.framework in Frameworks */, 039F640F54A3DEE46842069F /* ConcurrencyExtras.framework in Frameworks */, @@ -265,6 +301,7 @@ B9C9A498E023667DA2DBE6E9 /* Dependencies.framework in Frameworks */, FB5F5B5975EA6EFA6DBB7A9F /* DependenciesMacros.framework in Frameworks */, 3AD9817DB1EA153D26CA1169 /* DomainInterface.framework in Frameworks */, + FFD7B5BAED339B1651E23F43 /* EventLimiter.framework in Frameworks */, 7DAC805575823E4D03899B13 /* Foundations.framework in Frameworks */, 00DFC76D5E73EFAACB117244 /* IdentifiedCollections.framework in Frameworks */, C94613A52F9BFA9FB4F53709 /* InternalCollectionsUtilities.framework in Frameworks */, @@ -272,11 +309,15 @@ EE69B862A9856B56F0FF9AAC /* IssueReportingPackageSupport.framework in Frameworks */, A705971F0A7C3227E903D5B6 /* LogMacro.framework in Frameworks */, B2AF891D2D2481ADFD0D1400 /* Model.framework in Frameworks */, + 9C90DE6CD2E6D84469773EB7 /* Moya.framework in Frameworks */, 74CF85AA8553EF14DCDD88DB /* Networking.framework in Frameworks */, 5EDB47A27CE022305A0209FB /* OrderedCollections.framework in Frameworks */, 9A865777262F57D1BDDF8DEF /* Perception.framework in Frameworks */, 546C4C7902FF0E1EBD659ED0 /* PerceptionCore.framework in Frameworks */, BB5DA4B960E719E9BC9438A5 /* Repository.framework in Frameworks */, + AA2B5ED316624F6155EF75A4 /* RxMoya.framework in Frameworks */, + 7CACD226B24EC1A16A8C2348 /* RxSwift.framework in Frameworks */, + DE5D7645FE62EEC5E0714F4E /* Service.framework in Frameworks */, 75D5489B5B030315F847CEC7 /* Sharing.framework in Frameworks */, D5393DB4DF93417EF9EE85BB /* Sharing1.framework in Frameworks */, 8D33245E18919C5183CF8240 /* Sharing2.framework in Frameworks */, @@ -320,7 +361,8 @@ 24C485C2264AA4D53285980D /* Sources */ = { isa = PBXGroup; children = ( - D1A794ACF5D341C1C9AFC5BB /* Base.swift */, + 7F1AC7412EB44F2B00C82441 /* Detail */, + 7F1AC73F2EB44F1100C82441 /* Search */, ); path = Sources; sourceTree = ""; @@ -360,10 +402,27 @@ path = Derived; sourceTree = ""; }; + 7F1AC73F2EB44F1100C82441 /* Search */ = { + isa = PBXGroup; + children = ( + 4E8AFBE865C2E9AF6DC86FF8 /* MusicSearchUseCase.swift */, + ); + path = Search; + sourceTree = ""; + }; + 7F1AC7412EB44F2B00C82441 /* Detail */ = { + isa = PBXGroup; + children = ( + 7F1AC7422EB44F3700C82441 /* MusicDetailUseCase.swift */, + ); + path = Detail; + sourceTree = ""; + }; AA59CE1FEA8A06FD9F2BEE42 /* Sources */ = { isa = PBXGroup; children = ( - 9E4376DB9065359514F63111 /* Test.swift */, + 7F1AC7492EB452AB00C82441 /* MusicDetailUseCaseTests.swift */, + 736374D98427021184233CEA /* MusicSearchUseCaseTests.swift */, ); path = Sources; sourceTree = ""; @@ -383,9 +442,14 @@ BF0062FA29B274A2F9F0E5D9 /* Products */ = { isa = PBXGroup; children = ( + 9F4ACA03FCFFBB51D80448FF /* Alamofire_Alamofire.bundle */, + E18B0DBA8AF99C0DB2DBE2C8 /* Alamofire.framework */, + 2B1CB2AE5D705F53F062A800 /* API.framework */, + 57E0D39ADB0EDA14D1AECB21 /* AsyncMoya.framework */, 319E89CCC442C21B32EE3C8A /* CasePaths.framework */, 077022AC51917B06E9B06B85 /* CasePathsCore.framework */, 6AA0797B504174C847E8FE95 /* Clocks.framework */, + D1A87B170DAF79CF51F0B36C /* CombineMoya.framework */, 8A7443ABF2BF970A68F68C39 /* CombineSchedulers.framework */, A06ABB2F1523CED2E74B4851 /* ComposableArchitecture.framework */, 2B60FF119A6FEF6D0D51AE5B /* ConcurrencyExtras.framework */, @@ -394,6 +458,7 @@ 506286633FC4DF9633A2E0FD /* Dependencies.framework */, B903EEF70DF0FB080EFC7B9B /* DependenciesMacros.framework */, FB9702202A42059A564824B3 /* DomainInterface.framework */, + 4826D1DE20C63945D7E8813B /* EventLimiter.framework */, 097C8502B89ACBB0F0A6B3DF /* Foundations.framework */, F2E0EC679FC135E5CEC0A9AD /* IdentifiedCollections.framework */, 24F1526402401DBFF6736037 /* InternalCollectionsUtilities.framework */, @@ -401,11 +466,15 @@ 38354F5D61ADD2C05EFA3A60 /* IssueReportingPackageSupport.framework */, B922F6F0A84360198FB6043A /* LogMacro.framework */, 491B7F0EBCB2B579DEE44331 /* Model.framework */, + B13814CB96F2A20B29446433 /* Moya.framework */, 3EF7E8BB122749DE3A5B8126 /* Networking.framework */, 275036982500E63F980B08D3 /* OrderedCollections.framework */, 83C1C4DE45683C912C8DC2B4 /* Perception.framework */, 85FEAEF231E31B0754B21769 /* PerceptionCore.framework */, 6C51192BCDE8A7E9252657C2 /* Repository.framework */, + 73410F3CAB67ED344CC3D062 /* RxMoya.framework */, + DB46CD1936DD40DFF06F6E70 /* RxSwift.framework */, + D7D106A44F676A3F66DBD268 /* Service.framework */, DCE5B4C0845929AAD691396C /* Sharing.framework */, 48BCB17D9732330186A8333E /* Sharing1.framework */, EF32355A546906AD16B4026C /* Sharing2.framework */, @@ -429,6 +498,7 @@ C4FA0D0A6E006082621144E3 /* Frameworks */ = { isa = PBXGroup; children = ( + DFD5128DC344D8263474C557 /* CFNetwork.framework */, FA48A0D2804DC03C431C9190 /* OSLog.framework */, ); name = Frameworks; @@ -550,8 +620,6 @@ isa = PBXProject; attributes = { BuildIndependentTargetsInParallel = YES; - TargetAttributes = { - }; }; buildConfigurationList = 457FF1DD029A472E8F5461F7 /* Build configuration list for PBXProject "UseCase" */; compatibilityVersion = "Xcode 14.0"; @@ -608,6 +676,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 25E0B791089D72B6B8C172C9 /* Alamofire_Alamofire.bundle in Resources */, 014438C30E3FBCFDF9D90E75 /* swift-composable-architecture_ComposableArchitecture.bundle in Resources */, B3D82FA785BA33FDEE677930 /* swift-sharing_Sharing.bundle in Resources */, ); @@ -620,7 +689,8 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - C06337547B7E10930823F58D /* Test.swift in Sources */, + 7F1AC74A2EB452AF00C82441 /* MusicDetailUseCaseTests.swift in Sources */, + 0E8079E210A702DE84224A0F /* MusicSearchUseCaseTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -628,7 +698,8 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 02F4346C6CDADA6E0A48E81A /* Base.swift in Sources */, + 240DC4A00D69459A8E3245F0 /* MusicSearchUseCase.swift in Sources */, + 7F1AC7442EB44F3700C82441 /* MusicDetailUseCase.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -636,7 +707,8 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - C06FD8BDA37BF0EB4D4D928A /* Base.swift in Sources */, + 3CC8A123B783E8673857C787 /* MusicSearchUseCase.swift in Sources */, + 7F1AC7462EB44F3700C82441 /* MusicDetailUseCase.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -644,7 +716,8 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - A0A6BA747CD25B74B1C8AC63 /* Base.swift in Sources */, + 5FF798A0F87D336CEE09550E /* MusicSearchUseCase.swift in Sources */, + 7F1AC7452EB44F3700C82441 /* MusicDetailUseCase.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -652,7 +725,8 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - F554A2274148D7BE5A677BC7 /* Base.swift in Sources */, + 87E1677F90F2EA114F5A9ED7 /* MusicSearchUseCase.swift in Sources */, + 7F1AC7432EB44F3700C82441 /* MusicDetailUseCase.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -696,25 +770,7 @@ "-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", - "-load-plugin-executable", - "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros", - ); + 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 -load-plugin-executable $BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros"; PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.UseCase; PRODUCT_NAME = UseCase_Stage; SDKROOT = iphoneos; @@ -759,25 +815,7 @@ "-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", - "-load-plugin-executable", - "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros", - ); + 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 -load-plugin-executable $BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros"; PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.UseCase; PRODUCT_NAME = UseCase_Stage; SDKROOT = iphoneos; @@ -785,10 +823,7 @@ SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = ( - "$(inherited)", - DEBUG, - ); + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; SWIFT_COMPILATION_MODE = singlefile; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; @@ -872,35 +907,14 @@ "-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", - "-load-plugin-executable", - "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros", - ); + 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 -load-plugin-executable $BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros"; PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.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_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; SWIFT_COMPILATION_MODE = singlefile; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; @@ -936,25 +950,7 @@ "-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", - "-load-plugin-executable", - "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros", - ); + 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 -load-plugin-executable $BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros"; PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.UseCase; PRODUCT_NAME = UseCase_Prod; SDKROOT = iphoneos; @@ -962,10 +958,7 @@ SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = ( - "$(inherited)", - DEBUG, - ); + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; SWIFT_COMPILATION_MODE = singlefile; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; @@ -1003,25 +996,7 @@ "-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", - "-load-plugin-executable", - "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros", - ); + 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 -load-plugin-executable $BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros"; PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.UseCase; PRODUCT_NAME = UseCase_Prod; SDKROOT = iphoneos; @@ -1066,25 +1041,7 @@ "-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", - "-load-plugin-executable", - "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros", - ); + 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 -load-plugin-executable $BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros"; PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.UseCase; PRODUCT_NAME = UseCase; SDKROOT = iphoneos; @@ -1129,25 +1086,7 @@ "-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", - "-load-plugin-executable", - "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros", - ); + 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 -load-plugin-executable $BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros"; PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.UseCase; PRODUCT_NAME = UseCase; SDKROOT = iphoneos; @@ -1155,10 +1094,7 @@ SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = ( - "$(inherited)", - DEBUG, - ); + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; SWIFT_COMPILATION_MODE = singlefile; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; @@ -1189,25 +1125,7 @@ "-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", - "-load-plugin-executable", - "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros", - ); + 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 -load-plugin-executable $BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros"; PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.UseCase.UseCaseTests; PRODUCT_NAME = UseCaseTests; SDKROOT = iphoneos; @@ -1249,25 +1167,7 @@ "-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", - "-load-plugin-executable", - "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros", - ); + 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 -load-plugin-executable $BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros"; PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.UseCase; PRODUCT_NAME = UseCase_Debug; SDKROOT = iphoneos; @@ -1312,25 +1212,7 @@ "-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", - "-load-plugin-executable", - "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros", - ); + 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 -load-plugin-executable $BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros"; PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.UseCase; PRODUCT_NAME = UseCase_Debug; SDKROOT = iphoneos; @@ -1338,10 +1220,7 @@ SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = ( - "$(inherited)", - DEBUG, - ); + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; SWIFT_COMPILATION_MODE = singlefile; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; diff --git a/Projects/Core/Domain/UseCase/UseCaseTests/Sources/MusicDetailUseCaseTests.swift b/Projects/Core/Domain/UseCase/UseCaseTests/Sources/MusicDetailUseCaseTests.swift new file mode 100644 index 0000000..babb203 --- /dev/null +++ b/Projects/Core/Domain/UseCase/UseCaseTests/Sources/MusicDetailUseCaseTests.swift @@ -0,0 +1,45 @@ +// +// MusicDetailUseCaseTests.swift +// UseCase +// +// Created by Wonji Suh on 10/31/25. +// + +import Testing +import Foundation +import DomainInterface +import DataInterface +import Entity +import Repository // (필요 시) +@testable import UseCase + +@Suite("MusicDetailUseCaseTests", .tags(.unit, .useCase, .mock)) +struct MusicDetailUseCaseTests { + @Test("상세 검색 성공 시 DTO가 Domain으로 정상 변환") + func testSearchDetailMusicSuccessMapsToDomain() async throws { + // Given: Mock DTO 데이터 (가짜 iTunes 응답) + let dto: [Model.ITunesTrack] = [ + .mock(id: 100, artist: "아이유", name: "봄노래"), + ] + let repo = MockMusicDetailRepository(result: .success(dto)) + let useCase = MusicDetailUseCase(repository: repo) + + // When: 유즈케이스 실행 + let items = try await useCase.fetchTrackDetail(id: 100) + + // Then: 결과 검증 (DTO → Domain 매핑) + #expect(items.trackName == "봄노래", "첫 번째 곡 이름 매핑 확인") + #expect(items.artist == "아이유", "아티스트 매핑 확인") + } + + @Test("fetchTrackDetail 실패 시 에러처리") + func testSearchDetailMusicFailureError() async { + enum StubError: Error { case boom } + let repo = MockMusicDetailRepository(result: .failure(StubError.boom)) + let useCase = MusicDetailUseCase(repository: repo) + + await #expect(throws: StubError.self) { + _ = try await useCase.fetchTrackDetail(id: 0) + } + } +} diff --git a/Projects/Core/Domain/UseCase/UseCaseTests/Sources/MusicSearchUseCaseTests.swift b/Projects/Core/Domain/UseCase/UseCaseTests/Sources/MusicSearchUseCaseTests.swift new file mode 100644 index 0000000..567a1e8 --- /dev/null +++ b/Projects/Core/Domain/UseCase/UseCaseTests/Sources/MusicSearchUseCaseTests.swift @@ -0,0 +1,57 @@ +// +// MusicSearchUseCaseTests.swift +// UseCase +// +// Created by Wonji Suh on 10/24/25. +// + +import Testing +import Foundation +import DomainInterface +import DataInterface +import Entity +import Repository // (필요 시) +@testable import UseCase + +extension Tag { + @Tag static var mock: Self + @Tag static var unit: Self + @Tag static var useCase: Self +} + + +@Suite("MusicSearchUseCase", .tags(.unit, .useCase, .mock)) +struct MusicSearchUseCaseTests { + + @Test("searchMusic 검색 성공 시 DTO가 Domain으로 정상 변환") + func testSearchMusicSuccessMapsToDomain() async throws { + // Given: Mock DTO 데이터 (가짜 iTunes 응답) + let dto: [Model.ITunesTrack] = [ + .mock(id: 100, artist: "아이유", name: "봄노래"), + .mock(id: 200, artist: "10CM", name: "여름밤") + ] + let repo = MockMusicSearchRepository(result: .success(dto)) + let useCase = MusicSearchUseCase(repository: repo) + + // When: 유즈케이스 실행 + let items = try await useCase.searchMusic(searchQuery: "유다빈밴드") + + // Then: 결과 검증 (DTO → Domain 매핑) + #expect(items.count == 2, "결과 개수가 올바르다 ✅") + #expect(items[0].trackName == "봄노래", "첫 번째 곡 이름 매핑 확인") + #expect(items[0].artist == "아이유", "아티스트 매핑 확인") + #expect(items[1].trackName == "여름밤", "두 번째 곡 이름 매핑 확인") + #expect(items[1].artist == "10CM", "아티스트 매핑 확인") + } + + @Test("searchMusic 실패 시 에러처리") + func testSearchMusicFailurePropagatesError() async { + enum StubError: Error { case boom } + let repo = MockMusicSearchRepository(result: .failure(StubError.boom)) + let useCase = MusicSearchUseCase(repository: repo) + + await #expect(throws: StubError.self) { + _ = try await useCase.searchMusic(searchQuery: "fail-me") + } + } +} diff --git a/Projects/Core/Domain/UseCase/UseCaseTests/Sources/Test.swift b/Projects/Core/Domain/UseCase/UseCaseTests/Sources/Test.swift deleted file mode 100644 index a9c810e..0000000 --- a/Projects/Core/Domain/UseCase/UseCaseTests/Sources/Test.swift +++ /dev/null @@ -1,8 +0,0 @@ -// -// base.swift -// DDDAttendance -// -// Created by Roy on 2025-09-04 -// Copyright © 2025 DDD , Ltd. All rights reserved. -// - diff --git a/Projects/Core/Network/Foundations/Foundations.xcodeproj/project.pbxproj b/Projects/Core/Network/Foundations/Foundations.xcodeproj/project.pbxproj index e21556e..58f3d58 100644 --- a/Projects/Core/Network/Foundations/Foundations.xcodeproj/project.pbxproj +++ b/Projects/Core/Network/Foundations/Foundations.xcodeproj/project.pbxproj @@ -7,12 +7,32 @@ objects = { /* Begin PBXBuildFile section */ + 01D790755407D0CDDD70DB2F /* CombineMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 21A02D743F0045BBEC35D6F6 /* CombineMoya.framework */; }; + 044EED4370845FAC5AB74F9B /* AsyncMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1C792CC956FA539853A801FA /* AsyncMoya.framework */; }; + 056002347C5D18C6D1E4DC62 /* Alamofire_Alamofire.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = F44C08A6AD090D2B42069281 /* Alamofire_Alamofire.bundle */; }; 10E98FE95391D50781414FC6 /* Test.swift in Sources */ = {isa = PBXBuildFile; fileRef = 604B0B5F0559EA6D66C833FD /* Test.swift */; }; - 249B7E27642CB8EEAC3080AB /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1EDE0D6962DC9EE00EC71C7 /* Base.swift */; }; - 380DCA58604EC641101AD257 /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1EDE0D6962DC9EE00EC71C7 /* Base.swift */; }; + 122102FE33887C00D0D1A626 /* DomainType.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD9516575A7F940C16D505E7 /* DomainType.swift */; }; + 19503B7DC6501566E6CD9673 /* DomainType.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD9516575A7F940C16D505E7 /* DomainType.swift */; }; + 23DEC0A30443C3CF19484992 /* AsyncMoya.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 1C792CC956FA539853A801FA /* AsyncMoya.framework */; }; + 2824875B690CFE3379E7F480 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 985AD9025AD6B46BF8A411BD /* Alamofire.framework */; }; + 467D3F469076966079DD6CFC /* AsyncMoya.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 1C792CC956FA539853A801FA /* AsyncMoya.framework */; }; + 57FDCCDBA70EA2DA74EE38EC /* Moya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 88A04D446E1F435DC2AFC126 /* Moya.framework */; }; + 5A2E5282596F2047BE1DEBFD /* RxMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 56C60B9ED392DCCCFE3BB096 /* RxMoya.framework */; }; + 5ED8EA55E72C4DFF8EB9DEAA /* OSLog.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0708E13D341028923694B32B /* OSLog.framework */; }; + 6AB4755D8CAC7963A7AEA12A /* Alamofire_Alamofire.bundle in Resources */ = {isa = PBXBuildFile; fileRef = F44C08A6AD090D2B42069281 /* Alamofire_Alamofire.bundle */; }; 6DA5A48BD0B9B35DC7A49249 /* Foundations.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 021CD7FF40B20F0F8FAE456B /* Foundations.framework */; }; - D429C950E4E34B05B157CA57 /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1EDE0D6962DC9EE00EC71C7 /* Base.swift */; }; - E4A51A528FD9229FE20844A4 /* Base.swift in Sources */ = {isa = PBXBuildFile; fileRef = A1EDE0D6962DC9EE00EC71C7 /* Base.swift */; }; + 901492B0E8D44F9EEBE5A7AD /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FC40D006E1705654090E3E6A /* RxSwift.framework */; }; + 994D064C3B5FF030ABAAEABD /* AsyncMoya.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 1C792CC956FA539853A801FA /* AsyncMoya.framework */; }; + A36F25D62FB7A0D0B1EE350A /* NetworkError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6420625E233727FF80D8BE57 /* NetworkError.swift */; }; + A4341FD3CEAC71ED98472D5D /* NetworkError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6420625E233727FF80D8BE57 /* NetworkError.swift */; }; + A49E0DCBC75C7F3087C17CD9 /* NetworkError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6420625E233727FF80D8BE57 /* NetworkError.swift */; }; + B57985D039DBC98354F5CA44 /* DomainType.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD9516575A7F940C16D505E7 /* DomainType.swift */; }; + C5296C1D6029ED7F4CE54D4B /* EventLimiter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70D2CDD1761ABDAA165F899F /* EventLimiter.framework */; }; + D0FC3964106ACA7AF3ACAB2C /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C7858976A5645632621BB0F5 /* CFNetwork.framework */; }; + D8246DA3CC6AAA7F387A69A3 /* AsyncMoya.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 1C792CC956FA539853A801FA /* AsyncMoya.framework */; }; + E0790C916E7CE5E54B7CFF20 /* DomainType.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD9516575A7F940C16D505E7 /* DomainType.swift */; }; + F17EC4FD284E565AA297D843 /* LogMacro.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5E325828FF48A98F8616980C /* LogMacro.framework */; }; + F7A48FC3EA43091D084E84BD /* NetworkError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6420625E233727FF80D8BE57 /* NetworkError.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -26,6 +46,36 @@ /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ + 0F34282EAE4DC09396BF948F /* Dependencies */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 8; + dstSubfolderSpec = 16; + files = ( + 056002347C5D18C6D1E4DC62 /* Alamofire_Alamofire.bundle in Dependencies */, + ); + name = Dependencies; + runOnlyForDeploymentPostprocessing = 1; + }; + 606D2E4DB89FFDB63923AD8B /* Dependencies */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 8; + dstSubfolderSpec = 16; + files = ( + 23DEC0A30443C3CF19484992 /* AsyncMoya.framework in Dependencies */, + ); + name = Dependencies; + runOnlyForDeploymentPostprocessing = 1; + }; + 6DC4BB38EF366837F61807E9 /* Dependencies */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 8; + dstSubfolderSpec = 16; + files = ( + D8246DA3CC6AAA7F387A69A3 /* AsyncMoya.framework in Dependencies */, + ); + name = Dependencies; + runOnlyForDeploymentPostprocessing = 1; + }; 825B4768E9037432C9031ECC /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; @@ -56,6 +106,16 @@ name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; }; + ADFADDBC91FFFF1FF947DA8F /* Dependencies */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 8; + dstSubfolderSpec = 16; + files = ( + 467D3F469076966079DD6CFC /* AsyncMoya.framework in Dependencies */, + ); + name = Dependencies; + runOnlyForDeploymentPostprocessing = 1; + }; BBEA7168B913B1B0B8B0423A /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; buildActionMask = 2147483647; @@ -76,21 +136,43 @@ name = "Embed Frameworks"; runOnlyForDeploymentPostprocessing = 0; }; + EC5C4CEED4FF268FB6A856C2 /* Dependencies */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 8; + dstSubfolderSpec = 16; + files = ( + 994D064C3B5FF030ABAAEABD /* AsyncMoya.framework in Dependencies */, + ); + name = Dependencies; + runOnlyForDeploymentPostprocessing = 1; + }; /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ 021CD7FF40B20F0F8FAE456B /* Foundations.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Foundations.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0708E13D341028923694B32B /* 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; }; + 1C792CC956FA539853A801FA /* AsyncMoya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AsyncMoya.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 1CAC9A1C6F1705579EF49E67 /* Foundations-Debug-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Foundations-Debug-Info.plist"; sourceTree = ""; }; + 21A02D743F0045BBEC35D6F6 /* CombineMoya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CombineMoya.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 4862CBC0E0D62BCBE2AFBDD7 /* Foundations_Debug.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Foundations_Debug.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 56C60B9ED392DCCCFE3BB096 /* RxMoya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RxMoya.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5E325828FF48A98F8616980C /* LogMacro.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = LogMacro.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 604B0B5F0559EA6D66C833FD /* Test.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Test.swift; sourceTree = ""; }; + 6420625E233727FF80D8BE57 /* NetworkError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkError.swift; sourceTree = ""; }; 648B5FA2F05EDB9FF9E152BF /* Foundations-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Foundations-Info.plist"; sourceTree = ""; }; 652BB5729D40777B5FF582CE /* Foundations_Stage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Foundations_Stage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 67D48AE138F6FEB29160221F /* FoundationsTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "FoundationsTests-Info.plist"; sourceTree = ""; }; - A1EDE0D6962DC9EE00EC71C7 /* Base.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Base.swift; sourceTree = ""; }; + 70D2CDD1761ABDAA165F899F /* EventLimiter.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = EventLimiter.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 88A04D446E1F435DC2AFC126 /* Moya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Moya.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 985AD9025AD6B46BF8A411BD /* Alamofire.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Alamofire.framework; sourceTree = BUILT_PRODUCTS_DIR; }; A70F51F29FA64B0E7F8D4806 /* Foundations_Prod.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Foundations_Prod.framework; sourceTree = BUILT_PRODUCTS_DIR; }; A9730C9BA90C1C7196B80DE3 /* FoundationsTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = FoundationsTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + C7858976A5645632621BB0F5 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; }; CD8A762D677AC6B40A4CBE51 /* Foundations-Stage-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Foundations-Stage-Info.plist"; sourceTree = ""; }; + CD9516575A7F940C16D505E7 /* DomainType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DomainType.swift; sourceTree = ""; }; DF86B1059BDFEFF625515EBA /* Foundations-Prod-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Foundations-Prod-Info.plist"; sourceTree = ""; }; + F44C08A6AD090D2B42069281 /* Alamofire_Alamofire.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Alamofire_Alamofire.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + FC40D006E1705654090E3E6A /* RxSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RxSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -119,7 +201,17 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + D0FC3964106ACA7AF3ACAB2C /* CFNetwork.framework in Frameworks */, + 5ED8EA55E72C4DFF8EB9DEAA /* OSLog.framework in Frameworks */, + 2824875B690CFE3379E7F480 /* Alamofire.framework in Frameworks */, + 044EED4370845FAC5AB74F9B /* AsyncMoya.framework in Frameworks */, + 01D790755407D0CDDD70DB2F /* CombineMoya.framework in Frameworks */, + C5296C1D6029ED7F4CE54D4B /* EventLimiter.framework in Frameworks */, 6DA5A48BD0B9B35DC7A49249 /* Foundations.framework in Frameworks */, + F17EC4FD284E565AA297D843 /* LogMacro.framework in Frameworks */, + 57FDCCDBA70EA2DA74EE38EC /* Moya.framework in Frameworks */, + 5A2E5282596F2047BE1DEBFD /* RxMoya.framework in Frameworks */, + 901492B0E8D44F9EEBE5A7AD /* RxSwift.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -138,9 +230,19 @@ children = ( 37C4D7CC9093D3E335E4D089 /* Project */, 76D3FE9FF954FD9A0EE696B8 /* Products */, + 33192548603C77AB7E80FAD5 /* Frameworks */, ); sourceTree = ""; }; + 33192548603C77AB7E80FAD5 /* Frameworks */ = { + isa = PBXGroup; + children = ( + C7858976A5645632621BB0F5 /* CFNetwork.framework */, + 0708E13D341028923694B32B /* OSLog.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 37C4D7CC9093D3E335E4D089 /* Project */ = { isa = PBXGroup; children = ( @@ -162,11 +264,20 @@ 76D3FE9FF954FD9A0EE696B8 /* Products */ = { isa = PBXGroup; children = ( + F44C08A6AD090D2B42069281 /* Alamofire_Alamofire.bundle */, + 985AD9025AD6B46BF8A411BD /* Alamofire.framework */, + 1C792CC956FA539853A801FA /* AsyncMoya.framework */, + 21A02D743F0045BBEC35D6F6 /* CombineMoya.framework */, + 70D2CDD1761ABDAA165F899F /* EventLimiter.framework */, 4862CBC0E0D62BCBE2AFBDD7 /* Foundations_Debug.framework */, A70F51F29FA64B0E7F8D4806 /* Foundations_Prod.framework */, 652BB5729D40777B5FF582CE /* Foundations_Stage.framework */, 021CD7FF40B20F0F8FAE456B /* Foundations.framework */, A9730C9BA90C1C7196B80DE3 /* FoundationsTests.xctest */, + 5E325828FF48A98F8616980C /* LogMacro.framework */, + 88A04D446E1F435DC2AFC126 /* Moya.framework */, + 56C60B9ED392DCCCFE3BB096 /* RxMoya.framework */, + FC40D006E1705654090E3E6A /* RxSwift.framework */, ); name = Products; sourceTree = ""; @@ -194,7 +305,8 @@ B8F8EEEAD586953FD1EBF096 /* Sources */ = { isa = PBXGroup; children = ( - A1EDE0D6962DC9EE00EC71C7 /* Base.swift */, + CD9516575A7F940C16D505E7 /* DomainType.swift */, + 6420625E233727FF80D8BE57 /* NetworkError.swift */, ); path = Sources; sourceTree = ""; @@ -218,6 +330,7 @@ 543E23A4DBD255EF899D4F67 /* Resources */, 94BC7A37F20D54CCA9114702 /* Frameworks */, A13DCF71E2A30729AF84F09C /* Embed Frameworks */, + ADFADDBC91FFFF1FF947DA8F /* Dependencies */, ); buildRules = ( ); @@ -238,6 +351,7 @@ 1DB396F46BC79FF1A3BDDE8E /* Resources */, 7248FF24D317F39847EA5458 /* Frameworks */, 825B4768E9037432C9031ECC /* Embed Frameworks */, + 6DC4BB38EF366837F61807E9 /* Dependencies */, ); buildRules = ( ); @@ -258,6 +372,7 @@ 07C437416BCB17A1283D88BE /* Resources */, AFE12A9A88D7F1467DB370F4 /* Frameworks */, BBEA7168B913B1B0B8B0423A /* Embed Frameworks */, + EC5C4CEED4FF268FB6A856C2 /* Dependencies */, ); buildRules = ( ); @@ -278,6 +393,7 @@ 760B3EC811CC60C6C7011294 /* Resources */, A883ED2C154777CA14232A84 /* Frameworks */, 8AE8D35E52D6626B9A6431C1 /* Embed Frameworks */, + 0F34282EAE4DC09396BF948F /* Dependencies */, ); buildRules = ( ); @@ -299,6 +415,7 @@ 3157190FEE020B520BDD10B4 /* Resources */, 61B61EFB751EB12D9206B19C /* Frameworks */, DC5E80D7B63DEB4DB9206A5A /* Embed Frameworks */, + 606D2E4DB89FFDB63923AD8B /* Dependencies */, ); buildRules = ( ); @@ -376,6 +493,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 6AB4755D8CAC7963A7AEA12A /* Alamofire_Alamofire.bundle in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -386,7 +504,8 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - E4A51A528FD9229FE20844A4 /* Base.swift in Sources */, + B57985D039DBC98354F5CA44 /* DomainType.swift in Sources */, + A49E0DCBC75C7F3087C17CD9 /* NetworkError.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -394,7 +513,8 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - D429C950E4E34B05B157CA57 /* Base.swift in Sources */, + 122102FE33887C00D0D1A626 /* DomainType.swift in Sources */, + F7A48FC3EA43091D084E84BD /* NetworkError.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -410,7 +530,8 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 249B7E27642CB8EEAC3080AB /* Base.swift in Sources */, + 19503B7DC6501566E6CD9673 /* DomainType.swift in Sources */, + A36F25D62FB7A0D0B1EE350A /* NetworkError.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -418,7 +539,8 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 380DCA58604EC641101AD257 /* Base.swift in Sources */, + E0790C916E7CE5E54B7CFF20 /* DomainType.swift in Sources */, + A4341FD3CEAC71ED98472D5D /* NetworkError.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -443,6 +565,10 @@ 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/Foundations-Debug-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 16.6; @@ -452,6 +578,17 @@ "@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.Bandscape.Foundations; PRODUCT_NAME = Foundations_Debug; SDKROOT = iphoneos; @@ -481,6 +618,10 @@ 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/Foundations-Prod-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 16.6; @@ -490,6 +631,17 @@ "@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.Bandscape.Foundations; PRODUCT_NAME = Foundations_Prod; SDKROOT = iphoneos; @@ -519,6 +671,10 @@ 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/Foundations-Debug-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 16.6; @@ -528,6 +684,17 @@ "@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.Bandscape.Foundations; PRODUCT_NAME = Foundations_Debug; SDKROOT = iphoneos; @@ -553,6 +720,10 @@ 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/Foundations-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 16.6; @@ -562,6 +733,17 @@ "@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.Bandscape.Foundations; PRODUCT_NAME = Foundations; SDKROOT = iphoneos; @@ -582,6 +764,10 @@ 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/FoundationsTests-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 16.6; LD_RUNPATH_SEARCH_PATHS = ( @@ -589,6 +775,17 @@ "@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.Bandscape.Foundations.FoundationsTests; PRODUCT_NAME = FoundationsTests; SDKROOT = iphoneos; @@ -611,6 +808,10 @@ 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/Foundations-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 16.6; @@ -620,6 +821,17 @@ "@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.Bandscape.Foundations; PRODUCT_NAME = Foundations; SDKROOT = iphoneos; @@ -649,6 +861,10 @@ 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/Foundations-Stage-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 16.6; @@ -658,6 +874,17 @@ "@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.Bandscape.Foundations; PRODUCT_NAME = Foundations_Stage; SDKROOT = iphoneos; @@ -683,6 +910,10 @@ 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/Foundations-Prod-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 16.6; @@ -692,6 +923,17 @@ "@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.Bandscape.Foundations; PRODUCT_NAME = Foundations_Prod; SDKROOT = iphoneos; @@ -765,6 +1007,10 @@ 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/FoundationsTests-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 16.6; LD_RUNPATH_SEARCH_PATHS = ( @@ -772,6 +1018,17 @@ "@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.Bandscape.Foundations.FoundationsTests; PRODUCT_NAME = FoundationsTests; SDKROOT = iphoneos; @@ -798,6 +1055,10 @@ 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/Foundations-Stage-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 16.6; @@ -807,6 +1068,17 @@ "@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.Bandscape.Foundations; PRODUCT_NAME = Foundations_Stage; SDKROOT = iphoneos; diff --git a/Projects/Core/Network/Foundations/Project.swift b/Projects/Core/Network/Foundations/Project.swift index fe74b59..76eccca 100644 --- a/Projects/Core/Network/Foundations/Project.swift +++ b/Projects/Core/Network/Foundations/Project.swift @@ -2,7 +2,6 @@ import Foundation import ProjectDescription import DependencyPlugin import ProjectTemplatePlugin -import ProjectTemplatePlugin import DependencyPackagePlugin let project = Project.makeAppModule( @@ -11,7 +10,7 @@ let project = Project.makeAppModule( product: .staticFramework, settings: .settings(), dependencies: [ - + .SPM.asyncMoya ], sources: ["Sources/**"] ) diff --git a/Projects/Core/Network/Foundations/Sources/Base.swift b/Projects/Core/Network/Foundations/Sources/Base.swift deleted file mode 100644 index fc5212e..0000000 --- a/Projects/Core/Network/Foundations/Sources/Base.swift +++ /dev/null @@ -1,22 +0,0 @@ -// -// base.swift -// DDDAttendance. -// -// Created by Roy on 2025-10-22 -// 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/Network/Foundations/Sources/DomainType.swift b/Projects/Core/Network/Foundations/Sources/DomainType.swift new file mode 100644 index 0000000..065b68f --- /dev/null +++ b/Projects/Core/Network/Foundations/Sources/DomainType.swift @@ -0,0 +1,46 @@ +// +// DomainType.swift +// Foundations +// +// Created by Wonji Suh on 10/23/25. +// + +import Foundation +import Moya + +public protocol DomainType { + var url: String { get } + var baseURLString: String { get } +} + +public protocol BaseTargetType: TargetType { + associatedtype Domain: DomainType + var domain: Domain { get } + var urlPath: String { get } + var error: [Int: NetworkError]? { get } + var parameters: [String: Any]? { get } +} + +public extension BaseTargetType { + var baseURL: URL { URL(string: domain.baseURLString)! } + var path: String { domain.url + urlPath } + + // ✅ 순수 캐시만 사용 (UI 접근 금지) + var headers: [String: String]? { APIHeaders.cached } + + var task: Moya.Task { + if let parameters { + return method == .get + ? .requestParameters(parameters: parameters, encoding: URLEncoding.queryString) + : .requestParameters(parameters: parameters, encoding: JSONEncoding.default) + } + return .requestPlain + } +} + +// 순수 캐시 +enum APIHeaders { + static var cached: [String: String] = [ + "Content-Type": "application/json" + ] +} diff --git a/Projects/Core/Network/Foundations/Sources/NetworkError.swift b/Projects/Core/Network/Foundations/Sources/NetworkError.swift new file mode 100644 index 0000000..5c33cfd --- /dev/null +++ b/Projects/Core/Network/Foundations/Sources/NetworkError.swift @@ -0,0 +1,18 @@ +// +// NetworkError.swift +// Foundations +// +// Created by Wonji Suh on 10/23/25. +// + +import Foundation + +import Moya + +public enum NetworkError: Error { + case underlying(MoyaError) + case invalidResponse(statusCode: Int, message: String) + case noData + case decodingError(Error) +} + diff --git a/Projects/Core/Network/Networking/Networking.xcodeproj/project.pbxproj b/Projects/Core/Network/Networking/Networking.xcodeproj/project.pbxproj index 3fe4117..57ab240 100644 --- a/Projects/Core/Network/Networking/Networking.xcodeproj/project.pbxproj +++ b/Projects/Core/Network/Networking/Networking.xcodeproj/project.pbxproj @@ -8,13 +8,25 @@ /* Begin PBXBuildFile section */ 0450ADFBB506A1D7CE762ED0 /* Foundations.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 45FD71438C1E6E73F49CA99F /* Foundations.framework */; }; + 0CC6DB83D6E45ABE845C5033 /* Moya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2FEB6C1C0D2D0737044CBC85 /* Moya.framework */; }; + 205C469A1A66F340BFC9AA51 /* RxMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CC760C796FE246840BE8278B /* RxMoya.framework */; }; 24657E36CC62292D14E4A658 /* Test.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D231E9EF830B7E53D1EA8D0 /* Test.swift */; }; 545551BCC861A702C47E2C82 /* Foundations.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 45FD71438C1E6E73F49CA99F /* Foundations.framework */; }; 58CF295EECF7CEF11A88967E /* Networking.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 00D5AC172276CD51B4D7B6CA /* Networking.framework */; }; + 623D44376B2D1C4BA13C9891 /* CombineMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 232B1367FE7CECA5468279FE /* CombineMoya.framework */; }; 65E6625115D04DB6C60BD63D /* Foundations.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 45FD71438C1E6E73F49CA99F /* Foundations.framework */; }; 6DDFE2BE580CE3C376E64317 /* NetworkExported.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80142F4B9AD1A6168ED953EE /* NetworkExported.swift */; }; + 6E8E7C1499D8D924CBD297C8 /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 32C558AC1672AA35B5CE7EC6 /* RxSwift.framework */; }; + 73587A96A5D70B12FDE7DF83 /* EventLimiter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 92E1F54A401A414CFF171CE9 /* EventLimiter.framework */; }; + 7615A3EF36085B615A998D3D /* LogMacro.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EEBA11CFC8F3137105176953 /* LogMacro.framework */; }; + 7B0DE5EC43C270B2E0EEA8D4 /* Alamofire_Alamofire.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 763E25FA7733CA9DC8696455 /* Alamofire_Alamofire.bundle */; }; 8F0A16A03779572A45993165 /* NetworkExported.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80142F4B9AD1A6168ED953EE /* NetworkExported.swift */; }; + 9F67AD97B03C797FC8E4B585 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E5DA16E616AD9FA92AF3B3F1 /* CFNetwork.framework */; }; + B82D33F9CA3175FBBCBF7AAA /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 26EB3C5E5DBD88FFEF205C68 /* Alamofire.framework */; }; + B970A4BE7CA7675D24D485F6 /* Alamofire_Alamofire.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 763E25FA7733CA9DC8696455 /* Alamofire_Alamofire.bundle */; }; C53259D07C7921BDE686DE35 /* Foundations.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 45FD71438C1E6E73F49CA99F /* Foundations.framework */; }; + C7E406610A8D52B02C4391F2 /* AsyncMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5552BE31E625164A001D1254 /* AsyncMoya.framework */; }; + E1CD0DC424503338E1E52DAE /* OSLog.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4544A7A91278BF515BDAEADA /* OSLog.framework */; }; F619EF8386DDB6E7A135664E /* Foundations.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 45FD71438C1E6E73F49CA99F /* Foundations.framework */; }; F7C7E5A24D542E8027B329DA /* NetworkExported.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80142F4B9AD1A6168ED953EE /* NetworkExported.swift */; }; FD24EF0A7BF8884B9C6AFAA3 /* NetworkExported.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80142F4B9AD1A6168ED953EE /* NetworkExported.swift */; }; @@ -121,21 +133,42 @@ name = Dependencies; runOnlyForDeploymentPostprocessing = 1; }; + D12317887289861C522E015F /* Dependencies */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 8; + dstSubfolderSpec = 16; + files = ( + B970A4BE7CA7675D24D485F6 /* Alamofire_Alamofire.bundle in Dependencies */, + ); + name = Dependencies; + runOnlyForDeploymentPostprocessing = 1; + }; /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ 00D5AC172276CD51B4D7B6CA /* Networking.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Networking.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 13525008021394917353096F /* NetworkingTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "NetworkingTests-Info.plist"; sourceTree = ""; }; + 232B1367FE7CECA5468279FE /* CombineMoya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CombineMoya.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 26EB3C5E5DBD88FFEF205C68 /* Alamofire.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Alamofire.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2FEB6C1C0D2D0737044CBC85 /* Moya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Moya.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 32C558AC1672AA35B5CE7EC6 /* RxSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RxSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 414B0FAA67ED0CA24A545838 /* Networking_Debug.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Networking_Debug.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4544A7A91278BF515BDAEADA /* 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; }; 45FD71438C1E6E73F49CA99F /* Foundations.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Foundations.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5552BE31E625164A001D1254 /* AsyncMoya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AsyncMoya.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 6D231E9EF830B7E53D1EA8D0 /* Test.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Test.swift; sourceTree = ""; }; + 763E25FA7733CA9DC8696455 /* Alamofire_Alamofire.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Alamofire_Alamofire.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; 7B8A15992743705E1E8144D4 /* Networking-Prod-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Networking-Prod-Info.plist"; sourceTree = ""; }; 80142F4B9AD1A6168ED953EE /* NetworkExported.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkExported.swift; sourceTree = ""; }; 837DF319B7F4BA2833A8B23F /* Networking-Debug-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Networking-Debug-Info.plist"; sourceTree = ""; }; + 92E1F54A401A414CFF171CE9 /* EventLimiter.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = EventLimiter.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 95586702619AFCD66C00D94E /* Networking-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Networking-Info.plist"; sourceTree = ""; }; B4DAB5356F2C66003A3BA515 /* NetworkingTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NetworkingTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; B7065F4239BA919C0F302F5A /* Networking_Prod.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Networking_Prod.framework; sourceTree = BUILT_PRODUCTS_DIR; }; C4DFEB6735524667A9236E41 /* Networking-Stage-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Networking-Stage-Info.plist"; sourceTree = ""; }; + CC760C796FE246840BE8278B /* RxMoya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RxMoya.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E5DA16E616AD9FA92AF3B3F1 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; }; + EEBA11CFC8F3137105176953 /* LogMacro.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = LogMacro.framework; sourceTree = BUILT_PRODUCTS_DIR; }; F06252AF65B28BCA204004FC /* Networking_Stage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Networking_Stage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ @@ -144,8 +177,18 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 9F67AD97B03C797FC8E4B585 /* CFNetwork.framework in Frameworks */, + E1CD0DC424503338E1E52DAE /* OSLog.framework in Frameworks */, + B82D33F9CA3175FBBCBF7AAA /* Alamofire.framework in Frameworks */, + C7E406610A8D52B02C4391F2 /* AsyncMoya.framework in Frameworks */, + 623D44376B2D1C4BA13C9891 /* CombineMoya.framework in Frameworks */, + 73587A96A5D70B12FDE7DF83 /* EventLimiter.framework in Frameworks */, 0450ADFBB506A1D7CE762ED0 /* Foundations.framework in Frameworks */, + 7615A3EF36085B615A998D3D /* LogMacro.framework in Frameworks */, + 0CC6DB83D6E45ABE845C5033 /* Moya.framework in Frameworks */, 58CF295EECF7CEF11A88967E /* Networking.framework in Frameworks */, + 205C469A1A66F340BFC9AA51 /* RxMoya.framework in Frameworks */, + 6E8E7C1499D8D924CBD297C8 /* RxSwift.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -180,6 +223,15 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 0E7DF17347A7394F3734E2C1 /* Frameworks */ = { + isa = PBXGroup; + children = ( + E5DA16E616AD9FA92AF3B3F1 /* CFNetwork.framework */, + 4544A7A91278BF515BDAEADA /* OSLog.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 2CA8969779CAD7210C5D966D /* InfoPlists */ = { isa = PBXGroup; children = ( @@ -239,18 +291,28 @@ children = ( 7E643809634282CE5E4D803C /* Project */, AFBC324CB1CEBDA5706F4E34 /* Products */, + 0E7DF17347A7394F3734E2C1 /* Frameworks */, ); sourceTree = ""; }; AFBC324CB1CEBDA5706F4E34 /* Products */ = { isa = PBXGroup; children = ( + 763E25FA7733CA9DC8696455 /* Alamofire_Alamofire.bundle */, + 26EB3C5E5DBD88FFEF205C68 /* Alamofire.framework */, + 5552BE31E625164A001D1254 /* AsyncMoya.framework */, + 232B1367FE7CECA5468279FE /* CombineMoya.framework */, + 92E1F54A401A414CFF171CE9 /* EventLimiter.framework */, 45FD71438C1E6E73F49CA99F /* Foundations.framework */, + EEBA11CFC8F3137105176953 /* LogMacro.framework */, + 2FEB6C1C0D2D0737044CBC85 /* Moya.framework */, 414B0FAA67ED0CA24A545838 /* Networking_Debug.framework */, B7065F4239BA919C0F302F5A /* Networking_Prod.framework */, F06252AF65B28BCA204004FC /* Networking_Stage.framework */, 00D5AC172276CD51B4D7B6CA /* Networking.framework */, B4DAB5356F2C66003A3BA515 /* NetworkingTests.xctest */, + CC760C796FE246840BE8278B /* RxMoya.framework */, + 32C558AC1672AA35B5CE7EC6 /* RxSwift.framework */, ); name = Products; sourceTree = ""; @@ -337,6 +399,7 @@ 0250463EEF0BF0D0E5F2D530 /* Resources */, 1E0CC9ED941C2A318D84DDCE /* Frameworks */, 91802F57CFB9639C7F423B15 /* Embed Frameworks */, + D12317887289861C522E015F /* Dependencies */, ); buildRules = ( ); @@ -408,6 +471,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 7B0DE5EC43C270B2E0EEA8D4 /* Alamofire_Alamofire.bundle in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -503,6 +567,10 @@ 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/Networking-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 16.6; @@ -512,6 +580,17 @@ "@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.Bandscape.Networking; PRODUCT_NAME = Networking; SDKROOT = iphoneos; @@ -541,6 +620,10 @@ 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/Networking-Prod-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 16.6; @@ -550,6 +633,17 @@ "@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.Bandscape.Networking; PRODUCT_NAME = Networking_Prod; SDKROOT = iphoneos; @@ -579,6 +673,10 @@ 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/Networking-Prod-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 16.6; @@ -588,6 +686,17 @@ "@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.Bandscape.Networking; PRODUCT_NAME = Networking_Prod; SDKROOT = iphoneos; @@ -608,6 +717,10 @@ 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/NetworkingTests-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 16.6; LD_RUNPATH_SEARCH_PATHS = ( @@ -615,6 +728,17 @@ "@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.Bandscape.Networking.NetworkingTests; PRODUCT_NAME = NetworkingTests; SDKROOT = iphoneos; @@ -637,6 +761,10 @@ 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/Networking-Stage-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 16.6; @@ -646,6 +774,17 @@ "@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.Bandscape.Networking; PRODUCT_NAME = Networking_Stage; SDKROOT = iphoneos; @@ -724,6 +863,10 @@ 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/Networking-Debug-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 16.6; @@ -733,6 +876,17 @@ "@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.Bandscape.Networking; PRODUCT_NAME = Networking_Debug; SDKROOT = iphoneos; @@ -762,6 +916,10 @@ 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/Networking-Debug-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 16.6; @@ -771,6 +929,17 @@ "@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.Bandscape.Networking; PRODUCT_NAME = Networking_Debug; SDKROOT = iphoneos; @@ -796,6 +965,10 @@ 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/Networking-Stage-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 16.6; @@ -805,6 +978,17 @@ "@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.Bandscape.Networking; PRODUCT_NAME = Networking_Stage; SDKROOT = iphoneos; @@ -834,6 +1018,10 @@ 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/Networking-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 16.6; @@ -843,6 +1031,17 @@ "@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.Bandscape.Networking; PRODUCT_NAME = Networking; SDKROOT = iphoneos; @@ -922,6 +1121,10 @@ 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/NetworkingTests-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 16.6; LD_RUNPATH_SEARCH_PATHS = ( @@ -929,6 +1132,17 @@ "@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.Bandscape.Networking.NetworkingTests; PRODUCT_NAME = NetworkingTests; SDKROOT = iphoneos; diff --git a/Projects/Core/Network/Networking/Project.swift b/Projects/Core/Network/Networking/Project.swift index 0d380c0..0a16d40 100644 --- a/Projects/Core/Network/Networking/Project.swift +++ b/Projects/Core/Network/Networking/Project.swift @@ -2,7 +2,6 @@ import Foundation import ProjectDescription import DependencyPlugin import ProjectTemplatePlugin -import ProjectTemplatePlugin import DependencyPackagePlugin let project = Project.makeAppModule( diff --git a/Projects/Core/Network/Networking/Sources/Exorted/NetworkExported.swift b/Projects/Core/Network/Networking/Sources/Exorted/NetworkExported.swift index fa650f3..ce69870 100644 --- a/Projects/Core/Network/Networking/Sources/Exorted/NetworkExported.swift +++ b/Projects/Core/Network/Networking/Sources/Exorted/NetworkExported.swift @@ -6,3 +6,4 @@ // +@_exported import Foundations diff --git a/Projects/Presentation/Detail/Derived/InfoPlists/Detail-Debug-Info.plist b/Projects/Presentation/Detail/Derived/InfoPlists/Detail-Debug-Info.plist new file mode 100644 index 0000000..323e5ec --- /dev/null +++ b/Projects/Presentation/Detail/Derived/InfoPlists/Detail-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/Detail/Derived/InfoPlists/Detail-Info.plist b/Projects/Presentation/Detail/Derived/InfoPlists/Detail-Info.plist new file mode 100644 index 0000000..323e5ec --- /dev/null +++ b/Projects/Presentation/Detail/Derived/InfoPlists/Detail-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/Detail/Derived/InfoPlists/Detail-Prod-Info.plist b/Projects/Presentation/Detail/Derived/InfoPlists/Detail-Prod-Info.plist new file mode 100644 index 0000000..323e5ec --- /dev/null +++ b/Projects/Presentation/Detail/Derived/InfoPlists/Detail-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/Detail/Derived/InfoPlists/Detail-Stage-Info.plist b/Projects/Presentation/Detail/Derived/InfoPlists/Detail-Stage-Info.plist new file mode 100644 index 0000000..323e5ec --- /dev/null +++ b/Projects/Presentation/Detail/Derived/InfoPlists/Detail-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/Detail/Derived/InfoPlists/DetailTests-Info.plist b/Projects/Presentation/Detail/Derived/InfoPlists/DetailTests-Info.plist new file mode 100644 index 0000000..6c40a6c --- /dev/null +++ b/Projects/Presentation/Detail/Derived/InfoPlists/DetailTests-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/Detail/Detail.xcodeproj/project.pbxproj b/Projects/Presentation/Detail/Detail.xcodeproj/project.pbxproj new file mode 100644 index 0000000..6196ae8 --- /dev/null +++ b/Projects/Presentation/Detail/Detail.xcodeproj/project.pbxproj @@ -0,0 +1,1363 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 55; + objects = { + +/* Begin PBXBuildFile section */ + 00AA6678A4697EA2FB7A858F /* ScalingHeaderDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF1B6036440256204278BECA /* ScalingHeaderDetailView.swift */; }; + 03EF4E1D7709D41387039282 /* DetailReducer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2424264E851AF1A612099E81 /* DetailReducer.swift */; }; + 0CC3EB63601344B06904BAD5 /* DetailSkeletonViews.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5932B61A7C67DC1D840A6B92 /* DetailSkeletonViews.swift */; }; + 0E32F454A86F9D46C5DCA6F7 /* DetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6FF0CB452BD2FD851BFE73F /* DetailView.swift */; }; + 12DEA2EB3BAB129CCABBFB60 /* ScalingHeaderDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF1B6036440256204278BECA /* ScalingHeaderDetailView.swift */; }; + 138C72F55649CAE14870A1A0 /* DetailSkeletonViews.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5932B61A7C67DC1D840A6B92 /* DetailSkeletonViews.swift */; }; + 27FA5F4B7E538794C5747596 /* Shared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 16E9D08E995905CE2B02915B /* Shared.framework */; }; + 2D950904122CA5F3F518305B /* DetailReducer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2424264E851AF1A612099E81 /* DetailReducer.swift */; }; + 37E7A070144F1E9F839CEAED /* Detail.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B95DEB0BB0769D679538C4A /* Detail.framework */; }; + 42D4436A0A2F7F83CB88A62D /* DetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6FF0CB452BD2FD851BFE73F /* DetailView.swift */; }; + 4623F17F45C1BA9304934FE4 /* DetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6FF0CB452BD2FD851BFE73F /* DetailView.swift */; }; + 4C4C23D48DF1D54A33BC8B98 /* swift-sharing_Sharing.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 8F889DF2B6F4C954B4CDCAD7 /* swift-sharing_Sharing.bundle */; }; + 529D451DA1911BF99407A325 /* Shared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 16E9D08E995905CE2B02915B /* Shared.framework */; }; + 672ABE8CBC32A61D20CDDD92 /* DetailReducer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2424264E851AF1A612099E81 /* DetailReducer.swift */; }; + 6BFFBA4824E0C6EDAD9AF5C5 /* NavigationArrowButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8EB2B3073059C95E5533AB3 /* NavigationArrowButton.swift */; }; + 718FFB94677AF52FEE96BB17 /* Alamofire_Alamofire.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 4B191A878566A0623A3E3FA0 /* Alamofire_Alamofire.bundle */; }; + 74F6F2B6755616A53DE4DFD9 /* swift-sharing_Sharing.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 8F889DF2B6F4C954B4CDCAD7 /* swift-sharing_Sharing.bundle */; }; + 7747477A86EAB3172F4A3F57 /* Core.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 34DDDB8621421DCF7F7F24F2 /* Core.framework */; }; + 7F164DB20BCACA0DC541B9FA /* Core.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 34DDDB8621421DCF7F7F24F2 /* Core.framework */; }; + 8A775D0F7FF7B55875EE3C33 /* ScalingHeaderDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF1B6036440256204278BECA /* ScalingHeaderDetailView.swift */; }; + 8E6C2121942D4809830FE21D /* Core.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 34DDDB8621421DCF7F7F24F2 /* Core.framework */; }; + ABB51843A22E55A0F918E304 /* DetailReducerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D93B27706BA7DBAA6E65A8F0 /* DetailReducerTests.swift */; }; + B8E5BD2C896E915D297B4214 /* DetailSkeletonViews.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5932B61A7C67DC1D840A6B92 /* DetailSkeletonViews.swift */; }; + BFB9088364838B10213E8F76 /* Shared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 16E9D08E995905CE2B02915B /* Shared.framework */; }; + C053252648DD62D20A07C6A9 /* Shared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 16E9D08E995905CE2B02915B /* Shared.framework */; }; + C213813730ADEAA7D5982FC8 /* Core.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 34DDDB8621421DCF7F7F24F2 /* Core.framework */; }; + CCAECAF1F7457DFF19A0DB7E /* DetailReducer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2424264E851AF1A612099E81 /* DetailReducer.swift */; }; + D01027525066E8F6839C4943 /* Alamofire_Alamofire.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 4B191A878566A0623A3E3FA0 /* Alamofire_Alamofire.bundle */; }; + D5CB846F6824882DC3FEA004 /* NavigationArrowButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8EB2B3073059C95E5533AB3 /* NavigationArrowButton.swift */; }; + D79BC06D6C93ADD8E57534D1 /* Core.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 34DDDB8621421DCF7F7F24F2 /* Core.framework */; }; + E0E57765AF26F132BC4BFEB9 /* NavigationArrowButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8EB2B3073059C95E5533AB3 /* NavigationArrowButton.swift */; }; + E212597A470515E9EF316467 /* NavigationArrowButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8EB2B3073059C95E5533AB3 /* NavigationArrowButton.swift */; }; + ECA23C1401F6C6EDB6AB5D11 /* swift-composable-architecture_ComposableArchitecture.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 2668EDE764D1355FD3F60CE8 /* swift-composable-architecture_ComposableArchitecture.bundle */; }; + ED81DDE7A6B47B2CC895909A /* DetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6FF0CB452BD2FD851BFE73F /* DetailView.swift */; }; + ED8C8124FA472DBA4B4A2DD8 /* ScalingHeaderDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF1B6036440256204278BECA /* ScalingHeaderDetailView.swift */; }; + EDC335983089ABCAF3CD9809 /* DetailSkeletonViews.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5932B61A7C67DC1D840A6B92 /* DetailSkeletonViews.swift */; }; + F62B3DACA45B5078A0213310 /* Shared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 16E9D08E995905CE2B02915B /* Shared.framework */; }; + FF34243A8238E57A336FE362 /* swift-composable-architecture_ComposableArchitecture.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 2668EDE764D1355FD3F60CE8 /* swift-composable-architecture_ComposableArchitecture.bundle */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + B87DAA51CC43C05FEEDFE928 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = AB08FD11D704AC1BA3ACB508 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 8B7F7C5C5BC308F0FECD514E; + remoteInfo = Detail; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 0A25737089C8EDC4FD9879B0 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + 159A1FED64F5EB05764DA2E0 /* Dependencies */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 8; + dstSubfolderSpec = 16; + files = ( + 718FFB94677AF52FEE96BB17 /* Alamofire_Alamofire.bundle in Dependencies */, + ECA23C1401F6C6EDB6AB5D11 /* swift-composable-architecture_ComposableArchitecture.bundle in Dependencies */, + 4C4C23D48DF1D54A33BC8B98 /* swift-sharing_Sharing.bundle in Dependencies */, + ); + name = Dependencies; + runOnlyForDeploymentPostprocessing = 1; + }; + 447C33E557F752CFF295ED34 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + 7D9D711F907E7A7E8D9BB6A6 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + 8194FCBC103FD190A671F742 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + F256FF33834B7E05C4180841 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 0CA63B07A3F3C9189B2C1E43 /* Detail-Debug-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Detail-Debug-Info.plist"; sourceTree = ""; }; + 16CF1E3367BF3610420FD6A1 /* Detail_Prod.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Detail_Prod.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 16E9D08E995905CE2B02915B /* Shared.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Shared.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2424264E851AF1A612099E81 /* DetailReducer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailReducer.swift; sourceTree = ""; }; + 2668EDE764D1355FD3F60CE8 /* swift-composable-architecture_ComposableArchitecture.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "swift-composable-architecture_ComposableArchitecture.bundle"; sourceTree = BUILT_PRODUCTS_DIR; }; + 26F16B066CBC74D90603CD3D /* Detail_Stage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Detail_Stage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 34DDDB8621421DCF7F7F24F2 /* Core.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Core.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 3B95DEB0BB0769D679538C4A /* Detail.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Detail.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4B191A878566A0623A3E3FA0 /* Alamofire_Alamofire.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Alamofire_Alamofire.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 520DC973A302CE54DF2F8D7A /* Detail-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Detail-Info.plist"; sourceTree = ""; }; + 58803F1F2D78C73057FD502C /* Detail-Prod-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Detail-Prod-Info.plist"; sourceTree = ""; }; + 5932B61A7C67DC1D840A6B92 /* DetailSkeletonViews.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailSkeletonViews.swift; sourceTree = ""; }; + 5C7241B3855B223A5E44FEB3 /* Detail-Stage-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Detail-Stage-Info.plist"; sourceTree = ""; }; + 8F889DF2B6F4C954B4CDCAD7 /* swift-sharing_Sharing.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "swift-sharing_Sharing.bundle"; sourceTree = BUILT_PRODUCTS_DIR; }; + A6FF0CB452BD2FD851BFE73F /* DetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailView.swift; sourceTree = ""; }; + AD70DA42443512643ADD1194 /* DetailTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DetailTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + C797F148A9B9EC90735A579B /* DetailTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "DetailTests-Info.plist"; sourceTree = ""; }; + CF1B6036440256204278BECA /* ScalingHeaderDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScalingHeaderDetailView.swift; sourceTree = ""; }; + D8EB2B3073059C95E5533AB3 /* NavigationArrowButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NavigationArrowButton.swift; sourceTree = ""; }; + D93B27706BA7DBAA6E65A8F0 /* DetailReducerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailReducerTests.swift; sourceTree = ""; }; + E46922EAE187D7EE0DD38D3E /* Detail_Debug.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Detail_Debug.framework; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 1BDF7DF4641D3296D9E42068 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 7F164DB20BCACA0DC541B9FA /* Core.framework in Frameworks */, + BFB9088364838B10213E8F76 /* Shared.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 3DF91622A6C5259174EAEA00 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 7747477A86EAB3172F4A3F57 /* Core.framework in Frameworks */, + 37E7A070144F1E9F839CEAED /* Detail.framework in Frameworks */, + C053252648DD62D20A07C6A9 /* Shared.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 71FB7E5962A5A9F0674ACD57 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + C213813730ADEAA7D5982FC8 /* Core.framework in Frameworks */, + F62B3DACA45B5078A0213310 /* Shared.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 81820C3628F697C3284E084D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8E6C2121942D4809830FE21D /* Core.framework in Frameworks */, + 529D451DA1911BF99407A325 /* Shared.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BFEC44B24B05B8AC05172B68 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + D79BC06D6C93ADD8E57534D1 /* Core.framework in Frameworks */, + 27FA5F4B7E538794C5747596 /* Shared.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 0CE22F70CDBAC07EF73D6AD6 /* Sources */ = { + isa = PBXGroup; + children = ( + D93B27706BA7DBAA6E65A8F0 /* DetailReducerTests.swift */, + ); + path = Sources; + sourceTree = ""; + }; + 1355CC732ECAF43A6808150F /* Skeleton */ = { + isa = PBXGroup; + children = ( + 5932B61A7C67DC1D840A6B92 /* DetailSkeletonViews.swift */, + ); + path = Skeleton; + sourceTree = ""; + }; + 18E863240722529D53E54DC2 /* Derived */ = { + isa = PBXGroup; + children = ( + 7F63984D48F924C0603F0DEC /* InfoPlists */, + ); + path = Derived; + sourceTree = ""; + }; + 1E43E38C7AA0E336D84C5D66 /* Products */ = { + isa = PBXGroup; + children = ( + 4B191A878566A0623A3E3FA0 /* Alamofire_Alamofire.bundle */, + 34DDDB8621421DCF7F7F24F2 /* Core.framework */, + E46922EAE187D7EE0DD38D3E /* Detail_Debug.framework */, + 16CF1E3367BF3610420FD6A1 /* Detail_Prod.framework */, + 26F16B066CBC74D90603CD3D /* Detail_Stage.framework */, + 3B95DEB0BB0769D679538C4A /* Detail.framework */, + AD70DA42443512643ADD1194 /* DetailTests.xctest */, + 16E9D08E995905CE2B02915B /* Shared.framework */, + 2668EDE764D1355FD3F60CE8 /* swift-composable-architecture_ComposableArchitecture.bundle */, + 8F889DF2B6F4C954B4CDCAD7 /* swift-sharing_Sharing.bundle */, + ); + name = Products; + sourceTree = ""; + }; + 3B63D854DBDADEA88ECF3105 /* View */ = { + isa = PBXGroup; + children = ( + F8C17FD37636FC44C455FC6F /* Component */, + A6FF0CB452BD2FD851BFE73F /* DetailView.swift */, + ); + path = View; + sourceTree = ""; + }; + 74ABD78C93A064FA833CD0CE = { + isa = PBXGroup; + children = ( + AB86A8CAFD71B01947D74C75 /* Project */, + 1E43E38C7AA0E336D84C5D66 /* Products */, + ); + sourceTree = ""; + }; + 7F63984D48F924C0603F0DEC /* InfoPlists */ = { + isa = PBXGroup; + children = ( + 0CA63B07A3F3C9189B2C1E43 /* Detail-Debug-Info.plist */, + 520DC973A302CE54DF2F8D7A /* Detail-Info.plist */, + 58803F1F2D78C73057FD502C /* Detail-Prod-Info.plist */, + 5C7241B3855B223A5E44FEB3 /* Detail-Stage-Info.plist */, + C797F148A9B9EC90735A579B /* DetailTests-Info.plist */, + ); + path = InfoPlists; + sourceTree = ""; + }; + 84CFD2FFC2A946F8CCADB16D /* DetailTests */ = { + isa = PBXGroup; + children = ( + 0CE22F70CDBAC07EF73D6AD6 /* Sources */, + ); + path = DetailTests; + sourceTree = ""; + }; + AB86A8CAFD71B01947D74C75 /* Project */ = { + isa = PBXGroup; + children = ( + 18E863240722529D53E54DC2 /* Derived */, + 84CFD2FFC2A946F8CCADB16D /* DetailTests */, + CF8CDF88E646CFE796012887 /* Sources */, + ); + name = Project; + sourceTree = ""; + }; + C19DFBCDBCFE71B505E6F0E8 /* Reducer */ = { + isa = PBXGroup; + children = ( + 2424264E851AF1A612099E81 /* DetailReducer.swift */, + ); + path = Reducer; + sourceTree = ""; + }; + CF8CDF88E646CFE796012887 /* Sources */ = { + isa = PBXGroup; + children = ( + C19DFBCDBCFE71B505E6F0E8 /* Reducer */, + 3B63D854DBDADEA88ECF3105 /* View */, + ); + path = Sources; + sourceTree = ""; + }; + F8C17FD37636FC44C455FC6F /* Component */ = { + isa = PBXGroup; + children = ( + 1355CC732ECAF43A6808150F /* Skeleton */, + D8EB2B3073059C95E5533AB3 /* NavigationArrowButton.swift */, + CF1B6036440256204278BECA /* ScalingHeaderDetailView.swift */, + ); + path = Component; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 1958D663106B76E750FE451C /* Detail-Debug */ = { + isa = PBXNativeTarget; + buildConfigurationList = 081B87EC7350C149F3B699B8 /* Build configuration list for PBXNativeTarget "Detail-Debug" */; + buildPhases = ( + 85B6562885F263C56F9E7DC4 /* Sources */, + AA4CDB5AC9D7B0638CE93B3D /* Resources */, + 81820C3628F697C3284E084D /* Frameworks */, + 7D9D711F907E7A7E8D9BB6A6 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Detail-Debug"; + packageProductDependencies = ( + ); + productName = Detail_Debug; + productReference = E46922EAE187D7EE0DD38D3E /* Detail_Debug.framework */; + productType = "com.apple.product-type.framework"; + }; + 378027671B59764DC5831691 /* DetailTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 2B9CAC1C11D83336656849FA /* Build configuration list for PBXNativeTarget "DetailTests" */; + buildPhases = ( + 570EBB7D3EC1854B17299F22 /* Sources */, + 8BB30DF501B5429006583AA6 /* Resources */, + 3DF91622A6C5259174EAEA00 /* Frameworks */, + 0A25737089C8EDC4FD9879B0 /* Embed Frameworks */, + 159A1FED64F5EB05764DA2E0 /* Dependencies */, + ); + buildRules = ( + ); + dependencies = ( + FC9E9FDF392FE7A90094F2BC /* PBXTargetDependency */, + ); + name = DetailTests; + packageProductDependencies = ( + ); + productName = DetailTests; + productReference = AD70DA42443512643ADD1194 /* DetailTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 8B7F7C5C5BC308F0FECD514E /* Detail */ = { + isa = PBXNativeTarget; + buildConfigurationList = 0B6D14628DE5064694D065E8 /* Build configuration list for PBXNativeTarget "Detail" */; + buildPhases = ( + 0D604692BA8EA5AF5FED499E /* Sources */, + 691873A78670D61FD175FA5C /* Resources */, + 71FB7E5962A5A9F0674ACD57 /* Frameworks */, + 8194FCBC103FD190A671F742 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Detail; + packageProductDependencies = ( + ); + productName = Detail; + productReference = 3B95DEB0BB0769D679538C4A /* Detail.framework */; + productType = "com.apple.product-type.framework"; + }; + F161DAF939E82C9C7232DCA3 /* Detail-Prod */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97363D3A948A3BCCD28DB547 /* Build configuration list for PBXNativeTarget "Detail-Prod" */; + buildPhases = ( + AB45F183ECB7CA80E222D029 /* Sources */, + 5AB12090E6B173ADC2757360 /* Resources */, + 1BDF7DF4641D3296D9E42068 /* Frameworks */, + 447C33E557F752CFF295ED34 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Detail-Prod"; + packageProductDependencies = ( + ); + productName = Detail_Prod; + productReference = 16CF1E3367BF3610420FD6A1 /* Detail_Prod.framework */; + productType = "com.apple.product-type.framework"; + }; + F6C1C1AA5A5079CA593F4FCC /* Detail-Stage */ = { + isa = PBXNativeTarget; + buildConfigurationList = 24013853285281F9A8817FE5 /* Build configuration list for PBXNativeTarget "Detail-Stage" */; + buildPhases = ( + 36FCDA70AC61923C5C4EE0D0 /* Sources */, + 6093905B08A941B412FC1A00 /* Resources */, + BFEC44B24B05B8AC05172B68 /* Frameworks */, + F256FF33834B7E05C4180841 /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Detail-Stage"; + packageProductDependencies = ( + ); + productName = Detail_Stage; + productReference = 26F16B066CBC74D90603CD3D /* Detail_Stage.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + AB08FD11D704AC1BA3ACB508 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + TargetAttributes = { + }; + }; + buildConfigurationList = F5AA2645D32A09D289BDD305 /* Build configuration list for PBXProject "Detail" */; + compatibilityVersion = "Xcode 14.0"; + developmentRegion = ko; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ko, + ); + mainGroup = 74ABD78C93A064FA833CD0CE; + productRefGroup = 1E43E38C7AA0E336D84C5D66 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 8B7F7C5C5BC308F0FECD514E /* Detail */, + 1958D663106B76E750FE451C /* Detail-Debug */, + F161DAF939E82C9C7232DCA3 /* Detail-Prod */, + F6C1C1AA5A5079CA593F4FCC /* Detail-Stage */, + 378027671B59764DC5831691 /* DetailTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 5AB12090E6B173ADC2757360 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 6093905B08A941B412FC1A00 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 691873A78670D61FD175FA5C /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 8BB30DF501B5429006583AA6 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + D01027525066E8F6839C4943 /* Alamofire_Alamofire.bundle in Resources */, + FF34243A8238E57A336FE362 /* swift-composable-architecture_ComposableArchitecture.bundle in Resources */, + 74F6F2B6755616A53DE4DFD9 /* swift-sharing_Sharing.bundle in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AA4CDB5AC9D7B0638CE93B3D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 0D604692BA8EA5AF5FED499E /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 672ABE8CBC32A61D20CDDD92 /* DetailReducer.swift in Sources */, + D5CB846F6824882DC3FEA004 /* NavigationArrowButton.swift in Sources */, + 00AA6678A4697EA2FB7A858F /* ScalingHeaderDetailView.swift in Sources */, + B8E5BD2C896E915D297B4214 /* DetailSkeletonViews.swift in Sources */, + 42D4436A0A2F7F83CB88A62D /* DetailView.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 36FCDA70AC61923C5C4EE0D0 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 2D950904122CA5F3F518305B /* DetailReducer.swift in Sources */, + 6BFFBA4824E0C6EDAD9AF5C5 /* NavigationArrowButton.swift in Sources */, + 8A775D0F7FF7B55875EE3C33 /* ScalingHeaderDetailView.swift in Sources */, + 0CC3EB63601344B06904BAD5 /* DetailSkeletonViews.swift in Sources */, + ED81DDE7A6B47B2CC895909A /* DetailView.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 570EBB7D3EC1854B17299F22 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ABB51843A22E55A0F918E304 /* DetailReducerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 85B6562885F263C56F9E7DC4 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 03EF4E1D7709D41387039282 /* DetailReducer.swift in Sources */, + E212597A470515E9EF316467 /* NavigationArrowButton.swift in Sources */, + 12DEA2EB3BAB129CCABBFB60 /* ScalingHeaderDetailView.swift in Sources */, + 138C72F55649CAE14870A1A0 /* DetailSkeletonViews.swift in Sources */, + 4623F17F45C1BA9304934FE4 /* DetailView.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AB45F183ECB7CA80E222D029 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + CCAECAF1F7457DFF19A0DB7E /* DetailReducer.swift in Sources */, + E0E57765AF26F132BC4BFEB9 /* NavigationArrowButton.swift in Sources */, + ED8C8124FA472DBA4B4A2DD8 /* ScalingHeaderDetailView.swift in Sources */, + EDC335983089ABCAF3CD9809 /* DetailSkeletonViews.swift in Sources */, + 0E32F454A86F9D46C5DCA6F7 /* DetailView.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + FC9E9FDF392FE7A90094F2BC /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Detail; + target = 8B7F7C5C5BC308F0FECD514E /* Detail */; + targetProxy = B87DAA51CC43C05FEEDFE928 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 11D2CBDEBA4A917FFCFBE1C3 /* 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/Detail-Prod-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 16.6; + 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", + "-load-plugin-executable", + "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.Detail; + PRODUCT_NAME = Detail_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; + }; + 2B7472787F7657F6FB884A5F /* 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/Detail-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 16.6; + 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", + "-load-plugin-executable", + "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.Detail; + PRODUCT_NAME = Detail; + 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; + }; + 368078E7E4801E97AABF3B87 /* 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/Detail-Debug-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 16.6; + 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", + "-load-plugin-executable", + "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.Detail; + PRODUCT_NAME = Detail_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; + }; + 56C81D832FDB9E6BAA518DEF /* 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/Detail-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 16.6; + 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", + "-load-plugin-executable", + "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.Detail; + PRODUCT_NAME = Detail; + 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; + }; + 79374A7D210059BE6E83CB5C /* 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/Detail-Stage-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 16.6; + 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", + "-load-plugin-executable", + "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.Detail; + PRODUCT_NAME = Detail_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; + }; + 8FD19B999ADA77DE7D1AC4B8 /* 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/DetailTests-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 16.6; + 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", + "-load-plugin-executable", + "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.Detail.DetailTests; + PRODUCT_NAME = DetailTests; + 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; + }; + 90449661ED60473B33403571 /* 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; + }; + 98043A34E0143EA00E0F03FF /* 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/Detail-Stage-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 16.6; + 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", + "-load-plugin-executable", + "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.Detail; + PRODUCT_NAME = Detail_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; + }; + 9D8116D8379B5C3484BC0662 /* 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; + }; + C21E7EAD7B55F57569424932 /* 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/Detail-Prod-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 16.6; + 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", + "-load-plugin-executable", + "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.Detail; + PRODUCT_NAME = Detail_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; + }; + D6BFE0CC9BBE3DC70EFA037B /* 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/Detail-Debug-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 16.6; + 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", + "-load-plugin-executable", + "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.Detail; + PRODUCT_NAME = Detail_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; + }; + DE87E7CF29711F80AD0E0A4C /* 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/DetailTests-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 16.6; + 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", + "-load-plugin-executable", + "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.Detail.DetailTests; + PRODUCT_NAME = DetailTests; + 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; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 081B87EC7350C149F3B699B8 /* Build configuration list for PBXNativeTarget "Detail-Debug" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 368078E7E4801E97AABF3B87 /* Debug */, + D6BFE0CC9BBE3DC70EFA037B /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 0B6D14628DE5064694D065E8 /* Build configuration list for PBXNativeTarget "Detail" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 56C81D832FDB9E6BAA518DEF /* Debug */, + 2B7472787F7657F6FB884A5F /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 24013853285281F9A8817FE5 /* Build configuration list for PBXNativeTarget "Detail-Stage" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 98043A34E0143EA00E0F03FF /* Debug */, + 79374A7D210059BE6E83CB5C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 2B9CAC1C11D83336656849FA /* Build configuration list for PBXNativeTarget "DetailTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 8FD19B999ADA77DE7D1AC4B8 /* Debug */, + DE87E7CF29711F80AD0E0A4C /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97363D3A948A3BCCD28DB547 /* Build configuration list for PBXNativeTarget "Detail-Prod" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 11D2CBDEBA4A917FFCFBE1C3 /* Debug */, + C21E7EAD7B55F57569424932 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + F5AA2645D32A09D289BDD305 /* Build configuration list for PBXProject "Detail" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 90449661ED60473B33403571 /* Debug */, + 9D8116D8379B5C3484BC0662 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = AB08FD11D704AC1BA3ACB508 /* Project object */; +} diff --git a/Projects/Presentation/Detail/Detail.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Projects/Presentation/Detail/Detail.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/Projects/Presentation/Detail/Detail.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Projects/Presentation/Detail/Detail.xcodeproj/xcshareddata/xcschemes/Detail-Debug.xcscheme b/Projects/Presentation/Detail/Detail.xcodeproj/xcshareddata/xcschemes/Detail-Debug.xcscheme new file mode 100644 index 0000000..81d3752 --- /dev/null +++ b/Projects/Presentation/Detail/Detail.xcodeproj/xcshareddata/xcschemes/Detail-Debug.xcscheme @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/Presentation/Detail/Detail.xcodeproj/xcshareddata/xcschemes/Detail-Prod.xcscheme b/Projects/Presentation/Detail/Detail.xcodeproj/xcshareddata/xcschemes/Detail-Prod.xcscheme new file mode 100644 index 0000000..916f029 --- /dev/null +++ b/Projects/Presentation/Detail/Detail.xcodeproj/xcshareddata/xcschemes/Detail-Prod.xcscheme @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/Presentation/Detail/Detail.xcodeproj/xcshareddata/xcschemes/Detail-Stage.xcscheme b/Projects/Presentation/Detail/Detail.xcodeproj/xcshareddata/xcschemes/Detail-Stage.xcscheme new file mode 100644 index 0000000..e50b1c2 --- /dev/null +++ b/Projects/Presentation/Detail/Detail.xcodeproj/xcshareddata/xcschemes/Detail-Stage.xcscheme @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/Presentation/Detail/Detail.xcodeproj/xcshareddata/xcschemes/Detail.xcscheme b/Projects/Presentation/Detail/Detail.xcodeproj/xcshareddata/xcschemes/Detail.xcscheme new file mode 100644 index 0000000..945e30b --- /dev/null +++ b/Projects/Presentation/Detail/Detail.xcodeproj/xcshareddata/xcschemes/Detail.xcscheme @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/Presentation/Detail/DetailTests/Sources/DetailReducerTests.swift b/Projects/Presentation/Detail/DetailTests/Sources/DetailReducerTests.swift new file mode 100644 index 0000000..234fa78 --- /dev/null +++ b/Projects/Presentation/Detail/DetailTests/Sources/DetailReducerTests.swift @@ -0,0 +1,139 @@ +// +// DetailReducerTests.swift +// DetailTests +// +// Created by Wonji Suh on 10/25/25. +// + +import Testing +import ComposableArchitecture +import Foundation +@testable import Detail +@testable import Core +@testable import DomainInterface + +extension Tag { + @Tag static var unit: Self + @Tag static var reducer: Self +} + +private enum DummyError: Error { case fail } + +private struct StubMusicDetailUseCase: MusicDetailUseCaseProtocol { + let searchHandler: @Sendable (String) async throws -> [MusicItem] + let fetchDetailHandler: @Sendable (Int) async throws -> MusicItem + + func searchMusic(searchQuery: String) async throws -> [MusicItem] { + try await searchHandler(searchQuery) + } + + func fetchTrackDetail(id: Int) async throws -> MusicItem { + try await fetchDetailHandler(id) + } +} + +private extension MusicItem { + static func stub( + trackId: Int = 1, + trackName: String = "Song", + album: String = "Album", + artist: String = "Artist", + artworkURL: URL = URL(string: "https://example.com/100.png")!, + releaseDate: String = "2024-01-02T03:04:05Z", + genre: String = "Pop" + ) -> Self { + .init( + trackId: trackId, + trackName: trackName, + album: album, + artist: artist, + artworkURL: artworkURL, + releaseDate: releaseDate, + genre: genre + ) + } +} + +@MainActor +@Suite("DetailReducerTests", .tags(.unit, .reducer)) +struct DetailReducerTests { + + @Test("onAppear 성공: fetchTrackDetail 로 musicItem 업데이트 & 로딩 종료") + func onAppear_success_updatesState() async throws { + let before = MusicItem.stub(trackId: 777, trackName: "Before") + let after = MusicItem.stub(trackId: 777, trackName: "After") + let clock = TestClock() + + let store = TestStore( + initialState: DetailReducer.State(musicItem: before) + ) { + DetailReducer() + } withDependencies: { + $0.continuousClock = clock + $0[MusicDetailUseCase.self] = StubMusicDetailUseCase( + searchHandler: { _ in [] }, + fetchDetailHandler: { id in + #expect(id == 777) + return after + } + ) + } + + store.exhaustivity = .off(showSkippedAssertions: false) + + await store.send(.view(.onAppear)) { state in + state.isLoading = true + } + + await clock.advance(by: .seconds(2)) + await store.skipReceivedActions() + + #expect(store.state.musicItem?.trackId == 777) + #expect(store.state.musicItem?.trackName == "After") + #expect(store.state.isLoading == false) + } + + @Test("onAppear 실패: 기존 item 유지 & 로딩 종료") + func onAppear_failure_keepsItemAndStopsLoading() async throws { + let before = MusicItem.stub(trackId: 999, trackName: "Keep") + let clock = TestClock() + + let store = TestStore( + initialState: DetailReducer.State(musicItem: before) + ) { + DetailReducer() + } withDependencies: { + $0.continuousClock = clock + $0[MusicDetailUseCase.self] = StubMusicDetailUseCase( + searchHandler: { _ in [] }, + fetchDetailHandler: { _ in throw DummyError.fail } + ) + } + + store.exhaustivity = .off(showSkippedAssertions: false) + + await store.send(.view(.onAppear)) { state in + state.isLoading = true + } + + await clock.advance(by: .seconds(2)) + await store.skipReceivedActions() + + #expect(store.state.musicItem?.trackId == 999) + #expect(store.state.musicItem?.trackName == "Keep") + #expect(store.state.isLoading == false) + } + + @Test("뒤로가기 액션: 상태 변화 없음") + func backToHome_noStateChange() async throws { + let store = TestStore( + initialState: DetailReducer.State(musicItem: nil, isLoading: false) + ) { + DetailReducer() + } + + store.exhaustivity = .off(showSkippedAssertions: false) + + await store.send(.navigation(.backToHome)) + } +} diff --git a/Projects/Presentation/Detail/Project.swift b/Projects/Presentation/Detail/Project.swift new file mode 100644 index 0000000..52a0ed7 --- /dev/null +++ b/Projects/Presentation/Detail/Project.swift @@ -0,0 +1,17 @@ +import Foundation +import ProjectDescription +import DependencyPlugin +import ProjectTemplatePlugin +import DependencyPackagePlugin + +let project = Project.makeAppModule( + name: "Detail", + bundleId: .appBundleID(name: ".Detail"), + product: .staticFramework, + settings: .settings(), + dependencies: [ + .Shared(implements: .Shared), + .Core(implements: .Core), + ], + sources: ["Sources/**"] +) diff --git a/Projects/Presentation/Detail/Sources/Reducer/DetailReducer.swift b/Projects/Presentation/Detail/Sources/Reducer/DetailReducer.swift new file mode 100644 index 0000000..7395043 --- /dev/null +++ b/Projects/Presentation/Detail/Sources/Reducer/DetailReducer.swift @@ -0,0 +1,161 @@ +// +// DetailReducer.swift +// Detail +// +// Created by Wonji Suh on 10/27/25. +// + +import Foundation +import ComposableArchitecture + +import Core +import LogMacro + +@Reducer +public struct DetailReducer { + public init() {} + + @ObservableState + public struct State: Equatable { + + @Shared var musicItem: MusicItem? + var isLoading: Bool + public init( + musicItem: MusicItem?, + isLoading: Bool = true + ) { + self._musicItem = Shared(wrappedValue: musicItem, .inMemory("MusicItem")) + self.isLoading = isLoading + } + } + + 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 onAppear + } + + + //MARK: - AsyncAction 비동기 처리 액션 + @CasePathable + public enum AsyncAction: Equatable { + case searchDetailMusic + } + + //MARK: - 앱내에서 사용하는 액션 + @CasePathable + public enum InnerAction { + case detailMusicResponse(Result) + } + + //MARK: - NavigationAction + @CasePathable + public enum NavigationAction: Equatable { + case backToHome + + } + + private enum CancelID: Hashable { + case detailScreen + } + + @Dependency(\.continuousClock) var clock + @Dependency(MusicDetailUseCase.self) var musicDetailUseCase + + public var body: some Reducer { + 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) + } + } + } +} + +extension DetailReducer { + private func handleViewAction( + state: inout State, + action: View + ) -> Effect { + switch action { + case .onAppear: + state.isLoading = true + return .send(.async(.searchDetailMusic)) + } + } + + private func handleAsyncAction( + state: inout State, + action: AsyncAction + ) -> Effect { + switch action { + case .searchDetailMusic: + return .run { [musicItem = state.musicItem] send in + try? await clock.sleep(for: .seconds(2)) + + let searchDetailMusicResult = await Result { + try await musicDetailUseCase.fetchTrackDetail(id: musicItem?.trackId ?? .zero) + } + + switch searchDetailMusicResult { + case .success(let musicDetailData): + await send(.inner(.detailMusicResponse(.success(musicDetailData)))) + + case .failure(let error): + await send(.inner(.detailMusicResponse(.failure(error)))) + } + } + .cancellable(id: CancelID.detailScreen, cancelInFlight: true) + } + } + + private func handleNavigationAction( + state: inout State, + action: NavigationAction + ) -> Effect { + switch action { + case .backToHome: + return .none + } + } + + private func handleInnerAction( + state: inout State, + action: InnerAction + ) -> Effect { + switch action { + case .detailMusicResponse(let result): + switch result { + case .success(let data): + state.$musicItem.withLock { $0 = data } + + case .failure(let error): + #logError("데이터가져오기 실패", error.localizedDescription) + } + state.isLoading = false + return .none + } + } +} diff --git a/Projects/Presentation/Detail/Sources/View/Component/NavigationArrowButton.swift b/Projects/Presentation/Detail/Sources/View/Component/NavigationArrowButton.swift new file mode 100644 index 0000000..3b55f7c --- /dev/null +++ b/Projects/Presentation/Detail/Sources/View/Component/NavigationArrowButton.swift @@ -0,0 +1,38 @@ +// +// NavigationArrowButton.swift +// Detail +// +// Created by Wonji Suh on 10/27/25. +// + +import SwiftUI + +import DesignSystem + +public struct NavigationArrowButton: View { + + private var backAction: () -> Void = {} + + public init( + backAction: @escaping () -> Void + ) { + self.backAction = backAction + } + + public var body: some View { + HStack { + Image(systemName: "chevron.left") + .resizable() + .scaledToFit() + .frame(width: 12, height: 20) + .font(.pretendardFont(family: .semiBold, size: 20)) + .foregroundStyle(.gray) + .onTapGesture(perform: backAction) + + Spacer() + + } + .padding(.horizontal, 16) + } +} + diff --git a/Projects/Presentation/Detail/Sources/View/Component/ScalingHeaderDetailView.swift b/Projects/Presentation/Detail/Sources/View/Component/ScalingHeaderDetailView.swift new file mode 100644 index 0000000..1ba5691 --- /dev/null +++ b/Projects/Presentation/Detail/Sources/View/Component/ScalingHeaderDetailView.swift @@ -0,0 +1,90 @@ +// +// ScalingHeaderDetailView.swift +// Detail +// +// Created by Wonji Suh on 10/27/25. +// + +import SwiftUI +import DesignSystem + +struct ScalingHeaderDetailView: View { + let headerURL: URL? + let isLoading: Bool + let headerHeight: CGFloat + let content: Content + let backAction: () -> Void + + init( + headerURL: URL?, + isLoading: Bool, + headerHeight: CGFloat = 400, + backAction: @escaping () -> Void = {}, + @ViewBuilder content: () -> Content + ) { + self.headerURL = headerURL + self.isLoading = isLoading + self.headerHeight = headerHeight + self.content = content() + self.backAction = backAction + } + + var body: some View { + GeometryReader { outerGeo in + ZStack(alignment: .topLeading) { + ScrollView(showsIndicators: false) { + VStack(spacing: 0) { + GeometryReader { geo in + let offset = geo.frame(in: .global).minY + let height = offset > 0 ? headerHeight + offset : headerHeight + headerContent + .frame(width: outerGeo.size.width, height: height) + .clipped() + .offset(y: offset > 0 ? -offset : 0) + } + .frame(height: headerHeight) // 헤더 영역 고정 + + // 헤더 아래 콘텐츠 + VStack(alignment: .leading, spacing: 16) { + content + } + .padding(.horizontal, 20) + .padding(.top, 12) + } + } + + NavigationArrowButton { + backAction() + } + .padding(.leading, 16) + .padding(.top, outerGeo.safeAreaInsets.top + 20) + } + .ignoresSafeArea(edges: .top) + } + } + + @ViewBuilder + private var headerContent: some View { + if isLoading { + SkeletonView(width: nil, height: headerHeight) + } else { + AsyncImage(url: headerURL) { phase in + switch phase { + case .empty: + SkeletonView(width: nil, height: headerHeight) + case .success(let image): + image + .resizable() + .scaledToFill() + case .failure: + Image(systemName: "music.note") + .resizable() + .scaledToFit() + .foregroundColor(.gray) + @unknown default: + Color.clear + } + } + } + } +} diff --git a/Projects/Presentation/Detail/Sources/View/Component/Skeleton/DetailSkeletonViews.swift b/Projects/Presentation/Detail/Sources/View/Component/Skeleton/DetailSkeletonViews.swift new file mode 100644 index 0000000..08d92e4 --- /dev/null +++ b/Projects/Presentation/Detail/Sources/View/Component/Skeleton/DetailSkeletonViews.swift @@ -0,0 +1,34 @@ +import SwiftUI +import DesignSystem + +struct DetailSectionHeaderSkeletonView: View { + var body: some View { + VStack(alignment: .leading, spacing: 12) { + Spacer().frame(height: 30) + + SkeletonView(width: 220, height: 36, cornerRadius: 10) + SkeletonView(width: 160, height: 24, cornerRadius: 8) + SkeletonView(width: 200, height: 20, cornerRadius: 8) + + Spacer().frame(height: 10) + } + } +} + +struct DetailAboutAlbumSkeletonView: View { + var body: some View { + VStack(alignment: .leading, spacing: 12) { + SkeletonView(width: 180, height: 24, cornerRadius: 8) + + Spacer().frame(height: 5) + + SkeletonView(width: nil, height: 1, cornerRadius: 0, baseColor: Color.white.opacity(0.2)) + + VStack(alignment: .leading, spacing: 8) { + SkeletonView(width: nil, height: 14, cornerRadius: 6) + SkeletonView(width: nil, height: 14, cornerRadius: 6) + SkeletonView(width: 240, height: 14, cornerRadius: 6) + } + } + } +} diff --git a/Projects/Presentation/Detail/Sources/View/DetailView.swift b/Projects/Presentation/Detail/Sources/View/DetailView.swift new file mode 100644 index 0000000..9c931b5 --- /dev/null +++ b/Projects/Presentation/Detail/Sources/View/DetailView.swift @@ -0,0 +1,114 @@ +// +// DetailView.swift +// Detail +// +// Created by Wonji Suh on 10/27/25. +// + +import SwiftUI + +import ComposableArchitecture + +import Shared +import Core + +@ViewAction(for: DetailReducer.self) +public struct DetailView: View { + @Perception.Bindable public var store: StoreOf + + public init(store: StoreOf) { + self.store = store + } + + public var body: some View { + WithPerceptionTracking { + ScalingHeaderDetailView( + headerURL: store.musicItem?.highResolutionArtworkURL, + isLoading: store.isLoading, + headerHeight: 400, + backAction: { + store.send(.navigation(.backToHome)) + } + ) { + VStack(alignment: .leading, spacing: 24) { + if store.isLoading { + DetailSectionHeaderSkeletonView() + } else if let item = store.musicItem { + sectionHeaderContent(item: item) + } + + if store.isLoading { + DetailAboutAlbumSkeletonView() + } else if let item = store.musicItem { + aboutAlbumInfoView(item: item) + } + } + } + .background(Color.black.ignoresSafeArea()) + .onAppear { + send(.onAppear) + } + } + } +} + + + +extension DetailView { + + @ViewBuilder + private func sectionHeaderContent(item : MusicItem) -> some View { + VStack(alignment: .leading, spacing: 10) { + Spacer() + .frame(height: 30) + + HStack { + Text(item.album) + .font(.pretendardFont(family: .semiBold, size: 30)) + .foregroundStyle(.white) + + Spacer() + } + + Text(item.artist) + .font(.pretendardFont(family: .semiBold, size: 24)) + .foregroundStyle(.lightGray100) + + Text(item.trackName) + .font(.pretendardFont(family: .semiBold, size: 20)) + .foregroundStyle(.lightGray100) + + + Spacer() + .frame(height: 10) + } + } + + @ViewBuilder + private func aboutAlbumInfoView(item : MusicItem) -> some View { + VStack(spacing: 10) { + HStack { + Text("About this track") + .font(.pretendardFont(family: .semiBold, size: 24)) + .foregroundStyle(.white) + + Spacer() + } + + Spacer() + .frame(height: 5) + + Divider() + .frame(height: 1) + .background(.nightRider) + + HStack { + Text(item.aboutAlbumInfo) + .font(.pretendardFont(family: .semiBold, size: 20)) + .foregroundStyle(.lightGray100) + + Spacer() + } + } + } +} diff --git a/Projects/Presentation/Home/Derived/InfoPlists/Home-Debug-Info.plist b/Projects/Presentation/Home/Derived/InfoPlists/Home-Debug-Info.plist new file mode 100644 index 0000000..323e5ec --- /dev/null +++ b/Projects/Presentation/Home/Derived/InfoPlists/Home-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/Home/Derived/InfoPlists/Home-Info.plist b/Projects/Presentation/Home/Derived/InfoPlists/Home-Info.plist new file mode 100644 index 0000000..323e5ec --- /dev/null +++ b/Projects/Presentation/Home/Derived/InfoPlists/Home-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/Home/Derived/InfoPlists/Home-Prod-Info.plist b/Projects/Presentation/Home/Derived/InfoPlists/Home-Prod-Info.plist new file mode 100644 index 0000000..323e5ec --- /dev/null +++ b/Projects/Presentation/Home/Derived/InfoPlists/Home-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/Home/Derived/InfoPlists/Home-Stage-Info.plist b/Projects/Presentation/Home/Derived/InfoPlists/Home-Stage-Info.plist new file mode 100644 index 0000000..323e5ec --- /dev/null +++ b/Projects/Presentation/Home/Derived/InfoPlists/Home-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/Home/Derived/InfoPlists/HomeTests-Info.plist b/Projects/Presentation/Home/Derived/InfoPlists/HomeTests-Info.plist new file mode 100644 index 0000000..6c40a6c --- /dev/null +++ b/Projects/Presentation/Home/Derived/InfoPlists/HomeTests-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/Home/Home.xcodeproj/project.pbxproj b/Projects/Presentation/Home/Home.xcodeproj/project.pbxproj new file mode 100644 index 0000000..5945f73 --- /dev/null +++ b/Projects/Presentation/Home/Home.xcodeproj/project.pbxproj @@ -0,0 +1,1691 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 55; + objects = { + +/* Begin PBXBuildFile section */ + 0683E101C1A882ED5D5D489C /* MusicSeason.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E51688979278BDB0181C76F /* MusicSeason.swift */; }; + 094B62693AAC407357451C8C /* HomeReducer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21EFEF72AC5E0799A53A9228 /* HomeReducer.swift */; }; + 0AFC3A6FA5EE566C013D1999 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9D1EE48DA2405FA422E8CB01 /* CFNetwork.framework */; }; + 0CB4B19E28DFD16E9DCDC7B6 /* XCTestDynamicOverlay.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 62227ECF2406859465EA7279 /* XCTestDynamicOverlay.framework */; }; + 10AF83F143A45053E6F5DA55 /* MusicSeason.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E51688979278BDB0181C76F /* MusicSeason.swift */; }; + 1638F9FD9E6D6BA8D5658330 /* HomeReducerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6E12A0A9BFEC38C3FC619B6 /* HomeReducerTests.swift */; }; + 24644155854D9EFB137CC6AB /* API.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4E5ABD30FF959AA32996DD8 /* API.framework */; }; + 2534543DA4E63B650EEB7225 /* MusicCardCarousel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F18EBA564E2C82AF4577BFD /* MusicCardCarousel.swift */; }; + 25410BF765B6159C04334D3C /* CombineMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 94621462D8C32782BC411301 /* CombineMoya.framework */; }; + 25632853C21928B783200A6A /* Alamofire_Alamofire.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 64B42078E0A87CEE27F32CF2 /* Alamofire_Alamofire.bundle */; }; + 269DAC6E999F4D87706612D6 /* Home.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9290645AFD421A6E8E0A3C77 /* Home.framework */; }; + 29888ED5F2692E8ADDEC84A4 /* MusicListSectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1713B725ABF28A8ECDED78A7 /* MusicListSectionView.swift */; }; + 29F1FA9F07BBB07DD93DBD73 /* MusicListSectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1713B725ABF28A8ECDED78A7 /* MusicListSectionView.swift */; }; + 2C165068F8D7CED912FDF975 /* DomainInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A0352332C280D3668B2EF2A8 /* DomainInterface.framework */; }; + 2DA4A3757D5FA4A36EDDB800 /* HomeCoordinatorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C4EF3EB7C1A6C74F1147F89 /* HomeCoordinatorView.swift */; }; + 377586204F4C2C1773999D4A /* Detail.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C6E7CCF66A2AB76494EE04BA /* Detail.framework */; }; + 3811C31BCDDDEAA745105AEA /* SearchBarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC85A95C5D1972AE6A76C93E /* SearchBarView.swift */; }; + 38B3A6E1533D6FE253C6ABF4 /* Perception.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0A0F2E720C3F270082B6ACA4 /* Perception.framework */; }; + 3AE6C2658C8A0DAF4FB5AB3D /* LogMacro.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 342C1B5A4A3F9F43BDB5639D /* LogMacro.framework */; }; + 3C56E8600EE5167B669B1108 /* PerceptionCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2F4F09B1E35ECD333CFB4B8C /* PerceptionCore.framework */; }; + 4094B00E3E926D1314D14602 /* SectionHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC17FCAE4E22D1BE67AD68CB /* SectionHeaderView.swift */; }; + 42D4ABB0883D7FD26C6A3764 /* HomeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB9B8C07D57418919559FFAA /* HomeView.swift */; }; + 468B9914D424B44F720756D6 /* Sharing1.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7026CE15DBCDE0ED6473CE05 /* Sharing1.framework */; }; + 47EFDF18613C0A02195CF0F9 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5B1A5FAB7ADFFA55459CCD3E /* Alamofire.framework */; }; + 484510B78EC023B0C6363598 /* SectionHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC17FCAE4E22D1BE67AD68CB /* SectionHeaderView.swift */; }; + 4A83571115A2A5D776D0DDB6 /* HomeSkeletonViews.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0568C0C2D61EA79BAD4D0D1 /* HomeSkeletonViews.swift */; }; + 4C30A8E9ECAC87271DCDDC1C /* MusicItemCard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 461CA45E92D4D1E043B122B0 /* MusicItemCard.swift */; }; + 4CFE70FB4A96934136C233EA /* UIKitNavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5F8398D61A30D4AFF901F71C /* UIKitNavigation.framework */; }; + 526031057FE954539C784269 /* swift-sharing_Sharing.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 0CB3912B72DC86595BFAD804 /* swift-sharing_Sharing.bundle */; }; + 54541302D101C6556013195B /* Detail.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = C6E7CCF66A2AB76494EE04BA /* Detail.framework */; }; + 54FA805FC0FE494D726E2D0A /* MusicCardCarousel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F18EBA564E2C82AF4577BFD /* MusicCardCarousel.swift */; }; + 559F4E3C76AF4CF31B6B76AB /* IssueReporting.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 86D2CD13C4F9DEAE3296CC3D /* IssueReporting.framework */; }; + 57B73AF96C326D84775CBBCB /* HomeSkeletonViews.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0568C0C2D61EA79BAD4D0D1 /* HomeSkeletonViews.swift */; }; + 5F7697D32D07721BC6BF5603 /* UseCase.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = E41DAF9464ED5B473501A8E5 /* UseCase.framework */; }; + 62C803A5C13E50966235C3D2 /* swift-sharing_Sharing.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 0CB3912B72DC86595BFAD804 /* swift-sharing_Sharing.bundle */; }; + 62F2A5B388DB0888C6C6EFE4 /* HomeReducer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21EFEF72AC5E0799A53A9228 /* HomeReducer.swift */; }; + 65451E426FC645E96F4B0BE5 /* OSLog.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F77FC0859D5CA2AC2CC5010E /* OSLog.framework */; }; + 66A8FE61732422AA8387F2FC /* MusicSeason.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E51688979278BDB0181C76F /* MusicSeason.swift */; }; + 6AF94EE489A31CAB497CC765 /* Shared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5D35F66BCBA8EB427B5DE027 /* Shared.framework */; }; + 70CE020999A9C2A3A6794A9E /* MusicListSectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1713B725ABF28A8ECDED78A7 /* MusicListSectionView.swift */; }; + 7649F9795044BBA6FF6BD388 /* SwiftUINavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5654B6706EEA1F5AAC932661 /* SwiftUINavigation.framework */; }; + 779A618074D888B0FA23A15E /* CasePathsCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D1F9923798CEA07682FB62EF /* CasePathsCore.framework */; }; + 790806FE4438B0A72FA2D1EC /* UIKitNavigationShim.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DD18F69DE202E3E12ADE1FAC /* UIKitNavigationShim.framework */; }; + 7AC72BD20477034736478B71 /* Dependencies.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9EB596A749F9D8D37BC56F22 /* Dependencies.framework */; }; + 7ADAD16C8717653F53523DF4 /* IdentifiedCollections.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C3214F85CBC3AED185E900CD /* IdentifiedCollections.framework */; }; + 7BD3EBE830D7E8CFD66566ED /* Clocks.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 23EFFE523A0932DE576346EA /* Clocks.framework */; }; + 7F5389BC4DC96684F475E3B6 /* RxMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 86CBE6ABD83F406A81DA73C8 /* RxMoya.framework */; }; + 7F58E3932E6E87D7A775C6A2 /* Model.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5030B1CA5F8E96AA31793193 /* Model.framework */; }; + 82DAE759D3AC83460AA6238E /* OrderedCollections.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D873DEE51BC4C388C330FA8 /* OrderedCollections.framework */; }; + 848980EF00145A4BA19F63D1 /* SearchBarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC85A95C5D1972AE6A76C93E /* SearchBarView.swift */; }; + 84D51F3ACF1A4D496098B338 /* MusicListSectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1713B725ABF28A8ECDED78A7 /* MusicListSectionView.swift */; }; + 876061F7EAF8C8A8A3E18AD4 /* SearchBarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC85A95C5D1972AE6A76C93E /* SearchBarView.swift */; }; + 876F65AA42CD257B662AA812 /* MusicItemCard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 461CA45E92D4D1E043B122B0 /* MusicItemCard.swift */; }; + 8AEF206CBB672485E839AF0A /* HomeCoordinatorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C4EF3EB7C1A6C74F1147F89 /* HomeCoordinatorView.swift */; }; + 91534EA2F4B0CECFA8147610 /* MusicItemCard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 461CA45E92D4D1E043B122B0 /* MusicItemCard.swift */; }; + 96F75263466B8FD3AD2B70A3 /* CombineSchedulers.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 04F0B8AF7CD387B98149115B /* CombineSchedulers.framework */; }; + 98AB90031B1EEABDCECCCF4A /* swift-composable-architecture_ComposableArchitecture.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = CBE2A10C444E1DF933BB699B /* swift-composable-architecture_ComposableArchitecture.bundle */; }; + 9904450CA4B1951007353E87 /* swift-composable-architecture_ComposableArchitecture.bundle in Resources */ = {isa = PBXBuildFile; fileRef = CBE2A10C444E1DF933BB699B /* swift-composable-architecture_ComposableArchitecture.bundle */; }; + 993203127232750297ADBED4 /* HomeCoordinatorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C4EF3EB7C1A6C74F1147F89 /* HomeCoordinatorView.swift */; }; + 9EE2C31BCAF8A364DEF9F0BC /* SwiftNavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 43C8680355A3E03177AA5349 /* SwiftNavigation.framework */; }; + 9FBF769CF6ECDA77DC17420A /* Shared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5D35F66BCBA8EB427B5DE027 /* Shared.framework */; }; + A05D017F419E6C39C08B24E6 /* Networking.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2469AB87A1F38762DA5F745 /* Networking.framework */; }; + A2422B8B37D4638D7365A315 /* CasePaths.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 38C4CD03A99734919F5AF140 /* CasePaths.framework */; }; + A37803C01802DB7A99732746 /* DependenciesMacros.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 778E31383FFF44E87C3B47E8 /* DependenciesMacros.framework */; }; + A5A95B58B4F9FB0E97E5CE21 /* UseCase.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = E41DAF9464ED5B473501A8E5 /* UseCase.framework */; }; + A5BCA397469B16A2BC231844 /* ComposableArchitecture.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6B7C4AD380DFFF45ACD78ACB /* ComposableArchitecture.framework */; }; + AA8FB6608EEA1970961BFF57 /* DataInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1C5B38DB71536DD19629D5AA /* DataInterface.framework */; }; + AB71CD5FCBF42C5AC2E9B73C /* MusicSeason.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E51688979278BDB0181C76F /* MusicSeason.swift */; }; + AD0DC5215859A9B940312D4A /* Detail.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = C6E7CCF66A2AB76494EE04BA /* Detail.framework */; }; + AFBC5FF1BF6FACBF271251DB /* SectionHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC17FCAE4E22D1BE67AD68CB /* SectionHeaderView.swift */; }; + AFFEEFC76C90CB48D53F1DC0 /* MusicCardCarousel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F18EBA564E2C82AF4577BFD /* MusicCardCarousel.swift */; }; + B155AC3C63F6216846590748 /* WeaveDI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 26F953DB89C018E5594D3350 /* WeaveDI.framework */; }; + B3E2A396F824BFDD799A1E9E /* Core.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9A8F8FB7ECC88281FCC1FFE6 /* Core.framework */; }; + BA3C98B1AA573F5E6ADF286B /* InternalCollectionsUtilities.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 349D688284E28EE01D144265 /* InternalCollectionsUtilities.framework */; }; + BC5D130A79C197A52CFF4F05 /* HomeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB9B8C07D57418919559FFAA /* HomeView.swift */; }; + BF063D65F7F89BA1335A08B1 /* Foundations.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 80B195D2E9E1BDCB82C5AF27 /* Foundations.framework */; }; + BF58D7E6C278D7B285B8FD31 /* MusicCardCarousel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2F18EBA564E2C82AF4577BFD /* MusicCardCarousel.swift */; }; + C6300F6653E1D66EFC5ABFE7 /* MusicItemCard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 461CA45E92D4D1E043B122B0 /* MusicItemCard.swift */; }; + C6DF297EB155277927A4B87D /* HomeCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B9BDE70E61B3A2052CB9630 /* HomeCoordinator.swift */; }; + C8DC844992B30693A7FEA61D /* Moya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45A37D9EB117BE8E26CCEAF /* Moya.framework */; }; + CADD023BBA489DFFE32C327E /* SearchBarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC85A95C5D1972AE6A76C93E /* SearchBarView.swift */; }; + CC8C7D902FEA288DE48754A2 /* HomeCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B9BDE70E61B3A2052CB9630 /* HomeCoordinator.swift */; }; + CE41C85E30CA24AA147A82FC /* HomeCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B9BDE70E61B3A2052CB9630 /* HomeCoordinator.swift */; }; + CE6E7DF8D2CAFF2B5B0669AB /* ConcurrencyExtras.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B74ECA55D6C4C601A85A7F85 /* ConcurrencyExtras.framework */; }; + CEB585B41F6C6EC69DFC9B8F /* Shared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5D35F66BCBA8EB427B5DE027 /* Shared.framework */; }; + CF5A1AD2B7353A124DEFE3FA /* EventLimiter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 47685DD352D9FD3AF017E55A /* EventLimiter.framework */; }; + D110469E344FC8C09FBBEDF5 /* Shared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5D35F66BCBA8EB427B5DE027 /* Shared.framework */; }; + D2887734A55C3779D0F07A91 /* Shared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5D35F66BCBA8EB427B5DE027 /* Shared.framework */; }; + D44449372485F69CE4255B0F /* AsyncMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A3A420962362F953BA80583E /* AsyncMoya.framework */; }; + D57FDE5B6D33D593026307B3 /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7AC33FA1CBE648EA8E368396 /* RxSwift.framework */; }; + D6B179DE1D84172A299A3386 /* HomeCoordinatorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C4EF3EB7C1A6C74F1147F89 /* HomeCoordinatorView.swift */; }; + D6C535685A583D58A8DBB01F /* Detail.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = C6E7CCF66A2AB76494EE04BA /* Detail.framework */; }; + D91511FF8766E40D93A0B776 /* UseCase.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = E41DAF9464ED5B473501A8E5 /* UseCase.framework */; }; + DB645D847D32CBC59BEACF07 /* HomeReducer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21EFEF72AC5E0799A53A9228 /* HomeReducer.swift */; }; + DB6A4F4F35895E7EFE3263E4 /* HomeCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B9BDE70E61B3A2052CB9630 /* HomeCoordinator.swift */; }; + DC8C359F78309B5BB1CA5E22 /* IssueReportingPackageSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 497C681620B7A8EF9A5DB3FD /* IssueReportingPackageSupport.framework */; }; + DDC1A34E9FD3DA0EC501B489 /* CustomDump.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E47458BD3F3EA1328FB27547 /* CustomDump.framework */; }; + E54D81EA518CA59FADD027D6 /* UseCase.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = E41DAF9464ED5B473501A8E5 /* UseCase.framework */; }; + E7F73FA4B5BE08A5CF11DA15 /* HomeSkeletonViews.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0568C0C2D61EA79BAD4D0D1 /* HomeSkeletonViews.swift */; }; + E9D43BAF593CAF5F1FFF9F61 /* HomeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB9B8C07D57418919559FFAA /* HomeView.swift */; }; + EA516AB74E3DEC9A46C753FB /* UseCase.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E41DAF9464ED5B473501A8E5 /* UseCase.framework */; }; + EB16D4098EB6F7300105D545 /* HomeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB9B8C07D57418919559FFAA /* HomeView.swift */; }; + EC25F61D85E0B3C1933DBE94 /* Service.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83445F59D3AB1860CA662B01 /* Service.framework */; }; + EDA9C77573FEAFFD240920F8 /* Sharing2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D1AFE5BA67BCFE27F8907243 /* Sharing2.framework */; }; + EE8267884574C1EB7FDF4385 /* Repository.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 67B392150F9B03EE0F5089DC /* Repository.framework */; }; + EEB1C95A66F2F4AF9A009827 /* Sharing.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 947E0603E89507C192DAD1F1 /* Sharing.framework */; }; + FA29C38BB5C59EF87F04A7A9 /* Detail.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = C6E7CCF66A2AB76494EE04BA /* Detail.framework */; }; + FAE83CC65B275D5337408072 /* SectionHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC17FCAE4E22D1BE67AD68CB /* SectionHeaderView.swift */; }; + FB2EB78E020FF24BECE2989C /* HomeReducer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21EFEF72AC5E0799A53A9228 /* HomeReducer.swift */; }; + FF0D45006AD406E7B1C660BB /* HomeSkeletonViews.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0568C0C2D61EA79BAD4D0D1 /* HomeSkeletonViews.swift */; }; + FF99CC3918E2F8453AFACA84 /* Alamofire_Alamofire.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 64B42078E0A87CEE27F32CF2 /* Alamofire_Alamofire.bundle */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + F59260D8476FA45929EC249E /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = F648A09DF594BC533BCA5FD3 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 52E844066D197E3B81FA748F; + remoteInfo = Home; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 0BBF72B4161C0B1072B3F3F6 /* Dependencies */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 8; + dstSubfolderSpec = 16; + files = ( + FA29C38BB5C59EF87F04A7A9 /* Detail.framework in Dependencies */, + A5A95B58B4F9FB0E97E5CE21 /* UseCase.framework in Dependencies */, + ); + name = Dependencies; + runOnlyForDeploymentPostprocessing = 1; + }; + 3C28B78DE981ED6F9F6774E2 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + 41784F11340B835F1FF277D5 /* Dependencies */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 8; + dstSubfolderSpec = 16; + files = ( + D6C535685A583D58A8DBB01F /* Detail.framework in Dependencies */, + D91511FF8766E40D93A0B776 /* UseCase.framework in Dependencies */, + ); + name = Dependencies; + runOnlyForDeploymentPostprocessing = 1; + }; + 46C525DC6EF7351A0E196757 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + 724F10C18B84459D2E88EF10 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + 72F4E209847032C394F96253 /* Dependencies */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 8; + dstSubfolderSpec = 16; + files = ( + 25632853C21928B783200A6A /* Alamofire_Alamofire.bundle in Dependencies */, + 98AB90031B1EEABDCECCCF4A /* swift-composable-architecture_ComposableArchitecture.bundle in Dependencies */, + 62C803A5C13E50966235C3D2 /* swift-sharing_Sharing.bundle in Dependencies */, + ); + name = Dependencies; + runOnlyForDeploymentPostprocessing = 1; + }; + 75AB97C49D35E8282CD12217 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; + 9017C6DE9E1A1DD0A1AD5B4E /* Dependencies */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 8; + dstSubfolderSpec = 16; + files = ( + 54541302D101C6556013195B /* Detail.framework in Dependencies */, + 5F7697D32D07721BC6BF5603 /* UseCase.framework in Dependencies */, + ); + name = Dependencies; + runOnlyForDeploymentPostprocessing = 1; + }; + B91232F57A2911B2D4338256 /* Dependencies */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 8; + dstSubfolderSpec = 16; + files = ( + AD0DC5215859A9B940312D4A /* Detail.framework in Dependencies */, + E54D81EA518CA59FADD027D6 /* UseCase.framework in Dependencies */, + ); + name = Dependencies; + runOnlyForDeploymentPostprocessing = 1; + }; + BD1FEEF844B5A77FAFDC2DF4 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 016FDC511C6D703D44CFE3D6 /* HomeTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "HomeTests-Info.plist"; sourceTree = ""; }; + 04F0B8AF7CD387B98149115B /* CombineSchedulers.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CombineSchedulers.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0A0F2E720C3F270082B6ACA4 /* Perception.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Perception.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 0CB3912B72DC86595BFAD804 /* swift-sharing_Sharing.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "swift-sharing_Sharing.bundle"; sourceTree = BUILT_PRODUCTS_DIR; }; + 1713B725ABF28A8ECDED78A7 /* MusicListSectionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MusicListSectionView.swift; sourceTree = ""; }; + 1C5B38DB71536DD19629D5AA /* DataInterface.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DataInterface.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2175BAF96F5C1F4AA8B7D351 /* Home-Debug-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Home-Debug-Info.plist"; sourceTree = ""; }; + 21EFEF72AC5E0799A53A9228 /* HomeReducer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeReducer.swift; sourceTree = ""; }; + 23EFFE523A0932DE576346EA /* Clocks.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Clocks.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 26F953DB89C018E5594D3350 /* WeaveDI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = WeaveDI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 2F18EBA564E2C82AF4577BFD /* MusicCardCarousel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MusicCardCarousel.swift; sourceTree = ""; }; + 2F4F09B1E35ECD333CFB4B8C /* PerceptionCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PerceptionCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 342C1B5A4A3F9F43BDB5639D /* LogMacro.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = LogMacro.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 349D688284E28EE01D144265 /* InternalCollectionsUtilities.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = InternalCollectionsUtilities.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 38C4CD03A99734919F5AF140 /* CasePaths.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CasePaths.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 3E27707CF3AF39D07540B293 /* HomeTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = HomeTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 43C8680355A3E03177AA5349 /* SwiftNavigation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftNavigation.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 461CA45E92D4D1E043B122B0 /* MusicItemCard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MusicItemCard.swift; sourceTree = ""; }; + 47685DD352D9FD3AF017E55A /* EventLimiter.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = EventLimiter.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 497C681620B7A8EF9A5DB3FD /* IssueReportingPackageSupport.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = IssueReportingPackageSupport.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5030B1CA5F8E96AA31793193 /* Model.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Model.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5654B6706EEA1F5AAC932661 /* SwiftUINavigation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftUINavigation.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5B1A5FAB7ADFFA55459CCD3E /* Alamofire.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Alamofire.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5D35F66BCBA8EB427B5DE027 /* Shared.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Shared.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 5F8398D61A30D4AFF901F71C /* UIKitNavigation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = UIKitNavigation.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 61EC700930D1096A1F12C0D7 /* Home-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Home-Info.plist"; sourceTree = ""; }; + 62227ECF2406859465EA7279 /* XCTestDynamicOverlay.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = XCTestDynamicOverlay.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 64B42078E0A87CEE27F32CF2 /* Alamofire_Alamofire.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Alamofire_Alamofire.bundle; sourceTree = BUILT_PRODUCTS_DIR; }; + 67B392150F9B03EE0F5089DC /* Repository.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Repository.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6B7C4AD380DFFF45ACD78ACB /* ComposableArchitecture.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ComposableArchitecture.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 6C4EF3EB7C1A6C74F1147F89 /* HomeCoordinatorView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeCoordinatorView.swift; sourceTree = ""; }; + 6D873DEE51BC4C388C330FA8 /* OrderedCollections.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = OrderedCollections.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 7026CE15DBCDE0ED6473CE05 /* Sharing1.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Sharing1.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 778E31383FFF44E87C3B47E8 /* DependenciesMacros.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DependenciesMacros.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 790A0B99EFBC3A10546090C7 /* Home_Debug.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Home_Debug.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 7AC33FA1CBE648EA8E368396 /* RxSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RxSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 80B195D2E9E1BDCB82C5AF27 /* Foundations.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Foundations.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 83445F59D3AB1860CA662B01 /* Service.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Service.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 83AEB3F28F4ADCE16A82780B /* Home-Stage-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Home-Stage-Info.plist"; sourceTree = ""; }; + 86CBE6ABD83F406A81DA73C8 /* RxMoya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RxMoya.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 86D2CD13C4F9DEAE3296CC3D /* IssueReporting.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = IssueReporting.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 8E51688979278BDB0181C76F /* MusicSeason.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MusicSeason.swift; sourceTree = ""; }; + 9290645AFD421A6E8E0A3C77 /* Home.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Home.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 94621462D8C32782BC411301 /* CombineMoya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CombineMoya.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 947E0603E89507C192DAD1F1 /* Sharing.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Sharing.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9A8F8FB7ECC88281FCC1FFE6 /* Core.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Core.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 9B9BDE70E61B3A2052CB9630 /* HomeCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeCoordinator.swift; sourceTree = ""; }; + 9D1EE48DA2405FA422E8CB01 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; }; + 9EB596A749F9D8D37BC56F22 /* Dependencies.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Dependencies.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A0352332C280D3668B2EF2A8 /* DomainInterface.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DomainInterface.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + A3A420962362F953BA80583E /* AsyncMoya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AsyncMoya.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + AC17FCAE4E22D1BE67AD68CB /* SectionHeaderView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SectionHeaderView.swift; sourceTree = ""; }; + B74ECA55D6C4C601A85A7F85 /* ConcurrencyExtras.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ConcurrencyExtras.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + B7948506CEACAAB868774C63 /* Home_Prod.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Home_Prod.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + BB9B8C07D57418919559FFAA /* HomeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeView.swift; sourceTree = ""; }; + C3214F85CBC3AED185E900CD /* IdentifiedCollections.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = IdentifiedCollections.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C6E7CCF66A2AB76494EE04BA /* Detail.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Detail.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + CBE2A10C444E1DF933BB699B /* swift-composable-architecture_ComposableArchitecture.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "swift-composable-architecture_ComposableArchitecture.bundle"; sourceTree = BUILT_PRODUCTS_DIR; }; + D1AFE5BA67BCFE27F8907243 /* Sharing2.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Sharing2.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D1F9923798CEA07682FB62EF /* CasePathsCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CasePathsCore.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D2469AB87A1F38762DA5F745 /* Networking.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Networking.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D653F47FD37CF104710C95CC /* Home_Stage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Home_Stage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D6E12A0A9BFEC38C3FC619B6 /* HomeReducerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeReducerTests.swift; sourceTree = ""; }; + D7940577982AD48F3F90F8EB /* Home-Prod-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Home-Prod-Info.plist"; sourceTree = ""; }; + DD18F69DE202E3E12ADE1FAC /* UIKitNavigationShim.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = UIKitNavigationShim.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E41DAF9464ED5B473501A8E5 /* UseCase.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = UseCase.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E45A37D9EB117BE8E26CCEAF /* Moya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Moya.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E47458BD3F3EA1328FB27547 /* CustomDump.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CustomDump.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E4E5ABD30FF959AA32996DD8 /* API.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = API.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + EC85A95C5D1972AE6A76C93E /* SearchBarView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchBarView.swift; sourceTree = ""; }; + F0568C0C2D61EA79BAD4D0D1 /* HomeSkeletonViews.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeSkeletonViews.swift; sourceTree = ""; }; + F77FC0859D5CA2AC2CC5010E /* 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; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 71009639FE53C29507686D5B /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + D2887734A55C3779D0F07A91 /* Shared.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 989FE4D10E5FABD20EDC2D85 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + CEB585B41F6C6EC69DFC9B8F /* Shared.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BB3AA2376F94E8C63D56044A /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 9FBF769CF6ECDA77DC17420A /* Shared.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + BC2BE2B3102E31CC1566A670 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + D110469E344FC8C09FBBEDF5 /* Shared.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + D2D1CD11E151DABAE249ECD8 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 0AFC3A6FA5EE566C013D1999 /* CFNetwork.framework in Frameworks */, + 65451E426FC645E96F4B0BE5 /* OSLog.framework in Frameworks */, + 24644155854D9EFB137CC6AB /* API.framework in Frameworks */, + 47EFDF18613C0A02195CF0F9 /* Alamofire.framework in Frameworks */, + D44449372485F69CE4255B0F /* AsyncMoya.framework in Frameworks */, + A2422B8B37D4638D7365A315 /* CasePaths.framework in Frameworks */, + 779A618074D888B0FA23A15E /* CasePathsCore.framework in Frameworks */, + 7BD3EBE830D7E8CFD66566ED /* Clocks.framework in Frameworks */, + 25410BF765B6159C04334D3C /* CombineMoya.framework in Frameworks */, + 96F75263466B8FD3AD2B70A3 /* CombineSchedulers.framework in Frameworks */, + A5BCA397469B16A2BC231844 /* ComposableArchitecture.framework in Frameworks */, + CE6E7DF8D2CAFF2B5B0669AB /* ConcurrencyExtras.framework in Frameworks */, + B3E2A396F824BFDD799A1E9E /* Core.framework in Frameworks */, + DDC1A34E9FD3DA0EC501B489 /* CustomDump.framework in Frameworks */, + AA8FB6608EEA1970961BFF57 /* DataInterface.framework in Frameworks */, + 7AC72BD20477034736478B71 /* Dependencies.framework in Frameworks */, + A37803C01802DB7A99732746 /* DependenciesMacros.framework in Frameworks */, + 377586204F4C2C1773999D4A /* Detail.framework in Frameworks */, + 2C165068F8D7CED912FDF975 /* DomainInterface.framework in Frameworks */, + CF5A1AD2B7353A124DEFE3FA /* EventLimiter.framework in Frameworks */, + BF063D65F7F89BA1335A08B1 /* Foundations.framework in Frameworks */, + 269DAC6E999F4D87706612D6 /* Home.framework in Frameworks */, + 7ADAD16C8717653F53523DF4 /* IdentifiedCollections.framework in Frameworks */, + BA3C98B1AA573F5E6ADF286B /* InternalCollectionsUtilities.framework in Frameworks */, + 559F4E3C76AF4CF31B6B76AB /* IssueReporting.framework in Frameworks */, + DC8C359F78309B5BB1CA5E22 /* IssueReportingPackageSupport.framework in Frameworks */, + 3AE6C2658C8A0DAF4FB5AB3D /* LogMacro.framework in Frameworks */, + 7F58E3932E6E87D7A775C6A2 /* Model.framework in Frameworks */, + C8DC844992B30693A7FEA61D /* Moya.framework in Frameworks */, + A05D017F419E6C39C08B24E6 /* Networking.framework in Frameworks */, + 82DAE759D3AC83460AA6238E /* OrderedCollections.framework in Frameworks */, + 38B3A6E1533D6FE253C6ABF4 /* Perception.framework in Frameworks */, + 3C56E8600EE5167B669B1108 /* PerceptionCore.framework in Frameworks */, + EE8267884574C1EB7FDF4385 /* Repository.framework in Frameworks */, + 7F5389BC4DC96684F475E3B6 /* RxMoya.framework in Frameworks */, + D57FDE5B6D33D593026307B3 /* RxSwift.framework in Frameworks */, + EC25F61D85E0B3C1933DBE94 /* Service.framework in Frameworks */, + 6AF94EE489A31CAB497CC765 /* Shared.framework in Frameworks */, + EEB1C95A66F2F4AF9A009827 /* Sharing.framework in Frameworks */, + 468B9914D424B44F720756D6 /* Sharing1.framework in Frameworks */, + EDA9C77573FEAFFD240920F8 /* Sharing2.framework in Frameworks */, + 9EE2C31BCAF8A364DEF9F0BC /* SwiftNavigation.framework in Frameworks */, + 7649F9795044BBA6FF6BD388 /* SwiftUINavigation.framework in Frameworks */, + 4CFE70FB4A96934136C233EA /* UIKitNavigation.framework in Frameworks */, + 790806FE4438B0A72FA2D1EC /* UIKitNavigationShim.framework in Frameworks */, + EA516AB74E3DEC9A46C753FB /* UseCase.framework in Frameworks */, + B155AC3C63F6216846590748 /* WeaveDI.framework in Frameworks */, + 0CB4B19E28DFD16E9DCDC7B6 /* XCTestDynamicOverlay.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 0B6C16448CC51A880A93EC19 /* Reducer */ = { + isa = PBXGroup; + children = ( + 9B9BDE70E61B3A2052CB9630 /* HomeCoordinator.swift */, + ); + path = Reducer; + sourceTree = ""; + }; + 156072FA40260C0FBAAE35F3 /* Products */ = { + isa = PBXGroup; + children = ( + 64B42078E0A87CEE27F32CF2 /* Alamofire_Alamofire.bundle */, + 5B1A5FAB7ADFFA55459CCD3E /* Alamofire.framework */, + E4E5ABD30FF959AA32996DD8 /* API.framework */, + A3A420962362F953BA80583E /* AsyncMoya.framework */, + 38C4CD03A99734919F5AF140 /* CasePaths.framework */, + D1F9923798CEA07682FB62EF /* CasePathsCore.framework */, + 23EFFE523A0932DE576346EA /* Clocks.framework */, + 94621462D8C32782BC411301 /* CombineMoya.framework */, + 04F0B8AF7CD387B98149115B /* CombineSchedulers.framework */, + 6B7C4AD380DFFF45ACD78ACB /* ComposableArchitecture.framework */, + B74ECA55D6C4C601A85A7F85 /* ConcurrencyExtras.framework */, + 9A8F8FB7ECC88281FCC1FFE6 /* Core.framework */, + E47458BD3F3EA1328FB27547 /* CustomDump.framework */, + 1C5B38DB71536DD19629D5AA /* DataInterface.framework */, + 9EB596A749F9D8D37BC56F22 /* Dependencies.framework */, + 778E31383FFF44E87C3B47E8 /* DependenciesMacros.framework */, + C6E7CCF66A2AB76494EE04BA /* Detail.framework */, + A0352332C280D3668B2EF2A8 /* DomainInterface.framework */, + 47685DD352D9FD3AF017E55A /* EventLimiter.framework */, + 80B195D2E9E1BDCB82C5AF27 /* Foundations.framework */, + 790A0B99EFBC3A10546090C7 /* Home_Debug.framework */, + B7948506CEACAAB868774C63 /* Home_Prod.framework */, + D653F47FD37CF104710C95CC /* Home_Stage.framework */, + 9290645AFD421A6E8E0A3C77 /* Home.framework */, + 3E27707CF3AF39D07540B293 /* HomeTests.xctest */, + C3214F85CBC3AED185E900CD /* IdentifiedCollections.framework */, + 349D688284E28EE01D144265 /* InternalCollectionsUtilities.framework */, + 86D2CD13C4F9DEAE3296CC3D /* IssueReporting.framework */, + 497C681620B7A8EF9A5DB3FD /* IssueReportingPackageSupport.framework */, + 342C1B5A4A3F9F43BDB5639D /* LogMacro.framework */, + 5030B1CA5F8E96AA31793193 /* Model.framework */, + E45A37D9EB117BE8E26CCEAF /* Moya.framework */, + D2469AB87A1F38762DA5F745 /* Networking.framework */, + 6D873DEE51BC4C388C330FA8 /* OrderedCollections.framework */, + 0A0F2E720C3F270082B6ACA4 /* Perception.framework */, + 2F4F09B1E35ECD333CFB4B8C /* PerceptionCore.framework */, + 67B392150F9B03EE0F5089DC /* Repository.framework */, + 86CBE6ABD83F406A81DA73C8 /* RxMoya.framework */, + 7AC33FA1CBE648EA8E368396 /* RxSwift.framework */, + 83445F59D3AB1860CA662B01 /* Service.framework */, + 5D35F66BCBA8EB427B5DE027 /* Shared.framework */, + 947E0603E89507C192DAD1F1 /* Sharing.framework */, + 7026CE15DBCDE0ED6473CE05 /* Sharing1.framework */, + D1AFE5BA67BCFE27F8907243 /* Sharing2.framework */, + CBE2A10C444E1DF933BB699B /* swift-composable-architecture_ComposableArchitecture.bundle */, + 0CB3912B72DC86595BFAD804 /* swift-sharing_Sharing.bundle */, + 43C8680355A3E03177AA5349 /* SwiftNavigation.framework */, + 5654B6706EEA1F5AAC932661 /* SwiftUINavigation.framework */, + 5F8398D61A30D4AFF901F71C /* UIKitNavigation.framework */, + DD18F69DE202E3E12ADE1FAC /* UIKitNavigationShim.framework */, + E41DAF9464ED5B473501A8E5 /* UseCase.framework */, + 26F953DB89C018E5594D3350 /* WeaveDI.framework */, + 62227ECF2406859465EA7279 /* XCTestDynamicOverlay.framework */, + ); + name = Products; + sourceTree = ""; + }; + 2B68CD8E485DFB4DDF55820E /* Sources */ = { + isa = PBXGroup; + children = ( + D6E12A0A9BFEC38C3FC619B6 /* HomeReducerTests.swift */, + ); + path = Sources; + sourceTree = ""; + }; + 440337F7B58BC84FCBC5A96E /* Frameworks */ = { + isa = PBXGroup; + children = ( + 9D1EE48DA2405FA422E8CB01 /* CFNetwork.framework */, + F77FC0859D5CA2AC2CC5010E /* OSLog.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + 5CD22E19EE8EF2F185B29F7B /* Component */ = { + isa = PBXGroup; + children = ( + F28BDDADFCE2280B54D5BB83 /* Skeleton */, + 2F18EBA564E2C82AF4577BFD /* MusicCardCarousel.swift */, + 461CA45E92D4D1E043B122B0 /* MusicItemCard.swift */, + 1713B725ABF28A8ECDED78A7 /* MusicListSectionView.swift */, + EC85A95C5D1972AE6A76C93E /* SearchBarView.swift */, + AC17FCAE4E22D1BE67AD68CB /* SectionHeaderView.swift */, + ); + path = Component; + sourceTree = ""; + }; + 70BB71A4919E9DCCA3DEA54A /* Derived */ = { + isa = PBXGroup; + children = ( + C7DAD5517A15CCB12559D52C /* InfoPlists */, + ); + path = Derived; + sourceTree = ""; + }; + 799BE65845806EE336D1335A /* Reducer */ = { + isa = PBXGroup; + children = ( + 21EFEF72AC5E0799A53A9228 /* HomeReducer.swift */, + 8E51688979278BDB0181C76F /* MusicSeason.swift */, + ); + path = Reducer; + sourceTree = ""; + }; + 7EE17195DCED3B55274927B6 = { + isa = PBXGroup; + children = ( + A0406DFCF5F3BCA58AF39988 /* Project */, + 156072FA40260C0FBAAE35F3 /* Products */, + 440337F7B58BC84FCBC5A96E /* Frameworks */, + ); + sourceTree = ""; + }; + 9147CDE29ECEEBA57D93F966 /* View */ = { + isa = PBXGroup; + children = ( + 5CD22E19EE8EF2F185B29F7B /* Component */, + BB9B8C07D57418919559FFAA /* HomeView.swift */, + ); + path = View; + sourceTree = ""; + }; + A0406DFCF5F3BCA58AF39988 /* Project */ = { + isa = PBXGroup; + children = ( + 70BB71A4919E9DCCA3DEA54A /* Derived */, + E8682C3CD2B586D5F99FCF76 /* HomeTests */, + B74810073A3D8A4993EE22B2 /* Sources */, + ); + name = Project; + sourceTree = ""; + }; + B74810073A3D8A4993EE22B2 /* Sources */ = { + isa = PBXGroup; + children = ( + F3A909F1C7EDBAD48F58A7A3 /* Coordinator */, + C671BE500DEEA3D0303F3331 /* Main */, + ); + path = Sources; + sourceTree = ""; + }; + C04C6F208A209751AB864221 /* View */ = { + isa = PBXGroup; + children = ( + 6C4EF3EB7C1A6C74F1147F89 /* HomeCoordinatorView.swift */, + ); + path = View; + sourceTree = ""; + }; + C671BE500DEEA3D0303F3331 /* Main */ = { + isa = PBXGroup; + children = ( + 799BE65845806EE336D1335A /* Reducer */, + 9147CDE29ECEEBA57D93F966 /* View */, + ); + path = "Main "; + sourceTree = ""; + }; + C7DAD5517A15CCB12559D52C /* InfoPlists */ = { + isa = PBXGroup; + children = ( + 2175BAF96F5C1F4AA8B7D351 /* Home-Debug-Info.plist */, + 61EC700930D1096A1F12C0D7 /* Home-Info.plist */, + D7940577982AD48F3F90F8EB /* Home-Prod-Info.plist */, + 83AEB3F28F4ADCE16A82780B /* Home-Stage-Info.plist */, + 016FDC511C6D703D44CFE3D6 /* HomeTests-Info.plist */, + ); + path = InfoPlists; + sourceTree = ""; + }; + E8682C3CD2B586D5F99FCF76 /* HomeTests */ = { + isa = PBXGroup; + children = ( + 2B68CD8E485DFB4DDF55820E /* Sources */, + ); + path = HomeTests; + sourceTree = ""; + }; + F28BDDADFCE2280B54D5BB83 /* Skeleton */ = { + isa = PBXGroup; + children = ( + F0568C0C2D61EA79BAD4D0D1 /* HomeSkeletonViews.swift */, + ); + path = Skeleton; + sourceTree = ""; + }; + F3A909F1C7EDBAD48F58A7A3 /* Coordinator */ = { + isa = PBXGroup; + children = ( + 0B6C16448CC51A880A93EC19 /* Reducer */, + C04C6F208A209751AB864221 /* View */, + ); + path = Coordinator; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 26FDE348D508A4A8815C43A2 /* Home-Debug */ = { + isa = PBXNativeTarget; + buildConfigurationList = 37E23B30929669A93B23E26A /* Build configuration list for PBXNativeTarget "Home-Debug" */; + buildPhases = ( + 7163ECEEBF3F91DA32B8F2DC /* Sources */, + 94C30569DAF894478D19F489 /* Resources */, + BB3AA2376F94E8C63D56044A /* Frameworks */, + 46C525DC6EF7351A0E196757 /* Embed Frameworks */, + 0BBF72B4161C0B1072B3F3F6 /* Dependencies */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Home-Debug"; + packageProductDependencies = ( + ); + productName = Home_Debug; + productReference = 790A0B99EFBC3A10546090C7 /* Home_Debug.framework */; + productType = "com.apple.product-type.framework"; + }; + 52E844066D197E3B81FA748F /* Home */ = { + isa = PBXNativeTarget; + buildConfigurationList = B53DD812B90D6329E3432A7A /* Build configuration list for PBXNativeTarget "Home" */; + buildPhases = ( + 2B21B3A2EC9193465C060BAD /* Sources */, + 0C6214A8F4021BA62D8E98E9 /* Resources */, + 989FE4D10E5FABD20EDC2D85 /* Frameworks */, + 3C28B78DE981ED6F9F6774E2 /* Embed Frameworks */, + 9017C6DE9E1A1DD0A1AD5B4E /* Dependencies */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Home; + packageProductDependencies = ( + ); + productName = Home; + productReference = 9290645AFD421A6E8E0A3C77 /* Home.framework */; + productType = "com.apple.product-type.framework"; + }; + AF31213DA71B06E9B09EA3F0 /* HomeTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = C15959F489528457DA19444D /* Build configuration list for PBXNativeTarget "HomeTests" */; + buildPhases = ( + 4CC58563C7B5AE74252419D8 /* Sources */, + 95C7AAA080E708276A8F09A7 /* Resources */, + D2D1CD11E151DABAE249ECD8 /* Frameworks */, + 724F10C18B84459D2E88EF10 /* Embed Frameworks */, + 72F4E209847032C394F96253 /* Dependencies */, + ); + buildRules = ( + ); + dependencies = ( + E36DF25B0B5D8E224B93FC24 /* PBXTargetDependency */, + ); + name = HomeTests; + packageProductDependencies = ( + ); + productName = HomeTests; + productReference = 3E27707CF3AF39D07540B293 /* HomeTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + CAB974688005DECF5E74A73A /* Home-Prod */ = { + isa = PBXNativeTarget; + buildConfigurationList = C0745C44BC655D95AC6C8E8C /* Build configuration list for PBXNativeTarget "Home-Prod" */; + buildPhases = ( + E35D85B667AB66FA66C6B43A /* Sources */, + 85BBD17CBC65EAFB41887893 /* Resources */, + 71009639FE53C29507686D5B /* Frameworks */, + 75AB97C49D35E8282CD12217 /* Embed Frameworks */, + B91232F57A2911B2D4338256 /* Dependencies */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Home-Prod"; + packageProductDependencies = ( + ); + productName = Home_Prod; + productReference = B7948506CEACAAB868774C63 /* Home_Prod.framework */; + productType = "com.apple.product-type.framework"; + }; + D301E001B520AAA16EC3D9D5 /* Home-Stage */ = { + isa = PBXNativeTarget; + buildConfigurationList = AFFAEA2C804E67DBE79E7C54 /* Build configuration list for PBXNativeTarget "Home-Stage" */; + buildPhases = ( + A999DD12BCB8E9177733D18C /* Sources */, + 877C537A4FF54C699DBFB337 /* Resources */, + BC2BE2B3102E31CC1566A670 /* Frameworks */, + BD1FEEF844B5A77FAFDC2DF4 /* Embed Frameworks */, + 41784F11340B835F1FF277D5 /* Dependencies */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "Home-Stage"; + packageProductDependencies = ( + ); + productName = Home_Stage; + productReference = D653F47FD37CF104710C95CC /* Home_Stage.framework */; + productType = "com.apple.product-type.framework"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + F648A09DF594BC533BCA5FD3 /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + TargetAttributes = { + }; + }; + buildConfigurationList = AA685C1613CFBDFB4ED6BAE7 /* Build configuration list for PBXProject "Home" */; + compatibilityVersion = "Xcode 14.0"; + developmentRegion = ko; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ko, + ); + mainGroup = 7EE17195DCED3B55274927B6; + productRefGroup = 156072FA40260C0FBAAE35F3 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 52E844066D197E3B81FA748F /* Home */, + 26FDE348D508A4A8815C43A2 /* Home-Debug */, + CAB974688005DECF5E74A73A /* Home-Prod */, + D301E001B520AAA16EC3D9D5 /* Home-Stage */, + AF31213DA71B06E9B09EA3F0 /* HomeTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 0C6214A8F4021BA62D8E98E9 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 85BBD17CBC65EAFB41887893 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 877C537A4FF54C699DBFB337 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 94C30569DAF894478D19F489 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 95C7AAA080E708276A8F09A7 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + FF99CC3918E2F8453AFACA84 /* Alamofire_Alamofire.bundle in Resources */, + 9904450CA4B1951007353E87 /* swift-composable-architecture_ComposableArchitecture.bundle in Resources */, + 526031057FE954539C784269 /* swift-sharing_Sharing.bundle in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 2B21B3A2EC9193465C060BAD /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + CC8C7D902FEA288DE48754A2 /* HomeCoordinator.swift in Sources */, + 2DA4A3757D5FA4A36EDDB800 /* HomeCoordinatorView.swift in Sources */, + DB645D847D32CBC59BEACF07 /* HomeReducer.swift in Sources */, + 10AF83F143A45053E6F5DA55 /* MusicSeason.swift in Sources */, + AFFEEFC76C90CB48D53F1DC0 /* MusicCardCarousel.swift in Sources */, + 876F65AA42CD257B662AA812 /* MusicItemCard.swift in Sources */, + 29F1FA9F07BBB07DD93DBD73 /* MusicListSectionView.swift in Sources */, + 3811C31BCDDDEAA745105AEA /* SearchBarView.swift in Sources */, + AFBC5FF1BF6FACBF271251DB /* SectionHeaderView.swift in Sources */, + E7F73FA4B5BE08A5CF11DA15 /* HomeSkeletonViews.swift in Sources */, + EB16D4098EB6F7300105D545 /* HomeView.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 4CC58563C7B5AE74252419D8 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 1638F9FD9E6D6BA8D5658330 /* HomeReducerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 7163ECEEBF3F91DA32B8F2DC /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + CE41C85E30CA24AA147A82FC /* HomeCoordinator.swift in Sources */, + 8AEF206CBB672485E839AF0A /* HomeCoordinatorView.swift in Sources */, + 62F2A5B388DB0888C6C6EFE4 /* HomeReducer.swift in Sources */, + AB71CD5FCBF42C5AC2E9B73C /* MusicSeason.swift in Sources */, + 2534543DA4E63B650EEB7225 /* MusicCardCarousel.swift in Sources */, + 4C30A8E9ECAC87271DCDDC1C /* MusicItemCard.swift in Sources */, + 84D51F3ACF1A4D496098B338 /* MusicListSectionView.swift in Sources */, + 876061F7EAF8C8A8A3E18AD4 /* SearchBarView.swift in Sources */, + 484510B78EC023B0C6363598 /* SectionHeaderView.swift in Sources */, + 57B73AF96C326D84775CBBCB /* HomeSkeletonViews.swift in Sources */, + E9D43BAF593CAF5F1FFF9F61 /* HomeView.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + A999DD12BCB8E9177733D18C /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + C6DF297EB155277927A4B87D /* HomeCoordinator.swift in Sources */, + D6B179DE1D84172A299A3386 /* HomeCoordinatorView.swift in Sources */, + FB2EB78E020FF24BECE2989C /* HomeReducer.swift in Sources */, + 66A8FE61732422AA8387F2FC /* MusicSeason.swift in Sources */, + BF58D7E6C278D7B285B8FD31 /* MusicCardCarousel.swift in Sources */, + C6300F6653E1D66EFC5ABFE7 /* MusicItemCard.swift in Sources */, + 29888ED5F2692E8ADDEC84A4 /* MusicListSectionView.swift in Sources */, + 848980EF00145A4BA19F63D1 /* SearchBarView.swift in Sources */, + FAE83CC65B275D5337408072 /* SectionHeaderView.swift in Sources */, + FF0D45006AD406E7B1C660BB /* HomeSkeletonViews.swift in Sources */, + BC5D130A79C197A52CFF4F05 /* HomeView.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + E35D85B667AB66FA66C6B43A /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + DB6A4F4F35895E7EFE3263E4 /* HomeCoordinator.swift in Sources */, + 993203127232750297ADBED4 /* HomeCoordinatorView.swift in Sources */, + 094B62693AAC407357451C8C /* HomeReducer.swift in Sources */, + 0683E101C1A882ED5D5D489C /* MusicSeason.swift in Sources */, + 54FA805FC0FE494D726E2D0A /* MusicCardCarousel.swift in Sources */, + 91534EA2F4B0CECFA8147610 /* MusicItemCard.swift in Sources */, + 70CE020999A9C2A3A6794A9E /* MusicListSectionView.swift in Sources */, + CADD023BBA489DFFE32C327E /* SearchBarView.swift in Sources */, + 4094B00E3E926D1314D14602 /* SectionHeaderView.swift in Sources */, + 4A83571115A2A5D776D0DDB6 /* HomeSkeletonViews.swift in Sources */, + 42D4ABB0883D7FD26C6A3764 /* HomeView.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + E36DF25B0B5D8E224B93FC24 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = Home; + target = 52E844066D197E3B81FA748F /* Home */; + targetProxy = F59260D8476FA45929EC249E /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 1B0052CC5DCDA316E217CB85 /* 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/Home-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 16.6; + 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", + "-load-plugin-executable", + "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.Home; + PRODUCT_NAME = Home; + 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; + }; + 2BCA04EF79BC75397CD64B7C /* 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/Home-Debug-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 16.6; + 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", + "-load-plugin-executable", + "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.Home; + PRODUCT_NAME = Home_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; + }; + 5B23AD7BA110686AF5014647 /* 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; + }; + 5EBE73975F4F5FD6D3E0D6B0 /* 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/Home-Stage-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 16.6; + 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", + "-load-plugin-executable", + "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.Home; + PRODUCT_NAME = Home_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; + }; + 91E86B7E7A3ECD380196ADD7 /* 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/Home-Stage-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 16.6; + 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", + "-load-plugin-executable", + "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.Home; + PRODUCT_NAME = Home_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; + }; + 96EB714468CA7742A084F1C8 /* 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/Home-Prod-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 16.6; + 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", + "-load-plugin-executable", + "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.Home; + PRODUCT_NAME = Home_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; + }; + A080C531FAC044E2B8F6716E /* 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/Home-Prod-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 16.6; + 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", + "-load-plugin-executable", + "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.Home; + PRODUCT_NAME = Home_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; + }; + A0D499078A2C717F0427DEEC /* 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/Home-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 16.6; + 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", + "-load-plugin-executable", + "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.Home; + PRODUCT_NAME = Home; + 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; + }; + A319B01445FC0CE1927E3317 /* 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/HomeTests-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 16.6; + 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", + "-load-plugin-executable", + "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.Home.HomeTests; + PRODUCT_NAME = HomeTests; + 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; + }; + E9972A5C63F9283C539E1E33 /* 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/HomeTests-Info.plist"; + IPHONEOS_DEPLOYMENT_TARGET = 16.6; + 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", + "-load-plugin-executable", + "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.Home.HomeTests; + PRODUCT_NAME = HomeTests; + 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; + }; + EBE000C2C15A2514D251F457 /* 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; + }; + F220EFFC38712450E60A4C88 /* 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/Home-Debug-Info.plist"; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 16.6; + 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", + "-load-plugin-executable", + "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros", + ); + PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.Home; + PRODUCT_NAME = Home_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 */ + 37E23B30929669A93B23E26A /* Build configuration list for PBXNativeTarget "Home-Debug" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 2BCA04EF79BC75397CD64B7C /* Debug */, + F220EFFC38712450E60A4C88 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AA685C1613CFBDFB4ED6BAE7 /* Build configuration list for PBXProject "Home" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 5B23AD7BA110686AF5014647 /* Debug */, + EBE000C2C15A2514D251F457 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + AFFAEA2C804E67DBE79E7C54 /* Build configuration list for PBXNativeTarget "Home-Stage" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 5EBE73975F4F5FD6D3E0D6B0 /* Debug */, + 91E86B7E7A3ECD380196ADD7 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + B53DD812B90D6329E3432A7A /* Build configuration list for PBXNativeTarget "Home" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 1B0052CC5DCDA316E217CB85 /* Debug */, + A0D499078A2C717F0427DEEC /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + C0745C44BC655D95AC6C8E8C /* Build configuration list for PBXNativeTarget "Home-Prod" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + A080C531FAC044E2B8F6716E /* Debug */, + 96EB714468CA7742A084F1C8 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + C15959F489528457DA19444D /* Build configuration list for PBXNativeTarget "HomeTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E9972A5C63F9283C539E1E33 /* Debug */, + A319B01445FC0CE1927E3317 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = F648A09DF594BC533BCA5FD3 /* Project object */; +} diff --git a/Projects/Presentation/Home/Home.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Projects/Presentation/Home/Home.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/Projects/Presentation/Home/Home.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Projects/Presentation/Home/Home.xcodeproj/xcshareddata/xcschemes/Home-Debug.xcscheme b/Projects/Presentation/Home/Home.xcodeproj/xcshareddata/xcschemes/Home-Debug.xcscheme new file mode 100644 index 0000000..33e1994 --- /dev/null +++ b/Projects/Presentation/Home/Home.xcodeproj/xcshareddata/xcschemes/Home-Debug.xcscheme @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/Presentation/Home/Home.xcodeproj/xcshareddata/xcschemes/Home-Prod.xcscheme b/Projects/Presentation/Home/Home.xcodeproj/xcshareddata/xcschemes/Home-Prod.xcscheme new file mode 100644 index 0000000..87513c9 --- /dev/null +++ b/Projects/Presentation/Home/Home.xcodeproj/xcshareddata/xcschemes/Home-Prod.xcscheme @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/Presentation/Home/Home.xcodeproj/xcshareddata/xcschemes/Home-Stage.xcscheme b/Projects/Presentation/Home/Home.xcodeproj/xcshareddata/xcschemes/Home-Stage.xcscheme new file mode 100644 index 0000000..82aa7fa --- /dev/null +++ b/Projects/Presentation/Home/Home.xcodeproj/xcshareddata/xcschemes/Home-Stage.xcscheme @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/Presentation/Home/Home.xcodeproj/xcshareddata/xcschemes/Home.xcscheme b/Projects/Presentation/Home/Home.xcodeproj/xcshareddata/xcschemes/Home.xcscheme new file mode 100644 index 0000000..df70731 --- /dev/null +++ b/Projects/Presentation/Home/Home.xcodeproj/xcshareddata/xcschemes/Home.xcscheme @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Projects/Presentation/Home/HomeTests/Sources/HomeReducerTests.swift b/Projects/Presentation/Home/HomeTests/Sources/HomeReducerTests.swift new file mode 100644 index 0000000..562e681 --- /dev/null +++ b/Projects/Presentation/Home/HomeTests/Sources/HomeReducerTests.swift @@ -0,0 +1,201 @@ +// +// HomeReducerTests.swift +// HomeTests +// +// Created by Wonji Suh on 10/30/25. +// + +import IdentifiedCollections +import Testing +import ComposableArchitecture +import DomainInterface + +@testable import Home +@testable import Core + +import Foundation + + +extension Tag { + @Tag static var mock: Self + @Tag static var unit: Self + @Tag static var reducer: Self +} + + +private enum DummyError: Error { case fail } + +private struct StubMusicSearchUseCase: MusicSearchUseCaseProtocol { + let searchHandler: @Sendable (String) async throws -> [MusicItem] + let fetchDetailHandler: @Sendable (Int) async throws -> Entity.MusicItem + + func searchMusic(searchQuery: String) async throws -> [MusicItem] { + try await searchHandler(searchQuery) + } + + func fetchTrackDetail(id: Int) async throws -> Entity.MusicItem { + try await fetchDetailHandler(id) + } +} + +extension MusicItem { + static func stub( + id: UUID = UUID(), + trackId: Int = 1, + trackName: String = "Song", + album: String = "Album", + artist: String = "Artist", + artworkURL: URL = URL(string: "https://example.com/100.png")!, + releaseDate: String? = "2024-01-02T03:04:05Z", + genre: String = "Pop" + ) -> Self { + .init( + trackId: trackId, + trackName: trackName, + album: album, + artist: artist, + artworkURL: artworkURL, + releaseDate: releaseDate ?? "", + genre: genre + ) + } +} + +extension Entity.MusicItem { + static func stub( + trackId: Int = 1, + trackName: String = "detail", + album: String = "Album", + artist: String = "Artist", + artworkURL: URL = URL(string: "https://example.com/100.png")!, + releaseDate: String = "2024-01-02T03:04:05Z", + genre: String = "Pop" + ) -> Self { + .init( + trackId: trackId, + trackName: trackName, + album: album, + artist: artist, + artworkURL: artworkURL, + releaseDate: releaseDate, + genre: genre + ) + } +} + +private enum Fixture { + static let popular: [MusicItem] = [ + .stub(trackId: 101, trackName: "P-Old", releaseDate: "2023-01-01T00:00:00Z"), + .stub(trackId: 102, trackName: "P-New", releaseDate: "2024-12-31T00:00:00Z"), + ] + static let spring: [MusicItem] = [ + .stub(trackId: 201, trackName: "S-1", releaseDate: "2025-03-01T09:00:00Z"), + .stub(trackId: 202, trackName: "S-2", releaseDate: "2025-04-01T09:00:00Z"), + ] + static let summer: [MusicItem] = [ + .stub(trackId: 301, trackName: "SU-1", releaseDate: "2025-07-01T09:00:00Z"), + ] + static let autumn: [MusicItem] = [ + .stub(trackId: 401, trackName: "A-1", releaseDate: "2025-10-01T09:00:00Z"), + ] + static let winter: [MusicItem] = [ + .stub(trackId: 501, trackName: "W-1", releaseDate: "2025-12-01T09:00:00Z"), + ] + + static func all(by query: String) -> [MusicItem] { + switch query.lowercased() { + case MusicSeason.popular.term.lowercased(): return popular + case MusicSeason.spring.term.lowercased(): return spring + case MusicSeason.summer.term.lowercased(): return summer + case MusicSeason.autumn.term.lowercased(): return autumn + case MusicSeason.winter.term.lowercased(): return winter + default: return [] + } + } +} + +@MainActor +@Suite("HomeReducerTests", .tags(.unit, .reducer)) +struct HomeReducerTests { + + @Test("onAppear 시 모든 시즌 로드 성공") + func onAppear_fetchAll_success() async throws { + let store = TestStore(initialState: HomeReducer.State()) { + HomeReducer() + } withDependencies: { + $0[MusicSearchUseCase.self] = StubMusicSearchUseCase( + searchHandler: { query in Fixture.all(by: query) }, + fetchDetailHandler: { _ in .stub() } + ) + $0.mainQueue = .immediate + } + + store.exhaustivity = .off(showSkippedAssertions: false) + + await store.send(.view(.onAppear)) + await store.skipReceivedActions() + + #expect(store.state.popularMusicModel.count == Fixture.popular.count) + #expect(store.state.springMusicModel.count == Fixture.spring.count) + #expect(store.state.summerMusicModel.count == Fixture.summer.count) + #expect(store.state.autumnMusicModel.count == Fixture.autumn.count) + #expect(store.state.winterMusicModel.count == Fixture.winter.count) + + let isSortedDesc: (IdentifiedArrayOf) -> Bool = { arr in + let dates = arr.compactMap { $0.releaseDateValue } + return dates == dates.sorted(by: >) + } + #expect(isSortedDesc(store.state.popularMusicModel)) + #expect(isSortedDesc(store.state.springMusicModel)) + #expect(isSortedDesc(store.state.summerMusicModel)) + #expect(isSortedDesc(store.state.autumnMusicModel)) + #expect(isSortedDesc(store.state.winterMusicModel)) + #expect(store.state.errorMessage?.isEmpty ?? true) + } + + @Test("특정 시즌 실패 시 errorMessage 설정") + func fetchMusic_failure_setsErrorMessage() async throws { + let store = TestStore(initialState: HomeReducer.State()) { + HomeReducer() + } withDependencies: { + $0[MusicSearchUseCase.self] = StubMusicSearchUseCase( + searchHandler: { query in + if query.lowercased() == MusicSeason.spring.term.lowercased() { + throw DummyError.fail + } + return Fixture.all(by: query) + }, + fetchDetailHandler: { _ in .stub() } + ) + $0.mainQueue = .immediate + } + + store.exhaustivity = .off(showSkippedAssertions: false) + + await store.send(.async(.fetchMusic(.spring))) + await store.skipReceivedActions() + + #expect(store.state.errorMessage?.isEmpty == false) + } + + @Test("카드 탭 시 detailMusicItem 공유 상태 설정") + func navigation_cardTap_setsSharedDetail() async throws { + let store = TestStore(initialState: HomeReducer.State()) { + HomeReducer() + } withDependencies: { + $0[MusicSearchUseCase.self] = StubMusicSearchUseCase( + searchHandler: { _ in Fixture.popular }, + fetchDetailHandler: { _ in .stub() } + ) + $0.mainQueue = .immediate + } + + let picked = Fixture.popular[0] + + await store.send(.navigation(.musicCardTapped(item: picked))) { state in + state.$detailMusicItem.withLock { $0 = picked } + } + + #expect(store.state.detailMusicItem?.trackId == picked.trackId) + } +} diff --git a/Projects/Presentation/Home/Project.swift b/Projects/Presentation/Home/Project.swift new file mode 100644 index 0000000..c425b0e --- /dev/null +++ b/Projects/Presentation/Home/Project.swift @@ -0,0 +1,19 @@ +import Foundation +import ProjectDescription +import DependencyPlugin +import ProjectTemplatePlugin +import ProjectTemplatePlugin +import DependencyPackagePlugin + +let project = Project.makeAppModule( + name: "Home", + bundleId: .appBundleID(name: ".Home"), + product: .staticFramework, + settings: .settings(), + dependencies: [ + .Domain(implements: .UseCase), + .Shared(implements: .Shared), + .Presentation(implements: .Detail) + ], + sources: ["Sources/**"] +) diff --git a/Projects/Presentation/Home/Sources/Coordinator/Reducer/HomeCoordinator.swift b/Projects/Presentation/Home/Sources/Coordinator/Reducer/HomeCoordinator.swift new file mode 100644 index 0000000..038d660 --- /dev/null +++ b/Projects/Presentation/Home/Sources/Coordinator/Reducer/HomeCoordinator.swift @@ -0,0 +1,101 @@ +// +// HomeCoordinator.swift +// Home +// +// Created by Wonji Suh on 10/27/25. +// + +import Foundation +import ComposableArchitecture +import TCACoordinators + +import Core +import Detail + + +@Reducer +public struct HomeCoordinator { + public init() {} + + @ObservableState + public struct State: Equatable { + + var routes: [Route] + public init() { + self.routes = [.root(.home(.init()), embedInNavigationView: true)] + } + } + + public enum Action: ViewAction { + case router(IndexedRouterActionOf) + case view(View) + + } + + public enum View { + case backToRoot + } + + private enum CancelID: Hashable { + case screen + } + + public var body: some Reducer { + Reduce { state, action in + switch action { + + case .router(let routeAction): + return routerAction(state: &state, action: routeAction) + + case .view(let viewAction): + return handleViewAction(state: &state, action: viewAction) + + } + } + .forEachRoute(\.routes, action: \.router, cancellationId: CancelID.screen) + } +} + +extension HomeCoordinator { + private func routerAction( + state: inout State, + action: IndexedRouterActionOf + ) -> Effect { + switch action { + + case .routeAction(id: _, action: .home(.navigation(.musicCardTapped(let item)))): + state.routes.push(.detail(.init(musicItem: item))) + return .none + + case .routeAction(id: _, action: .detail(.navigation(.backToHome))): + return .send(.view(.backToRoot)) + + default: + return .none + + } + } + + private func handleViewAction( + state: inout State, + action: View + ) -> Effect { + switch action { + case .backToRoot: + state.routes.goBackTo(\.home) + return .none + + } + } +} + + +extension HomeCoordinator { + + @Reducer(state: .equatable) + public enum HomeScreen { + case home(HomeReducer) + case detail(DetailReducer) + } +} + diff --git a/Projects/Presentation/Home/Sources/Coordinator/View/HomeCoordinatorView.swift b/Projects/Presentation/Home/Sources/Coordinator/View/HomeCoordinatorView.swift new file mode 100644 index 0000000..c3a7d65 --- /dev/null +++ b/Projects/Presentation/Home/Sources/Coordinator/View/HomeCoordinatorView.swift @@ -0,0 +1,34 @@ +// +// HomeCoordinatorView.swift +// Home +// +// Created by Wonji Suh on 10/27/25. +// + +import SwiftUI +import ComposableArchitecture +import TCACoordinators + +import Detail + +public struct HomeCoordinatorView: View { + @Perception.Bindable var store: StoreOf + + public init(store: StoreOf) { + self.store = store + } + + public var body: some View { + TCARouter(store.scope(state: \.routes, action: \.router)) { screens in + switch screens.case { + case .home(let homeStore): + HomeView(store: homeStore) + .navigationBarBackButtonHidden() + + case .detail(let detailStore): + DetailView(store: detailStore) + .navigationBarBackButtonHidden() + } + } + } +} diff --git a/Projects/Presentation/Home/Sources/Main /Reducer/HomeReducer.swift b/Projects/Presentation/Home/Sources/Main /Reducer/HomeReducer.swift new file mode 100644 index 0000000..d866d2c --- /dev/null +++ b/Projects/Presentation/Home/Sources/Main /Reducer/HomeReducer.swift @@ -0,0 +1,185 @@ +// +// HomeView.swift +// Home +// +// Created by Wonji Suh on 10/23/25. +// + +import Foundation +import ComposableArchitecture +import Core +import IdentifiedCollections + +@Reducer +public struct HomeReducer { + public init() {} + + @ObservableState + public struct State: Equatable { + var popularMusicModel: IdentifiedArrayOf = [] + var springMusicModel: IdentifiedArrayOf = [] + var summerMusicModel: IdentifiedArrayOf = [] + var autumnMusicModel: IdentifiedArrayOf = [] + var winterMusicModel: IdentifiedArrayOf = [] + var errorMessage: String? + @Shared(.inMemory("MusicItem")) var detailMusicItem: MusicItem? = nil + var latestFailedSeason: MusicSeason? + + public init() {} + } + + public enum Action: ViewAction, BindableAction { + case binding(BindingAction) + case view(View) + case async(AsyncAction) + case inner(InnerAction) + case navigation(NavigationAction) + } + + @CasePathable + public enum View { case onAppear } + + @CasePathable + public enum AsyncAction: Equatable { + case fetchAll + case fetchMusic(MusicSeason) + } + + @CasePathable + public enum InnerAction { + case fetchMusicResponse(MusicSeason, Result<[MusicItem], Error>) + } + + @CasePathable + public enum NavigationAction: Equatable { + case musicCardTapped(item: MusicItem) + } + + @Dependency(MusicSearchUseCase.self) var musicSearchUseCase + @Dependency(\.continuousClock) var clock + @Dependency(\.mainQueue) var mainQueue + + private struct CancelID: Hashable { let category: MusicSeason } + private struct HomeCancel: Hashable {} + + public var body: some Reducer { + 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) + } + } + } +} + +extension HomeReducer.State { + public func items(for season: MusicSeason) -> IdentifiedArrayOf { + switch season { + case .popular: return popularMusicModel + case .spring: return springMusicModel + case .summer: return summerMusicModel + case .autumn: return autumnMusicModel + case .winter: return winterMusicModel + } + } +} + +extension HomeReducer { + private func handleViewAction( + state: inout State, + action: View + ) -> Effect { + switch action { + case .onAppear: + return .send(.async(.fetchAll)) + } + } + + private func handleAsyncAction( + state: inout State, + action: AsyncAction + ) -> Effect { + switch action { + case .fetchAll: + return .merge( + MusicSeason.allCases.map { .send(.async(.fetchMusic($0))) } + ) + .debounce(id: HomeCancel(), for: 0.1, scheduler: mainQueue) + + case .fetchMusic(let category): + return .run { send in + let musicSearchResult = await Result { + try await musicSearchUseCase.searchMusic(searchQuery: category.term) + } + switch musicSearchResult { + case .success(let musicSearchData): + await send(.inner(.fetchMusicResponse(category, .success(musicSearchData)))) + case .failure(let error): + await send(.inner(.fetchMusicResponse(category, .failure(error)))) + } + } + .cancellable(id: CancelID(category: category), cancelInFlight: true) + } + } + + private func handleNavigationAction( + state: inout State, + action: NavigationAction + ) -> Effect { + switch action { + case .musicCardTapped(let item): + state.$detailMusicItem.withLock { $0 = item } + return .none + } + } + + private func handleInnerAction( + state: inout State, + action: InnerAction + ) -> Effect { + switch action { + case let .fetchMusicResponse(category, result): + switch result { + case .success(let items): + if state.latestFailedSeason == category { + state.latestFailedSeason = nil + state.errorMessage = nil + } + let sortedItems = items.sorted { + let lhsDate = $0.releaseDateValue ?? .distantPast + let rhsDate = $1.releaseDateValue ?? .distantPast + return lhsDate > rhsDate + } + var seen = Set() + let uniqueItems = sortedItems.filter { seen.insert($0.id).inserted } + let identified = IdentifiedArray(uniqueElements: uniqueItems) + + switch category { + case .popular: state.popularMusicModel = identified + case .spring: state.springMusicModel = identified + case .summer: state.summerMusicModel = identified + case .autumn: state.autumnMusicModel = identified + case .winter: state.winterMusicModel = identified + } + + case .failure(let error): + state.latestFailedSeason = category + state.errorMessage = error.localizedDescription + } + return .none + } + } +} diff --git a/Projects/Presentation/Home/Sources/Main /Reducer/MusicSeason.swift b/Projects/Presentation/Home/Sources/Main /Reducer/MusicSeason.swift new file mode 100644 index 0000000..b426fb3 --- /dev/null +++ b/Projects/Presentation/Home/Sources/Main /Reducer/MusicSeason.swift @@ -0,0 +1,35 @@ +// +// MusicSeason.swift +// Home +// +// Created by Wonji Suh on 10/27/25. +// + +import Foundation + +public enum MusicSeason: CaseIterable, Equatable, Sendable, Identifiable { + case popular, spring, summer, autumn, winter + + public var id: Self { self } + + public var term: String { + switch self { + case .popular: return "유다빈밴드" + case .spring: return "봄" + case .summer: return "여름" + case .autumn: return "가을" + case .winter: return "겨울" + } + } + + public var title: String { + switch self { + case .spring: return "봄 스타일 음악" + case .summer: return "여름 스타일 음악" + case .autumn: return "가을 스타일 음악" + case .winter: return "겨울 스타일 음악" + case .popular: + return "" + } + } +} diff --git a/Projects/Presentation/Home/Sources/Main /View/Component/MusicCardCarousel.swift b/Projects/Presentation/Home/Sources/Main /View/Component/MusicCardCarousel.swift new file mode 100644 index 0000000..37eeb4e --- /dev/null +++ b/Projects/Presentation/Home/Sources/Main /View/Component/MusicCardCarousel.swift @@ -0,0 +1,60 @@ +// +// MusicCardCarousel.swift +// Home +// +// Created by Wonji Suh on 10/23/25. +// + +import Core +import SwiftUI + +public struct MusicCardCarousel: View { + @State private var currentIndex = 0 + + private let items: [MusicItem] + private let cardHeight: CGFloat + private let timer = Timer.publish(every: 3, on: .main, in: .common).autoconnect() + private var tapAction: (MusicItem) -> Void = { _ in } + + + public init( + items: [MusicItem], + cardHeight: CGFloat = 280, + tapAction: @escaping(MusicItem) -> Void + ) { + self.items = items + self.cardHeight = cardHeight + self.tapAction = tapAction + } + + public var body: some View { + Group { + if items.isEmpty { + Color.clear + .frame(height: cardHeight) + } else { + ScrollViewReader { proxy in + ScrollView(.horizontal, showsIndicators: false) { + HStack(spacing: 16) { + ForEach(items) { item in + MusicItemCard(item: item, size: cardHeight) { + tapAction(item) + } + .id(item.id) + } + } + .onReceive(timer) { _ in + guard !items.isEmpty else { return } + withAnimation(.easeInOut(duration: 1)) { + currentIndex = (currentIndex + 1) % items.count + proxy.scrollTo(items[currentIndex].id, anchor: .center) + } + } + } + } + .frame(height: cardHeight) + .padding(.bottom, 40) + } + } + } +} diff --git a/Projects/Presentation/Home/Sources/Main /View/Component/MusicItemCard.swift b/Projects/Presentation/Home/Sources/Main /View/Component/MusicItemCard.swift new file mode 100644 index 0000000..e24a3d8 --- /dev/null +++ b/Projects/Presentation/Home/Sources/Main /View/Component/MusicItemCard.swift @@ -0,0 +1,99 @@ +// +// MusicItemCard.swift +// Home +// +// Created by Wonji Suh on 10/23/25. +// + +import SwiftUI +import Core +import Shared + +public struct MusicItemCard: View { + private let item: MusicItem + private var size: CGFloat = 200 + private var action: () -> Void = { } + + public init( + item: MusicItem, + size: CGFloat = 200, + action: @escaping() -> Void + ) { + self.item = item + self.size = size + self.action = action + } + + public var body: some View { + VStack(alignment: .leading, spacing: 8) { + ZStack { + RoundedRectangle(cornerRadius: 12) + .fill(Color.clear) + .shadow(color: .black.opacity(0.45), radius: 12, x: 0, y: 8) + + RoundedRectangle(cornerRadius: 12) + .fill(Color.gray.opacity(0.2)) + .frame(width: size, height: size) + .overlay( + AsyncImage( + url: item.highResolutionArtworkURL, + transaction: Transaction(animation: .easeInOut(duration: 0.25)) + ) { phase in + switch phase { + case .empty: + SkeletonView(width: size, height: size, cornerRadius: 12) + + case .success(let image): + image + .resizable() + .interpolation(.high) + .aspectRatio(1, contentMode: .fill) + .frame(width: size, height: size) + .clipped() + + case .failure: + Image(systemName: "music.note") + .font(.system(size: size * 0.2)) + .foregroundColor(.gray) + + @unknown default: + Color.clear + } + } + .clipShape(RoundedRectangle(cornerRadius: 12)) + ) + .overlay( + RoundedRectangle(cornerRadius: 12) + .stroke(.white.opacity(0.25), lineWidth: 1) + ) + } + .frame(width: size, height: size) + .clipped() + + Spacer() + .frame(height: 4) + + VStack(alignment: .leading, spacing: 3) { + Text(item.album) + .font(.pretendardFont(family: .semiBold, size: size * 0.06)) + .foregroundColor(.yellow) + .lineLimit(2) + .multilineTextAlignment(.leading) + + Text(item.trackName) + .font(.pretendardFont(family: .semiBold, size: size * 0.08)) + .foregroundColor(.white) + .lineLimit(2) + .multilineTextAlignment(.leading) + + Text(item.artist) + .font(.pretendardFont(family: .semiBold, size: size * 0.07)) + .foregroundColor(.textSecondary) + .lineLimit(1) + } + .padding(.horizontal, 4) + .frame(width: size, height: size * 0.35, alignment: .topLeading) + } + .onTapGesture(perform: action) + } +} diff --git a/Projects/Presentation/Home/Sources/Main /View/Component/MusicListSectionView.swift b/Projects/Presentation/Home/Sources/Main /View/Component/MusicListSectionView.swift new file mode 100644 index 0000000..0654709 --- /dev/null +++ b/Projects/Presentation/Home/Sources/Main /View/Component/MusicListSectionView.swift @@ -0,0 +1,82 @@ +// +// MusicListSectionView.swift +// Home +// +// Created by Wonji Suh on 10/23/25. +// + +import SwiftUI +import Shared +import Core + +public struct MusicListSectionView: View { + @State private var currentIndex: Int = 0 + + public let items: [MusicItem] + public var title: String + private var tapAction: (MusicItem) -> Void = { _ in } + + public init( + title: String, + items: [MusicItem], + tapAction: @escaping(MusicItem) -> Void + ) { + self.title = title + self.items = items + self.tapAction = tapAction + } + + private var lastIndex: Int { max(items.count - 1, 0) } + + public var body: some View { + VStack(alignment: .leading, spacing: 16) { + SectionHeaderView( + headerText: title, + onLeftTapped: { scroll(direction: .left) }, + onRightTapped: { scroll(direction: .right) } + ) + + ScrollViewReader { proxy in + ScrollView(.horizontal, showsIndicators: false) { + HStack { + ForEach(items) { item in + MusicItemCard(item: item){ + tapAction(item) + } + .id(item.id) + } + } + } + .onChange(of: currentIndex) { newIndex in + guard !items.isEmpty, newIndex >= 0, newIndex < items.count else { return } + withAnimation(.easeInOut(duration: 0.3)) { + proxy.scrollTo(items[newIndex].id, anchor: .center) + } + } + .onAppear { + guard !items.isEmpty else { return } + proxy.scrollTo(items[0].id, anchor: .center) + } + } + } + } + + private enum ScrollDirection { case left, right } + + private func scroll(direction: ScrollDirection) { + guard !items.isEmpty else { return } + + switch direction { + case .left: + if currentIndex > 0 { + currentIndex -= 1 + } + case .right: + if currentIndex < lastIndex { + currentIndex += 1 + } else { + currentIndex = 0 + } + } + } +} diff --git a/Projects/Presentation/Home/Sources/Main /View/Component/SearchBarView.swift b/Projects/Presentation/Home/Sources/Main /View/Component/SearchBarView.swift new file mode 100644 index 0000000..0206343 --- /dev/null +++ b/Projects/Presentation/Home/Sources/Main /View/Component/SearchBarView.swift @@ -0,0 +1,32 @@ +import SwiftUI +import DesignSystem + +public struct SearchBarView: View { + public init() {} + + public var body: some View { + HStack(spacing: 10) { + Image(systemName: "magnifyingglass") + .foregroundColor(.textSecondaryLight) + .font(.pretendardFont(family: .semiBold, size: 20)) + + Text("Search songs, podcasts, artists") + .font(.pretendardFont(family: .regular, size: 15)) + .foregroundColor(.textSecondaryLight) + + Spacer(minLength: 0) + } + .padding(.horizontal, 14) + .frame(height: 48) + .background( + RoundedRectangle(cornerRadius: 16) + .fill(.neutralBlack) + .overlay( + RoundedRectangle(cornerRadius: 16) + .stroke(.white.opacity(0.05), lineWidth: 0.5) + ) + .shadow(color: .black.opacity(0.2), radius: 3, y: 2) + ) + .contentShape(Rectangle()) + } +} diff --git a/Projects/Presentation/Home/Sources/Main /View/Component/SectionHeaderView.swift b/Projects/Presentation/Home/Sources/Main /View/Component/SectionHeaderView.swift new file mode 100644 index 0000000..9d3cc08 --- /dev/null +++ b/Projects/Presentation/Home/Sources/Main /View/Component/SectionHeaderView.swift @@ -0,0 +1,29 @@ +// +// SectionHeaderView.swift +// Home +// +// Created by Wonji Suh on 10/23/25. +// + +import SwiftUI +import DesignSystem + +struct SectionHeaderView: View { + let headerText: String + let onLeftTapped: () -> Void + let onRightTapped: () -> Void + + var body: some View { + HStack(spacing: 10) { + Text(headerText) + .font(.pretendardFont(family: .regular, size: 16)) + .foregroundStyle(.white) + + Spacer() + + CircularArrowButton(direction: .left, action: onLeftTapped) + + CircularArrowButton(direction: .right, action: onRightTapped) + } + } +} diff --git a/Projects/Presentation/Home/Sources/Main /View/Component/Skeleton/HomeSkeletonViews.swift b/Projects/Presentation/Home/Sources/Main /View/Component/Skeleton/HomeSkeletonViews.swift new file mode 100644 index 0000000..ba95d09 --- /dev/null +++ b/Projects/Presentation/Home/Sources/Main /View/Component/Skeleton/HomeSkeletonViews.swift @@ -0,0 +1,64 @@ +import SwiftUI +import DesignSystem + +struct MusicItemCardSkeleton: View { + var size: CGFloat = 200 + + var body: some View { + VStack(alignment: .leading, spacing: 8) { + SkeletonView(width: size, height: size, cornerRadius: 12) + .shadow(color: .black.opacity(0.35), radius: 12, x: 0, y: 8) + + Spacer().frame(height: 10) + + VStack(alignment: .leading, spacing: 6) { + SkeletonView(width: size * 0.6, height: 12, cornerRadius: 6) + SkeletonView(width: size * 0.8, height: 14, cornerRadius: 6) + SkeletonView(width: size * 0.4, height: 12, cornerRadius: 6) + } + .padding(.horizontal, 4) + .frame(width: size, alignment: .leading) + } + .frame(width: size) + } +} + +struct MusicCarouselSkeletonView: View { + var height: CGFloat = 280 + + var body: some View { + ScrollView(.horizontal, showsIndicators: false) { + HStack(spacing: 16) { + ForEach(0..<3, id: \.self) { _ in + MusicItemCardSkeleton(size: height) + } + } + .padding(.horizontal, 4) + } + .frame(height: height) + } +} + +struct MusicSectionSkeletonView: View { + var body: some View { + VStack(alignment: .leading, spacing: 16) { + HStack(spacing: 10) { + SkeletonView(width: 120, height: 16, cornerRadius: 8) + + Spacer() + + SkeletonView(width: 36, height: 36, cornerRadius: 18) + SkeletonView(width: 36, height: 36, cornerRadius: 18) + } + + ScrollView(.horizontal, showsIndicators: false) { + HStack(spacing: 16) { + ForEach(0..<4, id: \.self) { _ in + MusicItemCardSkeleton(size: 160) + } + } + .padding(.horizontal, 4) + } + } + } +} diff --git a/Projects/Presentation/Home/Sources/Main /View/HomeView.swift b/Projects/Presentation/Home/Sources/Main /View/HomeView.swift new file mode 100644 index 0000000..9356623 --- /dev/null +++ b/Projects/Presentation/Home/Sources/Main /View/HomeView.swift @@ -0,0 +1,100 @@ +// +// HomeView.swift +// Home +// +// Created by Wonji Suh on 10/23/25. +// + +import SwiftUI +import ComposableArchitecture +import Shared + +@ViewAction(for: HomeReducer.self) +public struct HomeView: View { + @Perception.Bindable public var store: StoreOf + + public init( + store: StoreOf + ) { + self.store = store + } + + public var body: some View { + GeometryReader { proxy in + WithPerceptionTracking { + let horizontalPadding: CGFloat = 20 + let contentWidth = max(proxy.size.width - (horizontalPadding * 2), 0) + let cardHeight: CGFloat = 200 + let searchBarHeight: CGFloat = 68 + + ZStack(alignment: .top) { + Color.backgroundBlack + .ignoresSafeArea() + + ScrollView(.vertical) { + Spacer() + .frame(height: proxy.safeAreaInsets.top + searchBarHeight + 12) + + VStack(spacing: 0) { + Group { + if store.popularMusicModel.isEmpty { + MusicCarouselSkeletonView(height: cardHeight) + } else { + MusicCardCarousel( + items: Array(store.popularMusicModel), + cardHeight: cardHeight, + tapAction: { item in + store.send(.navigation(.musicCardTapped(item: item)), animation: .easeIn) + } + ) + } + } + + musicSeasonView() + + } + .padding(.horizontal, horizontalPadding) + .padding(.top, 12) + } + .scrollIndicators(.hidden) + + VStack(spacing: 8) { + SearchBarView() + .padding(.horizontal, horizontalPadding) + } + .padding(.top, proxy.safeAreaInsets.top + 4) + .ignoresSafeArea(edges: .top) + .zIndex(1) + } + } + } + .onAppear { + send(.onAppear) + } + } +} + +extension HomeView { + @ViewBuilder + private func musicSeasonView() -> some View { + LazyVStack { + ForEach(MusicSeason.allCases.filter { $0 != .popular }) { season in + let items = store.state.items(for: season) + + if items.isEmpty { + MusicSectionSkeletonView() + .padding(.top, 10) + } else { + MusicListSectionView( + title: season.title, + items: Array(items), + tapAction: { item in + store.send(.navigation(.musicCardTapped(item: item)), animation: .easeIn) + } + ) + .padding(.top, 10) + } + } + } + } +} diff --git a/Projects/Presentation/Presentation/Presentation.xcodeproj/project.pbxproj b/Projects/Presentation/Presentation/Presentation.xcodeproj/project.pbxproj index c89ffaa..9098f7d 100644 --- a/Projects/Presentation/Presentation/Presentation.xcodeproj/project.pbxproj +++ b/Projects/Presentation/Presentation/Presentation.xcodeproj/project.pbxproj @@ -10,9 +10,14 @@ 038F4E4797CB365217FCCBF9 /* Splash.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 5CFAF6F16A6A28289BDF6762 /* Splash.framework */; }; 03AACEC517F47A8E595AB9AF /* Repository.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 984C2842981AA76BB051604E /* Repository.framework */; }; 04286D02DE7BCAD03B5C9B3E /* PresentationExported.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C60918107A83F4DDE9D417D /* PresentationExported.swift */; }; + 0472B25152FBED636F44CD68 /* API.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D991D25F496F0B57F3200941 /* API.framework */; }; 097514984C09DCD1D4856511 /* IssueReporting.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A7591663F2D1B24C4BDA756A /* IssueReporting.framework */; }; 0ED96C609E3A38826EC31884 /* swift-sharing_Sharing.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 32DB353133F1D17C0F625336 /* swift-sharing_Sharing.bundle */; }; + 10BFCBDE3F3DA3E08F06E2E1 /* Home.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = D8A7AC209392899E86BB7CDB /* Home.framework */; }; + 134DFAA45EFD85BD6F35CF41 /* CombineMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DF67A808CE2A8F674F38CD60 /* CombineMoya.framework */; }; + 14DAD3FC298095990C5B1E92 /* Detail.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 6D7B094FAAB5DF45209E0919 /* Detail.framework */; }; 16AA1EF839323DCCE84D0BE2 /* SwiftNavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 43B4D42BC4DDD8A43DF9671C /* SwiftNavigation.framework */; }; + 1723EC00298B5AC8D3262760 /* Detail.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6D7B094FAAB5DF45209E0919 /* Detail.framework */; }; 1EAAF94C2DBE6792F3DC10F0 /* UIKitNavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 85E19ADD14C9C9B66429933E /* UIKitNavigation.framework */; }; 20E985B5526A58569BA3B6D4 /* OSLog.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A8F349F7AD894987292CE7D8 /* OSLog.framework */; }; 23CB47E23B8AFB21B28F8EC5 /* Foundations.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0AAD8C50CEC49E93CFD1F5D2 /* Foundations.framework */; }; @@ -22,10 +27,13 @@ 301576D6C257658B1D6B2F62 /* IssueReportingPackageSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CB19892F3BF3A5908473514F /* IssueReportingPackageSupport.framework */; }; 315228127069BB806DAE9F24 /* Shared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DED236801C3C6EBF9BB755A4 /* Shared.framework */; }; 353B901CF762F68E86363491 /* UseCase.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 868F9D0352A18E88B6F78CDE /* UseCase.framework */; }; + 3EFAE440F52C82155605ECEA /* Home.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = D8A7AC209392899E86BB7CDB /* Home.framework */; }; 461B7923C5885A691102455A /* IdentifiedCollections.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2F03CD23882DA025CC86817 /* IdentifiedCollections.framework */; }; 49F6D986954C901DC50E5A49 /* Sharing1.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 232AE6BF7A1AFCF0B9B823FD /* Sharing1.framework */; }; 4E660B1501EE176BAAEAEA27 /* PresentationExported.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C60918107A83F4DDE9D417D /* PresentationExported.swift */; }; 5248ACB941821BF3F91EA6D7 /* Dependencies.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8DB201D0E8BE1D1547639F88 /* Dependencies.framework */; }; + 54B649D24AB621D8E9044D06 /* Home.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = D8A7AC209392899E86BB7CDB /* Home.framework */; }; + 56FCE4DA807E3179DEFAF470 /* Core.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C3E14D09AE76BE920545555A /* Core.framework */; }; 59F11625F203DCDD137E6944 /* Model.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0595BAB78E7CD48075AF15B0 /* Model.framework */; }; 610E66B1C269EBC709E677F2 /* swift-sharing_Sharing.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 32DB353133F1D17C0F625336 /* swift-sharing_Sharing.bundle */; }; 6596CD1618805254CB7F40D2 /* PerceptionCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DBD6E248067073EB598B6D86 /* PerceptionCore.framework */; }; @@ -36,8 +44,10 @@ 79697766170F4CF0B454B74B /* CasePathsCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F45344C795A1109E3D0CB88C /* CasePathsCore.framework */; }; 7A09A9ECD1ED6652C5FDA693 /* ConcurrencyExtras.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2351D6B4A46469B4126F2C3B /* ConcurrencyExtras.framework */; }; 7BF75B96B35D343D12F1E55F /* Networking.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D663ED1986448AD4662C5624 /* Networking.framework */; }; + 7E9BB00CAB9C721F69DA3325 /* AsyncMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 230662DFC3FECB3DB5E54AF6 /* AsyncMoya.framework */; }; 7F5E01ECD91B6985AA9813C9 /* Alamofire_Alamofire.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = F654B06F3CC69CB66B70DDA8 /* Alamofire_Alamofire.bundle */; }; 86C661AFE402190C93A089B4 /* CustomDump.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0C8972F6F03E2BD077DCB37E /* CustomDump.framework */; }; + 8B2EADCD206359C0CEBAD3E7 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C3C8E6B260438991CE9B6F0E /* Alamofire.framework */; }; 8D23DE0BD5A9E91111F24602 /* Sharing.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 497184139D240D91EF50C77C /* Sharing.framework */; }; 8DA5B3FB09EA632D333C3F18 /* swift-composable-architecture_ComposableArchitecture.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 4C470EB5F1E10C6ED803FB18 /* swift-composable-architecture_ComposableArchitecture.bundle */; }; 8DC55375B44415DBF295280B /* WeaveDI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0E53C9395F99DBE02DF9D55F /* WeaveDI.framework */; }; @@ -47,18 +57,29 @@ 99ED14160CCB43FDE651C307 /* Test.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EBF73C9599C25FE868248ED /* Test.swift */; }; A61EBC1D0EBE7174C206C498 /* CombineSchedulers.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2F9691EC204490112CA94915 /* CombineSchedulers.framework */; }; A86F784BF54F7B2E520F174C /* UIKitNavigationShim.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 20933EA2BA8C344219E3B1FD /* UIKitNavigationShim.framework */; }; + ABF8F449B19C3462BD42A592 /* RxMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1D35546BA6932409F8FF5020 /* RxMoya.framework */; }; AC907DAE5D69D2EBF4A6262A /* SwiftUINavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F0A130F086322D137AF4BA1 /* SwiftUINavigation.framework */; }; B0696BD15C1FDD2C15F7CE55 /* Alamofire_Alamofire.bundle in Resources */ = {isa = PBXBuildFile; fileRef = F654B06F3CC69CB66B70DDA8 /* Alamofire_Alamofire.bundle */; }; B2A93C61D0DC6E629714EAF9 /* InternalCollectionsUtilities.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C2D55F688109111CA472A53 /* InternalCollectionsUtilities.framework */; }; + B584B787DA06633F36954C60 /* Detail.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 6D7B094FAAB5DF45209E0919 /* Detail.framework */; }; C28B1DD196DC96F555D940F6 /* swift-composable-architecture_ComposableArchitecture.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 4C470EB5F1E10C6ED803FB18 /* swift-composable-architecture_ComposableArchitecture.bundle */; }; C7A0C7EBE0FDA649B2B3CEA3 /* LogMacro.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 66443C80B20B08C1363E951B /* LogMacro.framework */; }; + CA1F1BC4BC46F2F7457CA223 /* EventLimiter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 40385C989FA3C085C6B32CBD /* EventLimiter.framework */; }; + CF2FD6EA7BDF7A79A3D44A02 /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CFA78759AF8280F2478F2F44 /* RxSwift.framework */; }; + D6937F780910962C215A4384 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5124FBC8C2F9742036F58585 /* CFNetwork.framework */; }; + DBDF5AD2B4E0C7B00CDBED24 /* Detail.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 6D7B094FAAB5DF45209E0919 /* Detail.framework */; }; DFC54C97C8A9A36AF01B9888 /* Splash.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5CFAF6F16A6A28289BDF6762 /* Splash.framework */; }; + DFF831C7D749689730C26A6C /* Home.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = D8A7AC209392899E86BB7CDB /* Home.framework */; }; + E7CBAEF8338E806EEA5F4FDC /* Detail.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 6D7B094FAAB5DF45209E0919 /* Detail.framework */; }; E85F7B48B6FB8E385AD94FBD /* DataInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E26D9853EBB0199194461471 /* DataInterface.framework */; }; E981CFD6DC1F1C9534C9E167 /* PresentationExported.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3C60918107A83F4DDE9D417D /* PresentationExported.swift */; }; EC2D67DCAC8BF67040034401 /* Splash.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 5CFAF6F16A6A28289BDF6762 /* Splash.framework */; }; + EC45B7902635A0D6998CDF65 /* Home.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D8A7AC209392899E86BB7CDB /* Home.framework */; }; 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 */; }; F650CC620116BE8B2F36DE6C /* DependenciesMacros.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FC62388B726211C6EB4E61FE /* DependenciesMacros.framework */; }; + FD0F32BCA77F5C66B4BB6F47 /* Moya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 49CD2C5E60DF7C88EAF411D6 /* Moya.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -87,6 +108,8 @@ buildActionMask = 8; dstSubfolderSpec = 16; files = ( + 14DAD3FC298095990C5B1E92 /* Detail.framework in Dependencies */, + 3EFAE440F52C82155605ECEA /* Home.framework in Dependencies */, EC2D67DCAC8BF67040034401 /* Splash.framework in Dependencies */, ); name = Dependencies; @@ -97,6 +120,8 @@ buildActionMask = 8; dstSubfolderSpec = 16; files = ( + B584B787DA06633F36954C60 /* Detail.framework in Dependencies */, + 54B649D24AB621D8E9044D06 /* Home.framework in Dependencies */, 2E51D64D30DF720ED92D75D5 /* Splash.framework in Dependencies */, ); name = Dependencies; @@ -107,6 +132,8 @@ buildActionMask = 8; dstSubfolderSpec = 16; files = ( + E7CBAEF8338E806EEA5F4FDC /* Detail.framework in Dependencies */, + DFF831C7D749689730C26A6C /* Home.framework in Dependencies */, 7685A7198512E2DA052B2C07 /* Splash.framework in Dependencies */, ); name = Dependencies; @@ -137,6 +164,8 @@ buildActionMask = 8; dstSubfolderSpec = 16; files = ( + DBDF5AD2B4E0C7B00CDBED24 /* Detail.framework in Dependencies */, + 10BFCBDE3F3DA3E08F06E2E1 /* Home.framework in Dependencies */, 038F4E4797CB365217FCCBF9 /* Splash.framework in Dependencies */, ); name = Dependencies; @@ -183,8 +212,10 @@ 0E53C9395F99DBE02DF9D55F /* WeaveDI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = WeaveDI.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 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; }; + 1D35546BA6932409F8FF5020 /* RxMoya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RxMoya.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 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; }; + 230662DFC3FECB3DB5E54AF6 /* AsyncMoya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AsyncMoya.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 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; }; 2C23562150869ECF7E891E5C /* Presentation_Stage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Presentation_Stage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -194,15 +225,19 @@ 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 = ""; }; 3EBF73C9599C25FE868248ED /* Test.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Test.swift; sourceTree = ""; }; + 40385C989FA3C085C6B32CBD /* EventLimiter.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = EventLimiter.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 43B4D42BC4DDD8A43DF9671C /* SwiftNavigation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftNavigation.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 497184139D240D91EF50C77C /* Sharing.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Sharing.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 49CD2C5E60DF7C88EAF411D6 /* Moya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Moya.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; }; + 5124FBC8C2F9742036F58585 /* CFNetwork.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CFNetwork.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/CFNetwork.framework; sourceTree = DEVELOPER_DIR; }; 5C2D55F688109111CA472A53 /* InternalCollectionsUtilities.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = InternalCollectionsUtilities.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 5CFAF6F16A6A28289BDF6762 /* Splash.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Splash.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 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; }; + 6D7B094FAAB5DF45209E0919 /* Detail.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Detail.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 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; }; @@ -216,13 +251,20 @@ 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 = ""; }; + C3C8E6B260438991CE9B6F0E /* Alamofire.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Alamofire.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C3E14D09AE76BE920545555A /* Core.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Core.framework; sourceTree = BUILT_PRODUCTS_DIR; }; CB19892F3BF3A5908473514F /* IssueReportingPackageSupport.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = IssueReportingPackageSupport.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + CF3D9435F3E4322BD6B9160E /* Service.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Service.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + CFA78759AF8280F2478F2F44 /* RxSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RxSwift.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; }; D656AFCB65DFA6950745AB83 /* Presentation_Prod.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Presentation_Prod.framework; sourceTree = BUILT_PRODUCTS_DIR; }; D663ED1986448AD4662C5624 /* Networking.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Networking.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D8A7AC209392899E86BB7CDB /* Home.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Home.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + D991D25F496F0B57F3200941 /* API.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = API.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; }; + DF67A808CE2A8F674F38CD60 /* CombineMoya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CombineMoya.framework; sourceTree = BUILT_PRODUCTS_DIR; }; E26D9853EBB0199194461471 /* DataInterface.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DataInterface.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 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 = ""; }; @@ -242,31 +284,44 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + D6937F780910962C215A4384 /* CFNetwork.framework in Frameworks */, 20E985B5526A58569BA3B6D4 /* OSLog.framework in Frameworks */, + 0472B25152FBED636F44CD68 /* API.framework in Frameworks */, + 8B2EADCD206359C0CEBAD3E7 /* Alamofire.framework in Frameworks */, + 7E9BB00CAB9C721F69DA3325 /* AsyncMoya.framework in Frameworks */, 79664A1CEE05B0A135CC3F7F /* CasePaths.framework in Frameworks */, 79697766170F4CF0B454B74B /* CasePathsCore.framework in Frameworks */, 996AEC4FE0BFF1A9467213F1 /* Clocks.framework in Frameworks */, + 134DFAA45EFD85BD6F35CF41 /* CombineMoya.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 */, E85F7B48B6FB8E385AD94FBD /* DataInterface.framework in Frameworks */, 5248ACB941821BF3F91EA6D7 /* Dependencies.framework in Frameworks */, F650CC620116BE8B2F36DE6C /* DependenciesMacros.framework in Frameworks */, + 1723EC00298B5AC8D3262760 /* Detail.framework in Frameworks */, 2617C246162B4B00F048B9C4 /* DomainInterface.framework in Frameworks */, + CA1F1BC4BC46F2F7457CA223 /* EventLimiter.framework in Frameworks */, 23CB47E23B8AFB21B28F8EC5 /* Foundations.framework in Frameworks */, + EC45B7902635A0D6998CDF65 /* Home.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 */, + FD0F32BCA77F5C66B4BB6F47 /* Moya.framework in Frameworks */, 7BF75B96B35D343D12F1E55F /* Networking.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 */, + ABF8F449B19C3462BD42A592 /* RxMoya.framework in Frameworks */, + CF2FD6EA7BDF7A79A3D44A02 /* RxSwift.framework in Frameworks */, + EF37DF3F1678952A881FE872 /* Service.framework in Frameworks */, 315228127069BB806DAE9F24 /* Shared.framework in Frameworks */, 8D23DE0BD5A9E91111F24602 /* Sharing.framework in Frameworks */, 49F6D986954C901DC50E5A49 /* Sharing1.framework in Frameworks */, @@ -372,24 +427,33 @@ isa = PBXGroup; children = ( F654B06F3CC69CB66B70DDA8 /* Alamofire_Alamofire.bundle */, + C3C8E6B260438991CE9B6F0E /* Alamofire.framework */, + D991D25F496F0B57F3200941 /* API.framework */, + 230662DFC3FECB3DB5E54AF6 /* AsyncMoya.framework */, 9C4E2C9101CD2ABA7FC93366 /* CasePaths.framework */, F45344C795A1109E3D0CB88C /* CasePathsCore.framework */, 74DA26FE7C09459795F68303 /* Clocks.framework */, + DF67A808CE2A8F674F38CD60 /* CombineMoya.framework */, 2F9691EC204490112CA94915 /* CombineSchedulers.framework */, 1BBE3CACD554CD19E4299A9F /* ComposableArchitecture.framework */, 2351D6B4A46469B4126F2C3B /* ConcurrencyExtras.framework */, + C3E14D09AE76BE920545555A /* Core.framework */, 0C8972F6F03E2BD077DCB37E /* CustomDump.framework */, E26D9853EBB0199194461471 /* DataInterface.framework */, 8DB201D0E8BE1D1547639F88 /* Dependencies.framework */, FC62388B726211C6EB4E61FE /* DependenciesMacros.framework */, + 6D7B094FAAB5DF45209E0919 /* Detail.framework */, D29941E89A40C785D8930DE4 /* DomainInterface.framework */, + 40385C989FA3C085C6B32CBD /* EventLimiter.framework */, 0AAD8C50CEC49E93CFD1F5D2 /* Foundations.framework */, + D8A7AC209392899E86BB7CDB /* Home.framework */, D2F03CD23882DA025CC86817 /* IdentifiedCollections.framework */, 5C2D55F688109111CA472A53 /* InternalCollectionsUtilities.framework */, A7591663F2D1B24C4BDA756A /* IssueReporting.framework */, CB19892F3BF3A5908473514F /* IssueReportingPackageSupport.framework */, 66443C80B20B08C1363E951B /* LogMacro.framework */, 0595BAB78E7CD48075AF15B0 /* Model.framework */, + 49CD2C5E60DF7C88EAF411D6 /* Moya.framework */, D663ED1986448AD4662C5624 /* Networking.framework */, A5B2D2882714ECB08228A5F1 /* OrderedCollections.framework */, B2C1426AC84D7DD283CE6A67 /* Perception.framework */, @@ -400,6 +464,9 @@ 342AE4EAEE40294F0A26F2B8 /* Presentation.framework */, B5F6E2479E03DF9A1548AFE4 /* PresentationTests.xctest */, 984C2842981AA76BB051604E /* Repository.framework */, + 1D35546BA6932409F8FF5020 /* RxMoya.framework */, + CFA78759AF8280F2478F2F44 /* RxSwift.framework */, + CF3D9435F3E4322BD6B9160E /* Service.framework */, DED236801C3C6EBF9BB755A4 /* Shared.framework */, 497184139D240D91EF50C77C /* Sharing.framework */, 232AE6BF7A1AFCF0B9B823FD /* Sharing1.framework */, @@ -430,6 +497,7 @@ FB76764758DC2A9FA9FEE70B /* Frameworks */ = { isa = PBXGroup; children = ( + 5124FBC8C2F9742036F58585 /* CFNetwork.framework */, A8F349F7AD894987292CE7D8 /* OSLog.framework */, ); name = Frameworks; diff --git a/Projects/Presentation/Presentation/Project.swift b/Projects/Presentation/Presentation/Project.swift index 7e0a3bb..6abc185 100644 --- a/Projects/Presentation/Presentation/Project.swift +++ b/Projects/Presentation/Presentation/Project.swift @@ -2,7 +2,6 @@ import Foundation import ProjectDescription import DependencyPlugin import ProjectTemplatePlugin -import ProjectTemplatePlugin import DependencyPackagePlugin let project = Project.makeAppModule( @@ -11,7 +10,9 @@ let project = Project.makeAppModule( product: .staticFramework, settings: .settings(), dependencies: [ - .Presentation(implements: .Splash) + .Presentation(implements: .Splash), + .Presentation(implements: .Home), + .Presentation(implements: .Detail) ], sources: ["Sources/**"] ) diff --git a/Projects/Presentation/Presentation/Sources/Exported/PresentationExported.swift b/Projects/Presentation/Presentation/Sources/Exported/PresentationExported.swift index 85cc0af..24a95a8 100644 --- a/Projects/Presentation/Presentation/Sources/Exported/PresentationExported.swift +++ b/Projects/Presentation/Presentation/Sources/Exported/PresentationExported.swift @@ -8,3 +8,5 @@ // MARK: - 여기에 한번에 호출 할꺼 추가 @_exported import Splash +@_exported import Home +@_exported import Detail diff --git a/Projects/Presentation/Splash/Project.swift b/Projects/Presentation/Splash/Project.swift index ce9eedc..876f73f 100644 --- a/Projects/Presentation/Splash/Project.swift +++ b/Projects/Presentation/Splash/Project.swift @@ -2,7 +2,6 @@ import Foundation import ProjectDescription import DependencyPlugin import ProjectTemplatePlugin -import ProjectTemplatePlugin import DependencyPackagePlugin let project = Project.makeAppModule( diff --git a/Projects/Presentation/Splash/Sources/Reducer/SplashFeature.swift b/Projects/Presentation/Splash/Sources/Reducer/SplashFeature.swift index dd65e24..193ae20 100644 --- a/Projects/Presentation/Splash/Sources/Reducer/SplashFeature.swift +++ b/Projects/Presentation/Splash/Sources/Reducer/SplashFeature.swift @@ -61,7 +61,7 @@ public struct SplashReducer { } - private enum CancelID { case animation } + private enum CancelID: Hashable { case animation } @Dependency(\.continuousClock) var clock diff --git a/Projects/Presentation/Splash/Splash.xcodeproj/project.pbxproj b/Projects/Presentation/Splash/Splash.xcodeproj/project.pbxproj index 2d1a463..5e44102 100644 --- a/Projects/Presentation/Splash/Splash.xcodeproj/project.pbxproj +++ b/Projects/Presentation/Splash/Splash.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 56; + objectVersion = 55; objects = { /* Begin PBXBuildFile section */ @@ -12,6 +12,7 @@ 0D286EF43B812B6951B33174 /* SplashView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0611D87AB87BEB5A604E72C7 /* SplashView.swift */; }; 2C7B2265975A711A46056FD2 /* SplashView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0611D87AB87BEB5A604E72C7 /* SplashView.swift */; }; 3BF686AB8F4B19F52446D825 /* Alamofire_Alamofire.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 12A31EA791D42722743FD5E8 /* Alamofire_Alamofire.bundle */; }; + 464C945D6039CB5295126BE7 /* SplashReducerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3F8723DF50E5D46DE0C609C9 /* SplashReducerTests.swift */; }; 50F959B77960093419124FEA /* swift-composable-architecture_ComposableArchitecture.bundle in Resources */ = {isa = PBXBuildFile; fileRef = AFB19BD29D387BA36E94EACB /* swift-composable-architecture_ComposableArchitecture.bundle */; }; 6EA22624D034A7AAF31179FA /* SplashFeature.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC8EC722082B6261AA86730E /* SplashFeature.swift */; }; 6F271AF0EDFF69C6D9A76942 /* Core.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 244227A651886748E5C7D2A7 /* Core.framework */; }; @@ -19,7 +20,6 @@ 7CBBEF1A885FB6E85BFDCBE9 /* Splash.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 172B7E40C8BCC9D55F773295 /* Splash.framework */; }; 7E465F9FDC9DF7CA7FBFFC17 /* Shared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6E82CFF7C14E857A3C5C635D /* Shared.framework */; }; 7ED621E20290F3601A3F66AE /* SplashView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0611D87AB87BEB5A604E72C7 /* SplashView.swift */; }; - 7F5F31932EAF0B8B00A5C8DD /* SplashReducerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F5F31922EAF0B8B00A5C8DD /* SplashReducerTests.swift */; }; 814BE80F8C6543F32C9C7688 /* SplashFeature.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC8EC722082B6261AA86730E /* SplashFeature.swift */; }; 860088D10E9778165FE2C43F /* SplashView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0611D87AB87BEB5A604E72C7 /* SplashView.swift */; }; 87FC82B888D562E63D61A642 /* Shared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6E82CFF7C14E857A3C5C635D /* Shared.framework */; }; @@ -118,12 +118,12 @@ 244227A651886748E5C7D2A7 /* Core.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Core.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 24CB29DA30347638B8C1F572 /* Splash-Prod-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Splash-Prod-Info.plist"; sourceTree = ""; }; 30F89F29107A1DBCEC0BCC75 /* Splash-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Splash-Info.plist"; sourceTree = ""; }; + 3F8723DF50E5D46DE0C609C9 /* SplashReducerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SplashReducerTests.swift; sourceTree = ""; }; 4C9F38DFE0B8765D62CB5BF8 /* swift-sharing_Sharing.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "swift-sharing_Sharing.bundle"; sourceTree = BUILT_PRODUCTS_DIR; }; 558618A873869EC4F7B88268 /* Splash_Debug.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Splash_Debug.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 581CA469A105E17C1994B8F3 /* Splash_Stage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Splash_Stage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 613B0441F48639EDFE7622DF /* SplashTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SplashTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 6E82CFF7C14E857A3C5C635D /* Shared.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Shared.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 7F5F31922EAF0B8B00A5C8DD /* SplashReducerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SplashReducerTests.swift; sourceTree = ""; }; AFB19BD29D387BA36E94EACB /* swift-composable-architecture_ComposableArchitecture.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "swift-composable-architecture_ComposableArchitecture.bundle"; sourceTree = BUILT_PRODUCTS_DIR; }; CB6E26C40601FF4E5B3A1698 /* SplashTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "SplashTests-Info.plist"; sourceTree = ""; }; CBA8837579F2F33CE4B390CE /* Splash-Debug-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Splash-Debug-Info.plist"; sourceTree = ""; }; @@ -272,7 +272,7 @@ FAFF862DE69E6A0C9E49D1ED /* Sources */ = { isa = PBXGroup; children = ( - 7F5F31922EAF0B8B00A5C8DD /* SplashReducerTests.swift */, + 3F8723DF50E5D46DE0C609C9 /* SplashReducerTests.swift */, ); path = Sources; sourceTree = ""; @@ -390,9 +390,6 @@ attributes = { BuildIndependentTargetsInParallel = YES; TargetAttributes = { - 9165A57EA536D2AB06CC46C8 = { - LastSwiftMigration = 2600; - }; }; }; buildConfigurationList = 551B4BA9B726000A879FF2A0 /* Build configuration list for PBXProject "Splash" */; @@ -463,7 +460,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 7F5F31932EAF0B8B00A5C8DD /* SplashReducerTests.swift in Sources */, + 464C945D6039CB5295126BE7 /* SplashReducerTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -543,7 +540,25 @@ "-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 -load-plugin-executable $BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros"; + 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", + "-load-plugin-executable", + "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros", + ); PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.Splash; PRODUCT_NAME = Splash_Debug; SDKROOT = iphoneos; @@ -551,7 +566,10 @@ SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = ( + "$(inherited)", + DEBUG, + ); SWIFT_COMPILATION_MODE = singlefile; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; @@ -589,7 +607,25 @@ "-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 -load-plugin-executable $BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros"; + 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", + "-load-plugin-executable", + "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros", + ); PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.Splash; PRODUCT_NAME = Splash_Prod; SDKROOT = iphoneos; @@ -609,7 +645,6 @@ 22049ABABDDAA7E69E99155E /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { - CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = "iPhone Developer"; HEADER_SEARCH_PATHS = ( "$(inherited)", @@ -628,14 +663,35 @@ "-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 -load-plugin-executable $BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros"; + 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", + "-load-plugin-executable", + "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros", + ); PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.Splash.SplashTests; PRODUCT_NAME = SplashTests; 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_ACTIVE_COMPILATION_CONDITIONS = ( + "$(inherited)", + DEBUG, + ); SWIFT_COMPILATION_MODE = singlefile; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; @@ -671,7 +727,25 @@ "-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 -load-plugin-executable $BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros"; + 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", + "-load-plugin-executable", + "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros", + ); PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.Splash; PRODUCT_NAME = Splash_Debug; SDKROOT = iphoneos; @@ -769,7 +843,25 @@ "-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 -load-plugin-executable $BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros"; + 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", + "-load-plugin-executable", + "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros", + ); PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.Splash; PRODUCT_NAME = Splash_Prod; SDKROOT = iphoneos; @@ -777,7 +869,10 @@ SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = ( + "$(inherited)", + DEBUG, + ); SWIFT_COMPILATION_MODE = singlefile; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; @@ -815,7 +910,25 @@ "-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 -load-plugin-executable $BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros"; + 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", + "-load-plugin-executable", + "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros", + ); PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.Splash; PRODUCT_NAME = Splash; SDKROOT = iphoneos; @@ -823,7 +936,10 @@ SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = ( + "$(inherited)", + DEBUG, + ); SWIFT_COMPILATION_MODE = singlefile; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; @@ -861,7 +977,25 @@ "-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 -load-plugin-executable $BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros"; + 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", + "-load-plugin-executable", + "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros", + ); PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.Splash; PRODUCT_NAME = Splash; SDKROOT = iphoneos; @@ -881,7 +1015,6 @@ D3B3BC38AB7D8ED1FFA5A6E2 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { - CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = "iPhone Developer"; HEADER_SEARCH_PATHS = ( "$(inherited)", @@ -900,7 +1033,25 @@ "-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 -load-plugin-executable $BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros"; + 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", + "-load-plugin-executable", + "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros", + ); PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.Splash.SplashTests; PRODUCT_NAME = SplashTests; SDKROOT = iphoneos; @@ -942,7 +1093,25 @@ "-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 -load-plugin-executable $BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros"; + 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", + "-load-plugin-executable", + "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros", + ); PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.Splash; PRODUCT_NAME = Splash_Stage; SDKROOT = iphoneos; @@ -987,7 +1156,25 @@ "-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 -load-plugin-executable $BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros"; + 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", + "-load-plugin-executable", + "$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/WeaveDIMacros#WeaveDIMacros", + ); PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.Splash; PRODUCT_NAME = Splash_Stage; SDKROOT = iphoneos; @@ -995,7 +1182,10 @@ SUPPORTS_MACCATALYST = NO; SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO; SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) DEBUG"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = ( + "$(inherited)", + DEBUG, + ); SWIFT_COMPILATION_MODE = singlefile; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; diff --git a/Projects/Presentation/Splash/SplashTests/Sources/SplashReducerTests.swift b/Projects/Presentation/Splash/SplashTests/Sources/SplashReducerTests.swift index b345109..c738908 100644 --- a/Projects/Presentation/Splash/SplashTests/Sources/SplashReducerTests.swift +++ b/Projects/Presentation/Splash/SplashTests/Sources/SplashReducerTests.swift @@ -20,7 +20,7 @@ extension Tag { @MainActor @Suite("Splash ReducerTest - 애니메이션 실행", .tags(.unit, .reducer)) struct SplashReducerTests { - @Test("애니메이션 시퀀스가 올바른 순서로 진행", ) + @Test("애니메이션 시퀀스가 올바른 순서로 진행" ) func animationSequence_runsInOrder() async throws { let clock = TestClock() diff --git a/Projects/Shared/DesignSystem/DesignSystem.xcodeproj/project.pbxproj b/Projects/Shared/DesignSystem/DesignSystem.xcodeproj/project.pbxproj index f509e64..6921a2a 100644 --- a/Projects/Shared/DesignSystem/DesignSystem.xcodeproj/project.pbxproj +++ b/Projects/Shared/DesignSystem/DesignSystem.xcodeproj/project.pbxproj @@ -9,6 +9,7 @@ /* Begin PBXBuildFile section */ 0A6B9B2FAF099CEF68CE2E8A /* Colors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03FD426096958CD6D41CCA85 /* Colors.swift */; }; 122A224CBF11F5202EDE4E1F /* ImageAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 365911FA35B2B70671D60856 /* ImageAssets.xcassets */; }; + 1BF049B1BD1E6B50D4676CAC /* CircularArrowButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2907986DA2159ABCE5F83E0E /* CircularArrowButton.swift */; }; 1E5D2C4A211714DEC0AA0E56 /* Extension+Color.swift in Sources */ = {isa = PBXBuildFile; fileRef = C57A51400075BF17E23E57FD /* Extension+Color.swift */; }; 1F4BF4D83DEBABCF9477B5A4 /* TuistFonts+DesignSystemProd.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2EF20F019AC6C1E3B3D87AF8 /* TuistFonts+DesignSystemProd.swift */; }; 2789723E88C4DA0FD079CC94 /* ImageAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 365911FA35B2B70671D60856 /* ImageAssets.xcassets */; }; @@ -19,19 +20,24 @@ 36B4268421AB9CDA58103A7B /* TuistAssets+DesignSystemDebug.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6D0FABFF623E11D22F6BDCC /* TuistAssets+DesignSystemDebug.swift */; }; 432FEB3278C92F742A195CE8 /* PretendardVariable.ttf in Resources */ = {isa = PBXBuildFile; fileRef = A20647CF23B131D16DCAB555 /* PretendardVariable.ttf */; }; 5535A46BBF316AB4582FB4C9 /* TuistBundle+DesignSystemStage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27AA3E385D373C2295F94842 /* TuistBundle+DesignSystemStage.swift */; }; + 673A91F4C9D6C837480BB622 /* SkeletonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 872E5CB97F75AD6E700519A3 /* SkeletonView.swift */; }; 683B9C0B090D319ECE7EB598 /* TuistFonts+DesignSystemDebug.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C0657B12FC785E86158F7DC /* TuistFonts+DesignSystemDebug.swift */; }; 6927446AB5EE7188AD1D0B39 /* ImageAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 365911FA35B2B70671D60856 /* ImageAssets.xcassets */; }; + 6950736E5EE4DAD2C1C383D0 /* SkeletonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 872E5CB97F75AD6E700519A3 /* SkeletonView.swift */; }; 6CBFFDE6727988688C659C02 /* ImageAsset.swift in Sources */ = {isa = PBXBuildFile; fileRef = D199440E65D8D401EDC98511 /* ImageAsset.swift */; }; 6DC10A7B6418AC05BD0B6AC6 /* Colors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03FD426096958CD6D41CCA85 /* Colors.swift */; }; 6F92DE23678F9A6267051535 /* Extension+Image.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAC35B0255CD661A69E96324 /* Extension+Image.swift */; }; 80991F64A6AF11F01236591F /* Colors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03FD426096958CD6D41CCA85 /* Colors.swift */; }; 8355C7F5099237875CB9E02D /* Extension+Image.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAC35B0255CD661A69E96324 /* Extension+Image.swift */; }; + 897B988C3728455AE5DC7EC3 /* CircularArrowButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2907986DA2159ABCE5F83E0E /* CircularArrowButton.swift */; }; 8AD14825495899390CB752DA /* PretendardFontFamily.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BD07D41BA669262ACEF6DBE /* PretendardFontFamily.swift */; }; + 90D63D803B7C7AF6A8AFB62A /* SkeletonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 872E5CB97F75AD6E700519A3 /* SkeletonView.swift */; }; 9FB151873E728668BCAA4B0A /* Extension+Color.swift in Sources */ = {isa = PBXBuildFile; fileRef = C57A51400075BF17E23E57FD /* Extension+Color.swift */; }; A2CEB3ECFE3AFCFBB6509C79 /* Test.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B67F5AD336FFDED9C31245F /* Test.swift */; }; A2D5F30304A4ADD3278E9047 /* PretendardFont.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6B935A678F91D07045536FA /* PretendardFont.swift */; }; A3C09BA185C2FA4CF365B5A1 /* ImageAssets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 365911FA35B2B70671D60856 /* ImageAssets.xcassets */; }; A4088C965C82018F1A81A682 /* Extension+Image.swift in Sources */ = {isa = PBXBuildFile; fileRef = CAC35B0255CD661A69E96324 /* Extension+Image.swift */; }; + A6339BDF9771B885471FEDC0 /* CircularArrowButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2907986DA2159ABCE5F83E0E /* CircularArrowButton.swift */; }; A75C82EA8D5C36365B2FA1D4 /* PretendardVariable.ttf in Resources */ = {isa = PBXBuildFile; fileRef = A20647CF23B131D16DCAB555 /* PretendardVariable.ttf */; }; ABAFDB030E94712397F1DE0A /* PretendardVariable.ttf in Resources */ = {isa = PBXBuildFile; fileRef = A20647CF23B131D16DCAB555 /* PretendardVariable.ttf */; }; ABB14811E13F7B1ECCF8B086 /* TuistAssets+DesignSystem.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5263BC75B281154AC0B5A7B /* TuistAssets+DesignSystem.swift */; }; @@ -39,7 +45,9 @@ AF941BD7FA43B591A68B5E49 /* PretendardVariable.ttf in Resources */ = {isa = PBXBuildFile; fileRef = A20647CF23B131D16DCAB555 /* PretendardVariable.ttf */; }; BD878E42E01BA5FA93F29FDE /* TuistBundle+DesignSystemDebug.swift in Sources */ = {isa = PBXBuildFile; fileRef = B38EF5B36E88588961AB7E44 /* TuistBundle+DesignSystemDebug.swift */; }; C438E92FA9121880084AE9AA /* DesignSystem.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 69B7BBEAD5472C7195924AC8 /* DesignSystem.framework */; }; + C469D69EF1010B7DA557496D /* SkeletonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 872E5CB97F75AD6E700519A3 /* SkeletonView.swift */; }; C83CACD5B5F275224A93814E /* ImageAsset.swift in Sources */ = {isa = PBXBuildFile; fileRef = D199440E65D8D401EDC98511 /* ImageAsset.swift */; }; + C9E612950523D25FB1F8CF11 /* CircularArrowButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2907986DA2159ABCE5F83E0E /* CircularArrowButton.swift */; }; CF23E568617BA29AD1F6DC31 /* PretendardFontFamily.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BD07D41BA669262ACEF6DBE /* PretendardFontFamily.swift */; }; D34856BC0CD7243696B3CD01 /* PretendardFontFamily.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6BD07D41BA669262ACEF6DBE /* PretendardFontFamily.swift */; }; D4BBBE665283FCFF21AF1E1E /* TuistFonts+DesignSystemStage.swift in Sources */ = {isa = PBXBuildFile; fileRef = A61786D0EB738723AB6A3E52 /* TuistFonts+DesignSystemStage.swift */; }; @@ -125,6 +133,7 @@ 1609C54BDDFC80336CF0C360 /* TuistAssets+DesignSystemStage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistAssets+DesignSystemStage.swift"; sourceTree = ""; }; 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; }; + 2907986DA2159ABCE5F83E0E /* CircularArrowButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CircularArrowButton.swift; sourceTree = ""; }; 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 = ""; }; 469F4B641DBB710B1B90BAD8 /* DesignSystemTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "DesignSystemTests-Info.plist"; sourceTree = ""; }; @@ -136,6 +145,7 @@ 7EF38864C69153237B1B4234 /* DesignSystem-Debug-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "DesignSystem-Debug-Info.plist"; sourceTree = ""; }; 8080BDCE77FA8041E648FFE0 /* DesignSystem-Prod-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "DesignSystem-Prod-Info.plist"; sourceTree = ""; }; 8374AFD4C591FD586AC84128 /* DesignSystem_Stage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DesignSystem_Stage.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 872E5CB97F75AD6E700519A3 /* SkeletonView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SkeletonView.swift; 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 = ""; }; @@ -195,9 +205,11 @@ 0E1288659896D0CFF98DA5AA /* Sources */ = { isa = PBXGroup; children = ( + 8BC136006E1D0234B84A94B8 /* Button */, EE53A850990E859B77A63149 /* Color */, A5D8A7BA4E4303B862C68866 /* Font */, 3D56AC3DF263FFE10ECDAF91 /* Image */, + 5D445DBA741A52C229EB1A9E /* Skeleton */, ); path = Sources; sourceTree = ""; @@ -238,6 +250,14 @@ path = Sources; sourceTree = ""; }; + 5D445DBA741A52C229EB1A9E /* Skeleton */ = { + isa = PBXGroup; + children = ( + 872E5CB97F75AD6E700519A3 /* SkeletonView.swift */, + ); + path = Skeleton; + sourceTree = ""; + }; 786F17AF2FB2F3D1598E0C72 /* FontAsset */ = { isa = PBXGroup; children = ( @@ -267,6 +287,14 @@ path = Derived; sourceTree = ""; }; + 8BC136006E1D0234B84A94B8 /* Button */ = { + isa = PBXGroup; + children = ( + 2907986DA2159ABCE5F83E0E /* CircularArrowButton.swift */, + ); + path = Button; + sourceTree = ""; + }; 9C29548CCBEAF62FB7951500 /* Resources */ = { isa = PBXGroup; children = ( @@ -523,12 +551,14 @@ 36B4268421AB9CDA58103A7B /* TuistAssets+DesignSystemDebug.swift in Sources */, BD878E42E01BA5FA93F29FDE /* TuistBundle+DesignSystemDebug.swift in Sources */, 683B9C0B090D319ECE7EB598 /* TuistFonts+DesignSystemDebug.swift in Sources */, + 897B988C3728455AE5DC7EC3 /* CircularArrowButton.swift in Sources */, 80991F64A6AF11F01236591F /* Colors.swift in Sources */, E2C51F74A3D71B4974AD712D /* Extension+Color.swift in Sources */, E6222805F95FECDB842557D2 /* PretendardFont.swift in Sources */, 30C3159302CFDD0DF5C7693F /* PretendardFontFamily.swift in Sources */, F244C880769775813B98E17D /* Extension+Image.swift in Sources */, AD8836C636E43E59E7DB750E /* ImageAsset.swift in Sources */, + 673A91F4C9D6C837480BB622 /* SkeletonView.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -539,12 +569,14 @@ 29B83E78203A842E17186969 /* TuistAssets+DesignSystemProd.swift in Sources */, FA17A19D49963C814439E27E /* TuistBundle+DesignSystemProd.swift in Sources */, 1F4BF4D83DEBABCF9477B5A4 /* TuistFonts+DesignSystemProd.swift in Sources */, + 1BF049B1BD1E6B50D4676CAC /* CircularArrowButton.swift in Sources */, 6DC10A7B6418AC05BD0B6AC6 /* Colors.swift in Sources */, F3862284686A6F20FC08AEA4 /* Extension+Color.swift in Sources */, F28419D1493CD6CC003EDF76 /* PretendardFont.swift in Sources */, D34856BC0CD7243696B3CD01 /* PretendardFontFamily.swift in Sources */, 6F92DE23678F9A6267051535 /* Extension+Image.swift in Sources */, 6CBFFDE6727988688C659C02 /* ImageAsset.swift in Sources */, + 90D63D803B7C7AF6A8AFB62A /* SkeletonView.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -555,12 +587,14 @@ ABB14811E13F7B1ECCF8B086 /* TuistAssets+DesignSystem.swift in Sources */, F6018B5F7748E322214C52D6 /* TuistBundle+DesignSystem.swift in Sources */, 2C2A6F1B0843699ACFE53D23 /* TuistFonts+DesignSystem.swift in Sources */, + C9E612950523D25FB1F8CF11 /* CircularArrowButton.swift in Sources */, 0A6B9B2FAF099CEF68CE2E8A /* Colors.swift in Sources */, 1E5D2C4A211714DEC0AA0E56 /* Extension+Color.swift in Sources */, A2D5F30304A4ADD3278E9047 /* PretendardFont.swift in Sources */, 8AD14825495899390CB752DA /* PretendardFontFamily.swift in Sources */, 8355C7F5099237875CB9E02D /* Extension+Image.swift in Sources */, C83CACD5B5F275224A93814E /* ImageAsset.swift in Sources */, + C469D69EF1010B7DA557496D /* SkeletonView.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -571,12 +605,14 @@ DF26B81FBD6FDC0158FA47C7 /* TuistAssets+DesignSystemStage.swift in Sources */, 5535A46BBF316AB4582FB4C9 /* TuistBundle+DesignSystemStage.swift in Sources */, D4BBBE665283FCFF21AF1E1E /* TuistFonts+DesignSystemStage.swift in Sources */, + A6339BDF9771B885471FEDC0 /* CircularArrowButton.swift in Sources */, 2C0E6DEC77A119676F966BF1 /* Colors.swift in Sources */, 9FB151873E728668BCAA4B0A /* Extension+Color.swift in Sources */, FF6F0997DBE31841F5D2484F /* PretendardFont.swift in Sources */, CF23E568617BA29AD1F6DC31 /* PretendardFontFamily.swift in Sources */, A4088C965C82018F1A81A682 /* Extension+Image.swift in Sources */, F16B378FA89AF6BB63790180 /* ImageAsset.swift in Sources */, + 6950736E5EE4DAD2C1C383D0 /* SkeletonView.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; diff --git a/Projects/Shared/DesignSystem/Project.swift b/Projects/Shared/DesignSystem/Project.swift index 1be66df..28e162a 100644 --- a/Projects/Shared/DesignSystem/Project.swift +++ b/Projects/Shared/DesignSystem/Project.swift @@ -2,7 +2,6 @@ import Foundation import ProjectDescription import DependencyPlugin import ProjectTemplatePlugin -import ProjectTemplatePlugin import DependencyPackagePlugin let project = Project.makeAppModule( diff --git a/Projects/Shared/DesignSystem/Sources/Button/CircularArrowButton.swift b/Projects/Shared/DesignSystem/Sources/Button/CircularArrowButton.swift new file mode 100644 index 0000000..e63125e --- /dev/null +++ b/Projects/Shared/DesignSystem/Sources/Button/CircularArrowButton.swift @@ -0,0 +1,45 @@ +import SwiftUI + +public struct CircularArrowButton: View { + public enum Direction { + case left + case right + + var systemName: String { + switch self { + case .left: return "chevron.left" + case .right: return "chevron.right" + } + } + } + + private let direction: Direction + private let action: () -> Void + private let size: CGFloat + + public init( + direction: Direction, + size: CGFloat = 36, + action: @escaping () -> Void + ) { + self.direction = direction + self.size = size + self.action = action + } + + public var body: some View { + Button(action: action) { + Image(systemName: direction.systemName) + .font(.system(size: size * 0.45, weight: .semibold)) + .foregroundColor(.white) + .frame(width: size, height: size) + .background(Color.white.opacity(0.15)) + .clipShape(Circle()) + .overlay( + Circle() + .stroke(Color.white.opacity(0.3), lineWidth: 1) + ) + } + .buttonStyle(.plain) + } +} diff --git a/Projects/Shared/DesignSystem/Sources/Color/Colors.swift b/Projects/Shared/DesignSystem/Sources/Color/Colors.swift index 263998b..242aac1 100644 --- a/Projects/Shared/DesignSystem/Sources/Color/Colors.swift +++ b/Projects/Shared/DesignSystem/Sources/Color/Colors.swift @@ -16,5 +16,10 @@ public extension ShapeStyle where Self == Color { static var accentWinter: Color { .init(hex: "9EC5FF") } static var accentSpotify: Color { .init(hex: "1DB954") } static var textSecondary: Color { .init(hex: "7A7A7A") } + static var textSecondaryLight: Color { .init(hex: "B3B3B3") } + static var neutralBlack: Color { .init(hex: "1E1E1E") } static var accentSpotifyLight: Color { .init(hex: "1ED760") } + static var lightGray100: Color { .init(hex: "D9D9D9") } + static var nightRider : Color { .init(hex: "2E2E2E") } + } diff --git a/Projects/Shared/DesignSystem/Sources/Skeleton/SkeletonView.swift b/Projects/Shared/DesignSystem/Sources/Skeleton/SkeletonView.swift new file mode 100644 index 0000000..7cc075c --- /dev/null +++ b/Projects/Shared/DesignSystem/Sources/Skeleton/SkeletonView.swift @@ -0,0 +1,62 @@ +import SwiftUI + +public struct SkeletonView: View { + private let width: CGFloat? + private let height: CGFloat + private let cornerRadius: CGFloat + private let baseColor: Color + private let highlightColor: Color + + @State private var animate = false + + public init( + width: CGFloat? = nil, + height: CGFloat, + cornerRadius: CGFloat = 12, + baseColor: Color = Color.white.opacity(0.08), + highlightColor: Color = Color.white.opacity(0.25) + ) { + self.width = width + self.height = height + self.cornerRadius = cornerRadius + self.baseColor = baseColor + self.highlightColor = highlightColor + } + + public var body: some View { + RoundedRectangle(cornerRadius: cornerRadius, style: .continuous) + .fill(baseColor) + .frame(width: width, height: height) + .overlay(shimmerOverlay) + .clipShape(RoundedRectangle(cornerRadius: cornerRadius, style: .continuous)) + .onAppear { + guard !animate else { return } + withAnimation(animation) { + animate = true + } + } + } + + private var animation: Animation { + .linear(duration: 1.2).repeatForever(autoreverses: false) + } + + private var shimmerOverlay: some View { + GeometryReader { geometry in + let overlayWidth = geometry.size.width == 0 ? (width ?? 120) : geometry.size.width + let shimmerWidth = overlayWidth * 1.4 + + LinearGradient( + gradient: Gradient(colors: [ + baseColor.opacity(0.0), + highlightColor, + baseColor.opacity(0.0) + ]), + startPoint: .leading, + endPoint: .trailing + ) + .frame(width: shimmerWidth, height: geometry.size.height) + .offset(x: animate ? overlayWidth : -shimmerWidth) + } + } +} diff --git a/Projects/Shared/Shared/Project.swift b/Projects/Shared/Shared/Project.swift index ae4d005..e21975d 100644 --- a/Projects/Shared/Shared/Project.swift +++ b/Projects/Shared/Shared/Project.swift @@ -2,7 +2,6 @@ import Foundation import ProjectDescription import DependencyPlugin import ProjectTemplatePlugin -import ProjectTemplatePlugin import DependencyPackagePlugin let project = Project.makeAppModule( diff --git a/Projects/Shared/ThirdParty/Project.swift b/Projects/Shared/ThirdParty/Project.swift index 09c896e..53f5a92 100644 --- a/Projects/Shared/ThirdParty/Project.swift +++ b/Projects/Shared/ThirdParty/Project.swift @@ -2,7 +2,6 @@ import Foundation import ProjectDescription import DependencyPlugin import ProjectTemplatePlugin -import ProjectTemplatePlugin import DependencyPackagePlugin let project = Project.makeAppModule( diff --git a/Projects/Shared/Utill/Project.swift b/Projects/Shared/Utill/Project.swift index 7b47df3..974d029 100644 --- a/Projects/Shared/Utill/Project.swift +++ b/Projects/Shared/Utill/Project.swift @@ -2,7 +2,6 @@ import Foundation import ProjectDescription import DependencyPlugin import ProjectTemplatePlugin -import ProjectTemplatePlugin import DependencyPackagePlugin let project = Project.makeAppModule( diff --git a/Tuist/Package.resolved b/Tuist/Package.resolved index 4fe4524..1867104 100644 --- a/Tuist/Package.resolved +++ b/Tuist/Package.resolved @@ -1,5 +1,5 @@ { - "originHash" : "8d966090a3cd3da47929826719cae739d56a0690d182e65b4b64f53a996d6153", + "originHash" : "8a37a82e9a0ba540336d552abd82f9eccfbc83a48bae7b3b508066bd5921fe53", "pins" : [ { "identity" : "alamofire", @@ -15,8 +15,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/Roy-wonji/AsyncMoya", "state" : { - "revision" : "df73007ff25fac5342314e6a50ccb9f2f5cd06bd", - "version" : "1.1.6" + "revision" : "e01d139daf9aad62f11dcddeabf14cc014b6cef9", + "version" : "1.1.7" } }, { diff --git a/Tuist/Package.swift b/Tuist/Package.swift index 3f07786..81a2426 100644 --- a/Tuist/Package.swift +++ b/Tuist/Package.swift @@ -18,6 +18,6 @@ let package = Package( .package(url: "http://github.com/pointfreeco/swift-composable-architecture", exact: "1.18.0"), .package(url: "https://github.com/johnpatrickmorgan/TCACoordinators.git", exact: "0.11.1"), .package(url: "https://github.com/Roy-wonji/WeaveDI.git", from: "3.3.1"), - .package(url: "https://github.com/Roy-wonji/AsyncMoya", from: "1.1.5") + .package(url: "https://github.com/Roy-wonji/AsyncMoya", from: "1.1.7") ] ) diff --git a/WorkSpace.swift b/WorkSpace.swift index 2ae0fb5..f73951a 100644 --- a/WorkSpace.swift +++ b/WorkSpace.swift @@ -15,12 +15,12 @@ let workspaceName: String = { return projectName } else { print("🔍 PROJECT_NAME 환경변수 없음, 기본값 사용") - return "MultiModuleTemplate" + return "MusicBandscape" } }() let workspace = Workspace( -name: workspaceName, +name: Project.Environment.appName, projects: [ "Projects/**" ])