diff --git a/Docs/Screenshots/.gitkeep b/Docs/Screenshots/.gitkeep
new file mode 100644
index 0000000..e69de29
diff --git a/Docs/Screenshots/home.png b/Docs/Screenshots/home.png
new file mode 100644
index 0000000..00d39ba
Binary files /dev/null and b/Docs/Screenshots/home.png differ
diff --git a/Docs/Screenshots/search.png b/Docs/Screenshots/search.png
new file mode 100644
index 0000000..de5a68b
Binary files /dev/null and b/Docs/Screenshots/search.png differ
diff --git a/MusicBandscape.xcworkspace/contents.xcworkspacedata b/MusicBandscape.xcworkspace/contents.xcworkspacedata
index 4c532d8..6b6f436 100644
--- a/MusicBandscape.xcworkspace/contents.xcworkspacedata
+++ b/MusicBandscape.xcworkspace/contents.xcworkspacedata
@@ -26,10 +26,10 @@
location = "group:Model/Model.xcodeproj">
+ location = "group:NetworkService/NetworkService.xcodeproj">
+ location = "group:Repository/Repository.xcodeproj">
+
+
+
+
diff --git a/MusicBandscape.xcworkspace/xcshareddata/xcschemes/MusicBandscape-Workspace.xcscheme b/MusicBandscape.xcworkspace/xcshareddata/xcschemes/MusicBandscape-Workspace.xcscheme
index 9370e75..cf8aff0 100644
--- a/MusicBandscape.xcworkspace/xcshareddata/xcschemes/MusicBandscape-Workspace.xcscheme
+++ b/MusicBandscape.xcworkspace/xcshareddata/xcschemes/MusicBandscape-Workspace.xcscheme
@@ -1126,6 +1126,76 @@
ReferencedContainer = "container:Projects/App/MusicBandscape.xcodeproj">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ BlueprintIdentifier = "C8340F58B0B1AD7EA1B1F833"
+ BuildableName = "Search.framework"
+ BlueprintName = "Search"
+ ReferencedContainer = "container:Projects/Presentation/Search/Search.xcodeproj">
+ BlueprintIdentifier = "ADF6FD6557B86CF1D0D142F4"
+ BuildableName = "Search_Debug.framework"
+ BlueprintName = "Search-Debug"
+ ReferencedContainer = "container:Projects/Presentation/Search/Search.xcodeproj">
+ BlueprintIdentifier = "BC9735B9FBE423AE69AD2C5D"
+ BuildableName = "Search_Prod.framework"
+ BlueprintName = "Search-Prod"
+ ReferencedContainer = "container:Projects/Presentation/Search/Search.xcodeproj">
+ BlueprintIdentifier = "07BC18765727814C00E81BA3"
+ BuildableName = "Search_Stage.framework"
+ BlueprintName = "Search-Stage"
+ ReferencedContainer = "container:Projects/Presentation/Search/Search.xcodeproj">
+ BlueprintIdentifier = "5025AE41A60E1D1B5B67EC7D"
+ BuildableName = "SearchTests.xctest"
+ BlueprintName = "SearchTests"
+ ReferencedContainer = "container:Projects/Presentation/Search/Search.xcodeproj">
+
+
+
+
@@ -2399,10 +2550,21 @@
parallelizable = "NO">
+ BlueprintIdentifier = "5E21E9921D0FCCDAEAA45BEC"
+ BuildableName = "RootTabTests.xctest"
+ BlueprintName = "RootTabTests"
+ ReferencedContainer = "container:Projects/Presentation/RootTab/RootTab.xcodeproj">
+
+
+
+
Effect {
switch action {
case .presentMain:
- state = .home(.init())
-// return .send(.scope(.mainTab(.scope(.movieCoordinator))))
+ state = .tabBar(.init())
return .none
}
}
diff --git a/Projects/App/Sources/View/AppView.swift b/Projects/App/Sources/View/AppView.swift
index fc31f42..f7846c5 100644
--- a/Projects/App/Sources/View/AppView.swift
+++ b/Projects/App/Sources/View/AppView.swift
@@ -22,9 +22,9 @@ struct AppView: View {
SplashView(store: store)
}
- case .home:
- if let store = store.scope(state: \.home, action: \.scope.home) {
- HomeCoordinatorView(store: store)
+ case .tabBar:
+ if let store = store.scope(state: \.tabBar, action: \.scope.tabBar) {
+ RootTabBarView(store: store)
}
}
}
diff --git a/Projects/App/Sources/View/ContentView.swift b/Projects/App/Sources/View/ContentView.swift
index 1aea452..db36063 100644
--- a/Projects/App/Sources/View/ContentView.swift
+++ b/Projects/App/Sources/View/ContentView.swift
@@ -3,6 +3,7 @@ import Presentation
import Splash
import ComposableArchitecture
+
public struct ContentView: View {
public init() {}
@@ -52,3 +53,16 @@ public struct ContentView: View {
})
)
}
+
+#Preview("검색 화면") {
+ SearchView(store: .init(initialState: SearchReducer.State(), reducer: {
+ SearchReducer()
+ }))
+}
+
+
+#Preview("rootTab") {
+ RootTabBarView(store: .init(initialState: RootTabReducer.State(), reducer: {
+ RootTabReducer()
+ }))
+}
diff --git a/Projects/Core/Core/Core.xcodeproj/project.pbxproj b/Projects/Core/Core/Core.xcodeproj/project.pbxproj
index 745d37e..30e6677 100644
--- a/Projects/Core/Core/Core.xcodeproj/project.pbxproj
+++ b/Projects/Core/Core/Core.xcodeproj/project.pbxproj
@@ -22,7 +22,6 @@
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 */; };
@@ -37,6 +36,7 @@
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 */; };
+ 265528BBB6662B3D7B15D04A /* NetworkService.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E9E22A834A68C79CBCDEC612 /* NetworkService.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 */; };
@@ -51,7 +51,6 @@
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 */; };
@@ -110,6 +109,7 @@
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 */; };
+ 8ACC78225C9BB558C9F8F32A /* NetworkService.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E9E22A834A68C79CBCDEC612 /* NetworkService.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 */; };
@@ -118,6 +118,7 @@
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 */; };
+ 91A25C1DC1F72D3555C333B5 /* NetworkService.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E9E22A834A68C79CBCDEC612 /* NetworkService.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 */; };
@@ -145,11 +146,11 @@
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 */; };
+ BD7829308C3714E53A78DBB0 /* NetworkService.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E9E22A834A68C79CBCDEC612 /* NetworkService.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 */; };
@@ -166,7 +167,6 @@
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 */; };
@@ -285,7 +285,6 @@
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; };
@@ -327,6 +326,7 @@
DE81E51C38BC7DF49AD255BD /* UseCase.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = UseCase.framework; sourceTree = BUILT_PRODUCTS_DIR; };
DEB3C68C2ED81026636D7F75 /* CoreExport.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoreExport.swift; sourceTree = ""; };
DF63D412AA4B009EF483F4BE /* IdentifiedCollections.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = IdentifiedCollections.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ E9E22A834A68C79CBCDEC612 /* NetworkService.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = NetworkService.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; };
@@ -365,6 +365,7 @@
BDF58A4C856FFC3CBE67FBBD /* LogMacro.framework in Frameworks */,
9FBB462562FD1381FCB33831 /* Model.framework in Frameworks */,
7EDF61ED9570CCFAE8A34322 /* Moya.framework in Frameworks */,
+ 91A25C1DC1F72D3555C333B5 /* NetworkService.framework in Frameworks */,
774D915DCAFDDA823F514A4D /* Networking.framework in Frameworks */,
581BA75F50FE6547B2732D10 /* OrderedCollections.framework in Frameworks */,
7F1A303924CE85716B92157B /* Perception.framework in Frameworks */,
@@ -372,7 +373,6 @@
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 */,
@@ -416,6 +416,7 @@
B49C0C48B313FA48AB6B5397 /* LogMacro.framework in Frameworks */,
796E9382BC2BE4D1E6889FD7 /* Model.framework in Frameworks */,
73588A177644EDE0C3A5C627 /* Moya.framework in Frameworks */,
+ 8ACC78225C9BB558C9F8F32A /* NetworkService.framework in Frameworks */,
52B4AD0DF0AC04F86A07FB86 /* Networking.framework in Frameworks */,
53CBEAA13C914C361402B056 /* OrderedCollections.framework in Frameworks */,
666209C52E74FB8C6EFA853B /* Perception.framework in Frameworks */,
@@ -423,7 +424,6 @@
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 */,
@@ -467,6 +467,7 @@
822DF876BB668FF81689C7E4 /* LogMacro.framework in Frameworks */,
7A83E67FEDA6E2128A0DBE82 /* Model.framework in Frameworks */,
78DE9E2870EA091066A98F3E /* Moya.framework in Frameworks */,
+ BD7829308C3714E53A78DBB0 /* NetworkService.framework in Frameworks */,
73E8511D2CFD4034A1050AA0 /* Networking.framework in Frameworks */,
30C165DDDBA521864ADED55A /* OrderedCollections.framework in Frameworks */,
D807263AF515DA4FF704F991 /* Perception.framework in Frameworks */,
@@ -474,7 +475,6 @@
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 */,
@@ -518,6 +518,7 @@
C6A9D0FB7BC398F04CF131AE /* LogMacro.framework in Frameworks */,
C9DC1FC3181E0BCA557D445D /* Model.framework in Frameworks */,
CD5695821CEC5EAC1D117155 /* Moya.framework in Frameworks */,
+ 265528BBB6662B3D7B15D04A /* NetworkService.framework in Frameworks */,
65D9C904FC575380ED1A65F6 /* Networking.framework in Frameworks */,
02C8AC5E9D8916ADD6307109 /* OrderedCollections.framework in Frameworks */,
C817E90B41D7B129CAAF83C4 /* Perception.framework in Frameworks */,
@@ -525,7 +526,6 @@
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 */,
@@ -600,13 +600,13 @@
3F9C516A0389461EC9B5D46E /* Model.framework */,
6260F75C087362295DDE52AE /* Moya.framework */,
69722B72879FA3302F07EF38 /* Networking.framework */,
+ E9E22A834A68C79CBCDEC612 /* NetworkService.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 */,
diff --git a/Projects/Core/Data/DataInterface/DataInterface.xcodeproj/project.pbxproj b/Projects/Core/Data/DataInterface/DataInterface.xcodeproj/project.pbxproj
index 78eaf9f..25f422a 100644
--- a/Projects/Core/Data/DataInterface/DataInterface.xcodeproj/project.pbxproj
+++ b/Projects/Core/Data/DataInterface/DataInterface.xcodeproj/project.pbxproj
@@ -3,7 +3,7 @@
archiveVersion = 1;
classes = {
};
- objectVersion = 56;
+ objectVersion = 55;
objects = {
/* Begin PBXBuildFile section */
@@ -14,15 +14,15 @@
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 */; };
+ 7A13D2C05B242D5A24B9AC3A /* MusicDetailRepositoryProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB2756AB5036C76D90D59527 /* MusicDetailRepositoryProtocol.swift */; };
856868F5062A841E55BC418C /* MusicSearchRepositoryProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = BC3BA308B30101EEC71E16F6 /* MusicSearchRepositoryProtocol.swift */; };
+ 9850DC711D2C7547E950347F /* MusicDetailRepositoryProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB2756AB5036C76D90D59527 /* MusicDetailRepositoryProtocol.swift */; };
9D3E93041916AC43128C9A07 /* Model.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B0883D5D36210798EE6A8723 /* Model.framework */; };
+ A23919CE068BFAFA82D6DB62 /* MusicDetailRepositoryProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB2756AB5036C76D90D59527 /* MusicDetailRepositoryProtocol.swift */; };
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 */; };
+ B94D45AA6CCA898197E9FBC3 /* MusicDetailRepositoryProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB2756AB5036C76D90D59527 /* MusicDetailRepositoryProtocol.swift */; };
D0EAC38B2859EDF62A580653 /* Model.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = B0883D5D36210798EE6A8723 /* Model.framework */; };
E18B0AE27410B4BED0F4B68A /* Model.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = B0883D5D36210798EE6A8723 /* Model.framework */; };
ED6C9407A2FC3B095C3CF271 /* Model.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = B0883D5D36210798EE6A8723 /* Model.framework */; };
@@ -137,7 +137,6 @@
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; };
@@ -145,6 +144,7 @@
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; };
+ EB2756AB5036C76D90D59527 /* MusicDetailRepositoryProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MusicDetailRepositoryProtocol.swift; sourceTree = ""; };
ECA1B12DCBFAC18CA7BB1CAF /* DataInterface-Debug-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "DataInterface-Debug-Info.plist"; sourceTree = ""; };
FA1E1C0477536B6ADA014FE8 /* Test.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Test.swift; sourceTree = ""; };
/* End PBXFileReference section */
@@ -248,8 +248,8 @@
F5C64B89EAABF4CDCBD2F2D1 /* Sources */ = {
isa = PBXGroup;
children = (
- 7F1AC7282EB44D6900C82441 /* MusicDetailRepositoryProtocol.swift */,
FA220A1DB1B1B5FC5B819578 /* Exported */,
+ EB2756AB5036C76D90D59527 /* MusicDetailRepositoryProtocol.swift */,
BC3BA308B30101EEC71E16F6 /* MusicSearchRepositoryProtocol.swift */,
);
path = Sources;
@@ -390,6 +390,8 @@
isa = PBXProject;
attributes = {
BuildIndependentTargetsInParallel = YES;
+ TargetAttributes = {
+ };
};
buildConfigurationList = A05AC6214B7656319D995795 /* Build configuration list for PBXProject "DataInterface" */;
compatibilityVersion = "Xcode 14.0";
@@ -465,7 +467,7 @@
buildActionMask = 2147483647;
files = (
62709A2606CACE187E695F0F /* DataInterfaceExported.swift in Sources */,
- 7F1AC72B2EB44D7700C82441 /* MusicDetailRepositoryProtocol.swift in Sources */,
+ A23919CE068BFAFA82D6DB62 /* MusicDetailRepositoryProtocol.swift in Sources */,
AFF879F6BB1B0481DFAA9662 /* MusicSearchRepositoryProtocol.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
@@ -475,7 +477,7 @@
buildActionMask = 2147483647;
files = (
740D0895932BCEC508B46E55 /* DataInterfaceExported.swift in Sources */,
- 7F1AC72C2EB44D7700C82441 /* MusicDetailRepositoryProtocol.swift in Sources */,
+ B94D45AA6CCA898197E9FBC3 /* MusicDetailRepositoryProtocol.swift in Sources */,
B31B321ED8D7BCF199CACE3D /* MusicSearchRepositoryProtocol.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
@@ -485,7 +487,7 @@
buildActionMask = 2147483647;
files = (
36DB32E2003952DFD64DDB8A /* DataInterfaceExported.swift in Sources */,
- 7F1AC72A2EB44D7700C82441 /* MusicDetailRepositoryProtocol.swift in Sources */,
+ 7A13D2C05B242D5A24B9AC3A /* MusicDetailRepositoryProtocol.swift in Sources */,
A878759C9D55CE7F06A93989 /* MusicSearchRepositoryProtocol.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
@@ -495,7 +497,7 @@
buildActionMask = 2147483647;
files = (
54C61C91CF82013A39EA6247 /* DataInterfaceExported.swift in Sources */,
- 7F1AC7292EB44D7700C82441 /* MusicDetailRepositoryProtocol.swift in Sources */,
+ 9850DC711D2C7547E950347F /* MusicDetailRepositoryProtocol.swift in Sources */,
856868F5062A841E55BC418C /* MusicSearchRepositoryProtocol.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
@@ -620,7 +622,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;
@@ -791,7 +796,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;
@@ -879,7 +887,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;
@@ -914,7 +925,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;
@@ -941,7 +955,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/Core/Data/DataInterface/Sources/MusicSearchRepositoryProtocol.swift b/Projects/Core/Data/DataInterface/Sources/MusicSearchRepositoryProtocol.swift
index 75a8e36..97c3e4b 100644
--- a/Projects/Core/Data/DataInterface/Sources/MusicSearchRepositoryProtocol.swift
+++ b/Projects/Core/Data/DataInterface/Sources/MusicSearchRepositoryProtocol.swift
@@ -10,4 +10,5 @@ import Model
public protocol MusicSearchRepositoryProtocol: Sendable {
func fetchMusic(search: String) async throws -> [ITunesTrack]
+ func searchMedia(query: String, media: String, entity: String) async throws -> [ITunesTrack]
}
diff --git a/Projects/Core/Data/Model/Sources/ITunesSearchResponseDTO.swift b/Projects/Core/Data/Model/Sources/ITunesSearchResponseDTO.swift
index d4f65d1..2f13ba6 100644
--- a/Projects/Core/Data/Model/Sources/ITunesSearchResponseDTO.swift
+++ b/Projects/Core/Data/Model/Sources/ITunesSearchResponseDTO.swift
@@ -19,18 +19,18 @@ public struct ITunesTrack: Decodable {
public let artistId: Int?
public let collectionId: Int?
- public let trackId: Int
+ public let trackId: Int?
- public let artistName: String
+ public let artistName: String?
public let collectionName: String?
- public let trackName: 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
+ public let releaseDate: String?
+ public let primaryGenreName: String?
+ public let collectionCensoredName: String?
enum CodingKeys: String, CodingKey {
case wrapperType, kind, artistId, collectionId, trackId
@@ -44,15 +44,15 @@ public struct ITunesTrack: Decodable {
kind: String?,
artistId: Int?,
collectionId: Int?,
- trackId: Int,
- artistName: String,
+ trackId: Int?,
+ artistName: String?,
collectionName: String?,
- trackName: String,
+ trackName: String?,
previewUrl: URL?,
artworkUrl100: URL?,
- releaseDate: String,
- primaryGenreName: String,
- collectionCensoredName: String
+ releaseDate: String?,
+ primaryGenreName: String?,
+ collectionCensoredName: String?
) {
self.wrapperType = wrapperType
self.kind = kind
diff --git a/Projects/Core/Data/Service/Derived/InfoPlists/Service-Debug-Info.plist b/Projects/Core/Data/NetworkService/Derived/InfoPlists/NetworkService-Debug-Info.plist
similarity index 100%
rename from Projects/Core/Data/Service/Derived/InfoPlists/Service-Debug-Info.plist
rename to Projects/Core/Data/NetworkService/Derived/InfoPlists/NetworkService-Debug-Info.plist
diff --git a/Projects/Core/Data/Service/Derived/InfoPlists/Service-Info.plist b/Projects/Core/Data/NetworkService/Derived/InfoPlists/NetworkService-Info.plist
similarity index 100%
rename from Projects/Core/Data/Service/Derived/InfoPlists/Service-Info.plist
rename to Projects/Core/Data/NetworkService/Derived/InfoPlists/NetworkService-Info.plist
diff --git a/Projects/Core/Data/Service/Derived/InfoPlists/Service-Prod-Info.plist b/Projects/Core/Data/NetworkService/Derived/InfoPlists/NetworkService-Prod-Info.plist
similarity index 100%
rename from Projects/Core/Data/Service/Derived/InfoPlists/Service-Prod-Info.plist
rename to Projects/Core/Data/NetworkService/Derived/InfoPlists/NetworkService-Prod-Info.plist
diff --git a/Projects/Core/Data/Service/Derived/InfoPlists/Service-Stage-Info.plist b/Projects/Core/Data/NetworkService/Derived/InfoPlists/NetworkService-Stage-Info.plist
similarity index 100%
rename from Projects/Core/Data/Service/Derived/InfoPlists/Service-Stage-Info.plist
rename to Projects/Core/Data/NetworkService/Derived/InfoPlists/NetworkService-Stage-Info.plist
diff --git a/Projects/Core/Data/Service/Derived/InfoPlists/ServiceTests-Info.plist b/Projects/Core/Data/NetworkService/Derived/InfoPlists/NetworkServiceTests-Info.plist
similarity index 100%
rename from Projects/Core/Data/Service/Derived/InfoPlists/ServiceTests-Info.plist
rename to Projects/Core/Data/NetworkService/Derived/InfoPlists/NetworkServiceTests-Info.plist
diff --git a/Projects/Core/Data/Service/Service.xcodeproj/project.pbxproj b/Projects/Core/Data/NetworkService/NetworkService.xcodeproj/project.pbxproj
similarity index 60%
rename from Projects/Core/Data/Service/Service.xcodeproj/project.pbxproj
rename to Projects/Core/Data/NetworkService/NetworkService.xcodeproj/project.pbxproj
index ea6935a..4b5694d 100644
--- a/Projects/Core/Data/Service/Service.xcodeproj/project.pbxproj
+++ b/Projects/Core/Data/NetworkService/NetworkService.xcodeproj/project.pbxproj
@@ -7,53 +7,53 @@
objects = {
/* Begin PBXBuildFile section */
- 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 */; };
- 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 */; };
- 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 */; };
+ 06C62B37DAE3E7A8A10359E3 /* OSLog.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 410749FD17EF1E79098807D7 /* OSLog.framework */; };
+ 256613891D079023B15E9346 /* Alamofire_Alamofire.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 44122DC4B6F556140219BA7D /* Alamofire_Alamofire.bundle */; };
+ 2CDD2913BE60D8B92847E594 /* Networking.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 51954E9BB4C2900ADA1E155A /* Networking.framework */; };
+ 2D36AB06BE7532A15EB82D13 /* RxMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 32C0B2F077329E24DE679921 /* RxMoya.framework */; };
+ 3D7C3B0EC594A80A20593113 /* API.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A4783C5C51D565D8F1735054 /* API.framework */; };
+ 4237FD4C49A37B11C3F9DCE9 /* MusicSearchService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61C86AF17AA8DE62F577F55C /* MusicSearchService.swift */; };
+ 425B500FCFEBF113AC95343E /* MusicSearchService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61C86AF17AA8DE62F577F55C /* MusicSearchService.swift */; };
+ 4D54851289313C057446DB13 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D8C1F00AFF12186DA88082E3 /* CFNetwork.framework */; };
+ 4F21274421EECBF60D69C16A /* API.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = A4783C5C51D565D8F1735054 /* API.framework */; };
+ 52C0466851B63CED0F5D8A0D /* AsyncMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D4241B2F482B5AE34627909C /* AsyncMoya.framework */; };
+ 5815C9DB81013175544F3E98 /* NetworkService.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ADC9183B12D666BFB5351F52 /* NetworkService.framework */; };
+ 6184D7DDA99137A267158319 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E89F30252915F82C20E583E6 /* Alamofire.framework */; };
+ 65776F13CF7279661AC15BFA /* Moya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 373E04407C0147EA95C44A93 /* Moya.framework */; };
+ 6623DF57C28E352A9E004962 /* EventLimiter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 73A19A2C6007C206E0EFE3BA /* EventLimiter.framework */; };
+ 6F296AF9924D9584B8BDEC87 /* CombineMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F9896C9A0EC78FD9461730D0 /* CombineMoya.framework */; };
+ 73919BE18D79ACF07833CDE2 /* Test.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF902E302B94F1E25D072003 /* Test.swift */; };
+ 753FBD956F0AE89745BEB2CF /* AsyncMoya.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = D4241B2F482B5AE34627909C /* AsyncMoya.framework */; };
+ 780CFC5E382460615CAE94C6 /* LogMacro.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 403A6EA2F4546033A843F13D /* LogMacro.framework */; };
+ 794D8AF0D650778BA96410B9 /* Networking.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 51954E9BB4C2900ADA1E155A /* Networking.framework */; };
+ 7E3AFD86BCB7BA9B6493D402 /* AsyncMoya.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = D4241B2F482B5AE34627909C /* AsyncMoya.framework */; };
+ 81AF7D6F933F8355218DF51B /* Alamofire_Alamofire.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 44122DC4B6F556140219BA7D /* Alamofire_Alamofire.bundle */; };
+ 8F5AF3D1F2D6B9705BF609F8 /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 27A6E7AF7B9AC6FAE949AB9D /* RxSwift.framework */; };
+ 94EE234257B5E19EB58A2F3A /* MusicSearchService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61C86AF17AA8DE62F577F55C /* MusicSearchService.swift */; };
+ 982E8B39F6863B16B5A3750E /* Foundations.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7AA9EE93E288D43FFC77A8FC /* Foundations.framework */; };
+ 9A248FE58BF6525B392885D9 /* Networking.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 51954E9BB4C2900ADA1E155A /* Networking.framework */; };
+ AFC1224ABA81A9E751060561 /* Networking.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 51954E9BB4C2900ADA1E155A /* Networking.framework */; };
+ C0BC011492D233F9A769B25B /* AsyncMoya.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = D4241B2F482B5AE34627909C /* AsyncMoya.framework */; };
+ CAA8A251419C0E1F319BF4C8 /* MusicSearchService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61C86AF17AA8DE62F577F55C /* MusicSearchService.swift */; };
+ CBBD7AC0A2BA44456E857504 /* AsyncMoya.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = D4241B2F482B5AE34627909C /* AsyncMoya.framework */; };
+ CBCF9AD685692F24D5ADDAA2 /* API.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = A4783C5C51D565D8F1735054 /* API.framework */; };
+ D86AE8A3DC6F21671A6740CA /* API.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = A4783C5C51D565D8F1735054 /* API.framework */; };
+ E8BF229477577F8939257E15 /* Networking.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 51954E9BB4C2900ADA1E155A /* Networking.framework */; };
+ FCD2CAD6CEA998CF3BA22C1E /* API.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = A4783C5C51D565D8F1735054 /* API.framework */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
- E6E9DF8F0EEA2CFC49A3B0CB /* PBXContainerItemProxy */ = {
+ 77BA0D117672E7DC1BE27729 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
- containerPortal = 2387D8980C051CCC13E9F55A /* Project object */;
+ containerPortal = EB3FED4C698FF2A4ADFEA857 /* Project object */;
proxyType = 1;
- remoteGlobalIDString = F2B641F230465A1CF012FDED;
- remoteInfo = Service;
+ remoteGlobalIDString = 453323209A3FFF1E78EECE5D;
+ remoteInfo = NetworkService;
};
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
- 11D2D814492A2F170FB62D24 /* Embed Frameworks */ = {
+ 0A3989CDACDDC1DD1E36CF4E /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
@@ -63,29 +63,41 @@
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
};
- 2E2613D1F1E4C4DEE2BD94FF /* Dependencies */ = {
+ 5C9B28B66514B447E40AF6A9 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 6BB2625AEFA4E1B157C46F4E /* Dependencies */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 8;
dstSubfolderSpec = 16;
files = (
- 60E5E8A6990835086C9E8E06 /* Alamofire_Alamofire.bundle in Dependencies */,
+ 4F21274421EECBF60D69C16A /* API.framework in Dependencies */,
+ 7E3AFD86BCB7BA9B6493D402 /* AsyncMoya.framework in Dependencies */,
+ 9A248FE58BF6525B392885D9 /* Networking.framework in Dependencies */,
);
name = Dependencies;
runOnlyForDeploymentPostprocessing = 1;
};
- 43672DB00161FEA57F65B408 /* Dependencies */ = {
+ 6D2C95A7B7A1D464C4D73C4D /* Dependencies */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 8;
dstSubfolderSpec = 16;
files = (
- 08F77FD6DE4E215DD4E32A64 /* API.framework in Dependencies */,
- 08F22BF5A4AA52A128BB1B82 /* AsyncMoya.framework in Dependencies */,
- A518AF62E3434BFA01D26682 /* Networking.framework in Dependencies */,
+ CBCF9AD685692F24D5ADDAA2 /* API.framework in Dependencies */,
+ CBBD7AC0A2BA44456E857504 /* AsyncMoya.framework in Dependencies */,
+ 794D8AF0D650778BA96410B9 /* Networking.framework in Dependencies */,
);
name = Dependencies;
runOnlyForDeploymentPostprocessing = 1;
};
- 5A4B9E41609D6261A34EF004 /* Embed Frameworks */ = {
+ 8343B143D49F41584DF9676A /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
@@ -95,7 +107,7 @@
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
};
- 5B36A939A245B5A27F657AD1 /* Embed Frameworks */ = {
+ A4317292F5A1DE2135F74C6F /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
@@ -105,41 +117,41 @@
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
};
- 7916ECC01EDD8BCB71C5F2CE /* Embed Frameworks */ = {
+ B012FE4FB60FF95D41D43EA6 /* Dependencies */ = {
isa = PBXCopyFilesBuildPhase;
- buildActionMask = 2147483647;
- dstPath = "";
- dstSubfolderSpec = 10;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
files = (
+ D86AE8A3DC6F21671A6740CA /* API.framework in Dependencies */,
+ 753FBD956F0AE89745BEB2CF /* AsyncMoya.framework in Dependencies */,
+ 2CDD2913BE60D8B92847E594 /* Networking.framework in Dependencies */,
);
- name = "Embed Frameworks";
- runOnlyForDeploymentPostprocessing = 0;
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
};
- 7B31AB9DAB84DF68E142679F /* Dependencies */ = {
+ B1F1DBD91319E398A8C906EE /* Dependencies */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 8;
dstSubfolderSpec = 16;
files = (
- EEE15AEC0E9C888A589038F7 /* API.framework in Dependencies */,
- A38E04F1E3342BDAFF6EAD94 /* AsyncMoya.framework in Dependencies */,
- 5E8F9B07396157DD468615A9 /* Networking.framework in Dependencies */,
+ FCD2CAD6CEA998CF3BA22C1E /* API.framework in Dependencies */,
+ C0BC011492D233F9A769B25B /* AsyncMoya.framework in Dependencies */,
+ E8BF229477577F8939257E15 /* Networking.framework in Dependencies */,
);
name = Dependencies;
runOnlyForDeploymentPostprocessing = 1;
};
- D2E9552C3D1506E8E42EB8ED /* Dependencies */ = {
+ BD42D38CED5A1430CEAF5321 /* Dependencies */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 8;
dstSubfolderSpec = 16;
files = (
- 19D2E5C34F726418AFE71E01 /* API.framework in Dependencies */,
- 8F0B075E16F581A93F0F2950 /* AsyncMoya.framework in Dependencies */,
- F57FEB886529599781347F1A /* Networking.framework in Dependencies */,
+ 81AF7D6F933F8355218DF51B /* Alamofire_Alamofire.bundle in Dependencies */,
);
name = Dependencies;
runOnlyForDeploymentPostprocessing = 1;
};
- E135B70B4BAD281F11E29459 /* Embed Frameworks */ = {
+ F4165CBA29B202002CFAD1D1 /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
@@ -149,318 +161,306 @@
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 = ""; };
- 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; };
+ 02BA9A9ACC792930C2249570 /* NetworkService_Stage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = NetworkService_Stage.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 27A6E7AF7B9AC6FAE949AB9D /* RxSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RxSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 32C0B2F077329E24DE679921 /* RxMoya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RxMoya.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 373E04407C0147EA95C44A93 /* Moya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Moya.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 403A6EA2F4546033A843F13D /* LogMacro.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = LogMacro.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 410749FD17EF1E79098807D7 /* 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; };
+ 44122DC4B6F556140219BA7D /* Alamofire_Alamofire.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Alamofire_Alamofire.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
+ 497909CEF58B222EE966AD45 /* NetworkService-Debug-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "NetworkService-Debug-Info.plist"; sourceTree = ""; };
+ 51954E9BB4C2900ADA1E155A /* Networking.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Networking.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 61C86AF17AA8DE62F577F55C /* MusicSearchService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MusicSearchService.swift; sourceTree = ""; };
+ 64DF117A648F822D059C86FC /* NetworkServiceTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "NetworkServiceTests-Info.plist"; sourceTree = ""; };
+ 73A19A2C6007C206E0EFE3BA /* EventLimiter.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = EventLimiter.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 7AA9EE93E288D43FFC77A8FC /* Foundations.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Foundations.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 8F5526A4FFA664BE907263C9 /* NetworkServiceTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = NetworkServiceTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+ A4783C5C51D565D8F1735054 /* API.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = API.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ AB54C057D5062D9B7A0C22FB /* NetworkService_Debug.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = NetworkService_Debug.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ ADC9183B12D666BFB5351F52 /* NetworkService.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = NetworkService.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ B1310DBB206F80EC21166002 /* NetworkService-Prod-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "NetworkService-Prod-Info.plist"; sourceTree = ""; };
+ C463F8FAE8AE26DF76BDB73C /* NetworkService-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "NetworkService-Info.plist"; sourceTree = ""; };
+ D4241B2F482B5AE34627909C /* AsyncMoya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AsyncMoya.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ D641E594C539D5B19596E9A1 /* NetworkService_Prod.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = NetworkService_Prod.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ D8C1F00AFF12186DA88082E3 /* 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; };
+ E89F30252915F82C20E583E6 /* Alamofire.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Alamofire.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ F146C68FE886FBBF938BE28A /* NetworkService-Stage-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "NetworkService-Stage-Info.plist"; sourceTree = ""; };
+ F9896C9A0EC78FD9461730D0 /* CombineMoya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CombineMoya.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ FF902E302B94F1E25D072003 /* Test.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Test.swift; sourceTree = ""; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
- 34B55B2B9613E5178446EFC1 /* Frameworks */ = {
+ 15D2458E3FC3494C8CDA33E8 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
- 4E5B44339E15D9D7286508BD /* Frameworks */ = {
+ 25FE99C35CE0963B40554522 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
- B9E255F78ED125E38CFE6433 /* Frameworks */ = {
+ 8C85EE6DC8E2BCD3916C1911 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
- E46B5D6AB1628CA99D638546 /* Frameworks */ = {
+ BEFEF37BF6E8106043D3C0BD /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
- ED4007158FAD7C7CFF0D3491 /* Frameworks */ = {
+ FD0B822481C7DFC72D8E42F0 /* Frameworks */ = {
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 */,
+ 4D54851289313C057446DB13 /* CFNetwork.framework in Frameworks */,
+ 06C62B37DAE3E7A8A10359E3 /* OSLog.framework in Frameworks */,
+ 3D7C3B0EC594A80A20593113 /* API.framework in Frameworks */,
+ 6184D7DDA99137A267158319 /* Alamofire.framework in Frameworks */,
+ 52C0466851B63CED0F5D8A0D /* AsyncMoya.framework in Frameworks */,
+ 6F296AF9924D9584B8BDEC87 /* CombineMoya.framework in Frameworks */,
+ 6623DF57C28E352A9E004962 /* EventLimiter.framework in Frameworks */,
+ 982E8B39F6863B16B5A3750E /* Foundations.framework in Frameworks */,
+ 780CFC5E382460615CAE94C6 /* LogMacro.framework in Frameworks */,
+ 65776F13CF7279661AC15BFA /* Moya.framework in Frameworks */,
+ 5815C9DB81013175544F3E98 /* NetworkService.framework in Frameworks */,
+ AFC1224ABA81A9E751060561 /* Networking.framework in Frameworks */,
+ 2D36AB06BE7532A15EB82D13 /* RxMoya.framework in Frameworks */,
+ 8F5AF3D1F2D6B9705BF609F8 /* RxSwift.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
- 38169642E05B36E0AEF61F24 /* Derived */ = {
+ 148D6A39ABC2587E4D2F1988 /* Derived */ = {
isa = PBXGroup;
children = (
- 7683298B0B11468C8351D5CF /* InfoPlists */,
+ EC532597712A1FBA04CFD78C /* InfoPlists */,
);
path = Derived;
sourceTree = "";
};
- 57FF25C92193FDC6FC2E9956 /* Sources */ = {
+ 38525DA2689C825D960A837C /* Sources */ = {
isa = PBXGroup;
children = (
- 2CB4FEF4703DFB8A526662E0 /* MusicSearchService.swift */,
+ 61C86AF17AA8DE62F577F55C /* MusicSearchService.swift */,
);
path = Sources;
sourceTree = "";
};
- 6EF9FDD21B7717FD4262395A /* Products */ = {
+ 6D61C1E9CBF89851A6C6512A /* Frameworks */ = {
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 */,
- 7EDFE229DFD7957E8AC64F6F /* Service.framework */,
- 259ABF995B5D27470E829C10 /* ServiceTests.xctest */,
+ D8C1F00AFF12186DA88082E3 /* CFNetwork.framework */,
+ 410749FD17EF1E79098807D7 /* OSLog.framework */,
);
- name = Products;
+ name = Frameworks;
sourceTree = "";
};
- 7683298B0B11468C8351D5CF /* InfoPlists */ = {
+ 79BFAA4A8F501ACDA19F72A2 /* NetworkServiceTests */ = {
isa = PBXGroup;
children = (
- 74A1B62620FE2F19FABD7BF1 /* Service-Debug-Info.plist */,
- 79814A227CE0F11AA0C03131 /* Service-Info.plist */,
- 00FFF298924B1BF14FBF4331 /* Service-Prod-Info.plist */,
- D066B46F236811258B579745 /* Service-Stage-Info.plist */,
- 34D19142035B122118FB9153 /* ServiceTests-Info.plist */,
+ 95F0EA3983CC014ECEA8C7C3 /* Sources */,
);
- path = InfoPlists;
+ path = NetworkServiceTests;
sourceTree = "";
};
- 77697C0CADA34648DBF804D8 /* Sources */ = {
+ 917E375D5D1EBF640B969937 = {
isa = PBXGroup;
children = (
- BA233B5E4422F71B1E2790B8 /* Test.swift */,
+ F5A12338C6DFF9DA9F364B5E /* Project */,
+ 96053B0DA2B8564E92B2FA2B /* Products */,
+ 6D61C1E9CBF89851A6C6512A /* Frameworks */,
);
- path = Sources;
sourceTree = "";
};
- 7D2A1FAC224A4161D0DD025B /* Project */ = {
+ 95F0EA3983CC014ECEA8C7C3 /* Sources */ = {
isa = PBXGroup;
children = (
- 38169642E05B36E0AEF61F24 /* Derived */,
- 97CFFBEEA2425324063A8623 /* ServiceTests */,
- 57FF25C92193FDC6FC2E9956 /* Sources */,
+ FF902E302B94F1E25D072003 /* Test.swift */,
);
- name = Project;
+ path = Sources;
sourceTree = "";
};
- 951DAE26418A9AE539BF6194 /* Frameworks */ = {
+ 96053B0DA2B8564E92B2FA2B /* Products */ = {
isa = PBXGroup;
children = (
- EC1B5EDC0770CED17685915E /* CFNetwork.framework */,
- 8EBD9486798A0D863BB013E5 /* OSLog.framework */,
+ 44122DC4B6F556140219BA7D /* Alamofire_Alamofire.bundle */,
+ E89F30252915F82C20E583E6 /* Alamofire.framework */,
+ A4783C5C51D565D8F1735054 /* API.framework */,
+ D4241B2F482B5AE34627909C /* AsyncMoya.framework */,
+ F9896C9A0EC78FD9461730D0 /* CombineMoya.framework */,
+ 73A19A2C6007C206E0EFE3BA /* EventLimiter.framework */,
+ 7AA9EE93E288D43FFC77A8FC /* Foundations.framework */,
+ 403A6EA2F4546033A843F13D /* LogMacro.framework */,
+ 373E04407C0147EA95C44A93 /* Moya.framework */,
+ 51954E9BB4C2900ADA1E155A /* Networking.framework */,
+ AB54C057D5062D9B7A0C22FB /* NetworkService_Debug.framework */,
+ D641E594C539D5B19596E9A1 /* NetworkService_Prod.framework */,
+ 02BA9A9ACC792930C2249570 /* NetworkService_Stage.framework */,
+ ADC9183B12D666BFB5351F52 /* NetworkService.framework */,
+ 8F5526A4FFA664BE907263C9 /* NetworkServiceTests.xctest */,
+ 32C0B2F077329E24DE679921 /* RxMoya.framework */,
+ 27A6E7AF7B9AC6FAE949AB9D /* RxSwift.framework */,
);
- name = Frameworks;
+ name = Products;
sourceTree = "";
};
- 97CFFBEEA2425324063A8623 /* ServiceTests */ = {
+ EC532597712A1FBA04CFD78C /* InfoPlists */ = {
isa = PBXGroup;
children = (
- 77697C0CADA34648DBF804D8 /* Sources */,
+ 497909CEF58B222EE966AD45 /* NetworkService-Debug-Info.plist */,
+ C463F8FAE8AE26DF76BDB73C /* NetworkService-Info.plist */,
+ B1310DBB206F80EC21166002 /* NetworkService-Prod-Info.plist */,
+ F146C68FE886FBBF938BE28A /* NetworkService-Stage-Info.plist */,
+ 64DF117A648F822D059C86FC /* NetworkServiceTests-Info.plist */,
);
- path = ServiceTests;
+ path = InfoPlists;
sourceTree = "";
};
- D07C34F9592EC2D78588BE04 = {
+ F5A12338C6DFF9DA9F364B5E /* Project */ = {
isa = PBXGroup;
children = (
- 7D2A1FAC224A4161D0DD025B /* Project */,
- 6EF9FDD21B7717FD4262395A /* Products */,
- 951DAE26418A9AE539BF6194 /* Frameworks */,
+ 148D6A39ABC2587E4D2F1988 /* Derived */,
+ 79BFAA4A8F501ACDA19F72A2 /* NetworkServiceTests */,
+ 38525DA2689C825D960A837C /* Sources */,
);
+ name = Project;
sourceTree = "";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
- 4D77B3747602ABAB4CDEEAE5 /* Service-Debug */ = {
+ 40077CE6F54050EBCAC85F36 /* NetworkService-Prod */ = {
isa = PBXNativeTarget;
- buildConfigurationList = 4AE20AEBB3804FE2DFF45499 /* Build configuration list for PBXNativeTarget "Service-Debug" */;
+ buildConfigurationList = 0AF94BACB3EC7F03BFEB8FBC /* Build configuration list for PBXNativeTarget "NetworkService-Prod" */;
buildPhases = (
- 4AD85F700EA608274BF8E71E /* Sources */,
- A2AA66D5428A52814A8CF2E2 /* Resources */,
- 4E5B44339E15D9D7286508BD /* Frameworks */,
- 5A4B9E41609D6261A34EF004 /* Embed Frameworks */,
- 43672DB00161FEA57F65B408 /* Dependencies */,
+ 912BFDF26D7FF207A6CF7799 /* Sources */,
+ D2FDA50BE9E614C0AECB3C77 /* Resources */,
+ 15D2458E3FC3494C8CDA33E8 /* Frameworks */,
+ 0A3989CDACDDC1DD1E36CF4E /* Embed Frameworks */,
+ B012FE4FB60FF95D41D43EA6 /* Dependencies */,
);
buildRules = (
);
dependencies = (
);
- name = "Service-Debug";
+ name = "NetworkService-Prod";
packageProductDependencies = (
);
- productName = Service_Debug;
- productReference = 49AE8778D00783FC72E9C397 /* Service_Debug.framework */;
+ productName = NetworkService_Prod;
+ productReference = D641E594C539D5B19596E9A1 /* NetworkService_Prod.framework */;
productType = "com.apple.product-type.framework";
};
- 4F05B98A978D0CCF22F7E153 /* Service-Prod */ = {
+ 453323209A3FFF1E78EECE5D /* NetworkService */ = {
isa = PBXNativeTarget;
- buildConfigurationList = 7B5FE70ED73C9186D9C86451 /* Build configuration list for PBXNativeTarget "Service-Prod" */;
+ buildConfigurationList = 3EEC6483F5DC67DFF271B8A1 /* Build configuration list for PBXNativeTarget "NetworkService" */;
buildPhases = (
- 262CDC2DFB2F08CAA66E8074 /* Sources */,
- 220D40C297E32C07E0E4144B /* Resources */,
- B9E255F78ED125E38CFE6433 /* Frameworks */,
- 7916ECC01EDD8BCB71C5F2CE /* Embed Frameworks */,
- 7B31AB9DAB84DF68E142679F /* Dependencies */,
+ FEB15D530FBB3AEF18ECBFDF /* Sources */,
+ 50C5AA2EE349E6D8938ACB46 /* Resources */,
+ 25FE99C35CE0963B40554522 /* Frameworks */,
+ A4317292F5A1DE2135F74C6F /* Embed Frameworks */,
+ 6D2C95A7B7A1D464C4D73C4D /* Dependencies */,
);
buildRules = (
);
dependencies = (
);
- name = "Service-Prod";
+ name = NetworkService;
packageProductDependencies = (
);
- productName = Service_Prod;
- productReference = 656243C0336CD9A5FB069256 /* Service_Prod.framework */;
+ productName = NetworkService;
+ productReference = ADC9183B12D666BFB5351F52 /* NetworkService.framework */;
productType = "com.apple.product-type.framework";
};
- BC16F4EC08A28EAA48363D3F /* ServiceTests */ = {
+ 760D6B032E47E616DDA4CC10 /* NetworkService-Stage */ = {
isa = PBXNativeTarget;
- buildConfigurationList = 2061AE01CD20C06F343CE3DE /* Build configuration list for PBXNativeTarget "ServiceTests" */;
+ buildConfigurationList = E7FC5C52E07FB389F0968986 /* Build configuration list for PBXNativeTarget "NetworkService-Stage" */;
buildPhases = (
- FEFA0B3C65A0E88A4F11A9F4 /* Sources */,
- DBB59024C51A6B1A99F072A5 /* Resources */,
- ED4007158FAD7C7CFF0D3491 /* Frameworks */,
- E135B70B4BAD281F11E29459 /* Embed Frameworks */,
- 2E2613D1F1E4C4DEE2BD94FF /* Dependencies */,
+ 836F87857792B278D778A66A /* Sources */,
+ AB7E22D159880326BA00C20E /* Resources */,
+ 8C85EE6DC8E2BCD3916C1911 /* Frameworks */,
+ 5C9B28B66514B447E40AF6A9 /* Embed Frameworks */,
+ B1F1DBD91319E398A8C906EE /* Dependencies */,
);
buildRules = (
);
dependencies = (
- E9B114F085A8E58F492A2524 /* PBXTargetDependency */,
);
- name = ServiceTests;
+ name = "NetworkService-Stage";
packageProductDependencies = (
);
- productName = ServiceTests;
- productReference = 259ABF995B5D27470E829C10 /* ServiceTests.xctest */;
- productType = "com.apple.product-type.bundle.unit-test";
+ productName = NetworkService_Stage;
+ productReference = 02BA9A9ACC792930C2249570 /* NetworkService_Stage.framework */;
+ productType = "com.apple.product-type.framework";
};
- D6E0EDD309910261BA164618 /* Service-Stage */ = {
+ C395E80BFAC0521EAB3AADA4 /* NetworkService-Debug */ = {
isa = PBXNativeTarget;
- buildConfigurationList = 8A672D2435F864E61BC030CD /* Build configuration list for PBXNativeTarget "Service-Stage" */;
+ buildConfigurationList = A1CB7678E45587F5EC13BACD /* Build configuration list for PBXNativeTarget "NetworkService-Debug" */;
buildPhases = (
- 68FD6384534887A583C925B2 /* Sources */,
- 099BBED0A3D302533934CC25 /* Resources */,
- 34B55B2B9613E5178446EFC1 /* Frameworks */,
- 11D2D814492A2F170FB62D24 /* Embed Frameworks */,
- E9A743867ABF14264AA4F46D /* Dependencies */,
+ EB2D98F3BD1A344AF11CB338 /* Sources */,
+ 0BE0FBC4295A9AC7F72137EF /* Resources */,
+ BEFEF37BF6E8106043D3C0BD /* Frameworks */,
+ 8343B143D49F41584DF9676A /* Embed Frameworks */,
+ 6BB2625AEFA4E1B157C46F4E /* Dependencies */,
);
buildRules = (
);
dependencies = (
);
- name = "Service-Stage";
+ name = "NetworkService-Debug";
packageProductDependencies = (
);
- productName = Service_Stage;
- productReference = B432785FB9ED34C4A18C0C4C /* Service_Stage.framework */;
+ productName = NetworkService_Debug;
+ productReference = AB54C057D5062D9B7A0C22FB /* NetworkService_Debug.framework */;
productType = "com.apple.product-type.framework";
};
- F2B641F230465A1CF012FDED /* Service */ = {
+ E9352438CCA76AF037B25979 /* NetworkServiceTests */ = {
isa = PBXNativeTarget;
- buildConfigurationList = AAD510D6A096645A1B961388 /* Build configuration list for PBXNativeTarget "Service" */;
+ buildConfigurationList = 433131CA5F360E47E61E12C3 /* Build configuration list for PBXNativeTarget "NetworkServiceTests" */;
buildPhases = (
- 90DCD84B70AC87F1B09042E8 /* Sources */,
- 5DB916BB3D046F2698257E14 /* Resources */,
- E46B5D6AB1628CA99D638546 /* Frameworks */,
- 5B36A939A245B5A27F657AD1 /* Embed Frameworks */,
- D2E9552C3D1506E8E42EB8ED /* Dependencies */,
+ FD53998A6167CC4256715864 /* Sources */,
+ 8D8781B4CB71C1D45E518232 /* Resources */,
+ FD0B822481C7DFC72D8E42F0 /* Frameworks */,
+ F4165CBA29B202002CFAD1D1 /* Embed Frameworks */,
+ BD42D38CED5A1430CEAF5321 /* Dependencies */,
);
buildRules = (
);
dependencies = (
+ C0C0FEEF7495AEC5CFDF5830 /* PBXTargetDependency */,
);
- name = Service;
+ name = NetworkServiceTests;
packageProductDependencies = (
);
- productName = Service;
- productReference = 7EDFE229DFD7957E8AC64F6F /* Service.framework */;
- productType = "com.apple.product-type.framework";
+ productName = NetworkServiceTests;
+ productReference = 8F5526A4FFA664BE907263C9 /* NetworkServiceTests.xctest */;
+ productType = "com.apple.product-type.bundle.unit-test";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
- 2387D8980C051CCC13E9F55A /* Project object */ = {
+ EB3FED4C698FF2A4ADFEA857 /* Project object */ = {
isa = PBXProject;
attributes = {
BuildIndependentTargetsInParallel = YES;
TargetAttributes = {
};
};
- buildConfigurationList = A210B9CE0F80C75DCB439AE9 /* Build configuration list for PBXProject "Service" */;
+ buildConfigurationList = FFC6118989876A9280B17F0F /* Build configuration list for PBXProject "NetworkService" */;
compatibilityVersion = "Xcode 14.0";
developmentRegion = ko;
hasScannedForEncodings = 0;
@@ -468,113 +468,113 @@
en,
ko,
);
- mainGroup = D07C34F9592EC2D78588BE04;
- productRefGroup = 6EF9FDD21B7717FD4262395A /* Products */;
+ mainGroup = 917E375D5D1EBF640B969937;
+ productRefGroup = 96053B0DA2B8564E92B2FA2B /* Products */;
projectDirPath = "";
projectRoot = "";
targets = (
- F2B641F230465A1CF012FDED /* Service */,
- 4D77B3747602ABAB4CDEEAE5 /* Service-Debug */,
- 4F05B98A978D0CCF22F7E153 /* Service-Prod */,
- D6E0EDD309910261BA164618 /* Service-Stage */,
- BC16F4EC08A28EAA48363D3F /* ServiceTests */,
+ 453323209A3FFF1E78EECE5D /* NetworkService */,
+ C395E80BFAC0521EAB3AADA4 /* NetworkService-Debug */,
+ 40077CE6F54050EBCAC85F36 /* NetworkService-Prod */,
+ 760D6B032E47E616DDA4CC10 /* NetworkService-Stage */,
+ E9352438CCA76AF037B25979 /* NetworkServiceTests */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
- 099BBED0A3D302533934CC25 /* Resources */ = {
+ 0BE0FBC4295A9AC7F72137EF /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
- 220D40C297E32C07E0E4144B /* Resources */ = {
+ 50C5AA2EE349E6D8938ACB46 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
- 5DB916BB3D046F2698257E14 /* Resources */ = {
+ 8D8781B4CB71C1D45E518232 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
+ 256613891D079023B15E9346 /* Alamofire_Alamofire.bundle in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
- A2AA66D5428A52814A8CF2E2 /* Resources */ = {
+ AB7E22D159880326BA00C20E /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
);
runOnlyForDeploymentPostprocessing = 0;
};
- DBB59024C51A6B1A99F072A5 /* Resources */ = {
+ D2FDA50BE9E614C0AECB3C77 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 94692EDF2CEFD2E8ABCB552C /* Alamofire_Alamofire.bundle in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
- 262CDC2DFB2F08CAA66E8074 /* Sources */ = {
+ 836F87857792B278D778A66A /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 843C6AEBBD6B72FD0CD8CA69 /* MusicSearchService.swift in Sources */,
+ CAA8A251419C0E1F319BF4C8 /* MusicSearchService.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
- 4AD85F700EA608274BF8E71E /* Sources */ = {
+ 912BFDF26D7FF207A6CF7799 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- FBD23A1822182F559DFBDC36 /* MusicSearchService.swift in Sources */,
+ 425B500FCFEBF113AC95343E /* MusicSearchService.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
- 68FD6384534887A583C925B2 /* Sources */ = {
+ EB2D98F3BD1A344AF11CB338 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 3E3708439743A2C547ED2492 /* MusicSearchService.swift in Sources */,
+ 4237FD4C49A37B11C3F9DCE9 /* MusicSearchService.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
- 90DCD84B70AC87F1B09042E8 /* Sources */ = {
+ FD53998A6167CC4256715864 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 889DD39EC5C731443684AAF0 /* MusicSearchService.swift in Sources */,
+ 73919BE18D79ACF07833CDE2 /* Test.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
- FEFA0B3C65A0E88A4F11A9F4 /* Sources */ = {
+ FEB15D530FBB3AEF18ECBFDF /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 8279A0344BCCCB23F8D07ADA /* Test.swift in Sources */,
+ 94EE234257B5E19EB58A2F3A /* MusicSearchService.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
- E9B114F085A8E58F492A2524 /* PBXTargetDependency */ = {
+ C0C0FEEF7495AEC5CFDF5830 /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
- name = Service;
- target = F2B641F230465A1CF012FDED /* Service */;
- targetProxy = E6E9DF8F0EEA2CFC49A3B0CB /* PBXContainerItemProxy */;
+ name = NetworkService;
+ target = 453323209A3FFF1E78EECE5D /* NetworkService */;
+ targetProxy = 77BA0D117672E7DC1BE27729 /* PBXContainerItemProxy */;
};
/* End PBXTargetDependency section */
/* Begin XCBuildConfiguration section */
- 078F713D85496981E09AF488 /* Release */ = {
+ 195AB1F974EE3F8DC02EDB07 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_IDENTITY = "";
@@ -587,7 +587,7 @@
"$(inherited)",
"$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
);
- INFOPLIST_FILE = "Derived/InfoPlists/Service-Prod-Info.plist";
+ INFOPLIST_FILE = "Derived/InfoPlists/NetworkService-Debug-Info.plist";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
IPHONEOS_DEPLOYMENT_TARGET = 16.6;
LD_RUNPATH_SEARCH_PATHS = (
@@ -607,8 +607,8 @@
"-load-plugin-executable",
"$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
);
- PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.Service;
- PRODUCT_NAME = Service_Prod;
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.NetworkService;
+ PRODUCT_NAME = NetworkService_Debug;
SDKROOT = iphoneos;
SKIP_INSTALL = YES;
SUPPORTS_MACCATALYST = NO;
@@ -623,7 +623,7 @@
};
name = Release;
};
- 0CF2F251CC7ACBFD83CB03BA /* Release */ = {
+ 421DE9A2A02E61D79A03602A /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_IDENTITY = "";
@@ -636,7 +636,7 @@
"$(inherited)",
"$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
);
- INFOPLIST_FILE = "Derived/InfoPlists/Service-Info.plist";
+ INFOPLIST_FILE = "Derived/InfoPlists/NetworkService-Info.plist";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
IPHONEOS_DEPLOYMENT_TARGET = 16.6;
LD_RUNPATH_SEARCH_PATHS = (
@@ -656,8 +656,8 @@
"-load-plugin-executable",
"$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
);
- PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.Service;
- PRODUCT_NAME = Service;
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.NetworkService;
+ PRODUCT_NAME = NetworkService;
SDKROOT = iphoneos;
SKIP_INSTALL = YES;
SUPPORTS_MACCATALYST = NO;
@@ -672,7 +672,7 @@
};
name = Release;
};
- 19C867CD46A97143B756714A /* Debug */ = {
+ 45B806902835BDAAA647D2FF /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_IDENTITY = "";
@@ -685,7 +685,7 @@
"$(inherited)",
"$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
);
- INFOPLIST_FILE = "Derived/InfoPlists/Service-Stage-Info.plist";
+ INFOPLIST_FILE = "Derived/InfoPlists/NetworkService-Stage-Info.plist";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
IPHONEOS_DEPLOYMENT_TARGET = 16.6;
LD_RUNPATH_SEARCH_PATHS = (
@@ -705,41 +705,44 @@
"-load-plugin-executable",
"$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
);
- PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.Service;
- PRODUCT_NAME = Service_Stage;
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.NetworkService;
+ PRODUCT_NAME = NetworkService_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_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = 1;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
- name = Debug;
+ name = Release;
};
- 1DD718A4523A14F31838AD9A /* Release */ = {
+ 5E7B9EC29A8B3DFD9961DD7C /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
- CODE_SIGN_IDENTITY = "iPhone Developer";
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
HEADER_SEARCH_PATHS = (
"$(inherited)",
"$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
);
- INFOPLIST_FILE = "Derived/InfoPlists/ServiceTests-Info.plist";
+ INFOPLIST_FILE = "Derived/InfoPlists/NetworkService-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",
@@ -751,20 +754,27 @@
"-load-plugin-executable",
"$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
);
- PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.Service.ServiceTests;
- PRODUCT_NAME = ServiceTests;
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.NetworkService;
+ PRODUCT_NAME = NetworkService;
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_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 = Release;
+ name = Debug;
};
- 527A8504FEC0D977F10DFE1D /* Debug */ = {
+ 6857862F3B606B0A883BBB89 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
@@ -800,30 +810,24 @@
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEAD_CODE_STRIPPING = YES;
- DEBUG_INFORMATION_FORMAT = dwarf;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
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;
+ MTL_ENABLE_DEBUG_INFO = NO;
PRODUCT_NAME = "$(TARGET_NAME)";
+ VALIDATE_PRODUCT = YES;
};
- name = Debug;
+ name = Release;
};
- 827688E819193446D6A86496 /* Debug */ = {
+ 6E46BC34D1714207EF8C48EC /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_IDENTITY = "";
@@ -836,7 +840,7 @@
"$(inherited)",
"$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
);
- INFOPLIST_FILE = "Derived/InfoPlists/Service-Info.plist";
+ INFOPLIST_FILE = "Derived/InfoPlists/NetworkService-Stage-Info.plist";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
IPHONEOS_DEPLOYMENT_TARGET = 16.6;
LD_RUNPATH_SEARCH_PATHS = (
@@ -856,8 +860,8 @@
"-load-plugin-executable",
"$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
);
- PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.Service;
- PRODUCT_NAME = Service;
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.NetworkService;
+ PRODUCT_NAME = NetworkService_Stage;
SDKROOT = iphoneos;
SKIP_INSTALL = YES;
SUPPORTS_MACCATALYST = NO;
@@ -876,28 +880,21 @@
};
name = Debug;
};
- 9B46EB756EEFE59D86CA13FC /* Release */ = {
+ 905A7408FBB289B388986350 /* 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";
+ CODE_SIGN_IDENTITY = "iPhone Developer";
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";
+ INFOPLIST_FILE = "Derived/InfoPlists/NetworkServiceTests-Info.plist";
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",
@@ -909,10 +906,9 @@
"-load-plugin-executable",
"$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
);
- PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.Service;
- PRODUCT_NAME = Service_Stage;
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.NetworkService.NetworkServiceTests;
+ PRODUCT_NAME = NetworkServiceTests;
SDKROOT = iphoneos;
- SKIP_INSTALL = YES;
SUPPORTS_MACCATALYST = NO;
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
@@ -920,12 +916,10 @@
SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = 1;
- VERSIONING_SYSTEM = "apple-generic";
- VERSION_INFO_PREFIX = "";
};
name = Release;
};
- B329BCF86CB8AB9EF8BAD557 /* Debug */ = {
+ 9FA5892A7D2E8A3E7E733A86 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_IDENTITY = "";
@@ -938,7 +932,7 @@
"$(inherited)",
"$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
);
- INFOPLIST_FILE = "Derived/InfoPlists/Service-Prod-Info.plist";
+ INFOPLIST_FILE = "Derived/InfoPlists/NetworkService-Prod-Info.plist";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
IPHONEOS_DEPLOYMENT_TARGET = 16.6;
LD_RUNPATH_SEARCH_PATHS = (
@@ -958,27 +952,23 @@
"-load-plugin-executable",
"$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
);
- PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.Service;
- PRODUCT_NAME = Service_Prod;
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.NetworkService;
+ PRODUCT_NAME = NetworkService_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_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = 1;
VERSIONING_SYSTEM = "apple-generic";
VERSION_INFO_PREFIX = "";
};
- name = Debug;
+ name = Release;
};
- BAF2CCBF694046F2B33FBFE7 /* Debug */ = {
+ A0223834E1A0FD284D41D11D /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
CODE_SIGN_IDENTITY = "";
@@ -991,7 +981,7 @@
"$(inherited)",
"$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
);
- INFOPLIST_FILE = "Derived/InfoPlists/Service-Debug-Info.plist";
+ INFOPLIST_FILE = "Derived/InfoPlists/NetworkService-Debug-Info.plist";
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
IPHONEOS_DEPLOYMENT_TARGET = 16.6;
LD_RUNPATH_SEARCH_PATHS = (
@@ -1011,8 +1001,8 @@
"-load-plugin-executable",
"$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
);
- PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.Service;
- PRODUCT_NAME = Service_Debug;
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.NetworkService;
+ PRODUCT_NAME = NetworkService_Debug;
SDKROOT = iphoneos;
SKIP_INSTALL = YES;
SUPPORTS_MACCATALYST = NO;
@@ -1031,21 +1021,28 @@
};
name = Debug;
};
- CCD6AD99FB506BBD3797799B /* Debug */ = {
+ BB8491C679AF129B676D20FE /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
- CODE_SIGN_IDENTITY = "iPhone Developer";
+ CODE_SIGN_IDENTITY = "";
+ CURRENT_PROJECT_VERSION = 1;
+ DEFINES_MODULE = YES;
+ DYLIB_COMPATIBILITY_VERSION = 1;
+ DYLIB_CURRENT_VERSION = 1;
+ DYLIB_INSTALL_NAME_BASE = "@rpath";
HEADER_SEARCH_PATHS = (
"$(inherited)",
"$(SRCROOT)/../../../../Tuist/.build/checkouts/swift-syntax/Sources/_SwiftSyntaxCShims/include",
);
- INFOPLIST_FILE = "Derived/InfoPlists/ServiceTests-Info.plist";
+ INFOPLIST_FILE = "Derived/InfoPlists/NetworkService-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",
@@ -1057,9 +1054,10 @@
"-load-plugin-executable",
"$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
);
- PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.Service.ServiceTests;
- PRODUCT_NAME = ServiceTests;
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.NetworkService;
+ PRODUCT_NAME = NetworkService_Prod;
SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
SUPPORTS_MACCATALYST = NO;
SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
@@ -1071,10 +1069,12 @@
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
SWIFT_VERSION = 5.0;
TARGETED_DEVICE_FAMILY = 1;
+ VERSIONING_SYSTEM = "apple-generic";
+ VERSION_INFO_PREFIX = "";
};
name = Debug;
};
- D3499E0DC93D0169932DD5F0 /* Release */ = {
+ CEC7329D98018C021E2E5B1F /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
@@ -1110,45 +1110,44 @@
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
COPY_PHASE_STRIP = NO;
DEAD_CODE_STRIPPING = YES;
- DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
- ENABLE_NS_ASSERTIONS = NO;
+ 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 = NO;
+ MTL_ENABLE_DEBUG_INFO = YES;
+ ONLY_ACTIVE_ARCH = YES;
PRODUCT_NAME = "$(TARGET_NAME)";
- VALIDATE_PRODUCT = YES;
};
- name = Release;
+ name = Debug;
};
- FEDF02C8CAF40325944856B9 /* Release */ = {
+ F388090BBECCE4AAC04E1219 /* 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";
+ CODE_SIGN_IDENTITY = "iPhone Developer";
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";
+ INFOPLIST_FILE = "Derived/InfoPlists/NetworkServiceTests-Info.plist";
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",
@@ -1160,80 +1159,81 @@
"-load-plugin-executable",
"$BUILD_DIR/Debug$EFFECTIVE_PLATFORM_NAME/LogMacroMacro#LogMacroMacro",
);
- PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.Service;
- PRODUCT_NAME = Service_Debug;
+ PRODUCT_BUNDLE_IDENTIFIER = io.Roy.Bandscape.NetworkService.NetworkServiceTests;
+ PRODUCT_NAME = NetworkServiceTests;
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_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 = Release;
+ name = Debug;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
- 2061AE01CD20C06F343CE3DE /* Build configuration list for PBXNativeTarget "ServiceTests" */ = {
+ 0AF94BACB3EC7F03BFEB8FBC /* Build configuration list for PBXNativeTarget "NetworkService-Prod" */ = {
isa = XCConfigurationList;
buildConfigurations = (
- CCD6AD99FB506BBD3797799B /* Debug */,
- 1DD718A4523A14F31838AD9A /* Release */,
+ BB8491C679AF129B676D20FE /* Debug */,
+ 9FA5892A7D2E8A3E7E733A86 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
- 4AE20AEBB3804FE2DFF45499 /* Build configuration list for PBXNativeTarget "Service-Debug" */ = {
+ 3EEC6483F5DC67DFF271B8A1 /* Build configuration list for PBXNativeTarget "NetworkService" */ = {
isa = XCConfigurationList;
buildConfigurations = (
- BAF2CCBF694046F2B33FBFE7 /* Debug */,
- FEDF02C8CAF40325944856B9 /* Release */,
+ 5E7B9EC29A8B3DFD9961DD7C /* Debug */,
+ 421DE9A2A02E61D79A03602A /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
- 7B5FE70ED73C9186D9C86451 /* Build configuration list for PBXNativeTarget "Service-Prod" */ = {
+ 433131CA5F360E47E61E12C3 /* Build configuration list for PBXNativeTarget "NetworkServiceTests" */ = {
isa = XCConfigurationList;
buildConfigurations = (
- B329BCF86CB8AB9EF8BAD557 /* Debug */,
- 078F713D85496981E09AF488 /* Release */,
+ F388090BBECCE4AAC04E1219 /* Debug */,
+ 905A7408FBB289B388986350 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
- 8A672D2435F864E61BC030CD /* Build configuration list for PBXNativeTarget "Service-Stage" */ = {
+ A1CB7678E45587F5EC13BACD /* Build configuration list for PBXNativeTarget "NetworkService-Debug" */ = {
isa = XCConfigurationList;
buildConfigurations = (
- 19C867CD46A97143B756714A /* Debug */,
- 9B46EB756EEFE59D86CA13FC /* Release */,
+ A0223834E1A0FD284D41D11D /* Debug */,
+ 195AB1F974EE3F8DC02EDB07 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
- A210B9CE0F80C75DCB439AE9 /* Build configuration list for PBXProject "Service" */ = {
+ E7FC5C52E07FB389F0968986 /* Build configuration list for PBXNativeTarget "NetworkService-Stage" */ = {
isa = XCConfigurationList;
buildConfigurations = (
- 527A8504FEC0D977F10DFE1D /* Debug */,
- D3499E0DC93D0169932DD5F0 /* Release */,
+ 6E46BC34D1714207EF8C48EC /* Debug */,
+ 45B806902835BDAAA647D2FF /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
- AAD510D6A096645A1B961388 /* Build configuration list for PBXNativeTarget "Service" */ = {
+ FFC6118989876A9280B17F0F /* Build configuration list for PBXProject "NetworkService" */ = {
isa = XCConfigurationList;
buildConfigurations = (
- 827688E819193446D6A86496 /* Debug */,
- 0CF2F251CC7ACBFD83CB03BA /* Release */,
+ CEC7329D98018C021E2E5B1F /* Debug */,
+ 6857862F3B606B0A883BBB89 /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
- rootObject = 2387D8980C051CCC13E9F55A /* Project object */;
+ rootObject = EB3FED4C698FF2A4ADFEA857 /* Project object */;
}
diff --git a/Projects/Core/Data/Service/Service.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Projects/Core/Data/NetworkService/NetworkService.xcodeproj/project.xcworkspace/contents.xcworkspacedata
similarity index 100%
rename from Projects/Core/Data/Service/Service.xcodeproj/project.xcworkspace/contents.xcworkspacedata
rename to Projects/Core/Data/NetworkService/NetworkService.xcodeproj/project.xcworkspace/contents.xcworkspacedata
diff --git a/Projects/Core/Data/NetworkService/NetworkService.xcodeproj/xcshareddata/xcschemes/NetworkService-Debug.xcscheme b/Projects/Core/Data/NetworkService/NetworkService.xcodeproj/xcshareddata/xcschemes/NetworkService-Debug.xcscheme
new file mode 100644
index 0000000..449b159
--- /dev/null
+++ b/Projects/Core/Data/NetworkService/NetworkService.xcodeproj/xcshareddata/xcschemes/NetworkService-Debug.xcscheme
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Projects/Core/Data/NetworkService/NetworkService.xcodeproj/xcshareddata/xcschemes/NetworkService-Prod.xcscheme b/Projects/Core/Data/NetworkService/NetworkService.xcodeproj/xcshareddata/xcschemes/NetworkService-Prod.xcscheme
new file mode 100644
index 0000000..93a2468
--- /dev/null
+++ b/Projects/Core/Data/NetworkService/NetworkService.xcodeproj/xcshareddata/xcschemes/NetworkService-Prod.xcscheme
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Projects/Core/Data/NetworkService/NetworkService.xcodeproj/xcshareddata/xcschemes/NetworkService-Stage.xcscheme b/Projects/Core/Data/NetworkService/NetworkService.xcodeproj/xcshareddata/xcschemes/NetworkService-Stage.xcscheme
new file mode 100644
index 0000000..e40932f
--- /dev/null
+++ b/Projects/Core/Data/NetworkService/NetworkService.xcodeproj/xcshareddata/xcschemes/NetworkService-Stage.xcscheme
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Projects/Core/Data/NetworkService/NetworkService.xcodeproj/xcshareddata/xcschemes/NetworkService.xcscheme b/Projects/Core/Data/NetworkService/NetworkService.xcodeproj/xcshareddata/xcschemes/NetworkService.xcscheme
new file mode 100644
index 0000000..aa8d7d6
--- /dev/null
+++ b/Projects/Core/Data/NetworkService/NetworkService.xcodeproj/xcshareddata/xcschemes/NetworkService.xcscheme
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Projects/Core/Data/Service/ServiceTests/Sources/Test.swift b/Projects/Core/Data/NetworkService/NetworkServiceTests/Sources/Test.swift
similarity index 100%
rename from Projects/Core/Data/Service/ServiceTests/Sources/Test.swift
rename to Projects/Core/Data/NetworkService/NetworkServiceTests/Sources/Test.swift
diff --git a/Projects/Core/Data/Service/Project.swift b/Projects/Core/Data/NetworkService/Project.swift
similarity index 82%
rename from Projects/Core/Data/Service/Project.swift
rename to Projects/Core/Data/NetworkService/Project.swift
index bbbee98..32b79d7 100644
--- a/Projects/Core/Data/Service/Project.swift
+++ b/Projects/Core/Data/NetworkService/Project.swift
@@ -5,8 +5,8 @@ import ProjectTemplatePlugin
import DependencyPackagePlugin
let project = Project.makeAppModule(
- name: "Service",
- bundleId: .appBundleID(name: ".Service"),
+ name: "NetworkService",
+ bundleId: .appBundleID(name: ".NetworkService"),
product: .staticFramework,
settings: .settings(),
dependencies: [
diff --git a/Projects/Core/Data/Service/Sources/MusicSearchService.swift b/Projects/Core/Data/NetworkService/Sources/MusicSearchService.swift
similarity index 84%
rename from Projects/Core/Data/Service/Sources/MusicSearchService.swift
rename to Projects/Core/Data/NetworkService/Sources/MusicSearchService.swift
index 7aee044..b1c19e1 100644
--- a/Projects/Core/Data/Service/Sources/MusicSearchService.swift
+++ b/Projects/Core/Data/NetworkService/Sources/MusicSearchService.swift
@@ -11,7 +11,7 @@ import API
import Moya
public enum MusicSearchService {
- case searchMusic(query: String)
+ case searchMusic(query: String, media: String, entity: String)
case detailMusic(id: String)
}
@@ -23,7 +23,7 @@ extension MusicSearchService: BaseTargetType {
switch self {
case .searchMusic:
return .searchMusic
- case .detailMusic(let id):
+ case .detailMusic:
return .searchDetailMusic
}
}
@@ -44,12 +44,16 @@ extension MusicSearchService: BaseTargetType {
public var parameters: [String : Any]? {
switch self {
- case .searchMusic(let query):
+ case .searchMusic(
+ let query,
+ let media,
+ let entity
+ ):
let parameters: [String: Any] = [
"term": query,
"country": "KR",
- "media": "music",
- "entity": "song"
+ "media": media,
+ "entity": entity
]
return parameters
diff --git a/Projects/Core/Data/Repository/Project.swift b/Projects/Core/Data/Repository/Project.swift
index aa16a2c..fcc742d 100644
--- a/Projects/Core/Data/Repository/Project.swift
+++ b/Projects/Core/Data/Repository/Project.swift
@@ -12,7 +12,7 @@ let project = Project.makeAppModule(
dependencies: [
.Network(implements: .Networking),
.Data(implements: .DataInterface),
- .Data(implements: .Service)
+ .Data(implements: .NetworkService)
],
sources: ["Sources/**"]
)
diff --git a/Projects/Core/Data/Repository/Repository.xcodeproj/project.pbxproj b/Projects/Core/Data/Repository/Repository.xcodeproj/project.pbxproj
index 9d78560..d1a0f1f 100644
--- a/Projects/Core/Data/Repository/Repository.xcodeproj/project.pbxproj
+++ b/Projects/Core/Data/Repository/Repository.xcodeproj/project.pbxproj
@@ -3,56 +3,56 @@
archiveVersion = 1;
classes = {
};
- objectVersion = 56;
+ objectVersion = 55;
objects = {
/* Begin PBXBuildFile section */
065CDD9E3F159CCEC6E1A6C0 /* Repository.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03D39D8FFA6B36EC82B3C778 /* Repository.framework */; };
08A491E1067C93EFC4474817 /* Moya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C1CC14A70BD175D51D4A7EEB /* Moya.framework */; };
0E8E0386D1DD34B39FB8C982 /* API.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BC8B445ECB8E6566CF649974 /* API.framework */; };
+ 0F7FC24EE51D65F16F679DD9 /* MusicSearchRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CC502E3FA7AF9B4519D8AA2 /* MusicSearchRepository.swift */; };
+ 1493A92373C84B151369E627 /* MusicSearchRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CC502E3FA7AF9B4519D8AA2 /* MusicSearchRepository.swift */; };
233EAF0D96C6FF11DCB925F5 /* Networking.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = E9256A28824CD986ECC1EF08 /* Networking.framework */; };
2346B53A47FF5D90E70215B7 /* DataInterface.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 0C051AEF60DC4BF2E9179E04 /* DataInterface.framework */; };
29734DE54DCB5E7218BF8203 /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AFD6BEF4EEDC73B527495BB6 /* RxSwift.framework */; };
- 2C23766DA5EC5A267DB2DE38 /* Service.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 549C82A8C41E9EBA4FDC62C7 /* Service.framework */; };
+ 2B947979ACB693C05AD6B015 /* MockMusicDetailRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDF53AC9F5AB783A89AC1BDB /* MockMusicDetailRepository.swift */; };
+ 2DF6D059B5BEA6E0B238E39A /* NetworkService.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B2241AFC7440EECBBEA5F080 /* NetworkService.framework */; };
41FC709A51F996C647FD9DFC /* DataInterface.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 0C051AEF60DC4BF2E9179E04 /* DataInterface.framework */; };
- 45C48AEEAADB0663CA55BCE9 /* MusicSearchRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60A1061A0F7A5DEF2B3433B7 /* MusicSearchRepository.swift */; };
+ 46B0E414B2BDD688E504C8E0 /* MusicDetailRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3909B7341924E6CE41091993 /* MusicDetailRepository.swift */; };
4878837B4312F041BF286CD0 /* Networking.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = E9256A28824CD986ECC1EF08 /* Networking.framework */; };
5FF9785CD2D8ABD53E784222 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4AA1CFA625141FD7F9B1DB22 /* Alamofire.framework */; };
- 6705DA518DEFDF32D0CD39D8 /* MusicSearchRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60A1061A0F7A5DEF2B3433B7 /* MusicSearchRepository.swift */; };
+ 66D7EC80E7D8F0F121525643 /* NetworkService.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = B2241AFC7440EECBBEA5F080 /* NetworkService.framework */; };
+ 6C362D38646AAB6377572599 /* NetworkService.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = B2241AFC7440EECBBEA5F080 /* NetworkService.framework */; };
6F837F554EA43B635EE2C5CC /* MockMusicSearchRepositoryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FED9E1BBAF2A605DF08D38F /* MockMusicSearchRepositoryTests.swift */; };
+ 70D43BE4BC6051CD47CE22C9 /* MockMusicDetailRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDF53AC9F5AB783A89AC1BDB /* MockMusicDetailRepository.swift */; };
+ 71DDF859FE56E0D552BBCAA3 /* MockMusicDetailRepositoryTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE639263A3360A13D18123F6 /* MockMusicDetailRepositoryTests.swift */; };
7355412663C7423424F3A245 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F43CDC33501823FDC6E616D3 /* CFNetwork.framework */; };
+ 755769BF04DD13ACB79CB2C7 /* MockMusicDetailRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDF53AC9F5AB783A89AC1BDB /* MockMusicDetailRepository.swift */; };
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 */; };
+ 852E363B64C96BBAE2951912 /* MockMusicDetailRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = CDF53AC9F5AB783A89AC1BDB /* MockMusicDetailRepository.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 */; };
+ 984F4B7AC3C7C2104F98C5FE /* MusicDetailRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3909B7341924E6CE41091993 /* MusicDetailRepository.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 */; };
+ B2C509483A0241F46C73DE3B /* MusicDetailRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3909B7341924E6CE41091993 /* MusicDetailRepository.swift */; };
B4CC4F2D8A5386E268661131 /* DataInterface.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 0C051AEF60DC4BF2E9179E04 /* DataInterface.framework */; };
+ BB6941E719F034681417B60F /* NetworkService.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = B2241AFC7440EECBBEA5F080 /* NetworkService.framework */; };
+ BB87E1D5CABCE54FB184CEBD /* MusicDetailRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3909B7341924E6CE41091993 /* MusicDetailRepository.swift */; };
BC3E81878EF9E2A2651B2F87 /* LogMacro.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B6CD10CD4A587CB9F328BD12 /* LogMacro.framework */; };
- C1271844DE5B9D13E9E7CBC0 /* Service.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 549C82A8C41E9EBA4FDC62C7 /* Service.framework */; };
+ C0BEB24AF27B909091655C5F /* MockMusicSearchRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AF8BB789BCB3B6B00642080 /* MockMusicSearchRepository.swift */; };
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 */; };
+ CC8F08BF0C4A0BA10A5D29C0 /* MockMusicSearchRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AF8BB789BCB3B6B00642080 /* MockMusicSearchRepository.swift */; };
+ CF31E5E654224F48DE60CFEC /* MusicSearchRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CC502E3FA7AF9B4519D8AA2 /* MusicSearchRepository.swift */; };
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 */; };
+ E495B59E5AA0112995A9FC22 /* MusicSearchRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CC502E3FA7AF9B4519D8AA2 /* MusicSearchRepository.swift */; };
+ E9AFD9DED60E9988784B5B69 /* MockMusicSearchRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AF8BB789BCB3B6B00642080 /* MockMusicSearchRepository.swift */; };
EAA7EA5BDD8E847A1A0A5854 /* Networking.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = E9256A28824CD986ECC1EF08 /* Networking.framework */; };
ED7ABEC4AB9FBA1707BB2752 /* DataInterface.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 0C051AEF60DC4BF2E9179E04 /* DataInterface.framework */; };
- F8B52702933627F2493EF0EB /* MockMusicSearchRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 588E92682ED2660339A34860 /* MockMusicSearchRepository.swift */; };
+ EF7ACB950D19290202504C73 /* MockMusicSearchRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AF8BB789BCB3B6B00642080 /* MockMusicSearchRepository.swift */; };
+ F5448EA7F201F762686A261E /* NetworkService.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = B2241AFC7440EECBBEA5F080 /* NetworkService.framework */; };
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 */; };
@@ -105,8 +105,8 @@
dstSubfolderSpec = 16;
files = (
B4CC4F2D8A5386E268661131 /* DataInterface.framework in Dependencies */,
+ 6C362D38646AAB6377572599 /* NetworkService.framework in Dependencies */,
233EAF0D96C6FF11DCB925F5 /* Networking.framework in Dependencies */,
- 2C23766DA5EC5A267DB2DE38 /* Service.framework in Dependencies */,
);
name = Dependencies;
runOnlyForDeploymentPostprocessing = 1;
@@ -147,8 +147,8 @@
dstSubfolderSpec = 16;
files = (
ED7ABEC4AB9FBA1707BB2752 /* DataInterface.framework in Dependencies */,
+ F5448EA7F201F762686A261E /* NetworkService.framework in Dependencies */,
EAA7EA5BDD8E847A1A0A5854 /* Networking.framework in Dependencies */,
- DCD884BEF59149765121ADBC /* Service.framework in Dependencies */,
);
name = Dependencies;
runOnlyForDeploymentPostprocessing = 1;
@@ -159,8 +159,8 @@
dstSubfolderSpec = 16;
files = (
41FC709A51F996C647FD9DFC /* DataInterface.framework in Dependencies */,
+ 66D7EC80E7D8F0F121525643 /* NetworkService.framework in Dependencies */,
4878837B4312F041BF286CD0 /* Networking.framework in Dependencies */,
- CD59907F5FF407743514DB95 /* Service.framework in Dependencies */,
);
name = Dependencies;
runOnlyForDeploymentPostprocessing = 1;
@@ -171,8 +171,8 @@
dstSubfolderSpec = 16;
files = (
2346B53A47FF5D90E70215B7 /* DataInterface.framework in Dependencies */,
+ BB6941E719F034681417B60F /* NetworkService.framework in Dependencies */,
A698F595B604CF8C68EA6FF2 /* Networking.framework in Dependencies */,
- E3B07C5281726FE5EFA47795 /* Service.framework in Dependencies */,
);
name = Dependencies;
runOnlyForDeploymentPostprocessing = 1;
@@ -188,31 +188,31 @@
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; };
+ 3909B7341924E6CE41091993 /* MusicDetailRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MusicDetailRepository.swift; sourceTree = ""; };
39FAE0770B930CBF414B8F54 /* EventLimiter.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = EventLimiter.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 3AF8BB789BCB3B6B00642080 /* MockMusicSearchRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockMusicSearchRepository.swift; sourceTree = ""; };
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; };
+ 7CC502E3FA7AF9B4519D8AA2 /* MusicSearchRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MusicSearchRepository.swift; sourceTree = ""; };
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; };
+ B2241AFC7440EECBBEA5F080 /* NetworkService.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = NetworkService.framework; sourceTree = BUILT_PRODUCTS_DIR; };
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; };
+ CDF53AC9F5AB783A89AC1BDB /* MockMusicDetailRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockMusicDetailRepository.swift; sourceTree = ""; };
E9256A28824CD986ECC1EF08 /* Networking.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Networking.framework; sourceTree = BUILT_PRODUCTS_DIR; };
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; };
+ FE639263A3360A13D18123F6 /* MockMusicDetailRepositoryTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockMusicDetailRepositoryTests.swift; sourceTree = ""; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -246,11 +246,11 @@
BC3E81878EF9E2A2651B2F87 /* LogMacro.framework in Frameworks */,
8D3EE4A12A835297EA66F043 /* Model.framework in Frameworks */,
08A491E1067C93EFC4474817 /* Moya.framework in Frameworks */,
+ 2DF6D059B5BEA6E0B238E39A /* NetworkService.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;
};
@@ -274,7 +274,7 @@
280ACB745E0A714E9FEB0344 /* Sources */ = {
isa = PBXGroup;
children = (
- 7F1AC7472EB4518A00C82441 /* MockMusicDetailRepositoryTests.swift */,
+ FE639263A3360A13D18123F6 /* MockMusicDetailRepositoryTests.swift */,
7FED9E1BBAF2A605DF08D38F /* MockMusicSearchRepositoryTests.swift */,
);
path = Sources;
@@ -283,8 +283,8 @@
2D734AC98FF0BE5BAB8E93F5 /* Sources */ = {
isa = PBXGroup;
children = (
- 7F1AC72E2EB44DC500C82441 /* Detail */,
- 7F1AC72D2EB44DB700C82441 /* Search */,
+ A604B1AC0250F705EF021006 /* Detail */,
+ 6C146823AECACF85E598936E /* Search */,
);
path = Sources;
sourceTree = "";
@@ -316,20 +316,20 @@
);
sourceTree = "";
};
- 7F1AC72D2EB44DB700C82441 /* Search */ = {
+ 6C146823AECACF85E598936E /* Search */ = {
isa = PBXGroup;
children = (
- 588E92682ED2660339A34860 /* MockMusicSearchRepository.swift */,
- 60A1061A0F7A5DEF2B3433B7 /* MusicSearchRepository.swift */,
+ 3AF8BB789BCB3B6B00642080 /* MockMusicSearchRepository.swift */,
+ 7CC502E3FA7AF9B4519D8AA2 /* MusicSearchRepository.swift */,
);
path = Search;
sourceTree = "";
};
- 7F1AC72E2EB44DC500C82441 /* Detail */ = {
+ A604B1AC0250F705EF021006 /* Detail */ = {
isa = PBXGroup;
children = (
- 7F1AC7342EB44E3200C82441 /* MockMusicDetailRepository.swift */,
- 7F1AC72F2EB44DD900C82441 /* MusicDetailRepository.swift */,
+ CDF53AC9F5AB783A89AC1BDB /* MockMusicDetailRepository.swift */,
+ 3909B7341924E6CE41091993 /* MusicDetailRepository.swift */,
);
path = Detail;
sourceTree = "";
@@ -358,6 +358,7 @@
B001E4EB12F1B31552843EC8 /* Model.framework */,
C1CC14A70BD175D51D4A7EEB /* Moya.framework */,
E9256A28824CD986ECC1EF08 /* Networking.framework */,
+ B2241AFC7440EECBBEA5F080 /* NetworkService.framework */,
67D7E950058188008115D32D /* Repository_Debug.framework */,
4131E6C825DB8588F94C2088 /* Repository_Prod.framework */,
34E66E9088F97B1F320BF8B4 /* Repository_Stage.framework */,
@@ -365,7 +366,6 @@
18618E5B5CE8E0BEE5F43988 /* RepositoryTests.xctest */,
F9C30B633FFEC1DE967352E8 /* RxMoya.framework */,
AFD6BEF4EEDC73B527495BB6 /* RxSwift.framework */,
- 549C82A8C41E9EBA4FDC62C7 /* Service.framework */,
);
name = Products;
sourceTree = "";
@@ -506,6 +506,8 @@
isa = PBXProject;
attributes = {
BuildIndependentTargetsInParallel = YES;
+ TargetAttributes = {
+ };
};
buildConfigurationList = DAEAABCA4F1BDA57B6C50343 /* Build configuration list for PBXProject "Repository" */;
compatibilityVersion = "Xcode 14.0";
@@ -573,10 +575,10 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 7F1AC7372EB44ED300C82441 /* MockMusicDetailRepository.swift in Sources */,
- 7F1AC7302EB44DE100C82441 /* MusicDetailRepository.swift in Sources */,
- DFE6A1AEA515B11BA230F73B /* MockMusicSearchRepository.swift in Sources */,
- 8E479DDB904E8ABBD71E8302 /* MusicSearchRepository.swift in Sources */,
+ 755769BF04DD13ACB79CB2C7 /* MockMusicDetailRepository.swift in Sources */,
+ B2C509483A0241F46C73DE3B /* MusicDetailRepository.swift in Sources */,
+ C0BEB24AF27B909091655C5F /* MockMusicSearchRepository.swift in Sources */,
+ CF31E5E654224F48DE60CFEC /* MusicSearchRepository.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -584,10 +586,10 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 7F1AC7392EB44ED300C82441 /* MockMusicDetailRepository.swift in Sources */,
- 7F1AC7322EB44DE100C82441 /* MusicDetailRepository.swift in Sources */,
- F8B52702933627F2493EF0EB /* MockMusicSearchRepository.swift in Sources */,
- 45C48AEEAADB0663CA55BCE9 /* MusicSearchRepository.swift in Sources */,
+ 70D43BE4BC6051CD47CE22C9 /* MockMusicDetailRepository.swift in Sources */,
+ BB87E1D5CABCE54FB184CEBD /* MusicDetailRepository.swift in Sources */,
+ EF7ACB950D19290202504C73 /* MockMusicSearchRepository.swift in Sources */,
+ 1493A92373C84B151369E627 /* MusicSearchRepository.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -595,10 +597,10 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 7F1AC7382EB44ED300C82441 /* MockMusicDetailRepository.swift in Sources */,
- 7F1AC7312EB44DE100C82441 /* MusicDetailRepository.swift in Sources */,
- 81C2AF9977596554B4F5A0F2 /* MockMusicSearchRepository.swift in Sources */,
- 6705DA518DEFDF32D0CD39D8 /* MusicSearchRepository.swift in Sources */,
+ 852E363B64C96BBAE2951912 /* MockMusicDetailRepository.swift in Sources */,
+ 984F4B7AC3C7C2104F98C5FE /* MusicDetailRepository.swift in Sources */,
+ CC8F08BF0C4A0BA10A5D29C0 /* MockMusicSearchRepository.swift in Sources */,
+ E495B59E5AA0112995A9FC22 /* MusicSearchRepository.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -606,10 +608,10 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 7F1AC7362EB44ED300C82441 /* MockMusicDetailRepository.swift in Sources */,
- 7F1AC7332EB44DE100C82441 /* MusicDetailRepository.swift in Sources */,
- DB3850164E364C8631CF1E02 /* MockMusicSearchRepository.swift in Sources */,
- A6F8318AFCC8184F57011D50 /* MusicSearchRepository.swift in Sources */,
+ 2B947979ACB693C05AD6B015 /* MockMusicDetailRepository.swift in Sources */,
+ 46B0E414B2BDD688E504C8E0 /* MusicDetailRepository.swift in Sources */,
+ E9AFD9DED60E9988784B5B69 /* MockMusicSearchRepository.swift in Sources */,
+ 0F7FC24EE51D65F16F679DD9 /* MusicSearchRepository.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -617,7 +619,7 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 7F1AC7482EB4518E00C82441 /* MockMusicDetailRepositoryTests.swift in Sources */,
+ 71DDF859FE56E0D552BBCAA3 /* MockMusicDetailRepositoryTests.swift in Sources */,
6F837F554EA43B635EE2C5CC /* MockMusicSearchRepositoryTests.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
@@ -653,7 +655,13 @@
"$(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";
+ 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;
@@ -693,7 +701,13 @@
"$(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";
+ 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;
@@ -736,7 +750,13 @@
"$(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";
+ 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;
@@ -744,7 +764,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;
@@ -780,7 +803,13 @@
"$(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";
+ 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;
@@ -823,7 +852,13 @@
"$(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";
+ 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;
@@ -859,14 +894,23 @@
"$(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";
+ 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;
@@ -900,7 +944,13 @@
"$(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";
+ 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;
@@ -943,7 +993,13 @@
"$(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";
+ 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;
@@ -951,7 +1007,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;
@@ -987,7 +1046,13 @@
"$(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";
+ 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;
@@ -995,7 +1060,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;
@@ -1143,7 +1211,13 @@
"$(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";
+ 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;
@@ -1151,7 +1225,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/Core/Data/Repository/RepositoryTests/Sources/MockMusicSearchRepositoryTests.swift b/Projects/Core/Data/Repository/RepositoryTests/Sources/MockMusicSearchRepositoryTests.swift
index 399d6cd..42477c9 100644
--- a/Projects/Core/Data/Repository/RepositoryTests/Sources/MockMusicSearchRepositoryTests.swift
+++ b/Projects/Core/Data/Repository/RepositoryTests/Sources/MockMusicSearchRepositoryTests.swift
@@ -15,11 +15,10 @@ 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 {
+struct MusicSearchRepositoryTests {
// 🎯 1) 성공 케이스 테스트
@Test("검색 성공 시 결과가 올바르게 반환 ")
@@ -43,8 +42,8 @@ struct MockMusicSearchRepositoryTests {
)
]
- let repository = MockMusicSearchRepository()
- await repository.setResult(.success(mockTracks))
+ let repository = MockMusicSearchRepository()
+ repository.setResult(.success(mockTracks))
// when
let result = try await repository.fetchMusic(search: "봄")
@@ -76,4 +75,95 @@ struct MockMusicSearchRepositoryTests {
#expect(repository.receivedQueries == ["유다빈밴드"])
}
+
+ // 🎯 searchMusic 메서드 테스트 (with filters)
+ @Test("searchMusic 성공 시 결과가 올바르게 반환 (with filters)")
+ func testSearchMusicWithFiltersSuccess() 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()
+ repository.setResult(.success(mockTracks))
+
+ // when
+ let result = try await repository.searchMedia(
+ query: "IU",
+ media: "music",
+ entity: "song"
+ )
+
+ // then
+ #expect(result.count == 1)
+ #expect(result.first?.artistName == "IU")
+ #expect(result.first?.trackName == "Spring Love")
+ #expect(result.first?.collectionCensoredName == "봄 사랑 벚꽃 말고 - Single")
+ }
+
+ @Test("searchMusic 실패 시 에러를 던져야 함 (with filters)")
+ func testSearchMusicWithFiltersFailure() async throws {
+ // given
+ let repository = MockMusicSearchRepository()
+ repository.setResult(.failure(MockMusicSearchRepository.MockError.forced))
+
+ // when / then
+ await #expect(throws: MockMusicSearchRepository.MockError.forced) {
+ try await repository.searchMedia(
+ query: "fail",
+ media: "music",
+ entity: "song"
+ )
+ }
+ }
+
+ @Test("searchMusic 호출 시 모든 파라미터가 기록되어야 함 (with filters)")
+ func testSearchMusicWithFiltersReceivedParameters() async throws {
+ let repository = MockMusicSearchRepository(result: .success([]))
+ _ = try await repository.searchMedia(
+ query: "IU",
+ media: "music",
+ entity: "song"
+ )
+
+ #expect(repository.receivedQueries == ["IU|music|song"])
+ }
+
+ @Test("searchMusic 다양한 media, entity 조합 테스트 (with filters)")
+ func testSearchMusicWithFiltersDifferentParameters() async throws {
+ let repository = MockMusicSearchRepository(result: .success([]))
+
+ // 첫 번째 호출
+ _ = try await repository.searchMedia(
+ query: "Taylor Swift",
+ media: "music",
+ entity: "album"
+ )
+
+ // 두 번째 호출
+ _ = try await repository.searchMedia(
+ query: "Avengers",
+ media: "movie",
+ entity: "movieArtist"
+ )
+
+ #expect(repository.receivedQueries == [
+ "Taylor Swift|music|album",
+ "Avengers|movie|movieArtist"
+ ])
+ }
}
diff --git a/Projects/Core/Data/Repository/Sources/Detail/MusicDetailRepository.swift b/Projects/Core/Data/Repository/Sources/Detail/MusicDetailRepository.swift
index c2c88da..f569ec6 100644
--- a/Projects/Core/Data/Repository/Sources/Detail/MusicDetailRepository.swift
+++ b/Projects/Core/Data/Repository/Sources/Detail/MusicDetailRepository.swift
@@ -7,7 +7,7 @@
import Foundation
-import Service
+import NetworkService
import DataInterface
import AsyncMoya
diff --git a/Projects/Core/Data/Repository/Sources/Search/MockMusicSearchRepository.swift b/Projects/Core/Data/Repository/Sources/Search/MockMusicSearchRepository.swift
index d5fa21c..772c4e5 100644
--- a/Projects/Core/Data/Repository/Sources/Search/MockMusicSearchRepository.swift
+++ b/Projects/Core/Data/Repository/Sources/Search/MockMusicSearchRepository.swift
@@ -23,7 +23,16 @@ public final class MockMusicSearchRepository: MusicSearchRepositoryProtocol, @un
}
public func fetchMusic(search: String) async throws -> [Model.ITunesTrack] {
- self.receivedQueries.append(search) // 호출 파라미터 검증용
+ self.receivedQueries.append(search)
+ return try result.get()
+ }
+
+ public func searchMedia(
+ query: String,
+ media: String,
+ entity: String
+ ) async throws -> [ITunesTrack] {
+ self.receivedQueries.append("\(query)|\(media)|\(entity)")
return try result.get()
}
}
diff --git a/Projects/Core/Data/Repository/Sources/Search/MusicSearchRepository.swift b/Projects/Core/Data/Repository/Sources/Search/MusicSearchRepository.swift
index 526f0df..51796d6 100644
--- a/Projects/Core/Data/Repository/Sources/Search/MusicSearchRepository.swift
+++ b/Projects/Core/Data/Repository/Sources/Search/MusicSearchRepository.swift
@@ -6,7 +6,7 @@
//
import Foundation
-import Service
+import NetworkService
import DataInterface
import AsyncMoya
@@ -17,7 +17,30 @@ public final class MusicSearchRepository: MusicSearchRepositoryProtocol {
nonisolated public init() {}
public func fetchMusic(search: String) async throws -> [Model.ITunesTrack] {
- let data = try await provider.request(.searchMusic(query: search), decodeTo: ITunesSearchResponseDTO.self)
+ let data = try await provider.request(
+ .searchMusic(
+ query: search,
+ media: "music",
+ entity: "song"
+ ),
+ decodeTo: ITunesSearchResponseDTO.self
+ )
+ return data.results
+ }
+
+ public func searchMedia(
+ query: String,
+ media: String,
+ entity: String
+ ) async throws -> [Model.ITunesTrack] {
+ let data = try await provider.request(
+ .searchMusic(
+ query: query,
+ media: media,
+ entity: entity
+ ),
+ decodeTo: ITunesSearchResponseDTO.self
+ )
return data.results
}
}
diff --git a/Projects/Core/Domain/DomainInterface/DomainInterface.xcodeproj/project.pbxproj b/Projects/Core/Domain/DomainInterface/DomainInterface.xcodeproj/project.pbxproj
index e1f6fd4..3e91ff6 100644
--- a/Projects/Core/Domain/DomainInterface/DomainInterface.xcodeproj/project.pbxproj
+++ b/Projects/Core/Domain/DomainInterface/DomainInterface.xcodeproj/project.pbxproj
@@ -3,20 +3,20 @@
archiveVersion = 1;
classes = {
};
- objectVersion = 56;
+ objectVersion = 55;
objects = {
/* Begin PBXBuildFile section */
+ 0928316C61A62A91B651C8BA /* MusicDetailUseCaseProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = FBE0E43C05AEF5A2BB70B3B4 /* MusicDetailUseCaseProtocol.swift */; };
16A76FED32C6B714CAF33D2B /* Entity.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 06F92106B46658C4D05E4ABB /* Entity.framework */; };
+ 2992EC2E8745BEB058AF1966 /* MusicDetailUseCaseProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = FBE0E43C05AEF5A2BB70B3B4 /* MusicDetailUseCaseProtocol.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 */; };
- 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 */; };
+ 8C06222FDCD293DE7531E45E /* MusicDetailUseCaseProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = FBE0E43C05AEF5A2BB70B3B4 /* MusicDetailUseCaseProtocol.swift */; };
+ 946C9BBD5502349FCEF7611F /* MusicDetailUseCaseProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = FBE0E43C05AEF5A2BB70B3B4 /* MusicDetailUseCaseProtocol.swift */; };
AB7D4D041B1B69901FBE2092 /* Entity.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 06F92106B46658C4D05E4ABB /* Entity.framework */; };
AF5BC2589B071B38F7BA40A8 /* MusicSearchUseCaseProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9A1AC6CCA9E4B674786DC31 /* MusicSearchUseCaseProtocol.swift */; };
BC207C9DA5E4673477A9C014 /* Model.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D6EEC0400C29FD0B52020310 /* Model.framework */; };
@@ -97,7 +97,6 @@
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 = ""; };
- 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; };
@@ -106,6 +105,7 @@
D88D9EC758647A9B9DC71766 /* DomainInterface-Prod-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "DomainInterface-Prod-Info.plist"; sourceTree = ""; };
DFB2548120357952CE45DE62 /* DomainInterfaceTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DomainInterfaceTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
E9AE163D3AF166D0DDCB02F4 /* DomainInterfaceTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "DomainInterfaceTests-Info.plist"; sourceTree = ""; };
+ FBE0E43C05AEF5A2BB70B3B4 /* MusicDetailUseCaseProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MusicDetailUseCaseProtocol.swift; sourceTree = ""; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -213,7 +213,7 @@
D5F4384B64B2AC2E7BFC4AB1 /* Sources */ = {
isa = PBXGroup;
children = (
- 7F1AC73A2EB44EF000C82441 /* MusicDetailUseCaseProtocol.swift */,
+ FBE0E43C05AEF5A2BB70B3B4 /* MusicDetailUseCaseProtocol.swift */,
A9A1AC6CCA9E4B674786DC31 /* MusicSearchUseCaseProtocol.swift */,
);
path = Sources;
@@ -344,6 +344,8 @@
isa = PBXProject;
attributes = {
BuildIndependentTargetsInParallel = YES;
+ TargetAttributes = {
+ };
};
buildConfigurationList = A6A33577101613ED4870CAD3 /* Build configuration list for PBXProject "DomainInterface" */;
compatibilityVersion = "Xcode 14.0";
@@ -410,7 +412,7 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 7F1AC73B2EB44EF800C82441 /* MusicDetailUseCaseProtocol.swift in Sources */,
+ 8C06222FDCD293DE7531E45E /* MusicDetailUseCaseProtocol.swift in Sources */,
F50AAC1F42DFDBC5F759A4A5 /* MusicSearchUseCaseProtocol.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
@@ -427,7 +429,7 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 7F1AC73D2EB44EF800C82441 /* MusicDetailUseCaseProtocol.swift in Sources */,
+ 2992EC2E8745BEB058AF1966 /* MusicDetailUseCaseProtocol.swift in Sources */,
82EC8CCB6C2A84301319D45F /* MusicSearchUseCaseProtocol.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
@@ -436,7 +438,7 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 7F1AC73E2EB44EF800C82441 /* MusicDetailUseCaseProtocol.swift in Sources */,
+ 0928316C61A62A91B651C8BA /* MusicDetailUseCaseProtocol.swift in Sources */,
DF2884833774231E52AF9EDF /* MusicSearchUseCaseProtocol.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
@@ -445,7 +447,7 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 7F1AC73C2EB44EF800C82441 /* MusicDetailUseCaseProtocol.swift in Sources */,
+ 946C9BBD5502349FCEF7611F /* MusicDetailUseCaseProtocol.swift in Sources */,
AF5BC2589B071B38F7BA40A8 /* MusicSearchUseCaseProtocol.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
@@ -552,7 +554,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;
@@ -735,7 +740,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;
@@ -769,7 +777,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;
@@ -796,7 +807,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;
@@ -828,7 +842,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/Core/Domain/DomainInterface/Sources/MusicSearchUseCaseProtocol.swift b/Projects/Core/Domain/DomainInterface/Sources/MusicSearchUseCaseProtocol.swift
index 021398e..56d1550 100644
--- a/Projects/Core/Domain/DomainInterface/Sources/MusicSearchUseCaseProtocol.swift
+++ b/Projects/Core/Domain/DomainInterface/Sources/MusicSearchUseCaseProtocol.swift
@@ -9,5 +9,7 @@ import Entity
public protocol MusicSearchUseCaseProtocol {
func searchMusic(searchQuery: String) async throws -> [MusicItem]
+ func searchMedia(query: String, media: String, entity: String) async throws -> [MusicItem]
+ func getCategoryCount(from results: [MusicItem], category: SearchCategory) -> Int
}
diff --git a/Projects/Core/Domain/Entity/Entity.xcodeproj/project.pbxproj b/Projects/Core/Domain/Entity/Entity.xcodeproj/project.pbxproj
index 01b9c09..67e4d28 100644
--- a/Projects/Core/Domain/Entity/Entity.xcodeproj/project.pbxproj
+++ b/Projects/Core/Domain/Entity/Entity.xcodeproj/project.pbxproj
@@ -7,25 +7,37 @@
objects = {
/* Begin PBXBuildFile section */
+ 1022968E9E88244875771FDC /* TrendingItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 993E6B1DDFF597E0836E1D2B /* TrendingItem.swift */; };
+ 20A43A513E7CE824AB6F42DE /* TrendingItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 993E6B1DDFF597E0836E1D2B /* TrendingItem.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 */; };
+ 4059036F6610B22F3F1F4718 /* SearchCategory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C4AF6E3E778A724ADA6F635 /* SearchCategory.swift */; };
514358F473B977D6998A5328 /* MusicItemEntity.swift in Sources */ = {isa = PBXBuildFile; fileRef = 73EF97D2E9EB60245C744B49 /* MusicItemEntity.swift */; };
5700ECA6FD38B77D693B0091 /* Model.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 209525459216D5CD40B81F82 /* Model.framework */; };
+ 6E1B58C0AC6076AFBF9E9021 /* TrendingItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 993E6B1DDFF597E0836E1D2B /* TrendingItem.swift */; };
+ 743B00BEE2C7E9A2BC69CC9B /* SearchCategory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C4AF6E3E778A724ADA6F635 /* SearchCategory.swift */; };
7748591064D7F18DEDC170E8 /* Extension+ITunesTrack.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C15508F026561321E66FA30 /* Extension+ITunesTrack.swift */; };
+ 894504CE87ACF656CE6E71FF /* MediaType.swift in Sources */ = {isa = PBXBuildFile; fileRef = A33161ED6C2582E60B68D6CB /* MediaType.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 */; };
+ 9DF368E8595DC143A19ED2CF /* TrendingItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 993E6B1DDFF597E0836E1D2B /* TrendingItem.swift */; };
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 */; };
+ B0E388AA936BECC5B1A0115C /* MediaType.swift in Sources */ = {isa = PBXBuildFile; fileRef = A33161ED6C2582E60B68D6CB /* MediaType.swift */; };
B8295BFA896386EF552B4F93 /* MusicMockItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = E971608AC4068DF3CBC8A070 /* MusicMockItem.swift */; };
+ CB6DDEC703ACF435FE9AE761 /* SearchCategory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C4AF6E3E778A724ADA6F635 /* SearchCategory.swift */; };
D5AB84F03933D55C5618D8B9 /* Model.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 209525459216D5CD40B81F82 /* Model.framework */; };
+ D93E83DCC456A8AE0AA71D7D /* MediaType.swift in Sources */ = {isa = PBXBuildFile; fileRef = A33161ED6C2582E60B68D6CB /* MediaType.swift */; };
E3A1102D7A459CEBD9454CF1 /* Test.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7F3475DDDF8FD92B3EADBBA9 /* Test.swift */; };
+ E5E4DC2C245099A3575E4960 /* SearchCategory.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C4AF6E3E778A724ADA6F635 /* SearchCategory.swift */; };
EAF9FA5186D62449AA07F8B3 /* Model.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 209525459216D5CD40B81F82 /* Model.framework */; };
F6F50DB9F05530FCCC71AAEB /* MusicMockItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = E971608AC4068DF3CBC8A070 /* MusicMockItem.swift */; };
+ F73666FE36D4AF0B784B6CB6 /* MediaType.swift in Sources */ = {isa = PBXBuildFile; fileRef = A33161ED6C2582E60B68D6CB /* MediaType.swift */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@@ -132,6 +144,7 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
+ 1C4AF6E3E778A724ADA6F635 /* SearchCategory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchCategory.swift; sourceTree = ""; };
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 = ""; };
@@ -139,6 +152,8 @@
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 = ""; };
+ 993E6B1DDFF597E0836E1D2B /* TrendingItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrendingItem.swift; sourceTree = ""; };
+ A33161ED6C2582E60B68D6CB /* MediaType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MediaType.swift; sourceTree = ""; };
A74AA0F8625D0A07993367BF /* EntityTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = EntityTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
A87997AABEB213C299AB6029 /* Entity_Debug.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Entity_Debug.framework; sourceTree = BUILT_PRODUCTS_DIR; };
ABA430F34FE184D117992A67 /* Entity_Prod.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Entity_Prod.framework; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -269,8 +284,11 @@
isa = PBXGroup;
children = (
CCAF9F5F6A2A60E72936D2C8 /* Mapper */,
+ A33161ED6C2582E60B68D6CB /* MediaType.swift */,
73EF97D2E9EB60245C744B49 /* MusicItemEntity.swift */,
E971608AC4068DF3CBC8A070 /* MusicMockItem.swift */,
+ 1C4AF6E3E778A724ADA6F635 /* SearchCategory.swift */,
+ 993E6B1DDFF597E0836E1D2B /* TrendingItem.swift */,
);
path = Sources;
sourceTree = "";
@@ -467,8 +485,11 @@
buildActionMask = 2147483647;
files = (
315668DE15E7423930386AD9 /* Extension+ITunesTrack.swift in Sources */,
+ 894504CE87ACF656CE6E71FF /* MediaType.swift in Sources */,
AF1789C006A58CA9506AB849 /* MusicItemEntity.swift in Sources */,
31197937A1D4461A2256B3F8 /* MusicMockItem.swift in Sources */,
+ E5E4DC2C245099A3575E4960 /* SearchCategory.swift in Sources */,
+ 6E1B58C0AC6076AFBF9E9021 /* TrendingItem.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -477,8 +498,11 @@
buildActionMask = 2147483647;
files = (
26637FEAAF6E92566882396C /* Extension+ITunesTrack.swift in Sources */,
+ F73666FE36D4AF0B784B6CB6 /* MediaType.swift in Sources */,
514358F473B977D6998A5328 /* MusicItemEntity.swift in Sources */,
F6F50DB9F05530FCCC71AAEB /* MusicMockItem.swift in Sources */,
+ 4059036F6610B22F3F1F4718 /* SearchCategory.swift in Sources */,
+ 1022968E9E88244875771FDC /* TrendingItem.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -487,8 +511,11 @@
buildActionMask = 2147483647;
files = (
7748591064D7F18DEDC170E8 /* Extension+ITunesTrack.swift in Sources */,
+ D93E83DCC456A8AE0AA71D7D /* MediaType.swift in Sources */,
2D03CA2C570A9109D652BC26 /* MusicItemEntity.swift in Sources */,
B8295BFA896386EF552B4F93 /* MusicMockItem.swift in Sources */,
+ CB6DDEC703ACF435FE9AE761 /* SearchCategory.swift in Sources */,
+ 20A43A513E7CE824AB6F42DE /* TrendingItem.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -497,8 +524,11 @@
buildActionMask = 2147483647;
files = (
A6C56B79EAC01CFB56CFA225 /* Extension+ITunesTrack.swift in Sources */,
+ B0E388AA936BECC5B1A0115C /* MediaType.swift in Sources */,
A94899DD76F2414693593542 /* MusicItemEntity.swift in Sources */,
8DDFB394D5E113C3B755D22A /* MusicMockItem.swift in Sources */,
+ 743B00BEE2C7E9A2BC69CC9B /* SearchCategory.swift in Sources */,
+ 9DF368E8595DC143A19ED2CF /* TrendingItem.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
diff --git a/Projects/Core/Domain/Entity/Sources/Mapper/Extension+ITunesTrack.swift b/Projects/Core/Domain/Entity/Sources/Mapper/Extension+ITunesTrack.swift
index 2545ce0..3456b15 100644
--- a/Projects/Core/Domain/Entity/Sources/Mapper/Extension+ITunesTrack.swift
+++ b/Projects/Core/Domain/Entity/Sources/Mapper/Extension+ITunesTrack.swift
@@ -12,10 +12,31 @@ import Model
public extension ITunesTrack {
func toDomain() -> MusicItem? {
- guard let artwork = artworkUrl100 else {
+ guard
+ let trackId,
+ let trackName,
+ let artistName,
+ let artwork = artworkUrl100
+ else {
return nil
}
+ // wrapperType과 kind를 사용해서 MediaType 결정
+ let mediaType: MediaType = {
+ guard let kind = kind else { return .other }
+
+ switch kind.lowercased() {
+ case "song":
+ return .music
+ case "feature-movie", "movie":
+ return .movie
+ case "podcast":
+ return .podcast
+ default:
+ return .other
+ }
+ }()
+
return MusicItem(
trackId: trackId,
trackName: trackName,
@@ -23,9 +44,10 @@ public extension ITunesTrack {
artist: artistName,
artworkURL: artwork,
previewURL: previewUrl,
- releaseDate: releaseDate,
- aboutAlbumInfo: collectionCensoredName,
- genre: primaryGenreName
+ releaseDate: releaseDate ?? "",
+ aboutAlbumInfo: collectionCensoredName ?? collectionName ?? "",
+ genre: primaryGenreName ?? "",
+ mediaType: mediaType
)
}
}
diff --git a/Projects/Core/Domain/Entity/Sources/MediaType.swift b/Projects/Core/Domain/Entity/Sources/MediaType.swift
new file mode 100644
index 0000000..c83dddb
--- /dev/null
+++ b/Projects/Core/Domain/Entity/Sources/MediaType.swift
@@ -0,0 +1,15 @@
+//
+// MediaType.swift
+// Entity
+//
+// Created by Wonji Suh on 10/28/25.
+//
+
+import Foundation
+
+public enum MediaType: String, Codable, CaseIterable {
+ case music = "music"
+ case movie = "movie"
+ case podcast = "podcast"
+ case other = "other"
+}
diff --git a/Projects/Core/Domain/Entity/Sources/MusicItemEntity.swift b/Projects/Core/Domain/Entity/Sources/MusicItemEntity.swift
index 22e6477..b75cc7b 100644
--- a/Projects/Core/Domain/Entity/Sources/MusicItemEntity.swift
+++ b/Projects/Core/Domain/Entity/Sources/MusicItemEntity.swift
@@ -7,6 +7,8 @@
import Foundation
+
+
public struct MusicItem: Identifiable, Equatable {
public var id = UUID()
public let trackId: Int
@@ -18,6 +20,7 @@ public struct MusicItem: Identifiable, Equatable {
public let releaseDate: String
public let aboutAlbumInfo: String
public let genre: String
+ public let mediaType: MediaType
public init(
trackId: Int,
@@ -28,7 +31,8 @@ public struct MusicItem: Identifiable, Equatable {
previewURL: URL? = nil,
releaseDate: String,
aboutAlbumInfo: String = "",
- genre: String
+ genre: String,
+ mediaType: MediaType = .music
) {
self.trackId = trackId
self.trackName = trackName
@@ -39,6 +43,7 @@ public struct MusicItem: Identifiable, Equatable {
self.releaseDate = releaseDate
self.aboutAlbumInfo = aboutAlbumInfo
self.genre = genre
+ self.mediaType = mediaType
}
}
@@ -79,7 +84,44 @@ public extension MusicItem {
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: "록"
+ genre: "록",
+ mediaType: .music
)
}
}
+
+
+// MARK: - Array Extension for Filtering
+public extension Array where Element == MusicItem {
+ func filterByCategory(_ category: SearchCategory) -> [MusicItem] {
+ switch category {
+ case .all:
+ return self
+ case .music:
+ return filter { $0.mediaType == .music }
+ case .movies:
+ return filter { $0.mediaType == .movie }
+ case .podcast:
+ return filter { $0.mediaType == .podcast }
+ case .etc:
+ return filter { $0.mediaType == .other }
+ }
+ }
+
+ var musicCount: Int { filter { $0.mediaType == .music }.count }
+ var movieCount: Int { filter { $0.mediaType == .movie }.count }
+ var podcastCount: Int { filter { $0.mediaType == .podcast }.count }
+ var etcCount: Int { filter { $0.mediaType == .other }.count }
+
+ /// 최신 순으로 정렬 (releaseDate 기준 내림차순)
+ func sortedByLatest() -> [MusicItem] {
+ return sorted { lhs, rhs in
+ guard let lhsDate = lhs.releaseDateValue,
+ let rhsDate = rhs.releaseDateValue else {
+ // 날짜가 없는 경우 맨 뒤로
+ return lhs.releaseDateValue != nil
+ }
+ return lhsDate > rhsDate // 최신이 먼저 오도록
+ }
+ }
+}
diff --git a/Projects/Core/Domain/Entity/Sources/SearchCategory.swift b/Projects/Core/Domain/Entity/Sources/SearchCategory.swift
new file mode 100644
index 0000000..e999bd9
--- /dev/null
+++ b/Projects/Core/Domain/Entity/Sources/SearchCategory.swift
@@ -0,0 +1,17 @@
+//
+// SearchCategory.swift
+// Entity
+//
+// Created by Wonji Suh on 10/28/25.
+//
+
+import Foundation
+
+public enum SearchCategory: String, CaseIterable {
+ case all = "All"
+ case music = "Music"
+ case movies = "Movies"
+ case podcast = "Podcast"
+ case etc = "ETC"
+}
+
diff --git a/Projects/Core/Domain/Entity/Sources/TrendingItem.swift b/Projects/Core/Domain/Entity/Sources/TrendingItem.swift
new file mode 100644
index 0000000..345c246
--- /dev/null
+++ b/Projects/Core/Domain/Entity/Sources/TrendingItem.swift
@@ -0,0 +1,17 @@
+//
+// TrendingItem.swift
+// Entity
+//
+// Created by Wonji Suh on 10/28/25.
+//
+
+import Foundation
+
+public struct TrendingItem: Identifiable, Hashable {
+ public let id = UUID()
+ public let title: String
+
+ public init(title: String) {
+ self.title = title
+ }
+}
diff --git a/Projects/Core/Domain/UseCase/Sources/Search/MusicSearchUseCase.swift b/Projects/Core/Domain/UseCase/Sources/Search/MusicSearchUseCase.swift
index d1215fe..0a3966e 100644
--- a/Projects/Core/Domain/UseCase/Sources/Search/MusicSearchUseCase.swift
+++ b/Projects/Core/Domain/UseCase/Sources/Search/MusicSearchUseCase.swift
@@ -28,6 +28,37 @@ public struct MusicSearchUseCase: MusicSearchUseCaseProtocol {
let dto = try await repository.fetchMusic(search: searchQuery)
return dto.toDomain()
}
+
+ public func searchMedia(
+ query: String,
+ media: String,
+ entity: String
+ ) async throws -> [MusicItem] {
+ let dtos = try await repository.searchMedia(
+ query: query,
+ media: media,
+ entity: entity
+ )
+ return dtos.toDomain()
+ }
+
+ public func getCategoryCount(
+ from results: [MusicItem],
+ category: SearchCategory
+ ) -> Int {
+ switch category {
+ case .all:
+ return results.count
+ case .music:
+ return results.musicCount
+ case .movies:
+ return results.movieCount
+ case .podcast:
+ return results.podcastCount
+ case .etc:
+ return results.etcCount
+ }
+ }
}
diff --git a/Projects/Core/Domain/UseCase/UseCase.xcodeproj/project.pbxproj b/Projects/Core/Domain/UseCase/UseCase.xcodeproj/project.pbxproj
index 05a29bc..1b93e81 100644
--- a/Projects/Core/Domain/UseCase/UseCase.xcodeproj/project.pbxproj
+++ b/Projects/Core/Domain/UseCase/UseCase.xcodeproj/project.pbxproj
@@ -3,30 +3,32 @@
archiveVersion = 1;
classes = {
};
- objectVersion = 56;
+ objectVersion = 55;
objects = {
/* Begin PBXBuildFile section */
00DFC76D5E73EFAACB117244 /* IdentifiedCollections.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F2E0EC679FC135E5CEC0A9AD /* IdentifiedCollections.framework */; };
014438C30E3FBCFDF9D90E75 /* swift-composable-architecture_ComposableArchitecture.bundle in Resources */ = {isa = PBXBuildFile; fileRef = A733A7597F14F4728F8A5C0C /* swift-composable-architecture_ComposableArchitecture.bundle */; };
+ 02F952EA56AF7AF43785A4AA /* MusicSearchUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EF9EE2705D96633544E0632 /* MusicSearchUseCase.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 */; };
+ 198AFD5AB5E091E294F614AA /* MusicDetailUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2187B2DDBEE2CCE9006AFA2C /* MusicDetailUseCase.swift */; };
+ 1B618962AF71BB5354C4B739 /* MusicSearchUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EF9EE2705D96633544E0632 /* MusicSearchUseCase.swift */; };
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 */; };
532676483F2C2203F76AB474 /* XCTestDynamicOverlay.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 008DF05C3439EA6B9FDCF073 /* XCTestDynamicOverlay.framework */; };
+ 5372B2209B337207CCD9920B /* MusicSearchUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EF9EE2705D96633544E0632 /* MusicSearchUseCase.swift */; };
53964ABDA1F713C74C8BCD32 /* WeaveDI.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = E19624172169EC662A81D26B /* WeaveDI.framework */; };
541697140A6418A997A49C8E /* UseCase.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 981DA49FF8FB5D20F6052CD5 /* UseCase.framework */; };
546C4C7902FF0E1EBD659ED0 /* PerceptionCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 85FEAEF231E31B0754B21769 /* PerceptionCore.framework */; };
@@ -34,26 +36,22 @@
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 */; };
+ 681B59B624135B8963E94DBD /* MusicDetailUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2187B2DDBEE2CCE9006AFA2C /* MusicDetailUseCase.swift */; };
6975BADA2D98E7E45589D8B8 /* WeaveDI.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = E19624172169EC662A81D26B /* WeaveDI.framework */; };
69FE9998125892D8133F27C1 /* WeaveDI.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = E19624172169EC662A81D26B /* WeaveDI.framework */; };
6F8C0740809FF4FA4ECB5419 /* OSLog.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FA48A0D2804DC03C431C9190 /* OSLog.framework */; };
731AA6801D9807916BF43DFA /* WeaveDI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E19624172169EC662A81D26B /* WeaveDI.framework */; };
+ 731B37C1292D75FA88ED8018 /* MusicSearchUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9EF9EE2705D96633544E0632 /* MusicSearchUseCase.swift */; };
74CF85AA8553EF14DCDD88DB /* Networking.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3EF7E8BB122749DE3A5B8126 /* Networking.framework */; };
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 */; };
+ 7C0D24F76196EC64C72F4C31 /* MusicDetailUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2187B2DDBEE2CCE9006AFA2C /* MusicDetailUseCase.swift */; };
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 */; };
@@ -61,6 +59,7 @@
9A865777262F57D1BDDF8DEF /* Perception.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83C1C4DE45683C912C8DC2B4 /* Perception.framework */; };
9A939653280A5C9E74F74755 /* CombineMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D1A87B170DAF79CF51F0B36C /* CombineMoya.framework */; };
9C90DE6CD2E6D84469773EB7 /* Moya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B13814CB96F2A20B29446433 /* Moya.framework */; };
+ A0C46FCED0EB66A54C496D60 /* NetworkService.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BBD1487D58F73D83285D2FE1 /* NetworkService.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 */; };
@@ -71,13 +70,14 @@
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 */; };
+ BB89A1BEC3EFE97AD02666B2 /* MusicDetailUseCaseTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D159E480AC15D9D4B53113D /* MusicDetailUseCaseTests.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 */; };
+ EB54F2D4E5EC5A8A11E4F67E /* MusicDetailUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2187B2DDBEE2CCE9006AFA2C /* MusicDetailUseCase.swift */; };
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 */; };
@@ -214,6 +214,7 @@
097C8502B89ACBB0F0A6B3DF /* Foundations.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Foundations.framework; sourceTree = BUILT_PRODUCTS_DIR; };
156620DF42B5B603B36FFC4D /* UseCase-Stage-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "UseCase-Stage-Info.plist"; sourceTree = ""; };
1C2FD116C7A6B0F966929543 /* SwiftUINavigation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftUINavigation.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 2187B2DDBEE2CCE9006AFA2C /* MusicDetailUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MusicDetailUseCase.swift; sourceTree = ""; };
24F1526402401DBFF6736037 /* InternalCollectionsUtilities.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = InternalCollectionsUtilities.framework; sourceTree = BUILT_PRODUCTS_DIR; };
275036982500E63F980B08D3 /* OrderedCollections.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = OrderedCollections.framework; sourceTree = BUILT_PRODUCTS_DIR; };
28B28AE28B75F4A08064786E /* SwiftNavigation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftNavigation.framework; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -227,7 +228,7 @@
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 = ""; };
+ 4D159E480AC15D9D4B53113D /* MusicDetailUseCaseTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MusicDetailUseCaseTests.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; };
@@ -235,8 +236,6 @@
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; };
@@ -244,6 +243,7 @@
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 = ""; };
+ 9EF9EE2705D96633544E0632 /* MusicSearchUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MusicSearchUseCase.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; };
@@ -252,12 +252,12 @@
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; };
+ BBD1487D58F73D83285D2FE1 /* NetworkService.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = NetworkService.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 = ""; };
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; };
@@ -310,6 +310,7 @@
A705971F0A7C3227E903D5B6 /* LogMacro.framework in Frameworks */,
B2AF891D2D2481ADFD0D1400 /* Model.framework in Frameworks */,
9C90DE6CD2E6D84469773EB7 /* Moya.framework in Frameworks */,
+ A0C46FCED0EB66A54C496D60 /* NetworkService.framework in Frameworks */,
74CF85AA8553EF14DCDD88DB /* Networking.framework in Frameworks */,
5EDB47A27CE022305A0209FB /* OrderedCollections.framework in Frameworks */,
9A865777262F57D1BDDF8DEF /* Perception.framework in Frameworks */,
@@ -317,7 +318,6 @@
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 */,
@@ -361,8 +361,8 @@
24C485C2264AA4D53285980D /* Sources */ = {
isa = PBXGroup;
children = (
- 7F1AC7412EB44F2B00C82441 /* Detail */,
- 7F1AC73F2EB44F1100C82441 /* Search */,
+ 774A9C615B977A87E3B13641 /* Detail */,
+ B74D570D506FF2B9E8736238 /* Search */,
);
path = Sources;
sourceTree = "";
@@ -386,6 +386,14 @@
);
sourceTree = "";
};
+ 774A9C615B977A87E3B13641 /* Detail */ = {
+ isa = PBXGroup;
+ children = (
+ 2187B2DDBEE2CCE9006AFA2C /* MusicDetailUseCase.swift */,
+ );
+ path = Detail;
+ sourceTree = "";
+ };
78A591603ED90C5371A925D1 /* UseCaseTests */ = {
isa = PBXGroup;
children = (
@@ -402,26 +410,10 @@
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 = (
- 7F1AC7492EB452AB00C82441 /* MusicDetailUseCaseTests.swift */,
+ 4D159E480AC15D9D4B53113D /* MusicDetailUseCaseTests.swift */,
736374D98427021184233CEA /* MusicSearchUseCaseTests.swift */,
);
path = Sources;
@@ -439,6 +431,14 @@
path = InfoPlists;
sourceTree = "";
};
+ B74D570D506FF2B9E8736238 /* Search */ = {
+ isa = PBXGroup;
+ children = (
+ 9EF9EE2705D96633544E0632 /* MusicSearchUseCase.swift */,
+ );
+ path = Search;
+ sourceTree = "";
+ };
BF0062FA29B274A2F9F0E5D9 /* Products */ = {
isa = PBXGroup;
children = (
@@ -468,13 +468,13 @@
491B7F0EBCB2B579DEE44331 /* Model.framework */,
B13814CB96F2A20B29446433 /* Moya.framework */,
3EF7E8BB122749DE3A5B8126 /* Networking.framework */,
+ BBD1487D58F73D83285D2FE1 /* NetworkService.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 */,
@@ -620,6 +620,8 @@
isa = PBXProject;
attributes = {
BuildIndependentTargetsInParallel = YES;
+ TargetAttributes = {
+ };
};
buildConfigurationList = 457FF1DD029A472E8F5461F7 /* Build configuration list for PBXProject "UseCase" */;
compatibilityVersion = "Xcode 14.0";
@@ -689,7 +691,7 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 7F1AC74A2EB452AF00C82441 /* MusicDetailUseCaseTests.swift in Sources */,
+ BB89A1BEC3EFE97AD02666B2 /* MusicDetailUseCaseTests.swift in Sources */,
0E8079E210A702DE84224A0F /* MusicSearchUseCaseTests.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
@@ -698,8 +700,8 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 240DC4A00D69459A8E3245F0 /* MusicSearchUseCase.swift in Sources */,
- 7F1AC7442EB44F3700C82441 /* MusicDetailUseCase.swift in Sources */,
+ 7C0D24F76196EC64C72F4C31 /* MusicDetailUseCase.swift in Sources */,
+ 02F952EA56AF7AF43785A4AA /* MusicSearchUseCase.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -707,8 +709,8 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 3CC8A123B783E8673857C787 /* MusicSearchUseCase.swift in Sources */,
- 7F1AC7462EB44F3700C82441 /* MusicDetailUseCase.swift in Sources */,
+ 198AFD5AB5E091E294F614AA /* MusicDetailUseCase.swift in Sources */,
+ 5372B2209B337207CCD9920B /* MusicSearchUseCase.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -716,8 +718,8 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 5FF798A0F87D336CEE09550E /* MusicSearchUseCase.swift in Sources */,
- 7F1AC7452EB44F3700C82441 /* MusicDetailUseCase.swift in Sources */,
+ EB54F2D4E5EC5A8A11E4F67E /* MusicDetailUseCase.swift in Sources */,
+ 731B37C1292D75FA88ED8018 /* MusicSearchUseCase.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -725,8 +727,8 @@
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 87E1677F90F2EA114F5A9ED7 /* MusicSearchUseCase.swift in Sources */,
- 7F1AC7432EB44F3700C82441 /* MusicDetailUseCase.swift in Sources */,
+ 681B59B624135B8963E94DBD /* MusicDetailUseCase.swift in Sources */,
+ 1B618962AF71BB5354C4B739 /* MusicSearchUseCase.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -770,7 +772,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.UseCase;
PRODUCT_NAME = UseCase_Stage;
SDKROOT = iphoneos;
@@ -815,7 +835,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.UseCase;
PRODUCT_NAME = UseCase_Stage;
SDKROOT = iphoneos;
@@ -823,7 +861,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;
@@ -907,14 +948,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.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;
@@ -950,7 +1012,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.UseCase;
PRODUCT_NAME = UseCase_Prod;
SDKROOT = iphoneos;
@@ -958,7 +1038,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;
@@ -996,7 +1079,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.UseCase;
PRODUCT_NAME = UseCase_Prod;
SDKROOT = iphoneos;
@@ -1041,7 +1142,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.UseCase;
PRODUCT_NAME = UseCase;
SDKROOT = iphoneos;
@@ -1086,7 +1205,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.UseCase;
PRODUCT_NAME = UseCase;
SDKROOT = iphoneos;
@@ -1094,7 +1231,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;
@@ -1125,7 +1265,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.UseCase.UseCaseTests;
PRODUCT_NAME = UseCaseTests;
SDKROOT = iphoneos;
@@ -1167,7 +1325,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.UseCase;
PRODUCT_NAME = UseCase_Debug;
SDKROOT = iphoneos;
@@ -1212,7 +1388,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.UseCase;
PRODUCT_NAME = UseCase_Debug;
SDKROOT = iphoneos;
@@ -1220,7 +1414,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/Core/Domain/UseCase/UseCaseTests/Sources/MusicDetailUseCaseTests.swift b/Projects/Core/Domain/UseCase/UseCaseTests/Sources/MusicDetailUseCaseTests.swift
index babb203..04b462c 100644
--- a/Projects/Core/Domain/UseCase/UseCaseTests/Sources/MusicDetailUseCaseTests.swift
+++ b/Projects/Core/Domain/UseCase/UseCaseTests/Sources/MusicDetailUseCaseTests.swift
@@ -10,7 +10,7 @@ import Foundation
import DomainInterface
import DataInterface
import Entity
-import Repository // (필요 시)
+import Repository
@testable import UseCase
@Suite("MusicDetailUseCaseTests", .tags(.unit, .useCase, .mock))
diff --git a/Projects/Core/Domain/UseCase/UseCaseTests/Sources/MusicSearchUseCaseTests.swift b/Projects/Core/Domain/UseCase/UseCaseTests/Sources/MusicSearchUseCaseTests.swift
index 567a1e8..4ba21bd 100644
--- a/Projects/Core/Domain/UseCase/UseCaseTests/Sources/MusicSearchUseCaseTests.swift
+++ b/Projects/Core/Domain/UseCase/UseCaseTests/Sources/MusicSearchUseCaseTests.swift
@@ -37,7 +37,7 @@ struct MusicSearchUseCaseTests {
let items = try await useCase.searchMusic(searchQuery: "유다빈밴드")
// Then: 결과 검증 (DTO → Domain 매핑)
- #expect(items.count == 2, "결과 개수가 올바르다 ✅")
+ #expect(items.count == 2, "결과 개수가 올바르다 ")
#expect(items[0].trackName == "봄노래", "첫 번째 곡 이름 매핑 확인")
#expect(items[0].artist == "아이유", "아티스트 매핑 확인")
#expect(items[1].trackName == "여름밤", "두 번째 곡 이름 매핑 확인")
@@ -54,4 +54,105 @@ struct MusicSearchUseCaseTests {
_ = try await useCase.searchMusic(searchQuery: "fail-me")
}
}
+
+ @Test("getCategoryCount - 각 카테고리별 정확한 개수 반환")
+ func testGetCategoryCount() {
+ // Given: 각 미디어 타입별로 다른 개수의 아이템들
+ let musicItems = [
+ MusicItem.detailMusicItem, // music
+ MusicItem(trackId: 2, trackName: "Movie Title", album: "Movie Album", artist: "Director",
+ artworkURL: URL(string: "https://example.com/movie.jpg")!, previewURL: nil,
+ releaseDate: "2024-01-01T00:00:00Z", aboutAlbumInfo: "Movie Info",
+ genre: "Action", mediaType: .movie),
+ MusicItem(trackId: 3, trackName: "Podcast Episode", album: "Podcast Series", artist: "Host",
+ artworkURL: URL(string: "https://example.com/podcast.jpg")!, previewURL: nil,
+ releaseDate: "2024-01-01T00:00:00Z", aboutAlbumInfo: "Episode Info",
+ genre: "Technology", mediaType: .podcast),
+ MusicItem(trackId: 4, trackName: "Other Content", album: "Other Album", artist: "Other Artist",
+ artworkURL: URL(string: "https://example.com/other.jpg")!, previewURL: nil,
+ releaseDate: "2024-01-01T00:00:00Z", aboutAlbumInfo: "Other Info",
+ genre: "Unknown", mediaType: .other),
+ MusicItem(trackId: 5, trackName: "Another Music", album: "Music Album", artist: "Singer",
+ artworkURL: URL(string: "https://example.com/music2.jpg")!, previewURL: nil,
+ releaseDate: "2024-01-01T00:00:00Z", aboutAlbumInfo: "Music Info",
+ genre: "Pop", mediaType: .music)
+ ]
+
+ let repo = MockMusicSearchRepository()
+ let useCase = MusicSearchUseCase(repository: repo)
+
+ // Then: 각 카테고리별 정확한 개수 확인
+ #expect(useCase.getCategoryCount(from: musicItems, category: .all) == 5, "전체 개수가 5개")
+ #expect(useCase.getCategoryCount(from: musicItems, category: .music) == 2, "음악 2개")
+ #expect(useCase.getCategoryCount(from: musicItems, category: .movies) == 1, "영화 1개")
+ #expect(useCase.getCategoryCount(from: musicItems, category: .podcast) == 1, "팟캐스트 1개")
+ #expect(useCase.getCategoryCount(from: musicItems, category: .etc) == 1, "기타 1개")
+ }
+
+ @Test("getCategoryCount - 빈 배열에서 0 반환")
+ func testGetCategoryCountWithEmptyArray() {
+ let repo = MockMusicSearchRepository()
+ let useCase = MusicSearchUseCase(repository: repo)
+ let emptyItems: [MusicItem] = []
+
+ // Then: 모든 카테고리에서 0 반환
+ #expect(useCase.getCategoryCount(from: emptyItems, category: .all) == 0)
+ #expect(useCase.getCategoryCount(from: emptyItems, category: .music) == 0)
+ #expect(useCase.getCategoryCount(from: emptyItems, category: .movies) == 0)
+ #expect(useCase.getCategoryCount(from: emptyItems, category: .podcast) == 0)
+ #expect(useCase.getCategoryCount(from: emptyItems, category: .etc) == 0)
+ }
+
+ @Test("searchMedia 성공 시 올바른 파라미터 전달 및 Domain 변환")
+ func testSearchMediaSuccessWithCorrectParameters() async throws {
+ // Given: Mock DTO 데이터
+ let dto: [Model.ITunesTrack] = [
+ .mock(id: 300, artist: "BTS", name: "Dynamite"),
+ .mock(id: 400, artist: "BLACKPINK", name: "How You Like That")
+ ]
+ let repo = MockMusicSearchRepository(result: .success(dto))
+ let useCase = MusicSearchUseCase(repository: repo)
+
+ // When: searchMedia 실행
+ let items = try await useCase.searchMedia(query: "K-Pop", media: "music", entity: "song")
+
+ // Then: 올바른 파라미터가 전달되었는지 확인
+ #expect(repo.receivedQueries.contains("K-Pop|music|song"), "올바른 파라미터 전달 확인")
+
+ // Domain 변환 확인
+ #expect(items.count == 2, "결과 개수가 2개")
+ #expect(items[0].trackName == "Dynamite", "첫 번째 곡 이름 확인")
+ #expect(items[0].artist == "BTS", "첫 번째 아티스트 확인")
+ #expect(items[1].trackName == "How You Like That", "두 번째 곡 이름 확인")
+ #expect(items[1].artist == "BLACKPINK", "두 번째 아티스트 확인")
+ }
+
+ @Test("searchMedia 실패 시 에러 전파")
+ func testSearchMediaFailurePropagatesError() async {
+ enum SearchError: Error { case networkFailure }
+ let repo = MockMusicSearchRepository(result: .failure(SearchError.networkFailure))
+ let useCase = MusicSearchUseCase(repository: repo)
+
+ await #expect(throws: SearchError.self) {
+ _ = try await useCase.searchMedia(query: "fail", media: "music", entity: "song")
+ }
+ }
+
+ @Test("searchMedia 다양한 미디어 타입 테스트")
+ func testSearchMediaWithDifferentMediaTypes() async throws {
+ // Given
+ let dto: [Model.ITunesTrack] = [.mock(id: 500, artist: "Test Artist", name: "Test Content")]
+ let repo = MockMusicSearchRepository(result: .success(dto))
+ let useCase = MusicSearchUseCase(repository: repo)
+
+ // When: 다양한 미디어 타입으로 검색
+ _ = try await useCase.searchMedia(query: "test", media: "movie", entity: "movie")
+ _ = try await useCase.searchMedia(query: "test", media: "podcast", entity: "podcast")
+ _ = try await useCase.searchMedia(query: "test", media: "music", entity: "musicTrack")
+
+ // Then: 각각 다른 파라미터가 전달되었는지 확인
+ #expect(repo.receivedQueries.contains("test|movie|movie"), "영화 검색 파라미터 확인")
+ #expect(repo.receivedQueries.contains("test|podcast|podcast"), "팟캐스트 검색 파라미터 확인")
+ #expect(repo.receivedQueries.contains("test|music|musicTrack"), "음악 검색 파라미터 확인")
+ }
}
diff --git a/Projects/Presentation/Detail/Sources/View/Component/NavigationArrowButton.swift b/Projects/Presentation/Detail/Sources/View/Component/NavigationArrowButton.swift
index 3b55f7c..cac3aa9 100644
--- a/Projects/Presentation/Detail/Sources/View/Component/NavigationArrowButton.swift
+++ b/Projects/Presentation/Detail/Sources/View/Component/NavigationArrowButton.swift
@@ -21,13 +21,20 @@ public struct NavigationArrowButton: View {
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)
+ Button(action: {
+ backAction()
+ }) {
+ Image(systemName: "chevron.left")
+ .resizable()
+ .scaledToFit()
+ .frame(width: 16, height: 24)
+ .font(.pretendardFont(family: .semiBold, size: 20))
+ .foregroundStyle(.white)
+ .padding(16)
+ .background(Color.lightGray100.opacity(0.6))
+ .clipShape(Circle())
+ }
+ .buttonStyle(PlainButtonStyle())
Spacer()
diff --git a/Projects/Presentation/Detail/Sources/View/Component/ScalingHeaderDetailView.swift b/Projects/Presentation/Detail/Sources/View/Component/ScalingHeaderDetailView.swift
index 1ba5691..fd9537e 100644
--- a/Projects/Presentation/Detail/Sources/View/Component/ScalingHeaderDetailView.swift
+++ b/Projects/Presentation/Detail/Sources/View/Component/ScalingHeaderDetailView.swift
@@ -7,26 +7,27 @@
import SwiftUI
import DesignSystem
+import ComposableArchitecture
struct ScalingHeaderDetailView: View {
let headerURL: URL?
let isLoading: Bool
let headerHeight: CGFloat
let content: Content
- let backAction: () -> Void
+ let store: StoreOf
init(
headerURL: URL?,
isLoading: Bool,
headerHeight: CGFloat = 400,
- backAction: @escaping () -> Void = {},
+ store: StoreOf,
@ViewBuilder content: () -> Content
) {
self.headerURL = headerURL
self.isLoading = isLoading
self.headerHeight = headerHeight
+ self.store = store
self.content = content()
- self.backAction = backAction
}
var body: some View {
@@ -54,7 +55,7 @@ struct ScalingHeaderDetailView: View {
}
NavigationArrowButton {
- backAction()
+ store.send(.navigation(.backToHome))
}
.padding(.leading, 16)
.padding(.top, outerGeo.safeAreaInsets.top + 20)
diff --git a/Projects/Presentation/Detail/Sources/View/DetailView.swift b/Projects/Presentation/Detail/Sources/View/DetailView.swift
index 9c931b5..79c3975 100644
--- a/Projects/Presentation/Detail/Sources/View/DetailView.swift
+++ b/Projects/Presentation/Detail/Sources/View/DetailView.swift
@@ -26,9 +26,7 @@ public struct DetailView: View {
headerURL: store.musicItem?.highResolutionArtworkURL,
isLoading: store.isLoading,
headerHeight: 400,
- backAction: {
- store.send(.navigation(.backToHome))
- }
+ store: store
) {
VStack(alignment: .leading, spacing: 24) {
if store.isLoading {
diff --git a/Projects/Presentation/Home/Home.xcodeproj/project.pbxproj b/Projects/Presentation/Home/Home.xcodeproj/project.pbxproj
index 5945f73..aaf040c 100644
--- a/Projects/Presentation/Home/Home.xcodeproj/project.pbxproj
+++ b/Projects/Presentation/Home/Home.xcodeproj/project.pbxproj
@@ -95,6 +95,7 @@
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 */; };
+ D361A4421856DAAA37AC805E /* NetworkService.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4A7C04A43E2FED35200F3150 /* NetworkService.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 */; };
@@ -109,7 +110,6 @@
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 */; };
@@ -260,6 +260,7 @@
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; };
+ 4A7C04A43E2FED35200F3150 /* NetworkService.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = NetworkService.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; };
@@ -277,7 +278,6 @@
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; };
@@ -380,6 +380,7 @@
3AE6C2658C8A0DAF4FB5AB3D /* LogMacro.framework in Frameworks */,
7F58E3932E6E87D7A775C6A2 /* Model.framework in Frameworks */,
C8DC844992B30693A7FEA61D /* Moya.framework in Frameworks */,
+ D361A4421856DAAA37AC805E /* NetworkService.framework in Frameworks */,
A05D017F419E6C39C08B24E6 /* Networking.framework in Frameworks */,
82DAE759D3AC83460AA6238E /* OrderedCollections.framework in Frameworks */,
38B3A6E1533D6FE253C6ABF4 /* Perception.framework in Frameworks */,
@@ -387,7 +388,6 @@
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 */,
@@ -449,13 +449,13 @@
5030B1CA5F8E96AA31793193 /* Model.framework */,
E45A37D9EB117BE8E26CCEAF /* Moya.framework */,
D2469AB87A1F38762DA5F745 /* Networking.framework */,
+ 4A7C04A43E2FED35200F3150 /* NetworkService.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 */,
diff --git a/Projects/Presentation/Home/HomeTests/Sources/HomeReducerTests.swift b/Projects/Presentation/Home/HomeTests/Sources/HomeReducerTests.swift
index 562e681..8aa0c30 100644
--- a/Projects/Presentation/Home/HomeTests/Sources/HomeReducerTests.swift
+++ b/Projects/Presentation/Home/HomeTests/Sources/HomeReducerTests.swift
@@ -28,11 +28,46 @@ 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
+ let searchMediaHandler: @Sendable (String, String, String) async throws -> [Entity.MusicItem]
+ let getCategoryCountHandler: ([Entity.MusicItem], Entity.SearchCategory) -> Int
+
+ init(
+ searchHandler: @escaping @Sendable (String) async throws -> [MusicItem],
+ fetchDetailHandler: @escaping @Sendable (Int) async throws -> Entity.MusicItem,
+ searchMediaHandler: @escaping @Sendable (String, String, String) async throws -> [Entity.MusicItem] = { _, _, _ in [] },
+ getCategoryCountHandler: @escaping ([Entity.MusicItem], Entity.SearchCategory) -> Int = { results, category in
+ switch category {
+ case .all:
+ return results.count
+ case .music:
+ return results.musicCount
+ case .movies:
+ return results.movieCount
+ case .podcast:
+ return results.podcastCount
+ case .etc:
+ return results.etcCount
+ }
+ }
+ ) {
+ self.searchHandler = searchHandler
+ self.fetchDetailHandler = fetchDetailHandler
+ self.searchMediaHandler = searchMediaHandler
+ self.getCategoryCountHandler = getCategoryCountHandler
+ }
func searchMusic(searchQuery: String) async throws -> [MusicItem] {
try await searchHandler(searchQuery)
}
+ func searchMedia(query: String, media: String, entity: String) async throws -> [Entity.MusicItem] {
+ try await searchMediaHandler(query, media, entity)
+ }
+
+ func getCategoryCount(from results: [Entity.MusicItem], category: Entity.SearchCategory) -> Int {
+ getCategoryCountHandler(results, category)
+ }
+
func fetchTrackDetail(id: Int) async throws -> Entity.MusicItem {
try await fetchDetailHandler(id)
}
@@ -132,7 +167,9 @@ struct HomeReducerTests {
store.exhaustivity = .off(showSkippedAssertions: false)
- await store.send(.view(.onAppear))
+ await store.send(.view(.onAppear)) { state in
+ state.didTriggerInitialFetch = true
+ }
await store.skipReceivedActions()
#expect(store.state.popularMusicModel.count == Fixture.popular.count)
@@ -198,4 +235,97 @@ struct HomeReducerTests {
#expect(store.state.detailMusicItem?.trackId == picked.trackId)
}
+
+ @Test("searchMedia 호출 시 지정한 핸들러와 파라미터 사용")
+ func searchMedia_usesInjectedHandler() async throws {
+ let expectedItems: [Entity.MusicItem] = [
+ .stub(trackId: 1, trackName: "Song-1"),
+ .stub(trackId: 2, trackName: "Song-2")
+ ]
+
+ var captured: (String, String, String)?
+
+ let useCase = StubMusicSearchUseCase(
+ searchHandler: { _ in Fixture.popular },
+ fetchDetailHandler: { _ in .stub() },
+ searchMediaHandler: { query, media, entity in
+ captured = (query, media, entity)
+ return expectedItems
+ }
+ )
+
+ let result = try await useCase.searchMedia(query: "K-Pop", media: "music", entity: "song")
+
+ #expect(result == expectedItems)
+ #expect(captured?.0 == "K-Pop")
+ #expect(captured?.1 == "music")
+ #expect(captured?.2 == "song")
+ }
+
+ @Test("getCategoryCount 카테고리별 건수 반환")
+ func getCategoryCount_returnsCategorySpecificCounts() {
+ let sampleResults: [Entity.MusicItem] = [
+ .init(
+ trackId: 1,
+ trackName: "Music",
+ album: "Album",
+ artist: "Artist",
+ artworkURL: URL(string: "https://example.com/1.png")!,
+ releaseDate: "2024-01-01T00:00:00Z",
+ genre: "Pop",
+ mediaType: .music
+ ),
+ .init(
+ trackId: 2,
+ trackName: "Movie",
+ album: "Movie Album",
+ artist: "Director",
+ artworkURL: URL(string: "https://example.com/2.png")!,
+ releaseDate: "2024-02-01T00:00:00Z",
+ genre: "Drama",
+ mediaType: .movie
+ ),
+ .init(
+ trackId: 3,
+ trackName: "Podcast",
+ album: "Podcast Album",
+ artist: "Host",
+ artworkURL: URL(string: "https://example.com/3.png")!,
+ releaseDate: "2024-03-01T00:00:00Z",
+ genre: "Talk",
+ mediaType: .podcast
+ ),
+ .init(
+ trackId: 4,
+ trackName: "Other",
+ album: "Other Album",
+ artist: "Creator",
+ artworkURL: URL(string: "https://example.com/4.png")!,
+ releaseDate: "2024-04-01T00:00:00Z",
+ genre: "Misc",
+ mediaType: .other
+ ),
+ .init(
+ trackId: 5,
+ trackName: "Music-2",
+ album: "Second Album",
+ artist: "Artist",
+ artworkURL: URL(string: "https://example.com/5.png")!,
+ releaseDate: "2024-05-01T00:00:00Z",
+ genre: "Pop",
+ mediaType: .music
+ )
+ ]
+
+ let useCase = StubMusicSearchUseCase(
+ searchHandler: { _ in Fixture.popular },
+ fetchDetailHandler: { _ in .stub() }
+ )
+
+ #expect(useCase.getCategoryCount(from: sampleResults, category: .all) == 5)
+ #expect(useCase.getCategoryCount(from: sampleResults, category: .music) == 2)
+ #expect(useCase.getCategoryCount(from: sampleResults, category: .movies) == 1)
+ #expect(useCase.getCategoryCount(from: sampleResults, category: .podcast) == 1)
+ #expect(useCase.getCategoryCount(from: sampleResults, category: .etc) == 1)
+ }
}
diff --git a/Projects/Presentation/Home/Sources/Coordinator/Reducer/HomeCoordinator.swift b/Projects/Presentation/Home/Sources/Coordinator/Reducer/HomeCoordinator.swift
index 038d660..442461b 100644
--- a/Projects/Presentation/Home/Sources/Coordinator/Reducer/HomeCoordinator.swift
+++ b/Projects/Presentation/Home/Sources/Coordinator/Reducer/HomeCoordinator.swift
@@ -34,8 +34,11 @@ public struct HomeCoordinator {
public enum View {
case backToRoot
+ case switchTapBar
}
+
+
private enum CancelID: Hashable {
case screen
}
@@ -67,7 +70,11 @@ extension HomeCoordinator {
state.routes.push(.detail(.init(musicItem: item)))
return .none
+ case .routeAction(id: _, action: .home(.navigation(.tapSearch))):
+ return .send(.view(.switchTapBar))
+
case .routeAction(id: _, action: .detail(.navigation(.backToHome))):
+// state.routes.goBackToRoot()
return .send(.view(.backToRoot))
default:
@@ -85,6 +92,8 @@ extension HomeCoordinator {
state.routes.goBackTo(\.home)
return .none
+ case .switchTapBar:
+ return .none
}
}
}
diff --git a/Projects/Presentation/Home/Sources/Main /Reducer/HomeReducer.swift b/Projects/Presentation/Home/Sources/Main /Reducer/HomeReducer.swift
index d866d2c..755bb70 100644
--- a/Projects/Presentation/Home/Sources/Main /Reducer/HomeReducer.swift
+++ b/Projects/Presentation/Home/Sources/Main /Reducer/HomeReducer.swift
@@ -24,6 +24,7 @@ public struct HomeReducer {
var errorMessage: String?
@Shared(.inMemory("MusicItem")) var detailMusicItem: MusicItem? = nil
var latestFailedSeason: MusicSeason?
+ var didTriggerInitialFetch: Bool = false
public init() {}
}
@@ -53,14 +54,17 @@ public struct HomeReducer {
@CasePathable
public enum NavigationAction: Equatable {
case musicCardTapped(item: MusicItem)
+ case tapSearch
}
@Dependency(MusicSearchUseCase.self) var musicSearchUseCase
@Dependency(\.continuousClock) var clock
@Dependency(\.mainQueue) var mainQueue
- private struct CancelID: Hashable { let category: MusicSeason }
- private struct HomeCancel: Hashable {}
+ private enum CancelID: Hashable {
+ case fetchAll
+ case season(MusicSeason)
+ }
public var body: some Reducer {
BindingReducer()
@@ -104,6 +108,8 @@ extension HomeReducer {
) -> Effect {
switch action {
case .onAppear:
+ guard state.didTriggerInitialFetch == false else { return .none }
+ state.didTriggerInitialFetch = true
return .send(.async(.fetchAll))
}
}
@@ -114,10 +120,19 @@ extension HomeReducer {
) -> Effect {
switch action {
case .fetchAll:
- return .merge(
- MusicSeason.allCases.map { .send(.async(.fetchMusic($0))) }
- )
- .debounce(id: HomeCancel(), for: 0.1, scheduler: mainQueue)
+ return .run { [musicSearchUseCase] send in
+ await withTaskGroup(of: Void.self) { group in
+ for season in MusicSeason.allCases {
+ group.addTask {
+ let result = await Result {
+ try await musicSearchUseCase.searchMusic(searchQuery: season.term)
+ }
+ await send(.inner(.fetchMusicResponse(season, result)))
+ }
+ }
+ }
+ }
+ .cancellable(id: CancelID.fetchAll, cancelInFlight: true)
case .fetchMusic(let category):
return .run { send in
@@ -131,7 +146,7 @@ extension HomeReducer {
await send(.inner(.fetchMusicResponse(category, .failure(error))))
}
}
- .cancellable(id: CancelID(category: category), cancelInFlight: true)
+ .cancellable(id: CancelID.season(category), cancelInFlight: true)
}
}
@@ -143,6 +158,9 @@ extension HomeReducer {
case .musicCardTapped(let item):
state.$detailMusicItem.withLock { $0 = item }
return .none
+
+ case .tapSearch:
+ return .none
}
}
diff --git a/Projects/Presentation/Home/Sources/Main /View/Component/SearchBarView.swift b/Projects/Presentation/Home/Sources/Main /View/Component/SearchBarView.swift
index 0206343..7490448 100644
--- a/Projects/Presentation/Home/Sources/Main /View/Component/SearchBarView.swift
+++ b/Projects/Presentation/Home/Sources/Main /View/Component/SearchBarView.swift
@@ -2,7 +2,13 @@ import SwiftUI
import DesignSystem
public struct SearchBarView: View {
- public init() {}
+ private var action: () -> Void = { }
+
+ public init(
+ action: @escaping () -> Void
+ ) {
+ self.action = action
+ }
public var body: some View {
HStack(spacing: 10) {
@@ -27,6 +33,7 @@ public struct SearchBarView: View {
)
.shadow(color: .black.opacity(0.2), radius: 3, y: 2)
)
- .contentShape(Rectangle())
+ .contentShape(Rectangle())
+ .onTapGesture(perform: action)
}
}
diff --git a/Projects/Presentation/Home/Sources/Main /View/HomeView.swift b/Projects/Presentation/Home/Sources/Main /View/HomeView.swift
index 9356623..cad6cfb 100644
--- a/Projects/Presentation/Home/Sources/Main /View/HomeView.swift
+++ b/Projects/Presentation/Home/Sources/Main /View/HomeView.swift
@@ -23,7 +23,6 @@ public struct HomeView: 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
@@ -59,7 +58,9 @@ public struct HomeView: View {
.scrollIndicators(.hidden)
VStack(spacing: 8) {
- SearchBarView()
+ SearchBarView {
+ store.send(.navigation(.tapSearch))
+ }
.padding(.horizontal, horizontalPadding)
}
.padding(.top, proxy.safeAreaInsets.top + 4)
diff --git a/Projects/Presentation/Presentation/Presentation.xcodeproj/project.pbxproj b/Projects/Presentation/Presentation/Presentation.xcodeproj/project.pbxproj
index 9098f7d..f2ba27e 100644
--- a/Projects/Presentation/Presentation/Presentation.xcodeproj/project.pbxproj
+++ b/Projects/Presentation/Presentation/Presentation.xcodeproj/project.pbxproj
@@ -13,9 +13,7 @@
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 */; };
@@ -27,14 +25,15 @@
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 */; };
+ 4A1C3E825C8B1034E7E8218B /* RootTab.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 874222D75AC3294956D882B5 /* RootTab.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 */; };
+ 5AC827149AD48A6F79CF63DA /* Search.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3BBD8EA71D55024889942740 /* Search.framework */; };
+ 604FFFA110A0274CEF369B5B /* RootTab.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 874222D75AC3294956D882B5 /* RootTab.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 */; };
69F501FFCECF1AB16A4D4752 /* Presentation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 342AE4EAEE40294F0A26F2B8 /* Presentation.framework */; };
@@ -55,28 +54,27 @@
9817995B59A87456AC4FAFBE /* Perception.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B2C1426AC84D7DD283CE6A67 /* Perception.framework */; };
996AEC4FE0BFF1A9467213F1 /* Clocks.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 74DA26FE7C09459795F68303 /* Clocks.framework */; };
99ED14160CCB43FDE651C307 /* Test.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3EBF73C9599C25FE868248ED /* Test.swift */; };
+ A2595F3FD6455F83F16AE242 /* RootTab.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 874222D75AC3294956D882B5 /* RootTab.framework */; };
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 */; };
+ B90D4D7A6C574EEA6D6BAF9B /* RootTab.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 874222D75AC3294956D882B5 /* RootTab.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 */; };
+ CA320E6552FC7E6B1804DE26 /* RootTab.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 874222D75AC3294956D882B5 /* RootTab.framework */; };
+ CBA793D6F6865D71B7E67AEE /* NetworkService.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1434E7715232F6B9E9539F61 /* NetworkService.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 */; };
@@ -108,8 +106,7 @@
buildActionMask = 8;
dstSubfolderSpec = 16;
files = (
- 14DAD3FC298095990C5B1E92 /* Detail.framework in Dependencies */,
- 3EFAE440F52C82155605ECEA /* Home.framework in Dependencies */,
+ 604FFFA110A0274CEF369B5B /* RootTab.framework in Dependencies */,
EC2D67DCAC8BF67040034401 /* Splash.framework in Dependencies */,
);
name = Dependencies;
@@ -120,8 +117,7 @@
buildActionMask = 8;
dstSubfolderSpec = 16;
files = (
- B584B787DA06633F36954C60 /* Detail.framework in Dependencies */,
- 54B649D24AB621D8E9044D06 /* Home.framework in Dependencies */,
+ A2595F3FD6455F83F16AE242 /* RootTab.framework in Dependencies */,
2E51D64D30DF720ED92D75D5 /* Splash.framework in Dependencies */,
);
name = Dependencies;
@@ -132,8 +128,7 @@
buildActionMask = 8;
dstSubfolderSpec = 16;
files = (
- E7CBAEF8338E806EEA5F4FDC /* Detail.framework in Dependencies */,
- DFF831C7D749689730C26A6C /* Home.framework in Dependencies */,
+ B90D4D7A6C574EEA6D6BAF9B /* RootTab.framework in Dependencies */,
7685A7198512E2DA052B2C07 /* Splash.framework in Dependencies */,
);
name = Dependencies;
@@ -164,8 +159,7 @@
buildActionMask = 8;
dstSubfolderSpec = 16;
files = (
- DBDF5AD2B4E0C7B00CDBED24 /* Detail.framework in Dependencies */,
- 10BFCBDE3F3DA3E08F06E2E1 /* Home.framework in Dependencies */,
+ 4A1C3E825C8B1034E7E8218B /* RootTab.framework in Dependencies */,
038F4E4797CB365217FCCBF9 /* Splash.framework in Dependencies */,
);
name = Dependencies;
@@ -211,6 +205,7 @@
0C8972F6F03E2BD077DCB37E /* CustomDump.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CustomDump.framework; sourceTree = BUILT_PRODUCTS_DIR; };
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 = ""; };
+ 1434E7715232F6B9E9539F61 /* NetworkService.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = NetworkService.framework; sourceTree = BUILT_PRODUCTS_DIR; };
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; };
@@ -223,6 +218,7 @@
32DB353133F1D17C0F625336 /* swift-sharing_Sharing.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "swift-sharing_Sharing.bundle"; sourceTree = BUILT_PRODUCTS_DIR; };
342AE4EAEE40294F0A26F2B8 /* Presentation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Presentation.framework; sourceTree = BUILT_PRODUCTS_DIR; };
375AA2720EF90234325320FB /* XCTestDynamicOverlay.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = XCTestDynamicOverlay.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 3BBD8EA71D55024889942740 /* Search.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Search.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; };
@@ -241,6 +237,7 @@
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; };
+ 874222D75AC3294956D882B5 /* RootTab.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RootTab.framework; sourceTree = BUILT_PRODUCTS_DIR; };
8DB201D0E8BE1D1547639F88 /* Dependencies.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Dependencies.framework; sourceTree = BUILT_PRODUCTS_DIR; };
984C2842981AA76BB051604E /* Repository.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Repository.framework; sourceTree = BUILT_PRODUCTS_DIR; };
9C4E2C9101CD2ABA7FC93366 /* CasePaths.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CasePaths.framework; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -254,7 +251,6 @@
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; };
@@ -313,15 +309,17 @@
C7A0C7EBE0FDA649B2B3CEA3 /* LogMacro.framework in Frameworks */,
59F11625F203DCDD137E6944 /* Model.framework in Frameworks */,
FD0F32BCA77F5C66B4BB6F47 /* Moya.framework in Frameworks */,
+ CBA793D6F6865D71B7E67AEE /* NetworkService.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 */,
+ CA320E6552FC7E6B1804DE26 /* RootTab.framework in Frameworks */,
ABF8F449B19C3462BD42A592 /* RxMoya.framework in Frameworks */,
CF2FD6EA7BDF7A79A3D44A02 /* RxSwift.framework in Frameworks */,
- EF37DF3F1678952A881FE872 /* Service.framework in Frameworks */,
+ 5AC827149AD48A6F79CF63DA /* Search.framework in Frameworks */,
315228127069BB806DAE9F24 /* Shared.framework in Frameworks */,
8D23DE0BD5A9E91111F24602 /* Sharing.framework in Frameworks */,
49F6D986954C901DC50E5A49 /* Sharing1.framework in Frameworks */,
@@ -455,6 +453,7 @@
0595BAB78E7CD48075AF15B0 /* Model.framework */,
49CD2C5E60DF7C88EAF411D6 /* Moya.framework */,
D663ED1986448AD4662C5624 /* Networking.framework */,
+ 1434E7715232F6B9E9539F61 /* NetworkService.framework */,
A5B2D2882714ECB08228A5F1 /* OrderedCollections.framework */,
B2C1426AC84D7DD283CE6A67 /* Perception.framework */,
DBD6E248067073EB598B6D86 /* PerceptionCore.framework */,
@@ -464,9 +463,10 @@
342AE4EAEE40294F0A26F2B8 /* Presentation.framework */,
B5F6E2479E03DF9A1548AFE4 /* PresentationTests.xctest */,
984C2842981AA76BB051604E /* Repository.framework */,
+ 874222D75AC3294956D882B5 /* RootTab.framework */,
1D35546BA6932409F8FF5020 /* RxMoya.framework */,
CFA78759AF8280F2478F2F44 /* RxSwift.framework */,
- CF3D9435F3E4322BD6B9160E /* Service.framework */,
+ 3BBD8EA71D55024889942740 /* Search.framework */,
DED236801C3C6EBF9BB755A4 /* Shared.framework */,
497184139D240D91EF50C77C /* Sharing.framework */,
232AE6BF7A1AFCF0B9B823FD /* Sharing1.framework */,
diff --git a/Projects/Presentation/Presentation/Project.swift b/Projects/Presentation/Presentation/Project.swift
index 6abc185..0655422 100644
--- a/Projects/Presentation/Presentation/Project.swift
+++ b/Projects/Presentation/Presentation/Project.swift
@@ -11,8 +11,7 @@ let project = Project.makeAppModule(
settings: .settings(),
dependencies: [
.Presentation(implements: .Splash),
- .Presentation(implements: .Home),
- .Presentation(implements: .Detail)
+ .Presentation(implements: .RootTab)
],
sources: ["Sources/**"]
)
diff --git a/Projects/Presentation/Presentation/Sources/Exported/PresentationExported.swift b/Projects/Presentation/Presentation/Sources/Exported/PresentationExported.swift
index 24a95a8..8e05e12 100644
--- a/Projects/Presentation/Presentation/Sources/Exported/PresentationExported.swift
+++ b/Projects/Presentation/Presentation/Sources/Exported/PresentationExported.swift
@@ -10,3 +10,5 @@
@_exported import Splash
@_exported import Home
@_exported import Detail
+@_exported import Search
+@_exported import RootTab
diff --git a/Projects/Presentation/RootTab/Derived/InfoPlists/RootTab-Debug-Info.plist b/Projects/Presentation/RootTab/Derived/InfoPlists/RootTab-Debug-Info.plist
new file mode 100644
index 0000000..323e5ec
--- /dev/null
+++ b/Projects/Presentation/RootTab/Derived/InfoPlists/RootTab-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/RootTab/Derived/InfoPlists/RootTab-Info.plist b/Projects/Presentation/RootTab/Derived/InfoPlists/RootTab-Info.plist
new file mode 100644
index 0000000..323e5ec
--- /dev/null
+++ b/Projects/Presentation/RootTab/Derived/InfoPlists/RootTab-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/RootTab/Derived/InfoPlists/RootTab-Prod-Info.plist b/Projects/Presentation/RootTab/Derived/InfoPlists/RootTab-Prod-Info.plist
new file mode 100644
index 0000000..323e5ec
--- /dev/null
+++ b/Projects/Presentation/RootTab/Derived/InfoPlists/RootTab-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/RootTab/Derived/InfoPlists/RootTab-Stage-Info.plist b/Projects/Presentation/RootTab/Derived/InfoPlists/RootTab-Stage-Info.plist
new file mode 100644
index 0000000..323e5ec
--- /dev/null
+++ b/Projects/Presentation/RootTab/Derived/InfoPlists/RootTab-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/RootTab/Derived/InfoPlists/RootTabTests-Info.plist b/Projects/Presentation/RootTab/Derived/InfoPlists/RootTabTests-Info.plist
new file mode 100644
index 0000000..6c40a6c
--- /dev/null
+++ b/Projects/Presentation/RootTab/Derived/InfoPlists/RootTabTests-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/RootTab/Project.swift b/Projects/Presentation/RootTab/Project.swift
new file mode 100644
index 0000000..7c68148
--- /dev/null
+++ b/Projects/Presentation/RootTab/Project.swift
@@ -0,0 +1,18 @@
+import Foundation
+import ProjectDescription
+import DependencyPlugin
+import ProjectTemplatePlugin
+import ProjectTemplatePlugin
+import DependencyPackagePlugin
+
+let project = Project.makeAppModule(
+ name: "RootTab",
+ bundleId: .appBundleID(name: ".RootTab"),
+ product: .staticFramework,
+ settings: .settings(),
+ dependencies: [
+ .Presentation(implements: .Home),
+ .Presentation(implements: .Search),
+ ],
+ sources: ["Sources/**"]
+)
diff --git a/Projects/Presentation/RootTab/RootTab.xcodeproj/project.pbxproj b/Projects/Presentation/RootTab/RootTab.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..0c68918
--- /dev/null
+++ b/Projects/Presentation/RootTab/RootTab.xcodeproj/project.pbxproj
@@ -0,0 +1,1563 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 55;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 01BD92F9D6F7E47ED5BA50ED /* Home.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = F8130BE2C4326E7BC2427CA2 /* Home.framework */; };
+ 020C31A3A43113E63D594236 /* SwiftNavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 21290B6BFDDAEDB8E29DABEB /* SwiftNavigation.framework */; };
+ 090CA66016B821DB0F408C01 /* XCTestDynamicOverlay.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FF650514C2BEB59DA6183832 /* XCTestDynamicOverlay.framework */; };
+ 09487B73F535836C31F8F8A2 /* CombineMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 69B1CE74716178CFF38931D4 /* CombineMoya.framework */; };
+ 0BE8FFE039BA9FBDCD637844 /* Test.swift in Sources */ = {isa = PBXBuildFile; fileRef = FED8024A56BBE55D636D7720 /* Test.swift */; };
+ 0CF1C8B7E326DEC93B1D5659 /* Search.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 20BDF3EACCD72BFA26DD9CE9 /* Search.framework */; };
+ 1408DE0EFE1AF744372711F2 /* WeaveDI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 029F1A2624AF00C024047375 /* WeaveDI.framework */; };
+ 1491281FDA3AF802E65F6804 /* RxMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 68CB45E1582E9F8F0CFCB2E1 /* RxMoya.framework */; };
+ 1DEC22BB3F6BAC269EB0254A /* Home.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8130BE2C4326E7BC2427CA2 /* Home.framework */; };
+ 1F8A1C0AA494631787315002 /* InternalCollectionsUtilities.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FCEEE51ACD7CEB6AC11EC36C /* InternalCollectionsUtilities.framework */; };
+ 23824011C238C1B4C380BE7C /* CustomDump.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7404339BA365E49E4EEF02FB /* CustomDump.framework */; };
+ 26F57E5BB38A9BD230E5E067 /* NetworkService.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0C5B9ED8AF81AD77FD0BEB32 /* NetworkService.framework */; };
+ 2C5362973E2B59041DBC629E /* Detail.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 98D9BCB85FAD54897B8DDE8B /* Detail.framework */; };
+ 2C9706443F494184DAF86E13 /* Core.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4F25A3677F3DADBF9B5D9E35 /* Core.framework */; };
+ 2EDAB4F665FE1D59D68E6272 /* swift-sharing_Sharing.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 513D11EBC521663F8B0ED08B /* swift-sharing_Sharing.bundle */; };
+ 35E346199A87761D6630779F /* RootTab.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3E85D726FFB83324402F614D /* RootTab.framework */; };
+ 3631562AC8B6F6B6B35BC643 /* EventLimiter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A6772D78A667A6FCCC236C6A /* EventLimiter.framework */; };
+ 3A1BC21C4119A100E2719935 /* MainTab.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C35CCD8ADD86F538F33A41F /* MainTab.swift */; };
+ 3ABF8CD6D53C0E7939726CCF /* Home.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = F8130BE2C4326E7BC2427CA2 /* Home.framework */; };
+ 3F52C072B75B412383250670 /* CombineSchedulers.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B3A3420B7BDFC732BD47BF8E /* CombineSchedulers.framework */; };
+ 42102D63F0DF5FB5D284AA51 /* Home.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = F8130BE2C4326E7BC2427CA2 /* Home.framework */; };
+ 4822BD22E5924A5E5208838D /* MainTab.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C35CCD8ADD86F538F33A41F /* MainTab.swift */; };
+ 49B924DC9452A26B19423AD6 /* SwiftUINavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0455A99419CDC6EB61F00806 /* SwiftUINavigation.framework */; };
+ 4B1D510CE71A35D4AB7F1273 /* CasePaths.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E602F268785B12CED6C97871 /* CasePaths.framework */; };
+ 4D051A20411E680969E31A7B /* DataInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9727F4DC6B08A8AB31CBB513 /* DataInterface.framework */; };
+ 4E6602DF02349D4F05A0B2F3 /* ConcurrencyExtras.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 87F900E3D284BAF13B708B05 /* ConcurrencyExtras.framework */; };
+ 5F299A3C1A449D23ECECF49E /* IssueReporting.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D624A36A172644E61089C01C /* IssueReporting.framework */; };
+ 628B95CC4312246B8F2CF3D0 /* OSLog.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 306C0DC2E10133AE3E3D036C /* OSLog.framework */; };
+ 63D241F349C2D13132A5D080 /* LogMacro.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BB0DCAECA21A97CA89433C0A /* LogMacro.framework */; };
+ 6B9ED905C5325610C0727B8D /* RootTabBarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEBC238C3D0EE65C15C6809D /* RootTabBarView.swift */; };
+ 6C493B51DE6802C118D40B71 /* Shared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F21D37FBB009BC838E8D1561 /* Shared.framework */; };
+ 6C5D019282D45746BED8DAF7 /* Alamofire.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8F07ACFA612759EA805148EB /* Alamofire.framework */; };
+ 6CBC3B611AAEB2E70F9309E8 /* Dependencies.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AE50812D010FBE676BAC4E5A /* Dependencies.framework */; };
+ 6E13886EA9D41ED6C77FA77C /* Perception.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9F25AD8B4EEDAC2332E15E93 /* Perception.framework */; };
+ 71ACA02815907A2EBDA1470C /* Moya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 88FE3677C3610371E1170004 /* Moya.framework */; };
+ 7552207B4A9E60635876F8C0 /* Search.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 20BDF3EACCD72BFA26DD9CE9 /* Search.framework */; };
+ 7828F1ABA4FF47C55DE4BE16 /* RootTabBarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEBC238C3D0EE65C15C6809D /* RootTabBarView.swift */; };
+ 791830F2196ED80D1F8AA9C7 /* IdentifiedCollections.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6B165818173DF92988B51E88 /* IdentifiedCollections.framework */; };
+ 797C0AD5563B8FBD2DF0E961 /* Sharing2.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0AC4945177993F780482E796 /* Sharing2.framework */; };
+ 7A7D498E23E7964B36EA374B /* Search.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 20BDF3EACCD72BFA26DD9CE9 /* Search.framework */; };
+ 82A10834C77F64DCE61F5D56 /* Foundations.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9E1C0151448BD0DAA9D776B2 /* Foundations.framework */; };
+ 87D15823F6A0FC4A16FA6322 /* UseCase.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8E4568F41C95DE2CF031AD82 /* UseCase.framework */; };
+ 8A2B6F00A071719CFC6CA0B0 /* OrderedCollections.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9DF07BBEC2B8DEDC4C260EE3 /* OrderedCollections.framework */; };
+ 8A8ED2930876C172F905A3D0 /* Alamofire_Alamofire.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = A1C16254E7FD6C06998DBE42 /* Alamofire_Alamofire.bundle */; };
+ 8D801CE7E62B817D8ACC9CB0 /* Search.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 20BDF3EACCD72BFA26DD9CE9 /* Search.framework */; };
+ 9230D430FAC14885BF777637 /* ComposableArchitecture.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 95EBF021CF00A46FD1CDE413 /* ComposableArchitecture.framework */; };
+ 92905DD7230F342FA0CC01F1 /* Model.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BBBC1F55BDCC1315B9087973 /* Model.framework */; };
+ 9671C59CA3745DA7E1BEFF47 /* AsyncMoya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 929FB8C9C74AB168701FA901 /* AsyncMoya.framework */; };
+ 99FE16348C98C22F6A64EF94 /* RootTabReducer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D22ABA16D5E5A96E9DDC17B0 /* RootTabReducer.swift */; };
+ 9AB1FE8773340BB4C559140C /* Repository.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2E4B88860DA7B41658B863F5 /* Repository.framework */; };
+ 9B687D9CA6F2A4D8D9654CE7 /* MainTab.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C35CCD8ADD86F538F33A41F /* MainTab.swift */; };
+ 9F8B97B641CA6855F1C7573D /* RootTabReducer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D22ABA16D5E5A96E9DDC17B0 /* RootTabReducer.swift */; };
+ A01C41F3F19E71806135957C /* Sharing.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0CAE284E7D53D427482FC3AA /* Sharing.framework */; };
+ B0EAB4B461F7B51E03915C90 /* swift-sharing_Sharing.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 513D11EBC521663F8B0ED08B /* swift-sharing_Sharing.bundle */; };
+ B2BD499036CBB401F0C811A5 /* CFNetwork.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BFA308FEF6AE6BECD015ABAA /* CFNetwork.framework */; };
+ B5315E7F2312D555D7FF5A23 /* swift-composable-architecture_ComposableArchitecture.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 56E09369F4C9A91174D69228 /* swift-composable-architecture_ComposableArchitecture.bundle */; };
+ B60FE16E9E2E8A1AF0A842AE /* DomainInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9E58A732CBA14DB658B627F9 /* DomainInterface.framework */; };
+ B77247FA01EED95B6695106E /* API.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6035808A0B713776BCA70ADF /* API.framework */; };
+ B7EF4AA34762893F97C713BC /* PerceptionCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EA9632F0C162504B354411BA /* PerceptionCore.framework */; };
+ B963575E9AA30F41305EFF04 /* DependenciesMacros.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6B253ABA2FF5167C9F185397 /* DependenciesMacros.framework */; };
+ BB29B52EFA2DAFF460CC4D6C /* MainTab.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C35CCD8ADD86F538F33A41F /* MainTab.swift */; };
+ BB3BEB308A57E7A68556B7AD /* RootTabBarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEBC238C3D0EE65C15C6809D /* RootTabBarView.swift */; };
+ BE5F43930A66A57C2875F2F2 /* swift-composable-architecture_ComposableArchitecture.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 56E09369F4C9A91174D69228 /* swift-composable-architecture_ComposableArchitecture.bundle */; };
+ C073C740B313BDB02B450FE1 /* Alamofire_Alamofire.bundle in Resources */ = {isa = PBXBuildFile; fileRef = A1C16254E7FD6C06998DBE42 /* Alamofire_Alamofire.bundle */; };
+ C5931ADEA838DBDAF5A35F02 /* Home.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = F8130BE2C4326E7BC2427CA2 /* Home.framework */; };
+ CC9A88E1F02A28AFECB6F664 /* RootTabBarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CEBC238C3D0EE65C15C6809D /* RootTabBarView.swift */; };
+ CF779C0A6F3A369F10B7BAD1 /* UIKitNavigation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1FDDED00488067E78E755A8F /* UIKitNavigation.framework */; };
+ D42435FA343605CA97165039 /* Search.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 20BDF3EACCD72BFA26DD9CE9 /* Search.framework */; };
+ D6AE4C876709391C1397A7AD /* CasePathsCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5874816DFC13AA9A3FB9AA89 /* CasePathsCore.framework */; };
+ DEAC09F99821BA5E1D374859 /* UIKitNavigationShim.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C784BE51019B23768C0561E0 /* UIKitNavigationShim.framework */; };
+ DF3A47E716C7381FB3C82FF6 /* RxSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2316853B90E5B192180FED43 /* RxSwift.framework */; };
+ E7C4DDCA2D6E0EE630A80A67 /* Clocks.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 18CA94EE0ACCDAAF7ECCA458 /* Clocks.framework */; };
+ EAA37A8EC9BD55AFE992D0EC /* IssueReportingPackageSupport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EBFD412FBBF9EB6E0025B260 /* IssueReportingPackageSupport.framework */; };
+ EC55F38FB6CF1045C8D96489 /* Networking.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F9C31694C387837622262B91 /* Networking.framework */; };
+ EF3D86368E65E910E54C5D17 /* RootTabReducer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D22ABA16D5E5A96E9DDC17B0 /* RootTabReducer.swift */; };
+ F1C3EFAB5F9ADF31A182097B /* RootTabReducer.swift in Sources */ = {isa = PBXBuildFile; fileRef = D22ABA16D5E5A96E9DDC17B0 /* RootTabReducer.swift */; };
+ F5A9D18773F6730C83A98BD4 /* Sharing1.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = ED64B320ED1FA03A8436CB4A /* Sharing1.framework */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+ 9F55CFF021AF851B8FDFE053 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 29BC1D722E4096C9E46AB722 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = A57DF7FAED265CC780DD5AEE;
+ remoteInfo = RootTab;
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ 1E7C8290BB6444594606C932 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 409F181E69A4B0E845844D4A /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 699BF4F3CAF1CCEF0A9963CD /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ C5931ADEA838DBDAF5A35F02 /* Home.framework in Dependencies */,
+ 8D801CE7E62B817D8ACC9CB0 /* Search.framework in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ 6D34138EE56F9A0FBDE1975E /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ 3ABF8CD6D53C0E7939726CCF /* Home.framework in Dependencies */,
+ 0CF1C8B7E326DEC93B1D5659 /* Search.framework in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ 84D519DFCB160BEC175355D0 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 8C56AE43B59108128A0EA423 /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ 01BD92F9D6F7E47ED5BA50ED /* Home.framework in Dependencies */,
+ 7A7D498E23E7964B36EA374B /* Search.framework in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ 9BD79EB7BDAAE9ECD9FCDFCA /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ 8A8ED2930876C172F905A3D0 /* Alamofire_Alamofire.bundle in Dependencies */,
+ BE5F43930A66A57C2875F2F2 /* swift-composable-architecture_ComposableArchitecture.bundle in Dependencies */,
+ B0EAB4B461F7B51E03915C90 /* swift-sharing_Sharing.bundle in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ 9E2042A6CE82AD3A2311ADDE /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ 42102D63F0DF5FB5D284AA51 /* Home.framework in Dependencies */,
+ 7552207B4A9E60635876F8C0 /* Search.framework in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ DB771459623AEB5BE9C413FB /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ FC042CB35C00E28F6CF16BE5 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ 029F1A2624AF00C024047375 /* WeaveDI.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = WeaveDI.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 0455A99419CDC6EB61F00806 /* SwiftUINavigation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftUINavigation.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 0AC4945177993F780482E796 /* Sharing2.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Sharing2.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 0C5B9ED8AF81AD77FD0BEB32 /* NetworkService.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = NetworkService.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 0CAE284E7D53D427482FC3AA /* Sharing.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Sharing.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 18CA94EE0ACCDAAF7ECCA458 /* Clocks.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Clocks.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 1FDDED00488067E78E755A8F /* UIKitNavigation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = UIKitNavigation.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 20BDF3EACCD72BFA26DD9CE9 /* Search.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Search.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 21290B6BFDDAEDB8E29DABEB /* SwiftNavigation.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftNavigation.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 2316853B90E5B192180FED43 /* RxSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RxSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 2E4B88860DA7B41658B863F5 /* Repository.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Repository.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 306C0DC2E10133AE3E3D036C /* 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; };
+ 3E85D726FFB83324402F614D /* RootTab.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RootTab.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 4116724BFD665612C48F13C2 /* RootTab_Stage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RootTab_Stage.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 42DCC593E8E4EF3777E4243E /* RootTabTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RootTabTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+ 4F25A3677F3DADBF9B5D9E35 /* Core.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Core.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 513D11EBC521663F8B0ED08B /* swift-sharing_Sharing.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "swift-sharing_Sharing.bundle"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 56E09369F4C9A91174D69228 /* swift-composable-architecture_ComposableArchitecture.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "swift-composable-architecture_ComposableArchitecture.bundle"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 5874816DFC13AA9A3FB9AA89 /* CasePathsCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CasePathsCore.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 5C35CCD8ADD86F538F33A41F /* MainTab.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainTab.swift; sourceTree = ""; };
+ 6035808A0B713776BCA70ADF /* API.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = API.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 68CB45E1582E9F8F0CFCB2E1 /* RxMoya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RxMoya.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 69B1CE74716178CFF38931D4 /* CombineMoya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CombineMoya.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 6B165818173DF92988B51E88 /* IdentifiedCollections.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = IdentifiedCollections.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 6B253ABA2FF5167C9F185397 /* DependenciesMacros.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DependenciesMacros.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 7404339BA365E49E4EEF02FB /* CustomDump.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CustomDump.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 82120579B3AD3781A7A59786 /* RootTab-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "RootTab-Info.plist"; sourceTree = ""; };
+ 87F900E3D284BAF13B708B05 /* ConcurrencyExtras.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ConcurrencyExtras.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 88FE3677C3610371E1170004 /* Moya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Moya.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 8E4568F41C95DE2CF031AD82 /* UseCase.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = UseCase.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 8F07ACFA612759EA805148EB /* Alamofire.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Alamofire.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 929FB8C9C74AB168701FA901 /* AsyncMoya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AsyncMoya.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 95EBF021CF00A46FD1CDE413 /* ComposableArchitecture.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ComposableArchitecture.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 9727F4DC6B08A8AB31CBB513 /* DataInterface.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DataInterface.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 98D9BCB85FAD54897B8DDE8B /* Detail.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Detail.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 9DF07BBEC2B8DEDC4C260EE3 /* OrderedCollections.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = OrderedCollections.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 9E1C0151448BD0DAA9D776B2 /* Foundations.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Foundations.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 9E58A732CBA14DB658B627F9 /* DomainInterface.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DomainInterface.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 9EFA165EE8191A56CFE665C8 /* RootTab-Prod-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "RootTab-Prod-Info.plist"; sourceTree = ""; };
+ 9F25AD8B4EEDAC2332E15E93 /* Perception.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Perception.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ A1C16254E7FD6C06998DBE42 /* Alamofire_Alamofire.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Alamofire_Alamofire.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
+ A6772D78A667A6FCCC236C6A /* EventLimiter.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = EventLimiter.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ AE50812D010FBE676BAC4E5A /* Dependencies.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Dependencies.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ AF2A2E6241A5A45BB177C029 /* RootTab_Prod.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RootTab_Prod.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ B3A3420B7BDFC732BD47BF8E /* CombineSchedulers.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CombineSchedulers.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ B3BA2FAA745DD13973199F1D /* RootTab_Debug.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = RootTab_Debug.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ BB0DCAECA21A97CA89433C0A /* LogMacro.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = LogMacro.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ BBBC1F55BDCC1315B9087973 /* Model.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Model.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ BF9FA9EB01ED131B20DAA8A3 /* RootTab-Stage-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "RootTab-Stage-Info.plist"; sourceTree = ""; };
+ BFA308FEF6AE6BECD015ABAA /* 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; };
+ C784BE51019B23768C0561E0 /* UIKitNavigationShim.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = UIKitNavigationShim.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ CEBC238C3D0EE65C15C6809D /* RootTabBarView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RootTabBarView.swift; sourceTree = ""; };
+ D22ABA16D5E5A96E9DDC17B0 /* RootTabReducer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RootTabReducer.swift; sourceTree = ""; };
+ D624A36A172644E61089C01C /* IssueReporting.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = IssueReporting.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ E5008368936CF01B25701BE3 /* RootTabTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "RootTabTests-Info.plist"; sourceTree = ""; };
+ E602F268785B12CED6C97871 /* CasePaths.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = CasePaths.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ EA9632F0C162504B354411BA /* PerceptionCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PerceptionCore.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ EBFD412FBBF9EB6E0025B260 /* IssueReportingPackageSupport.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = IssueReportingPackageSupport.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ ED64B320ED1FA03A8436CB4A /* Sharing1.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Sharing1.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ F21D37FBB009BC838E8D1561 /* Shared.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Shared.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ F8130BE2C4326E7BC2427CA2 /* Home.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Home.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ F9C31694C387837622262B91 /* Networking.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Networking.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ FCEEE51ACD7CEB6AC11EC36C /* InternalCollectionsUtilities.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = InternalCollectionsUtilities.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ FE2D88CE715CA7CF0633442C /* RootTab-Debug-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "RootTab-Debug-Info.plist"; sourceTree = ""; };
+ FED8024A56BBE55D636D7720 /* Test.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Test.swift; sourceTree = ""; };
+ FF650514C2BEB59DA6183832 /* XCTestDynamicOverlay.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = XCTestDynamicOverlay.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 66D9F9A6D2BD15457FCD140A /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 6BA9D57C48E8EB7DC5365F7C /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A0FE98E48B3F272EBAF199CF /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B5BAA54684571E711CDB6A32 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B2BD499036CBB401F0C811A5 /* CFNetwork.framework in Frameworks */,
+ 628B95CC4312246B8F2CF3D0 /* OSLog.framework in Frameworks */,
+ B77247FA01EED95B6695106E /* API.framework in Frameworks */,
+ 6C5D019282D45746BED8DAF7 /* Alamofire.framework in Frameworks */,
+ 9671C59CA3745DA7E1BEFF47 /* AsyncMoya.framework in Frameworks */,
+ 4B1D510CE71A35D4AB7F1273 /* CasePaths.framework in Frameworks */,
+ D6AE4C876709391C1397A7AD /* CasePathsCore.framework in Frameworks */,
+ E7C4DDCA2D6E0EE630A80A67 /* Clocks.framework in Frameworks */,
+ 09487B73F535836C31F8F8A2 /* CombineMoya.framework in Frameworks */,
+ 3F52C072B75B412383250670 /* CombineSchedulers.framework in Frameworks */,
+ 9230D430FAC14885BF777637 /* ComposableArchitecture.framework in Frameworks */,
+ 4E6602DF02349D4F05A0B2F3 /* ConcurrencyExtras.framework in Frameworks */,
+ 2C9706443F494184DAF86E13 /* Core.framework in Frameworks */,
+ 23824011C238C1B4C380BE7C /* CustomDump.framework in Frameworks */,
+ 4D051A20411E680969E31A7B /* DataInterface.framework in Frameworks */,
+ 6CBC3B611AAEB2E70F9309E8 /* Dependencies.framework in Frameworks */,
+ B963575E9AA30F41305EFF04 /* DependenciesMacros.framework in Frameworks */,
+ 2C5362973E2B59041DBC629E /* Detail.framework in Frameworks */,
+ B60FE16E9E2E8A1AF0A842AE /* DomainInterface.framework in Frameworks */,
+ 3631562AC8B6F6B6B35BC643 /* EventLimiter.framework in Frameworks */,
+ 82A10834C77F64DCE61F5D56 /* Foundations.framework in Frameworks */,
+ 1DEC22BB3F6BAC269EB0254A /* Home.framework in Frameworks */,
+ 791830F2196ED80D1F8AA9C7 /* IdentifiedCollections.framework in Frameworks */,
+ 1F8A1C0AA494631787315002 /* InternalCollectionsUtilities.framework in Frameworks */,
+ 5F299A3C1A449D23ECECF49E /* IssueReporting.framework in Frameworks */,
+ EAA37A8EC9BD55AFE992D0EC /* IssueReportingPackageSupport.framework in Frameworks */,
+ 63D241F349C2D13132A5D080 /* LogMacro.framework in Frameworks */,
+ 92905DD7230F342FA0CC01F1 /* Model.framework in Frameworks */,
+ 71ACA02815907A2EBDA1470C /* Moya.framework in Frameworks */,
+ 26F57E5BB38A9BD230E5E067 /* NetworkService.framework in Frameworks */,
+ EC55F38FB6CF1045C8D96489 /* Networking.framework in Frameworks */,
+ 8A2B6F00A071719CFC6CA0B0 /* OrderedCollections.framework in Frameworks */,
+ 6E13886EA9D41ED6C77FA77C /* Perception.framework in Frameworks */,
+ B7EF4AA34762893F97C713BC /* PerceptionCore.framework in Frameworks */,
+ 9AB1FE8773340BB4C559140C /* Repository.framework in Frameworks */,
+ 35E346199A87761D6630779F /* RootTab.framework in Frameworks */,
+ 1491281FDA3AF802E65F6804 /* RxMoya.framework in Frameworks */,
+ DF3A47E716C7381FB3C82FF6 /* RxSwift.framework in Frameworks */,
+ D42435FA343605CA97165039 /* Search.framework in Frameworks */,
+ 6C493B51DE6802C118D40B71 /* Shared.framework in Frameworks */,
+ A01C41F3F19E71806135957C /* Sharing.framework in Frameworks */,
+ F5A9D18773F6730C83A98BD4 /* Sharing1.framework in Frameworks */,
+ 797C0AD5563B8FBD2DF0E961 /* Sharing2.framework in Frameworks */,
+ 020C31A3A43113E63D594236 /* SwiftNavigation.framework in Frameworks */,
+ 49B924DC9452A26B19423AD6 /* SwiftUINavigation.framework in Frameworks */,
+ CF779C0A6F3A369F10B7BAD1 /* UIKitNavigation.framework in Frameworks */,
+ DEAC09F99821BA5E1D374859 /* UIKitNavigationShim.framework in Frameworks */,
+ 87D15823F6A0FC4A16FA6322 /* UseCase.framework in Frameworks */,
+ 1408DE0EFE1AF744372711F2 /* WeaveDI.framework in Frameworks */,
+ 090CA66016B821DB0F408C01 /* XCTestDynamicOverlay.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ CAFCA93819ACDA1F733456A4 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 06F5588336A339DD45A8416C /* Project */ = {
+ isa = PBXGroup;
+ children = (
+ 65993586159DFB663FE081F9 /* Derived */,
+ 2B2F1FEFE0C4593D777D32D2 /* RootTabTests */,
+ 0FA12E712584BC878F1D688D /* Sources */,
+ );
+ name = Project;
+ sourceTree = "";
+ };
+ 0B7A512A30456FADB463747E = {
+ isa = PBXGroup;
+ children = (
+ 06F5588336A339DD45A8416C /* Project */,
+ 88E7052119BA92C3E4E294D2 /* Products */,
+ 49D96B58FD1AFE82E389DD66 /* Frameworks */,
+ );
+ sourceTree = "";
+ };
+ 0FA12E712584BC878F1D688D /* Sources */ = {
+ isa = PBXGroup;
+ children = (
+ 29822BB2960F2C176D2B4DDC /* Reducer */,
+ EF042538D859D06E04E4EBD6 /* View */,
+ );
+ path = Sources;
+ sourceTree = "";
+ };
+ 1C9E9CCC35D31AE31E344375 /* Sources */ = {
+ isa = PBXGroup;
+ children = (
+ FED8024A56BBE55D636D7720 /* Test.swift */,
+ );
+ path = Sources;
+ sourceTree = "";
+ };
+ 1DB1D1103E4D82074F03CD53 /* InfoPlists */ = {
+ isa = PBXGroup;
+ children = (
+ FE2D88CE715CA7CF0633442C /* RootTab-Debug-Info.plist */,
+ 82120579B3AD3781A7A59786 /* RootTab-Info.plist */,
+ 9EFA165EE8191A56CFE665C8 /* RootTab-Prod-Info.plist */,
+ BF9FA9EB01ED131B20DAA8A3 /* RootTab-Stage-Info.plist */,
+ E5008368936CF01B25701BE3 /* RootTabTests-Info.plist */,
+ );
+ path = InfoPlists;
+ sourceTree = "";
+ };
+ 29822BB2960F2C176D2B4DDC /* Reducer */ = {
+ isa = PBXGroup;
+ children = (
+ 5C35CCD8ADD86F538F33A41F /* MainTab.swift */,
+ D22ABA16D5E5A96E9DDC17B0 /* RootTabReducer.swift */,
+ );
+ path = Reducer;
+ sourceTree = "";
+ };
+ 2B2F1FEFE0C4593D777D32D2 /* RootTabTests */ = {
+ isa = PBXGroup;
+ children = (
+ 1C9E9CCC35D31AE31E344375 /* Sources */,
+ );
+ path = RootTabTests;
+ sourceTree = "";
+ };
+ 49D96B58FD1AFE82E389DD66 /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ BFA308FEF6AE6BECD015ABAA /* CFNetwork.framework */,
+ 306C0DC2E10133AE3E3D036C /* OSLog.framework */,
+ );
+ name = Frameworks;
+ sourceTree = "";
+ };
+ 65993586159DFB663FE081F9 /* Derived */ = {
+ isa = PBXGroup;
+ children = (
+ 1DB1D1103E4D82074F03CD53 /* InfoPlists */,
+ );
+ path = Derived;
+ sourceTree = "";
+ };
+ 88E7052119BA92C3E4E294D2 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ A1C16254E7FD6C06998DBE42 /* Alamofire_Alamofire.bundle */,
+ 8F07ACFA612759EA805148EB /* Alamofire.framework */,
+ 6035808A0B713776BCA70ADF /* API.framework */,
+ 929FB8C9C74AB168701FA901 /* AsyncMoya.framework */,
+ E602F268785B12CED6C97871 /* CasePaths.framework */,
+ 5874816DFC13AA9A3FB9AA89 /* CasePathsCore.framework */,
+ 18CA94EE0ACCDAAF7ECCA458 /* Clocks.framework */,
+ 69B1CE74716178CFF38931D4 /* CombineMoya.framework */,
+ B3A3420B7BDFC732BD47BF8E /* CombineSchedulers.framework */,
+ 95EBF021CF00A46FD1CDE413 /* ComposableArchitecture.framework */,
+ 87F900E3D284BAF13B708B05 /* ConcurrencyExtras.framework */,
+ 4F25A3677F3DADBF9B5D9E35 /* Core.framework */,
+ 7404339BA365E49E4EEF02FB /* CustomDump.framework */,
+ 9727F4DC6B08A8AB31CBB513 /* DataInterface.framework */,
+ AE50812D010FBE676BAC4E5A /* Dependencies.framework */,
+ 6B253ABA2FF5167C9F185397 /* DependenciesMacros.framework */,
+ 98D9BCB85FAD54897B8DDE8B /* Detail.framework */,
+ 9E58A732CBA14DB658B627F9 /* DomainInterface.framework */,
+ A6772D78A667A6FCCC236C6A /* EventLimiter.framework */,
+ 9E1C0151448BD0DAA9D776B2 /* Foundations.framework */,
+ F8130BE2C4326E7BC2427CA2 /* Home.framework */,
+ 6B165818173DF92988B51E88 /* IdentifiedCollections.framework */,
+ FCEEE51ACD7CEB6AC11EC36C /* InternalCollectionsUtilities.framework */,
+ D624A36A172644E61089C01C /* IssueReporting.framework */,
+ EBFD412FBBF9EB6E0025B260 /* IssueReportingPackageSupport.framework */,
+ BB0DCAECA21A97CA89433C0A /* LogMacro.framework */,
+ BBBC1F55BDCC1315B9087973 /* Model.framework */,
+ 88FE3677C3610371E1170004 /* Moya.framework */,
+ F9C31694C387837622262B91 /* Networking.framework */,
+ 0C5B9ED8AF81AD77FD0BEB32 /* NetworkService.framework */,
+ 9DF07BBEC2B8DEDC4C260EE3 /* OrderedCollections.framework */,
+ 9F25AD8B4EEDAC2332E15E93 /* Perception.framework */,
+ EA9632F0C162504B354411BA /* PerceptionCore.framework */,
+ 2E4B88860DA7B41658B863F5 /* Repository.framework */,
+ B3BA2FAA745DD13973199F1D /* RootTab_Debug.framework */,
+ AF2A2E6241A5A45BB177C029 /* RootTab_Prod.framework */,
+ 4116724BFD665612C48F13C2 /* RootTab_Stage.framework */,
+ 3E85D726FFB83324402F614D /* RootTab.framework */,
+ 42DCC593E8E4EF3777E4243E /* RootTabTests.xctest */,
+ 68CB45E1582E9F8F0CFCB2E1 /* RxMoya.framework */,
+ 2316853B90E5B192180FED43 /* RxSwift.framework */,
+ 20BDF3EACCD72BFA26DD9CE9 /* Search.framework */,
+ F21D37FBB009BC838E8D1561 /* Shared.framework */,
+ 0CAE284E7D53D427482FC3AA /* Sharing.framework */,
+ ED64B320ED1FA03A8436CB4A /* Sharing1.framework */,
+ 0AC4945177993F780482E796 /* Sharing2.framework */,
+ 56E09369F4C9A91174D69228 /* swift-composable-architecture_ComposableArchitecture.bundle */,
+ 513D11EBC521663F8B0ED08B /* swift-sharing_Sharing.bundle */,
+ 21290B6BFDDAEDB8E29DABEB /* SwiftNavigation.framework */,
+ 0455A99419CDC6EB61F00806 /* SwiftUINavigation.framework */,
+ 1FDDED00488067E78E755A8F /* UIKitNavigation.framework */,
+ C784BE51019B23768C0561E0 /* UIKitNavigationShim.framework */,
+ 8E4568F41C95DE2CF031AD82 /* UseCase.framework */,
+ 029F1A2624AF00C024047375 /* WeaveDI.framework */,
+ FF650514C2BEB59DA6183832 /* XCTestDynamicOverlay.framework */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ EF042538D859D06E04E4EBD6 /* View */ = {
+ isa = PBXGroup;
+ children = (
+ CEBC238C3D0EE65C15C6809D /* RootTabBarView.swift */,
+ );
+ path = View;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 119A41C36F9F57A3C548D3FC /* RootTab-Prod */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 4883016E5BF0EA58E0F76A96 /* Build configuration list for PBXNativeTarget "RootTab-Prod" */;
+ buildPhases = (
+ 08382B116639E7E28AD49D20 /* Sources */,
+ 2B9D935BBFF729F8A2CEAC6F /* Resources */,
+ A0FE98E48B3F272EBAF199CF /* Frameworks */,
+ FC042CB35C00E28F6CF16BE5 /* Embed Frameworks */,
+ 8C56AE43B59108128A0EA423 /* Dependencies */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = "RootTab-Prod";
+ packageProductDependencies = (
+ );
+ productName = RootTab_Prod;
+ productReference = AF2A2E6241A5A45BB177C029 /* RootTab_Prod.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+ 582CF93C48A4A951B5798CC5 /* RootTab-Stage */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 16BD3BDDBD4927CD555F8E43 /* Build configuration list for PBXNativeTarget "RootTab-Stage" */;
+ buildPhases = (
+ 3BCAADF9BB8AA49C669477C6 /* Sources */,
+ 404D2E4BA0DDA6C19DC842A2 /* Resources */,
+ 66D9F9A6D2BD15457FCD140A /* Frameworks */,
+ 409F181E69A4B0E845844D4A /* Embed Frameworks */,
+ 9E2042A6CE82AD3A2311ADDE /* Dependencies */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = "RootTab-Stage";
+ packageProductDependencies = (
+ );
+ productName = RootTab_Stage;
+ productReference = 4116724BFD665612C48F13C2 /* RootTab_Stage.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+ 5E21E9921D0FCCDAEAA45BEC /* RootTabTests */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 79E82843BBD168C5EC994BF8 /* Build configuration list for PBXNativeTarget "RootTabTests" */;
+ buildPhases = (
+ 54FBEAC043F8419F5F7B00E4 /* Sources */,
+ B29865F5E5D6FC62AE3D51A2 /* Resources */,
+ B5BAA54684571E711CDB6A32 /* Frameworks */,
+ 84D519DFCB160BEC175355D0 /* Embed Frameworks */,
+ 9BD79EB7BDAAE9ECD9FCDFCA /* Dependencies */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ F57B5A10B63D53EDB487C71C /* PBXTargetDependency */,
+ );
+ name = RootTabTests;
+ packageProductDependencies = (
+ );
+ productName = RootTabTests;
+ productReference = 42DCC593E8E4EF3777E4243E /* RootTabTests.xctest */;
+ productType = "com.apple.product-type.bundle.unit-test";
+ };
+ 72FA08FD2BDC50438419AAB7 /* RootTab-Debug */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 404ED78329C6CDAA80E37425 /* Build configuration list for PBXNativeTarget "RootTab-Debug" */;
+ buildPhases = (
+ 41D87F1AD216E83262CEE294 /* Sources */,
+ 2308A0A42A8381DE16B7290A /* Resources */,
+ 6BA9D57C48E8EB7DC5365F7C /* Frameworks */,
+ 1E7C8290BB6444594606C932 /* Embed Frameworks */,
+ 6D34138EE56F9A0FBDE1975E /* Dependencies */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = "RootTab-Debug";
+ packageProductDependencies = (
+ );
+ productName = RootTab_Debug;
+ productReference = B3BA2FAA745DD13973199F1D /* RootTab_Debug.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+ A57DF7FAED265CC780DD5AEE /* RootTab */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = F47ECBE0F0175632FCC4E34C /* Build configuration list for PBXNativeTarget "RootTab" */;
+ buildPhases = (
+ 2278DB421382BDA48F04D139 /* Sources */,
+ E0D038AE7F22E6DE241CFC00 /* Resources */,
+ CAFCA93819ACDA1F733456A4 /* Frameworks */,
+ DB771459623AEB5BE9C413FB /* Embed Frameworks */,
+ 699BF4F3CAF1CCEF0A9963CD /* Dependencies */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = RootTab;
+ packageProductDependencies = (
+ );
+ productName = RootTab;
+ productReference = 3E85D726FFB83324402F614D /* RootTab.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 29BC1D722E4096C9E46AB722 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ BuildIndependentTargetsInParallel = YES;
+ TargetAttributes = {
+ };
+ };
+ buildConfigurationList = A9AF8D65F66357E4F8E0BA6B /* Build configuration list for PBXProject "RootTab" */;
+ compatibilityVersion = "Xcode 14.0";
+ developmentRegion = ko;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ ko,
+ );
+ mainGroup = 0B7A512A30456FADB463747E;
+ productRefGroup = 88E7052119BA92C3E4E294D2 /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ A57DF7FAED265CC780DD5AEE /* RootTab */,
+ 72FA08FD2BDC50438419AAB7 /* RootTab-Debug */,
+ 119A41C36F9F57A3C548D3FC /* RootTab-Prod */,
+ 582CF93C48A4A951B5798CC5 /* RootTab-Stage */,
+ 5E21E9921D0FCCDAEAA45BEC /* RootTabTests */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 2308A0A42A8381DE16B7290A /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 2B9D935BBFF729F8A2CEAC6F /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 404D2E4BA0DDA6C19DC842A2 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B29865F5E5D6FC62AE3D51A2 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ C073C740B313BDB02B450FE1 /* Alamofire_Alamofire.bundle in Resources */,
+ B5315E7F2312D555D7FF5A23 /* swift-composable-architecture_ComposableArchitecture.bundle in Resources */,
+ 2EDAB4F665FE1D59D68E6272 /* swift-sharing_Sharing.bundle in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ E0D038AE7F22E6DE241CFC00 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 08382B116639E7E28AD49D20 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 9B687D9CA6F2A4D8D9654CE7 /* MainTab.swift in Sources */,
+ 99FE16348C98C22F6A64EF94 /* RootTabReducer.swift in Sources */,
+ 6B9ED905C5325610C0727B8D /* RootTabBarView.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 2278DB421382BDA48F04D139 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ BB29B52EFA2DAFF460CC4D6C /* MainTab.swift in Sources */,
+ 9F8B97B641CA6855F1C7573D /* RootTabReducer.swift in Sources */,
+ CC9A88E1F02A28AFECB6F664 /* RootTabBarView.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 3BCAADF9BB8AA49C669477C6 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 3A1BC21C4119A100E2719935 /* MainTab.swift in Sources */,
+ EF3D86368E65E910E54C5D17 /* RootTabReducer.swift in Sources */,
+ 7828F1ABA4FF47C55DE4BE16 /* RootTabBarView.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 41D87F1AD216E83262CEE294 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 4822BD22E5924A5E5208838D /* MainTab.swift in Sources */,
+ F1C3EFAB5F9ADF31A182097B /* RootTabReducer.swift in Sources */,
+ BB3BEB308A57E7A68556B7AD /* RootTabBarView.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 54FBEAC043F8419F5F7B00E4 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 0BE8FFE039BA9FBDCD637844 /* Test.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+ F57B5A10B63D53EDB487C71C /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ name = RootTab;
+ target = A57DF7FAED265CC780DD5AEE /* RootTab */;
+ targetProxy = 9F55CFF021AF851B8FDFE053 /* PBXContainerItemProxy */;
+ };
+/* End PBXTargetDependency section */
+
+/* Begin XCBuildConfiguration section */
+ 02A45A85BF117531F7F4C852 /* 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/RootTabTests-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.RootTab.RootTabTests;
+ PRODUCT_NAME = RootTabTests;
+ 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;
+ };
+ 31E14D090A69D29A4A460F7F /* 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;
+ };
+ 3C4DE722550EB438BE094C7D /* 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/RootTab-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.RootTab;
+ PRODUCT_NAME = RootTab_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;
+ };
+ 47C1202F68604AD20559EEA2 /* 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/RootTab-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.RootTab;
+ PRODUCT_NAME = RootTab_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;
+ };
+ 987B6A373131CEB2FB5E0F1B /* 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/RootTab-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.RootTab;
+ PRODUCT_NAME = RootTab;
+ 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;
+ };
+ A006F66E5BF3AB4E1CBBED76 /* 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/RootTabTests-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.RootTab.RootTabTests;
+ PRODUCT_NAME = RootTabTests;
+ 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;
+ };
+ AD53D08A16B01CB4B6D07435 /* 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/RootTab-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.RootTab;
+ PRODUCT_NAME = RootTab;
+ 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;
+ };
+ B67D2B5760B2AF5BF23253AD /* 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;
+ };
+ C903450B595439B4A1FF6B12 /* 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/RootTab-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.RootTab;
+ PRODUCT_NAME = RootTab_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;
+ };
+ DA7BE7F6A171477E3CD87C03 /* 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/RootTab-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.RootTab;
+ PRODUCT_NAME = RootTab_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;
+ };
+ EE520818FA4A3C2AA81410AF /* 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/RootTab-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.RootTab;
+ PRODUCT_NAME = RootTab_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;
+ };
+ F3E70B40E0AEBDA2A12793F5 /* 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/RootTab-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.RootTab;
+ PRODUCT_NAME = RootTab_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 */
+ 16BD3BDDBD4927CD555F8E43 /* Build configuration list for PBXNativeTarget "RootTab-Stage" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 3C4DE722550EB438BE094C7D /* Debug */,
+ DA7BE7F6A171477E3CD87C03 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 404ED78329C6CDAA80E37425 /* Build configuration list for PBXNativeTarget "RootTab-Debug" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 47C1202F68604AD20559EEA2 /* Debug */,
+ F3E70B40E0AEBDA2A12793F5 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 4883016E5BF0EA58E0F76A96 /* Build configuration list for PBXNativeTarget "RootTab-Prod" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ EE520818FA4A3C2AA81410AF /* Debug */,
+ C903450B595439B4A1FF6B12 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 79E82843BBD168C5EC994BF8 /* Build configuration list for PBXNativeTarget "RootTabTests" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ A006F66E5BF3AB4E1CBBED76 /* Debug */,
+ 02A45A85BF117531F7F4C852 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ A9AF8D65F66357E4F8E0BA6B /* Build configuration list for PBXProject "RootTab" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ B67D2B5760B2AF5BF23253AD /* Debug */,
+ 31E14D090A69D29A4A460F7F /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ F47ECBE0F0175632FCC4E34C /* Build configuration list for PBXNativeTarget "RootTab" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ AD53D08A16B01CB4B6D07435 /* Debug */,
+ 987B6A373131CEB2FB5E0F1B /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 29BC1D722E4096C9E46AB722 /* Project object */;
+}
diff --git a/Projects/Presentation/RootTab/RootTab.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Projects/Presentation/RootTab/RootTab.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..919434a
--- /dev/null
+++ b/Projects/Presentation/RootTab/RootTab.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/Projects/Core/Data/Service/Service.xcodeproj/xcshareddata/xcschemes/Service-Stage.xcscheme b/Projects/Presentation/RootTab/RootTab.xcodeproj/xcshareddata/xcschemes/RootTab-Debug.xcscheme
similarity index 75%
rename from Projects/Core/Data/Service/Service.xcodeproj/xcshareddata/xcschemes/Service-Stage.xcscheme
rename to Projects/Presentation/RootTab/RootTab.xcodeproj/xcshareddata/xcschemes/RootTab-Debug.xcscheme
index 9340dab..426ec5c 100644
--- a/Projects/Core/Data/Service/Service.xcodeproj/xcshareddata/xcschemes/Service-Stage.xcscheme
+++ b/Projects/Presentation/RootTab/RootTab.xcodeproj/xcshareddata/xcschemes/RootTab-Debug.xcscheme
@@ -14,10 +14,10 @@
buildForAnalyzing = "YES">
+ BlueprintIdentifier = "72FA08FD2BDC50438419AAB7"
+ BuildableName = "RootTab_Debug.framework"
+ BlueprintName = "RootTab-Debug"
+ ReferencedContainer = "container:RootTab.xcodeproj">
@@ -44,10 +44,10 @@
+ BlueprintIdentifier = "72FA08FD2BDC50438419AAB7"
+ BuildableName = "RootTab_Debug.framework"
+ BlueprintName = "RootTab-Debug"
+ ReferencedContainer = "container:RootTab.xcodeproj">
@@ -60,10 +60,10 @@
+ BlueprintIdentifier = "72FA08FD2BDC50438419AAB7"
+ BuildableName = "RootTab_Debug.framework"
+ BlueprintName = "RootTab-Debug"
+ ReferencedContainer = "container:RootTab.xcodeproj">
diff --git a/Projects/Core/Data/Service/Service.xcodeproj/xcshareddata/xcschemes/Service-Prod.xcscheme b/Projects/Presentation/RootTab/RootTab.xcodeproj/xcshareddata/xcschemes/RootTab-Prod.xcscheme
similarity index 76%
rename from Projects/Core/Data/Service/Service.xcodeproj/xcshareddata/xcschemes/Service-Prod.xcscheme
rename to Projects/Presentation/RootTab/RootTab.xcodeproj/xcshareddata/xcschemes/RootTab-Prod.xcscheme
index 95d4659..fd7ae81 100644
--- a/Projects/Core/Data/Service/Service.xcodeproj/xcshareddata/xcschemes/Service-Prod.xcscheme
+++ b/Projects/Presentation/RootTab/RootTab.xcodeproj/xcshareddata/xcschemes/RootTab-Prod.xcscheme
@@ -14,10 +14,10 @@
buildForAnalyzing = "YES">
+ BlueprintIdentifier = "119A41C36F9F57A3C548D3FC"
+ BuildableName = "RootTab_Prod.framework"
+ BlueprintName = "RootTab-Prod"
+ ReferencedContainer = "container:RootTab.xcodeproj">
@@ -44,10 +44,10 @@
+ BlueprintIdentifier = "119A41C36F9F57A3C548D3FC"
+ BuildableName = "RootTab_Prod.framework"
+ BlueprintName = "RootTab-Prod"
+ ReferencedContainer = "container:RootTab.xcodeproj">
@@ -60,10 +60,10 @@
+ BlueprintIdentifier = "119A41C36F9F57A3C548D3FC"
+ BuildableName = "RootTab_Prod.framework"
+ BlueprintName = "RootTab-Prod"
+ ReferencedContainer = "container:RootTab.xcodeproj">
diff --git a/Projects/Core/Data/Service/Service.xcodeproj/xcshareddata/xcschemes/Service-Debug.xcscheme b/Projects/Presentation/RootTab/RootTab.xcodeproj/xcshareddata/xcschemes/RootTab-Stage.xcscheme
similarity index 75%
rename from Projects/Core/Data/Service/Service.xcodeproj/xcshareddata/xcschemes/Service-Debug.xcscheme
rename to Projects/Presentation/RootTab/RootTab.xcodeproj/xcshareddata/xcschemes/RootTab-Stage.xcscheme
index 0fa5dea..281e58a 100644
--- a/Projects/Core/Data/Service/Service.xcodeproj/xcshareddata/xcschemes/Service-Debug.xcscheme
+++ b/Projects/Presentation/RootTab/RootTab.xcodeproj/xcshareddata/xcschemes/RootTab-Stage.xcscheme
@@ -14,10 +14,10 @@
buildForAnalyzing = "YES">
+ BlueprintIdentifier = "582CF93C48A4A951B5798CC5"
+ BuildableName = "RootTab_Stage.framework"
+ BlueprintName = "RootTab-Stage"
+ ReferencedContainer = "container:RootTab.xcodeproj">
@@ -44,10 +44,10 @@
+ BlueprintIdentifier = "582CF93C48A4A951B5798CC5"
+ BuildableName = "RootTab_Stage.framework"
+ BlueprintName = "RootTab-Stage"
+ ReferencedContainer = "container:RootTab.xcodeproj">
@@ -60,10 +60,10 @@
+ BlueprintIdentifier = "582CF93C48A4A951B5798CC5"
+ BuildableName = "RootTab_Stage.framework"
+ BlueprintName = "RootTab-Stage"
+ ReferencedContainer = "container:RootTab.xcodeproj">
diff --git a/Projects/Core/Data/Service/Service.xcodeproj/xcshareddata/xcschemes/Service.xcscheme b/Projects/Presentation/RootTab/RootTab.xcodeproj/xcshareddata/xcschemes/RootTab.xcscheme
similarity index 72%
rename from Projects/Core/Data/Service/Service.xcodeproj/xcshareddata/xcschemes/Service.xcscheme
rename to Projects/Presentation/RootTab/RootTab.xcodeproj/xcshareddata/xcschemes/RootTab.xcscheme
index b301ad6..de9ccc7 100644
--- a/Projects/Core/Data/Service/Service.xcodeproj/xcshareddata/xcschemes/Service.xcscheme
+++ b/Projects/Presentation/RootTab/RootTab.xcodeproj/xcshareddata/xcschemes/RootTab.xcscheme
@@ -14,10 +14,10 @@
buildForAnalyzing = "YES">
+ BlueprintIdentifier = "A57DF7FAED265CC780DD5AEE"
+ BuildableName = "RootTab.framework"
+ BlueprintName = "RootTab"
+ ReferencedContainer = "container:RootTab.xcodeproj">
@@ -33,10 +33,10 @@
parallelizable = "NO">
+ BlueprintIdentifier = "5E21E9921D0FCCDAEAA45BEC"
+ BuildableName = "RootTabTests.xctest"
+ BlueprintName = "RootTabTests"
+ ReferencedContainer = "container:RootTab.xcodeproj">
@@ -54,10 +54,10 @@
+ BlueprintIdentifier = "A57DF7FAED265CC780DD5AEE"
+ BuildableName = "RootTab.framework"
+ BlueprintName = "RootTab"
+ ReferencedContainer = "container:RootTab.xcodeproj">
@@ -70,10 +70,10 @@
+ BlueprintIdentifier = "A57DF7FAED265CC780DD5AEE"
+ BuildableName = "RootTab.framework"
+ BlueprintName = "RootTab"
+ ReferencedContainer = "container:RootTab.xcodeproj">
diff --git a/Projects/Presentation/RootTab/RootTabTests/Sources/Test.swift b/Projects/Presentation/RootTab/RootTabTests/Sources/Test.swift
new file mode 100644
index 0000000..a594e54
--- /dev/null
+++ b/Projects/Presentation/RootTab/RootTabTests/Sources/Test.swift
@@ -0,0 +1,8 @@
+//
+// Test.swift
+// MusicBandscape
+//
+// Created by Roy on 2025-10-28
+// Copyright © 2025 DDD , Ltd. All rights reserved.
+//
+
diff --git a/Projects/Presentation/RootTab/Sources/Reducer/MainTab.swift b/Projects/Presentation/RootTab/Sources/Reducer/MainTab.swift
new file mode 100644
index 0000000..9d823ab
--- /dev/null
+++ b/Projects/Presentation/RootTab/Sources/Reducer/MainTab.swift
@@ -0,0 +1,22 @@
+//
+// MainTab.swift
+// RootTab
+//
+// Created by Wonji Suh on 10/28/25.
+//
+
+import Foundation
+
+public enum MainTab: String, CaseIterable {
+ case home, search
+
+ public var tabBarTitle: String {
+ switch self {
+ case .home:
+ return "홈"
+
+ case .search:
+ return "검색"
+ }
+ }
+}
diff --git a/Projects/Presentation/RootTab/Sources/Reducer/RootTabReducer.swift b/Projects/Presentation/RootTab/Sources/Reducer/RootTabReducer.swift
new file mode 100644
index 0000000..f03419e
--- /dev/null
+++ b/Projects/Presentation/RootTab/Sources/Reducer/RootTabReducer.swift
@@ -0,0 +1,104 @@
+//
+// RootTabReducer.swift
+// RootTab
+//
+// Created by Wonji Suh on 10/28/25.
+//
+
+
+import Foundation
+import ComposableArchitecture
+
+import Home
+import Search
+
+@Reducer
+public struct RootTabReducer {
+ public init() {}
+
+ @ObservableState
+ public struct State: Equatable {
+
+ var selectedTab: MainTab = .home
+ var homeCoordinator = HomeCoordinator.State()
+ var searchCoordinator = SearchCoordinator.State()
+
+ public init() {}
+
+ }
+
+ public enum Action: ViewAction, BindableAction {
+ case binding(BindingAction)
+ case view(View)
+ case scope(ScopeAction)
+
+ }
+
+ //MARK: - ViewAction
+ @CasePathable
+ public enum View {
+ case selectTab(MainTab)
+ }
+
+ @CasePathable
+ public enum ScopeAction {
+ case homeCoordinator(HomeCoordinator.Action)
+ case searchCoordinator(SearchCoordinator.Action)
+ }
+
+
+
+ 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 .scope(let scopeAction):
+ return handleScopeAction(state: &state, action: scopeAction)
+
+
+ }
+ }
+ Scope(state: \.homeCoordinator, action: \.scope.homeCoordinator) {
+ HomeCoordinator()
+ }
+ Scope(state: \.searchCoordinator, action: \.scope.searchCoordinator) {
+ SearchCoordinator()
+ }
+ }
+}
+
+extension RootTabReducer {
+ private func handleViewAction(
+ state: inout State,
+ action: View
+ ) -> Effect {
+ switch action {
+ case .selectTab(let tab):
+ state.selectedTab = tab
+ return .none
+
+ }
+ }
+
+ private func handleScopeAction(
+ state: inout State,
+ action: ScopeAction
+ ) -> Effect {
+ switch action {
+
+ case .homeCoordinator(.view(.switchTapBar)):
+ state.selectedTab = .search
+ return .none
+
+ default:
+ return .none
+ }
+ }
+}
+
diff --git a/Projects/Presentation/RootTab/Sources/View/RootTabBarView.swift b/Projects/Presentation/RootTab/Sources/View/RootTabBarView.swift
new file mode 100644
index 0000000..f61b396
--- /dev/null
+++ b/Projects/Presentation/RootTab/Sources/View/RootTabBarView.swift
@@ -0,0 +1,73 @@
+//
+// RootTabBarView.swift
+// RootTab
+//
+// Created by Wonji Suh on 10/28/25.
+//
+
+import SwiftUI
+import ComposableArchitecture
+import Home
+import Search
+
+public struct RootTabBarView: View {
+ @Perception.Bindable var store: StoreOf
+
+ public init(store: StoreOf) {
+ self.store = store
+ }
+
+ public var body: some View {
+ WithPerceptionTracking {
+ TabView(selection: $store.selectedTab) {
+ HomeCoordinatorView(
+ store: self.store.scope(
+ state: \.homeCoordinator,
+ action: \.scope.homeCoordinator)
+ )
+ .tabItem {
+ Image(systemName: "house")
+ Text(MainTab.home.tabBarTitle)
+ }
+ .tag(MainTab.home)
+
+ SearchCoordinatorView(
+ store: self.store.scope(
+ state: \.searchCoordinator,
+ action: \.scope.searchCoordinator)
+ )
+ .tabItem {
+ Image(systemName: "magnifyingglass")
+ Text(MainTab.search.tabBarTitle)
+ }
+ .tag(MainTab.search)
+ }
+ .preferredColorScheme(.dark)
+ .accentColor(.green)
+ .onAppear {
+ setupTabBarAppearance()
+ }
+ }
+ }
+
+ private func setupTabBarAppearance() {
+ let appearance = UITabBarAppearance()
+ appearance.configureWithOpaqueBackground()
+ appearance.backgroundColor = UIColor.black
+
+ // 선택되지 않은 탭 아이템 색상
+ appearance.stackedLayoutAppearance.normal.iconColor = UIColor.gray
+ appearance.stackedLayoutAppearance.normal.titleTextAttributes = [
+ .foregroundColor: UIColor.gray
+ ]
+
+ // 선택된 탭 아이템 색상
+ appearance.stackedLayoutAppearance.selected.iconColor = UIColor.green
+ appearance.stackedLayoutAppearance.selected.titleTextAttributes = [
+ .foregroundColor: UIColor.green
+ ]
+
+ UITabBar.appearance().standardAppearance = appearance
+ UITabBar.appearance().scrollEdgeAppearance = appearance
+ }
+}
diff --git a/Projects/Presentation/Search/Derived/InfoPlists/Search-Debug-Info.plist b/Projects/Presentation/Search/Derived/InfoPlists/Search-Debug-Info.plist
new file mode 100644
index 0000000..323e5ec
--- /dev/null
+++ b/Projects/Presentation/Search/Derived/InfoPlists/Search-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/Search/Derived/InfoPlists/Search-Info.plist b/Projects/Presentation/Search/Derived/InfoPlists/Search-Info.plist
new file mode 100644
index 0000000..323e5ec
--- /dev/null
+++ b/Projects/Presentation/Search/Derived/InfoPlists/Search-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/Search/Derived/InfoPlists/Search-Prod-Info.plist b/Projects/Presentation/Search/Derived/InfoPlists/Search-Prod-Info.plist
new file mode 100644
index 0000000..323e5ec
--- /dev/null
+++ b/Projects/Presentation/Search/Derived/InfoPlists/Search-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/Search/Derived/InfoPlists/Search-Stage-Info.plist b/Projects/Presentation/Search/Derived/InfoPlists/Search-Stage-Info.plist
new file mode 100644
index 0000000..323e5ec
--- /dev/null
+++ b/Projects/Presentation/Search/Derived/InfoPlists/Search-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/Search/Derived/InfoPlists/SearchTests-Info.plist b/Projects/Presentation/Search/Derived/InfoPlists/SearchTests-Info.plist
new file mode 100644
index 0000000..6c40a6c
--- /dev/null
+++ b/Projects/Presentation/Search/Derived/InfoPlists/SearchTests-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/Search/Project.swift b/Projects/Presentation/Search/Project.swift
new file mode 100644
index 0000000..16403d1
--- /dev/null
+++ b/Projects/Presentation/Search/Project.swift
@@ -0,0 +1,18 @@
+import Foundation
+import ProjectDescription
+import DependencyPlugin
+import ProjectTemplatePlugin
+import DependencyPackagePlugin
+
+let project = Project.makeAppModule(
+ name: "Search",
+ bundleId: .appBundleID(name: ".Search"),
+ product: .staticFramework,
+ settings: .settings(),
+ dependencies: [
+ .Presentation(implements: .Detail),
+ .Core(implements: .Core),
+ .Shared(implements: .Shared),
+ ],
+ sources: ["Sources/**"]
+)
diff --git a/Projects/Presentation/Search/Search.xcodeproj/project.pbxproj b/Projects/Presentation/Search/Search.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..9936e89
--- /dev/null
+++ b/Projects/Presentation/Search/Search.xcodeproj/project.pbxproj
@@ -0,0 +1,1519 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 55;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 032E2923B00BFC5EAB76C5F7 /* SearchResultItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = FBA500C554BA5FC819BE7596 /* SearchResultItem.swift */; };
+ 0554EE2B028EAB2732AC4224 /* NoResultsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 830A28B51C9D38E2AEBE05C2 /* NoResultsView.swift */; };
+ 05933ABED45C661592F54152 /* Shared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 125BD6F6F900FE0F16E9AFC8 /* Shared.framework */; };
+ 068014758BD4189A50A22581 /* SearchReducer.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBAC0F518C8B647D636403B3 /* SearchReducer.swift */; };
+ 07DA6B029D914657E2BD2542 /* SearchCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36834DC20C5C8180C9CD59A6 /* SearchCoordinator.swift */; };
+ 083AAE5467B64C2FE21F2F30 /* SearchCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36834DC20C5C8180C9CD59A6 /* SearchCoordinator.swift */; };
+ 0E2A94606D5F8C733A10766B /* Detail.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = B31AC52543F492AE4A5EB683 /* Detail.framework */; };
+ 0E42EB3E01DD94FB0B5FBA9F /* SearchBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 832D284A74D4E6414910CF20 /* SearchBar.swift */; };
+ 0FACF8A0863F9D6BF520EF77 /* SearchBackground.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76C9FEC7F58C61D434418E21 /* SearchBackground.swift */; };
+ 1462AE0EE40801CC09B49189 /* SearchResultsList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FA5C52ECA881681BEF82BE5 /* SearchResultsList.swift */; };
+ 177E90F24CFE83F52AE55F63 /* Detail.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = B31AC52543F492AE4A5EB683 /* Detail.framework */; };
+ 19835A581563202293853651 /* SearchBackground.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76C9FEC7F58C61D434418E21 /* SearchBackground.swift */; };
+ 1A59905ACAB58BB186CEE65F /* SearchResultItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = FBA500C554BA5FC819BE7596 /* SearchResultItem.swift */; };
+ 1E0C983238AE5DDB78E2AFA1 /* SearchCategoryFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = E00E7F194DDDBCAF03F13AB6 /* SearchCategoryFilter.swift */; };
+ 1F2CF817A3A94BAACADA14CB /* SearchCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36834DC20C5C8180C9CD59A6 /* SearchCoordinator.swift */; };
+ 213869C3D7CFC1BEBA5AEDEB /* Core.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 382AEFFC63FBC3CADB8C4886 /* Core.framework */; };
+ 21AEA66E1AC77285E6E9139B /* SearchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67FFC64244B37FAB1CA8F104 /* SearchView.swift */; };
+ 2679B42119011AADA9D53D5E /* SearchCoordinatorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6294650406D2FE2875E45ADC /* SearchCoordinatorView.swift */; };
+ 2E3F7B82CE323BFF013C8E89 /* SearchCategoryFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = E00E7F194DDDBCAF03F13AB6 /* SearchCategoryFilter.swift */; };
+ 2EA1CF2AB1B63A42B459351E /* TrendingCard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 585ABA4834C26FDBBC507545 /* TrendingCard.swift */; };
+ 3145CF92191F3C7627A72610 /* Shared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 125BD6F6F900FE0F16E9AFC8 /* Shared.framework */; };
+ 37722F4E4E97B64B17CD6452 /* TrendingCard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 585ABA4834C26FDBBC507545 /* TrendingCard.swift */; };
+ 3E0576AAE0C8B4FC66F34A6F /* SearchCoordinatorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6294650406D2FE2875E45ADC /* SearchCoordinatorView.swift */; };
+ 3E34368C30ABED5249008C16 /* SearchCoordinatorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6294650406D2FE2875E45ADC /* SearchCoordinatorView.swift */; };
+ 431E534326BD22ABCFB7EC89 /* Shared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 125BD6F6F900FE0F16E9AFC8 /* Shared.framework */; };
+ 47597AE2E4543CD5CEC83027 /* SearchResultItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = FBA500C554BA5FC819BE7596 /* SearchResultItem.swift */; };
+ 4834DF582F5F5B08413382A1 /* NoResultsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 830A28B51C9D38E2AEBE05C2 /* NoResultsView.swift */; };
+ 4C68C53E026692506551213C /* swift-sharing_Sharing.bundle in Resources */ = {isa = PBXBuildFile; fileRef = BD73DA1FF53C3EE20E8E80D9 /* swift-sharing_Sharing.bundle */; };
+ 4EDD946657CC53EA96711227 /* Shared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 125BD6F6F900FE0F16E9AFC8 /* Shared.framework */; };
+ 50E33F7AA1B30ECEF6D9569F /* SearchBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 832D284A74D4E6414910CF20 /* SearchBar.swift */; };
+ 529B3290558325314CDCE555 /* swift-sharing_Sharing.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = BD73DA1FF53C3EE20E8E80D9 /* swift-sharing_Sharing.bundle */; };
+ 53DC3B370554DD4FE1907B3D /* SearchReducerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61A7DA215A75CD3B31667AA8 /* SearchReducerTests.swift */; };
+ 5433E98671951FFF1552A219 /* SearchCoordinatorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6294650406D2FE2875E45ADC /* SearchCoordinatorView.swift */; };
+ 58C772B95CE23DD892454DFC /* Core.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 382AEFFC63FBC3CADB8C4886 /* Core.framework */; };
+ 5BBED3B611CE47950FDE55E3 /* SearchReducer.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBAC0F518C8B647D636403B3 /* SearchReducer.swift */; };
+ 6460877AAE9310DF18A29F73 /* SearchReducer.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBAC0F518C8B647D636403B3 /* SearchReducer.swift */; };
+ 660279A8778DB4CA4963C6A0 /* SearchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67FFC64244B37FAB1CA8F104 /* SearchView.swift */; };
+ 66244C086D79D4B416E241CB /* TrendingSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96594EE4D7660BAD30E00EA1 /* TrendingSection.swift */; };
+ 6AE8802B8093A592B2776A11 /* TrendingSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96594EE4D7660BAD30E00EA1 /* TrendingSection.swift */; };
+ 6D110964F271BB40F9EA1256 /* SearchBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 832D284A74D4E6414910CF20 /* SearchBar.swift */; };
+ 73C8C9C729F36E591D8819B7 /* swift-composable-architecture_ComposableArchitecture.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 8EC584C6ED40CBE84C34F4F6 /* swift-composable-architecture_ComposableArchitecture.bundle */; };
+ 7B73E952D730B962AF145AF3 /* Detail.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = B31AC52543F492AE4A5EB683 /* Detail.framework */; };
+ 7D6BFCF1A2C6EC2413E8312D /* RecentSearchesSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BD6A57AD355AB93D4E292BD /* RecentSearchesSection.swift */; };
+ 84048AD51C15B9352C8AE379 /* SearchResultsList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FA5C52ECA881681BEF82BE5 /* SearchResultsList.swift */; };
+ 84E9BED6FB8EF5937F2AA5E0 /* SearchCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 36834DC20C5C8180C9CD59A6 /* SearchCoordinator.swift */; };
+ 88D5E8ACE42E4EC8D6021DB8 /* SearchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67FFC64244B37FAB1CA8F104 /* SearchView.swift */; };
+ 8A4429053A94EE4A35BBB3F6 /* Alamofire_Alamofire.bundle in Resources */ = {isa = PBXBuildFile; fileRef = CCEB0430E005F10DFFE17636 /* Alamofire_Alamofire.bundle */; };
+ 8BBDB2AE6124D2EDC3E67DF7 /* swift-composable-architecture_ComposableArchitecture.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 8EC584C6ED40CBE84C34F4F6 /* swift-composable-architecture_ComposableArchitecture.bundle */; };
+ 92E21A2B2BDCCCE34E9F7813 /* TrendingSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96594EE4D7660BAD30E00EA1 /* TrendingSection.swift */; };
+ 9D253C4A9A1B57889B8F2953 /* RecentSearchesSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BD6A57AD355AB93D4E292BD /* RecentSearchesSection.swift */; };
+ 9E7B6D31A8E9C6F32B34879A /* NoResultsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 830A28B51C9D38E2AEBE05C2 /* NoResultsView.swift */; };
+ 9EB903A194357CC77F455275 /* Core.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 382AEFFC63FBC3CADB8C4886 /* Core.framework */; };
+ 9FB2495E093C488736BCD44C /* Core.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 382AEFFC63FBC3CADB8C4886 /* Core.framework */; };
+ A5F96BA39BB2AFDEFDE31B5A /* TrendingCard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 585ABA4834C26FDBBC507545 /* TrendingCard.swift */; };
+ A70DE8D6C224C4D36913787B /* SearchView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67FFC64244B37FAB1CA8F104 /* SearchView.swift */; };
+ AA531DC1B2CECA3CE6E43876 /* RecentSearchesSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BD6A57AD355AB93D4E292BD /* RecentSearchesSection.swift */; };
+ AC04590E07695AE7A806FAD9 /* Search.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DCEA3ABCBA70F49C90FFC61F /* Search.framework */; };
+ B69BA5C7B4F7607CBCE8E36B /* Alamofire_Alamofire.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = CCEB0430E005F10DFFE17636 /* Alamofire_Alamofire.bundle */; };
+ B768B8E59D8D8382F5259414 /* TrendingSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96594EE4D7660BAD30E00EA1 /* TrendingSection.swift */; };
+ B76DF1968F84B3159E775540 /* SearchReducer.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBAC0F518C8B647D636403B3 /* SearchReducer.swift */; };
+ BDF946D802337DD7A2D1A177 /* SearchCategoryFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = E00E7F194DDDBCAF03F13AB6 /* SearchCategoryFilter.swift */; };
+ BE7F955DA751839B6BC7C2FE /* Core.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 382AEFFC63FBC3CADB8C4886 /* Core.framework */; };
+ CF593945E307DECEEF7DB3B1 /* RecentSearchesSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BD6A57AD355AB93D4E292BD /* RecentSearchesSection.swift */; };
+ D23694761C0710DF26F0141F /* SearchCategoryFilter.swift in Sources */ = {isa = PBXBuildFile; fileRef = E00E7F194DDDBCAF03F13AB6 /* SearchCategoryFilter.swift */; };
+ D33E8C016483DFE6D2C23AEF /* NoResultsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 830A28B51C9D38E2AEBE05C2 /* NoResultsView.swift */; };
+ D5BA731850FA95B2327B7337 /* SearchBar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 832D284A74D4E6414910CF20 /* SearchBar.swift */; };
+ D71D569E6C008A1F0E49FB7E /* SearchBackground.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76C9FEC7F58C61D434418E21 /* SearchBackground.swift */; };
+ DE749EB0521960A9773EF9EA /* SearchResultItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = FBA500C554BA5FC819BE7596 /* SearchResultItem.swift */; };
+ ED15806F779DDC9CF33114BC /* Detail.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B31AC52543F492AE4A5EB683 /* Detail.framework */; };
+ F697D07F3868C4859C39DE7F /* SearchResultsList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FA5C52ECA881681BEF82BE5 /* SearchResultsList.swift */; };
+ F7C51787E550DFFA78FDC365 /* Detail.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = B31AC52543F492AE4A5EB683 /* Detail.framework */; };
+ F80BC0E5885317066A4B89D7 /* SearchResultsList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FA5C52ECA881681BEF82BE5 /* SearchResultsList.swift */; };
+ F87AF19EBB604A1197E6B440 /* Shared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 125BD6F6F900FE0F16E9AFC8 /* Shared.framework */; };
+ F996E8A8E379D2DF6BC5C0F1 /* SearchBackground.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76C9FEC7F58C61D434418E21 /* SearchBackground.swift */; };
+ FF8512DCE45686236DB51683 /* TrendingCard.swift in Sources */ = {isa = PBXBuildFile; fileRef = 585ABA4834C26FDBBC507545 /* TrendingCard.swift */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXContainerItemProxy section */
+ 1EEE6ADC761F6FE0DBEEBE9C /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = 5A5799AE384BBD104247C169 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = C8340F58B0B1AD7EA1B1F833;
+ remoteInfo = Search;
+ };
+/* End PBXContainerItemProxy section */
+
+/* Begin PBXCopyFilesBuildPhase section */
+ 0FD283A6D7CA26DA1D2B6937 /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ B69BA5C7B4F7607CBCE8E36B /* Alamofire_Alamofire.bundle in Dependencies */,
+ 8BBDB2AE6124D2EDC3E67DF7 /* swift-composable-architecture_ComposableArchitecture.bundle in Dependencies */,
+ 529B3290558325314CDCE555 /* swift-sharing_Sharing.bundle in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ 6937CB7822AAD687295A06FC /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 6FC38615B1ABA051B74C3A17 /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ 7B73E952D730B962AF145AF3 /* Detail.framework in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ 76E0925B21E7E0D9C62CCD20 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 79C4E01AD7B5259CF619B13A /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ F7C51787E550DFFA78FDC365 /* Detail.framework in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ 877F936C57E9C46C94BF2D4D /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 87F6AD381EF611D98B300CE3 /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ 0E2A94606D5F8C733A10766B /* Detail.framework in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ 9D9977A71E7C7D1C574D5FE5 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ ADFDA8A10722D3497DE73E8D /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ 177E90F24CFE83F52AE55F63 /* Detail.framework in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ C3563AE397BC02972195D847 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXCopyFilesBuildPhase section */
+
+/* Begin PBXFileReference section */
+ 125BD6F6F900FE0F16E9AFC8 /* Shared.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Shared.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 1CE78830EFDE634DA1AB3A4A /* SearchTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = SearchTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+ 23309DCBDB6DD5358D0CCBB9 /* Search_Debug.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Search_Debug.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 36834DC20C5C8180C9CD59A6 /* SearchCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchCoordinator.swift; sourceTree = ""; };
+ 382AEFFC63FBC3CADB8C4886 /* Core.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Core.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 47506C2B8CF716A0AD1E9198 /* Search-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Search-Info.plist"; sourceTree = ""; };
+ 52A9264304AC4A55660FC942 /* Search_Stage.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Search_Stage.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 585ABA4834C26FDBBC507545 /* TrendingCard.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrendingCard.swift; sourceTree = ""; };
+ 5BD6A57AD355AB93D4E292BD /* RecentSearchesSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecentSearchesSection.swift; sourceTree = ""; };
+ 5FA5C52ECA881681BEF82BE5 /* SearchResultsList.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchResultsList.swift; sourceTree = ""; };
+ 61A7DA215A75CD3B31667AA8 /* SearchReducerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchReducerTests.swift; sourceTree = ""; };
+ 6294650406D2FE2875E45ADC /* SearchCoordinatorView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchCoordinatorView.swift; sourceTree = ""; };
+ 67FFC64244B37FAB1CA8F104 /* SearchView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchView.swift; sourceTree = ""; };
+ 76C9FEC7F58C61D434418E21 /* SearchBackground.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchBackground.swift; sourceTree = ""; };
+ 830A28B51C9D38E2AEBE05C2 /* NoResultsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NoResultsView.swift; sourceTree = ""; };
+ 832D284A74D4E6414910CF20 /* SearchBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchBar.swift; sourceTree = ""; };
+ 89062292A5D1E146E816F07A /* Search-Prod-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Search-Prod-Info.plist"; sourceTree = ""; };
+ 8EC584C6ED40CBE84C34F4F6 /* swift-composable-architecture_ComposableArchitecture.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "swift-composable-architecture_ComposableArchitecture.bundle"; sourceTree = BUILT_PRODUCTS_DIR; };
+ 96594EE4D7660BAD30E00EA1 /* TrendingSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrendingSection.swift; sourceTree = ""; };
+ 9F7B90DCA916662065A4C6E0 /* Search-Debug-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Search-Debug-Info.plist"; sourceTree = ""; };
+ AEB09945E74C5CE5FAE1DE10 /* Search_Prod.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Search_Prod.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ B31AC52543F492AE4A5EB683 /* Detail.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Detail.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ BD73DA1FF53C3EE20E8E80D9 /* swift-sharing_Sharing.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "swift-sharing_Sharing.bundle"; sourceTree = BUILT_PRODUCTS_DIR; };
+ C2D2C478D13AE32E718DB078 /* Search-Stage-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Search-Stage-Info.plist"; sourceTree = ""; };
+ CCEB0430E005F10DFFE17636 /* Alamofire_Alamofire.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Alamofire_Alamofire.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
+ DCEA3ABCBA70F49C90FFC61F /* Search.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Search.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ E00E7F194DDDBCAF03F13AB6 /* SearchCategoryFilter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchCategoryFilter.swift; sourceTree = ""; };
+ EBAC0F518C8B647D636403B3 /* SearchReducer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchReducer.swift; sourceTree = ""; };
+ EE36648F12CA828C3FD7A48B /* SearchTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "SearchTests-Info.plist"; sourceTree = ""; };
+ FBA500C554BA5FC819BE7596 /* SearchResultItem.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchResultItem.swift; sourceTree = ""; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ 4764E98A0E48BBD1C0A40DE5 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 9FB2495E093C488736BCD44C /* Core.framework in Frameworks */,
+ ED15806F779DDC9CF33114BC /* Detail.framework in Frameworks */,
+ AC04590E07695AE7A806FAD9 /* Search.framework in Frameworks */,
+ F87AF19EBB604A1197E6B440 /* Shared.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 618045CA542B989322537F6D /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ BE7F955DA751839B6BC7C2FE /* Core.framework in Frameworks */,
+ 431E534326BD22ABCFB7EC89 /* Shared.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ AF7A1FB9B55E3E4C90138F79 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 9EB903A194357CC77F455275 /* Core.framework in Frameworks */,
+ 05933ABED45C661592F54152 /* Shared.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ F07534F5059642EA773C9289 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 58C772B95CE23DD892454DFC /* Core.framework in Frameworks */,
+ 4EDD946657CC53EA96711227 /* Shared.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ FB04F59C6B6FFF4627367441 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 213869C3D7CFC1BEBA5AEDEB /* Core.framework in Frameworks */,
+ 3145CF92191F3C7627A72610 /* Shared.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 092B684217D797260BE40BBB /* Project */ = {
+ isa = PBXGroup;
+ children = (
+ 854023328EC09B4DB800D64A /* Derived */,
+ 18305E636FA294577FD65BBB /* SearchTests */,
+ F71AEF5F9FDF9F2A91959397 /* Sources */,
+ );
+ name = Project;
+ sourceTree = "";
+ };
+ 0D1FA3D1345AFC274996A1F6 /* Sources */ = {
+ isa = PBXGroup;
+ children = (
+ 61A7DA215A75CD3B31667AA8 /* SearchReducerTests.swift */,
+ );
+ path = Sources;
+ sourceTree = "";
+ };
+ 18305E636FA294577FD65BBB /* SearchTests */ = {
+ isa = PBXGroup;
+ children = (
+ 0D1FA3D1345AFC274996A1F6 /* Sources */,
+ );
+ path = SearchTests;
+ sourceTree = "";
+ };
+ 2145FAEF6757D082FF289DF4 /* View */ = {
+ isa = PBXGroup;
+ children = (
+ 48A127E674006B317BBDFD31 /* Component */,
+ 67FFC64244B37FAB1CA8F104 /* SearchView.swift */,
+ );
+ path = View;
+ sourceTree = "";
+ };
+ 48A127E674006B317BBDFD31 /* Component */ = {
+ isa = PBXGroup;
+ children = (
+ 830A28B51C9D38E2AEBE05C2 /* NoResultsView.swift */,
+ 5BD6A57AD355AB93D4E292BD /* RecentSearchesSection.swift */,
+ 76C9FEC7F58C61D434418E21 /* SearchBackground.swift */,
+ 832D284A74D4E6414910CF20 /* SearchBar.swift */,
+ E00E7F194DDDBCAF03F13AB6 /* SearchCategoryFilter.swift */,
+ FBA500C554BA5FC819BE7596 /* SearchResultItem.swift */,
+ 5FA5C52ECA881681BEF82BE5 /* SearchResultsList.swift */,
+ 585ABA4834C26FDBBC507545 /* TrendingCard.swift */,
+ 96594EE4D7660BAD30E00EA1 /* TrendingSection.swift */,
+ );
+ path = Component;
+ sourceTree = "";
+ };
+ 84BFA334710650A3234CA462 /* View */ = {
+ isa = PBXGroup;
+ children = (
+ 6294650406D2FE2875E45ADC /* SearchCoordinatorView.swift */,
+ );
+ path = View;
+ sourceTree = "";
+ };
+ 854023328EC09B4DB800D64A /* Derived */ = {
+ isa = PBXGroup;
+ children = (
+ AC15BCAE73B741CFE572E836 /* InfoPlists */,
+ );
+ path = Derived;
+ sourceTree = "";
+ };
+ 913934DE0D0A54111950D94B /* Main */ = {
+ isa = PBXGroup;
+ children = (
+ CC9821B2A67BE0AFDAFB9C9D /* Reducer */,
+ 2145FAEF6757D082FF289DF4 /* View */,
+ );
+ path = "Main ";
+ sourceTree = "";
+ };
+ A265AAF9885BC77A31761249 = {
+ isa = PBXGroup;
+ children = (
+ 092B684217D797260BE40BBB /* Project */,
+ BEF3F41E9B860D2AF6E4FE8E /* Products */,
+ );
+ sourceTree = "";
+ };
+ AC15BCAE73B741CFE572E836 /* InfoPlists */ = {
+ isa = PBXGroup;
+ children = (
+ 9F7B90DCA916662065A4C6E0 /* Search-Debug-Info.plist */,
+ 47506C2B8CF716A0AD1E9198 /* Search-Info.plist */,
+ 89062292A5D1E146E816F07A /* Search-Prod-Info.plist */,
+ C2D2C478D13AE32E718DB078 /* Search-Stage-Info.plist */,
+ EE36648F12CA828C3FD7A48B /* SearchTests-Info.plist */,
+ );
+ path = InfoPlists;
+ sourceTree = "";
+ };
+ BDB1368703B3042CDEC595F0 /* Reducer */ = {
+ isa = PBXGroup;
+ children = (
+ 36834DC20C5C8180C9CD59A6 /* SearchCoordinator.swift */,
+ );
+ path = Reducer;
+ sourceTree = "";
+ };
+ BEF3F41E9B860D2AF6E4FE8E /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ CCEB0430E005F10DFFE17636 /* Alamofire_Alamofire.bundle */,
+ 382AEFFC63FBC3CADB8C4886 /* Core.framework */,
+ B31AC52543F492AE4A5EB683 /* Detail.framework */,
+ 23309DCBDB6DD5358D0CCBB9 /* Search_Debug.framework */,
+ AEB09945E74C5CE5FAE1DE10 /* Search_Prod.framework */,
+ 52A9264304AC4A55660FC942 /* Search_Stage.framework */,
+ DCEA3ABCBA70F49C90FFC61F /* Search.framework */,
+ 1CE78830EFDE634DA1AB3A4A /* SearchTests.xctest */,
+ 125BD6F6F900FE0F16E9AFC8 /* Shared.framework */,
+ 8EC584C6ED40CBE84C34F4F6 /* swift-composable-architecture_ComposableArchitecture.bundle */,
+ BD73DA1FF53C3EE20E8E80D9 /* swift-sharing_Sharing.bundle */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ CB52ED1F5386EFCE6F08FF58 /* Coordinator */ = {
+ isa = PBXGroup;
+ children = (
+ BDB1368703B3042CDEC595F0 /* Reducer */,
+ 84BFA334710650A3234CA462 /* View */,
+ );
+ path = Coordinator;
+ sourceTree = "";
+ };
+ CC9821B2A67BE0AFDAFB9C9D /* Reducer */ = {
+ isa = PBXGroup;
+ children = (
+ EBAC0F518C8B647D636403B3 /* SearchReducer.swift */,
+ );
+ path = Reducer;
+ sourceTree = "";
+ };
+ F71AEF5F9FDF9F2A91959397 /* Sources */ = {
+ isa = PBXGroup;
+ children = (
+ CB52ED1F5386EFCE6F08FF58 /* Coordinator */,
+ 913934DE0D0A54111950D94B /* Main */,
+ );
+ path = Sources;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 07BC18765727814C00E81BA3 /* Search-Stage */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 60DF61616F19AA48904388D6 /* Build configuration list for PBXNativeTarget "Search-Stage" */;
+ buildPhases = (
+ A5BA3A79A9F1147557ED8BEB /* Sources */,
+ 24F25CDBF1CEF864E5BD04C9 /* Resources */,
+ AF7A1FB9B55E3E4C90138F79 /* Frameworks */,
+ 76E0925B21E7E0D9C62CCD20 /* Embed Frameworks */,
+ 87F6AD381EF611D98B300CE3 /* Dependencies */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = "Search-Stage";
+ packageProductDependencies = (
+ );
+ productName = Search_Stage;
+ productReference = 52A9264304AC4A55660FC942 /* Search_Stage.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+ 5025AE41A60E1D1B5B67EC7D /* SearchTests */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 07EA95A7700BA1362F87E897 /* Build configuration list for PBXNativeTarget "SearchTests" */;
+ buildPhases = (
+ 585BA06379A5E7F0163F8A29 /* Sources */,
+ BFE4DF0124DF27EC3591F41A /* Resources */,
+ 4764E98A0E48BBD1C0A40DE5 /* Frameworks */,
+ 9D9977A71E7C7D1C574D5FE5 /* Embed Frameworks */,
+ 0FD283A6D7CA26DA1D2B6937 /* Dependencies */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ AA3269EFB3974985258C0DC9 /* PBXTargetDependency */,
+ );
+ name = SearchTests;
+ packageProductDependencies = (
+ );
+ productName = SearchTests;
+ productReference = 1CE78830EFDE634DA1AB3A4A /* SearchTests.xctest */;
+ productType = "com.apple.product-type.bundle.unit-test";
+ };
+ ADF6FD6557B86CF1D0D142F4 /* Search-Debug */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 2173A964CDD5E364DC23C0EE /* Build configuration list for PBXNativeTarget "Search-Debug" */;
+ buildPhases = (
+ F3ECEE27F857EAA71EBC9A31 /* Sources */,
+ 98560064236716FF44531EAA /* Resources */,
+ 618045CA542B989322537F6D /* Frameworks */,
+ C3563AE397BC02972195D847 /* Embed Frameworks */,
+ 6FC38615B1ABA051B74C3A17 /* Dependencies */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = "Search-Debug";
+ packageProductDependencies = (
+ );
+ productName = Search_Debug;
+ productReference = 23309DCBDB6DD5358D0CCBB9 /* Search_Debug.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+ BC9735B9FBE423AE69AD2C5D /* Search-Prod */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = C76873DAF57B4EAF377DEA57 /* Build configuration list for PBXNativeTarget "Search-Prod" */;
+ buildPhases = (
+ ACDD205046EB10BB45B50D85 /* Sources */,
+ D6FBCFF6B3DA0105DFC42CC2 /* Resources */,
+ F07534F5059642EA773C9289 /* Frameworks */,
+ 6937CB7822AAD687295A06FC /* Embed Frameworks */,
+ 79C4E01AD7B5259CF619B13A /* Dependencies */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = "Search-Prod";
+ packageProductDependencies = (
+ );
+ productName = Search_Prod;
+ productReference = AEB09945E74C5CE5FAE1DE10 /* Search_Prod.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+ C8340F58B0B1AD7EA1B1F833 /* Search */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 7959414547E0A4954D52B231 /* Build configuration list for PBXNativeTarget "Search" */;
+ buildPhases = (
+ 435B521C004F6947D667BECF /* Sources */,
+ 9C5ABED26914D47B4B506F60 /* Resources */,
+ FB04F59C6B6FFF4627367441 /* Frameworks */,
+ 877F936C57E9C46C94BF2D4D /* Embed Frameworks */,
+ ADFDA8A10722D3497DE73E8D /* Dependencies */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = Search;
+ packageProductDependencies = (
+ );
+ productName = Search;
+ productReference = DCEA3ABCBA70F49C90FFC61F /* Search.framework */;
+ productType = "com.apple.product-type.framework";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 5A5799AE384BBD104247C169 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ BuildIndependentTargetsInParallel = YES;
+ TargetAttributes = {
+ };
+ };
+ buildConfigurationList = 731940972587373E5B45F8C7 /* Build configuration list for PBXProject "Search" */;
+ compatibilityVersion = "Xcode 14.0";
+ developmentRegion = ko;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ ko,
+ );
+ mainGroup = A265AAF9885BC77A31761249;
+ productRefGroup = BEF3F41E9B860D2AF6E4FE8E /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ C8340F58B0B1AD7EA1B1F833 /* Search */,
+ ADF6FD6557B86CF1D0D142F4 /* Search-Debug */,
+ BC9735B9FBE423AE69AD2C5D /* Search-Prod */,
+ 07BC18765727814C00E81BA3 /* Search-Stage */,
+ 5025AE41A60E1D1B5B67EC7D /* SearchTests */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ 24F25CDBF1CEF864E5BD04C9 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 98560064236716FF44531EAA /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 9C5ABED26914D47B4B506F60 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ BFE4DF0124DF27EC3591F41A /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 8A4429053A94EE4A35BBB3F6 /* Alamofire_Alamofire.bundle in Resources */,
+ 73C8C9C729F36E591D8819B7 /* swift-composable-architecture_ComposableArchitecture.bundle in Resources */,
+ 4C68C53E026692506551213C /* swift-sharing_Sharing.bundle in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ D6FBCFF6B3DA0105DFC42CC2 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ 435B521C004F6947D667BECF /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 07DA6B029D914657E2BD2542 /* SearchCoordinator.swift in Sources */,
+ 3E0576AAE0C8B4FC66F34A6F /* SearchCoordinatorView.swift in Sources */,
+ 6460877AAE9310DF18A29F73 /* SearchReducer.swift in Sources */,
+ D33E8C016483DFE6D2C23AEF /* NoResultsView.swift in Sources */,
+ 7D6BFCF1A2C6EC2413E8312D /* RecentSearchesSection.swift in Sources */,
+ 19835A581563202293853651 /* SearchBackground.swift in Sources */,
+ D5BA731850FA95B2327B7337 /* SearchBar.swift in Sources */,
+ 1E0C983238AE5DDB78E2AFA1 /* SearchCategoryFilter.swift in Sources */,
+ 032E2923B00BFC5EAB76C5F7 /* SearchResultItem.swift in Sources */,
+ F697D07F3868C4859C39DE7F /* SearchResultsList.swift in Sources */,
+ A5F96BA39BB2AFDEFDE31B5A /* TrendingCard.swift in Sources */,
+ 66244C086D79D4B416E241CB /* TrendingSection.swift in Sources */,
+ 660279A8778DB4CA4963C6A0 /* SearchView.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 585BA06379A5E7F0163F8A29 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 53DC3B370554DD4FE1907B3D /* SearchReducerTests.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ A5BA3A79A9F1147557ED8BEB /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 84E9BED6FB8EF5937F2AA5E0 /* SearchCoordinator.swift in Sources */,
+ 2679B42119011AADA9D53D5E /* SearchCoordinatorView.swift in Sources */,
+ B76DF1968F84B3159E775540 /* SearchReducer.swift in Sources */,
+ 9E7B6D31A8E9C6F32B34879A /* NoResultsView.swift in Sources */,
+ AA531DC1B2CECA3CE6E43876 /* RecentSearchesSection.swift in Sources */,
+ 0FACF8A0863F9D6BF520EF77 /* SearchBackground.swift in Sources */,
+ 0E42EB3E01DD94FB0B5FBA9F /* SearchBar.swift in Sources */,
+ D23694761C0710DF26F0141F /* SearchCategoryFilter.swift in Sources */,
+ DE749EB0521960A9773EF9EA /* SearchResultItem.swift in Sources */,
+ F80BC0E5885317066A4B89D7 /* SearchResultsList.swift in Sources */,
+ FF8512DCE45686236DB51683 /* TrendingCard.swift in Sources */,
+ 6AE8802B8093A592B2776A11 /* TrendingSection.swift in Sources */,
+ 88D5E8ACE42E4EC8D6021DB8 /* SearchView.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ ACDD205046EB10BB45B50D85 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 083AAE5467B64C2FE21F2F30 /* SearchCoordinator.swift in Sources */,
+ 5433E98671951FFF1552A219 /* SearchCoordinatorView.swift in Sources */,
+ 068014758BD4189A50A22581 /* SearchReducer.swift in Sources */,
+ 4834DF582F5F5B08413382A1 /* NoResultsView.swift in Sources */,
+ CF593945E307DECEEF7DB3B1 /* RecentSearchesSection.swift in Sources */,
+ D71D569E6C008A1F0E49FB7E /* SearchBackground.swift in Sources */,
+ 6D110964F271BB40F9EA1256 /* SearchBar.swift in Sources */,
+ BDF946D802337DD7A2D1A177 /* SearchCategoryFilter.swift in Sources */,
+ 1A59905ACAB58BB186CEE65F /* SearchResultItem.swift in Sources */,
+ 84048AD51C15B9352C8AE379 /* SearchResultsList.swift in Sources */,
+ 37722F4E4E97B64B17CD6452 /* TrendingCard.swift in Sources */,
+ 92E21A2B2BDCCCE34E9F7813 /* TrendingSection.swift in Sources */,
+ A70DE8D6C224C4D36913787B /* SearchView.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ F3ECEE27F857EAA71EBC9A31 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 1F2CF817A3A94BAACADA14CB /* SearchCoordinator.swift in Sources */,
+ 3E34368C30ABED5249008C16 /* SearchCoordinatorView.swift in Sources */,
+ 5BBED3B611CE47950FDE55E3 /* SearchReducer.swift in Sources */,
+ 0554EE2B028EAB2732AC4224 /* NoResultsView.swift in Sources */,
+ 9D253C4A9A1B57889B8F2953 /* RecentSearchesSection.swift in Sources */,
+ F996E8A8E379D2DF6BC5C0F1 /* SearchBackground.swift in Sources */,
+ 50E33F7AA1B30ECEF6D9569F /* SearchBar.swift in Sources */,
+ 2E3F7B82CE323BFF013C8E89 /* SearchCategoryFilter.swift in Sources */,
+ 47597AE2E4543CD5CEC83027 /* SearchResultItem.swift in Sources */,
+ 1462AE0EE40801CC09B49189 /* SearchResultsList.swift in Sources */,
+ 2EA1CF2AB1B63A42B459351E /* TrendingCard.swift in Sources */,
+ B768B8E59D8D8382F5259414 /* TrendingSection.swift in Sources */,
+ 21AEA66E1AC77285E6E9139B /* SearchView.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXTargetDependency section */
+ AA3269EFB3974985258C0DC9 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ name = Search;
+ target = C8340F58B0B1AD7EA1B1F833 /* Search */;
+ targetProxy = 1EEE6ADC761F6FE0DBEEBE9C /* PBXContainerItemProxy */;
+ };
+/* End PBXTargetDependency section */
+
+/* Begin XCBuildConfiguration section */
+ 140EE46DBC278F70D646016B /* 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/Search-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.Search;
+ PRODUCT_NAME = Search_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;
+ };
+ 4567E3C863E192E62025B73F /* 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;
+ };
+ 4CC5ECEC0CDDAC727D4213F7 /* 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/Search-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.Search;
+ PRODUCT_NAME = Search_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;
+ };
+ 69581C56F70B06DA99CBFA2B /* 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/SearchTests-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.Search.SearchTests;
+ PRODUCT_NAME = SearchTests;
+ 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;
+ };
+ A897910A47733AF69FCD4262 /* 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/Search-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.Search;
+ PRODUCT_NAME = Search_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;
+ };
+ AFD799D827E89703D46A6588 /* 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/Search-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.Search;
+ PRODUCT_NAME = Search;
+ 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;
+ };
+ BB569FE11B5B00DF7A9275E6 /* 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/Search-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.Search;
+ PRODUCT_NAME = Search_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;
+ };
+ CC9F1680F743330437B157DB /* 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/Search-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.Search;
+ PRODUCT_NAME = Search;
+ 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;
+ };
+ DF50FC267F8BDE6B8D23EEBC /* 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/Search-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.Search;
+ PRODUCT_NAME = Search_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;
+ };
+ E828B296DD1DDCBCD86B02E3 /* 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;
+ };
+ F894B393F6B89D7AA5841F73 /* 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/Search-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.Search;
+ PRODUCT_NAME = Search_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;
+ };
+ FDDD66F86BE7D07E8AE9115A /* 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/SearchTests-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.Search.SearchTests;
+ PRODUCT_NAME = SearchTests;
+ SDKROOT = iphoneos;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = (
+ "$(inherited)",
+ DEBUG,
+ );
+ SWIFT_COMPILATION_MODE = singlefile;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = 1;
+ };
+ name = Debug;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ 07EA95A7700BA1362F87E897 /* Build configuration list for PBXNativeTarget "SearchTests" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ FDDD66F86BE7D07E8AE9115A /* Debug */,
+ 69581C56F70B06DA99CBFA2B /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 2173A964CDD5E364DC23C0EE /* Build configuration list for PBXNativeTarget "Search-Debug" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 140EE46DBC278F70D646016B /* Debug */,
+ 4CC5ECEC0CDDAC727D4213F7 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 60DF61616F19AA48904388D6 /* Build configuration list for PBXNativeTarget "Search-Stage" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ A897910A47733AF69FCD4262 /* Debug */,
+ F894B393F6B89D7AA5841F73 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 731940972587373E5B45F8C7 /* Build configuration list for PBXProject "Search" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 4567E3C863E192E62025B73F /* Debug */,
+ E828B296DD1DDCBCD86B02E3 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ 7959414547E0A4954D52B231 /* Build configuration list for PBXNativeTarget "Search" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ CC9F1680F743330437B157DB /* Debug */,
+ AFD799D827E89703D46A6588 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ C76873DAF57B4EAF377DEA57 /* Build configuration list for PBXNativeTarget "Search-Prod" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ BB569FE11B5B00DF7A9275E6 /* Debug */,
+ DF50FC267F8BDE6B8D23EEBC /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = 5A5799AE384BBD104247C169 /* Project object */;
+}
diff --git a/Projects/Presentation/Search/Search.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Projects/Presentation/Search/Search.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..919434a
--- /dev/null
+++ b/Projects/Presentation/Search/Search.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/Projects/Presentation/Search/Search.xcodeproj/xcshareddata/xcschemes/Search-Debug.xcscheme b/Projects/Presentation/Search/Search.xcodeproj/xcshareddata/xcschemes/Search-Debug.xcscheme
new file mode 100644
index 0000000..d35c4a6
--- /dev/null
+++ b/Projects/Presentation/Search/Search.xcodeproj/xcshareddata/xcschemes/Search-Debug.xcscheme
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Projects/Presentation/Search/Search.xcodeproj/xcshareddata/xcschemes/Search-Prod.xcscheme b/Projects/Presentation/Search/Search.xcodeproj/xcshareddata/xcschemes/Search-Prod.xcscheme
new file mode 100644
index 0000000..94eddda
--- /dev/null
+++ b/Projects/Presentation/Search/Search.xcodeproj/xcshareddata/xcschemes/Search-Prod.xcscheme
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Projects/Presentation/Search/Search.xcodeproj/xcshareddata/xcschemes/Search-Stage.xcscheme b/Projects/Presentation/Search/Search.xcodeproj/xcshareddata/xcschemes/Search-Stage.xcscheme
new file mode 100644
index 0000000..7d934d6
--- /dev/null
+++ b/Projects/Presentation/Search/Search.xcodeproj/xcshareddata/xcschemes/Search-Stage.xcscheme
@@ -0,0 +1,77 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Projects/Presentation/Search/Search.xcodeproj/xcshareddata/xcschemes/Search.xcscheme b/Projects/Presentation/Search/Search.xcodeproj/xcshareddata/xcschemes/Search.xcscheme
new file mode 100644
index 0000000..1bb6e87
--- /dev/null
+++ b/Projects/Presentation/Search/Search.xcodeproj/xcshareddata/xcschemes/Search.xcscheme
@@ -0,0 +1,87 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Projects/Presentation/Search/SearchTests/Sources/SearchReducerTests.swift b/Projects/Presentation/Search/SearchTests/Sources/SearchReducerTests.swift
new file mode 100644
index 0000000..c1bb1c4
--- /dev/null
+++ b/Projects/Presentation/Search/SearchTests/Sources/SearchReducerTests.swift
@@ -0,0 +1,392 @@
+//
+// SearchReducerTests.swift
+// Search
+//
+// Created by Wonji Suh on 10/31/25.
+//
+
+import Testing
+import Foundation
+import ComposableArchitecture
+
+@testable import Search // ← SearchReducer 모듈명에 맞게 조정해줘
+@testable import Core
+@testable import Entity
+import DomainInterface // MusicSearchUseCase 키 주입
+
+// MARK: - Test Tags (선택)
+extension Tag {
+ @Tag static var unit: Self
+ @Tag static var reducer: Self
+}
+
+// MARK: - Stub UseCase
+
+private enum DummyError: Error { case fail }
+
+private struct StubMusicSearchUseCase: MusicSearchUseCaseProtocol {
+ var searchMusicHandler: @Sendable (String) async throws -> [Entity.MusicItem] = { _ in [] }
+ var fetchDetailHandler: @Sendable (Int) async throws -> Entity.MusicItem = { _ in .stub() }
+ var searchMediaHandler: @Sendable (String, String, String) async throws -> [Entity.MusicItem] = { _,_,_ in [] }
+ var getCategoryCountHandler: ([Entity.MusicItem], Entity.SearchCategory) -> Int = { results, category in
+ switch category {
+ case .all: return results.count
+ case .music: return results.filter { $0.mediaType == .music }.count
+ case .movies: return results.filter { $0.mediaType == .movie }.count
+ case .podcast:return results.filter { $0.mediaType == .podcast }.count
+ case .etc: return results.filter { $0.mediaType == .other }.count
+ }
+ }
+
+ func searchMusic(searchQuery: String) async throws -> [Entity.MusicItem] {
+ try await searchMusicHandler(searchQuery)
+ }
+
+
+ func fetchTrackDetail(id: Int) async throws -> Entity.MusicItem {
+ try await fetchDetailHandler(id)
+ }
+
+ func searchMedia(query: String, media: String, entity: String) async throws -> [Entity.MusicItem] {
+ try await searchMediaHandler(query, media, entity)
+ }
+
+ func getCategoryCount(from results: [Entity.MusicItem], category: Entity.SearchCategory) -> Int {
+ getCategoryCountHandler(results, category)
+ }
+}
+
+// MARK: - Fixtures
+
+private extension Entity.MusicItem {
+ static func make(
+ trackId: Int,
+ name: String,
+ mediaType: Entity.MediaType
+ ) -> Self {
+ .init(
+ trackId: trackId,
+ trackName: name,
+ album: "Album \(trackId)",
+ artist: "Artist \(trackId)",
+ artworkURL: URL(string: "https://example.com/\(trackId).png")!,
+ releaseDate: "2024-01-01T00:00:00Z",
+ genre: "Pop",
+ mediaType: mediaType
+ )
+ }
+
+ 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",
+ mediaType: Entity.MediaType = .music
+ ) -> Self {
+ .init(
+ trackId: trackId,
+ trackName: trackName,
+ album: album,
+ artist: artist,
+ artworkURL: artworkURL,
+ releaseDate: releaseDate,
+ genre: genre,
+ mediaType: mediaType
+ )
+ }
+}
+
+// MARK: - Suites
+
+@MainActor
+@Suite("SearchReducerTests", .tags(.unit, .reducer))
+struct SearchReducerTests {
+
+ @Test("searchTextChanged에 빈 문자열 넣으면 상태 초기화")
+ func searchTextChanged_empty_resets() async throws {
+ var initial = SearchReducer.State()
+ initial.searchText = "abc"
+ initial.allSearchResults = [.stub(trackId: 1)]
+ initial.filteredSearchResults = [.stub(trackId: 1)]
+ initial.currentSearchQuery = "abc"
+ initial.selectedCategory = .music
+ initial.musicCount = 1
+ initial.movieCount = 2
+ initial.podcastCount = 3
+ initial.etcCount = 4
+
+ let store = TestStore(initialState: initial) {
+ SearchReducer()
+ }
+
+ await store.send(.view(.searchTextChanged(""))) { state in
+ state.searchText = ""
+ state.allSearchResults = []
+ state.filteredSearchResults = []
+ state.currentSearchQuery = ""
+ state.selectedCategory = .all
+ state.musicCount = 0
+ state.movieCount = 0
+ state.podcastCount = 0
+ state.etcCount = 0
+ }
+ }
+
+ @Test("searchSubmitted 성공: 최근검색어 갱신 + 결과/필터 세팅 + 로딩 Off")
+ func searchSubmitted_success_updatesRecentAndResults() async throws {
+ let samples: [Entity.MusicItem] = [
+ .make(trackId: 1, name: "M-1", mediaType: .music),
+ .make(trackId: 2, name: "MV-1", mediaType: .movie),
+ .make(trackId: 3, name: "P-1", mediaType: .podcast),
+ ]
+
+ var captured: (query: String, media: String, entity: String)?
+ let useCase = StubMusicSearchUseCase(
+ searchMediaHandler: { q, m, e in
+ captured = (q, m, e)
+ return samples
+ }
+ )
+
+ let store = TestStore(initialState: SearchReducer.State()) {
+ SearchReducer()
+ } withDependencies: {
+ $0[MusicSearchUseCase.self] = useCase
+ $0.mainQueue = .immediate
+ }
+
+ store.exhaustivity = .off(showSkippedAssertions: false)
+
+ await store.send(.view(.searchSubmitted("IU"))) { state in
+ state.isSearching = true
+ state.currentSearchQuery = "IU"
+ // recentSearches는 inner 처리 후 최종 확인
+ }
+
+ // 비동기 액션 소비
+ await store.skipReceivedActions()
+
+ // 최종 상태 검증
+ #expect(store.state.isSearching == false)
+ #expect(store.state.currentSearchQuery == "IU")
+ #expect(store.state.recentSearches.first == "IU")
+ #expect(!store.state.allSearchResults.isEmpty)
+ #expect(!store.state.filteredSearchResults.isEmpty)
+ #expect(store.state.musicCount == 1)
+ #expect(store.state.movieCount == 1)
+ #expect(store.state.podcastCount == 1)
+ #expect(store.state.etcCount == 0)
+
+ // 파라미터 검증: 기본은 카테고리 .all 이므로 media: "all", entity: ""
+ #expect(captured?.query == "IU")
+ #expect(captured?.media == "all")
+ #expect(captured?.entity == "")
+ }
+
+ @Test("searchSubmitted: 동일 검색어 재입력 시 최근검색어 중복 제거 후 맨 앞에 위치")
+ func searchSubmitted_dedup_recentQueries() async throws {
+ let useCase = StubMusicSearchUseCase(
+ searchMediaHandler: { _,_,_ in [ .make(trackId: 1, name: "M", mediaType: .music) ] }
+ )
+
+ var initial = SearchReducer.State()
+ initial.recentSearches = ["IU", "NewJeans"]
+
+ let store = TestStore(initialState: initial) {
+ SearchReducer()
+ } withDependencies: {
+ $0[MusicSearchUseCase.self] = useCase
+ $0.mainQueue = .immediate
+ }
+
+ store.exhaustivity = .off(showSkippedAssertions: false)
+
+ await store.send(.view(.searchSubmitted("IU"))) { state in
+ state.isSearching = true
+ state.currentSearchQuery = "IU"
+ // dedup은 inner 후 최종 검사
+ }
+ await store.skipReceivedActions()
+
+ #expect(store.state.recentSearches.first == "IU")
+ #expect(store.state.recentSearches.dropFirst().contains("IU") == false)
+ }
+
+ @Test("selectRecentSearch는 입력값으로 searchSubmitted 다시 트리거")
+ func selectRecentSearch_triggersSubmit() async throws {
+ var submitted = ""
+ let useCase = StubMusicSearchUseCase(
+ searchMediaHandler: { q,_,_ in
+ submitted = q
+ return [ .make(trackId: 1, name: "M", mediaType: .music) ]
+ }
+ )
+
+ let store = TestStore(initialState: SearchReducer.State()) {
+ SearchReducer()
+ } withDependencies: {
+ $0[MusicSearchUseCase.self] = useCase
+ $0.mainQueue = .immediate
+ }
+
+ store.exhaustivity = .off(showSkippedAssertions: false)
+
+ await store.send(.view(.selectRecentSearch("coldplay"))) { state in
+ state.searchText = "coldplay"
+ }
+ await store.skipReceivedActions()
+
+ #expect(submitted == "coldplay")
+ #expect(store.state.currentSearchQuery == "coldplay")
+ #expect(store.state.recentSearches.first == "coldplay")
+ #expect(store.state.musicCount == 1)
+ #expect(store.state.movieCount == 0)
+ #expect(store.state.podcastCount == 0)
+ #expect(store.state.etcCount == 0)
+ }
+
+ @Test("selectCategory: currentSearchQuery가 있으면 새 검색 요청")
+ func selectCategory_withQuery_triggersNewSearch() async throws {
+ var initial = SearchReducer.State()
+ initial.currentSearchQuery = "beatles" // 이미 검색어 존재
+ initial.selectedCategory = .all
+
+ var captured: (media: String, entity: String)?
+ let useCase = StubMusicSearchUseCase(
+ searchMediaHandler: { q, m, e in
+ captured = (m, e)
+ return [ .make(trackId: 1, name: q, mediaType: .music) ]
+ }
+ )
+
+ let store = TestStore(initialState: initial) {
+ SearchReducer()
+ } withDependencies: {
+ $0[MusicSearchUseCase.self] = useCase
+ $0.mainQueue = .immediate
+ }
+
+ store.exhaustivity = .off(showSkippedAssertions: false)
+
+ await store.send(.view(.selectCategory(.music))) { state in
+ state.selectedCategory = .music
+ state.isSearching = true
+ }
+ await store.skipReceivedActions()
+
+ #expect(store.state.isSearching == false)
+ #expect(captured?.media == "music")
+ #expect(captured?.entity == "song")
+ }
+
+ @Test("selectCategory: currentSearchQuery가 없으면 필터만 적용")
+ func selectCategory_withoutQuery_filtersOnly() async throws {
+ var initial = SearchReducer.State()
+ initial.currentSearchQuery = ""
+ initial.selectedCategory = .all
+
+ initial.allSearchResults = [
+ .init(trackId: 1, trackName: "m1", album: "a", artist: "ar",
+ artworkURL: URL(string: "https://e.com/1.png")!,
+ releaseDate: "2024-01-01T00:00:00Z", genre: "Pop", mediaType: .music),
+ .init(trackId: 2, trackName: "m2", album: "a", artist: "ar",
+ artworkURL: URL(string: "https://e.com/2.png")!,
+ releaseDate: "2024-01-02T00:00:00Z", genre: "Pop", mediaType: .music),
+ .init(trackId: 3, trackName: "mv1", album: "a", artist: "ar",
+ artworkURL: URL(string: "https://e.com/3.png")!,
+ releaseDate: "2024-01-03T00:00:00Z", genre: "Drama", mediaType: .movie),
+ .init(trackId: 4, trackName: "etc1", album: "a", artist: "ar",
+ artworkURL: URL(string: "https://e.com/4.png")!,
+ releaseDate: "2024-01-04T00:00:00Z", genre: "Misc", mediaType: .other)
+ ]
+
+ let store = TestStore(initialState: initial) {
+ SearchReducer()
+ }
+
+ await store.send(.view(.selectCategory(.music))) { state in
+ state.selectedCategory = .music
+ state.filteredSearchResults = state.allSearchResults.filterByCategory(.music)
+ }
+
+ #expect(store.state.filteredSearchResults.count == 2)
+ }
+
+ @Test("clearSearch는 상태 전체 리셋")
+ func clearSearch_resetsAll() async throws {
+ var initial = SearchReducer.State()
+ initial.searchText = "zzz"
+ initial.currentSearchQuery = "hello"
+ initial.selectedCategory = .music
+ initial.allSearchResults = [.stub(trackId: 1)]
+ initial.filteredSearchResults = [.stub(trackId: 1)]
+ initial.musicCount = 1
+ initial.movieCount = 1
+ initial.podcastCount = 1
+ initial.etcCount = 1
+
+ let store = TestStore(initialState: initial) {
+ SearchReducer()
+ }
+
+ await store.send(.view(.clearSearch)) { state in
+ state.searchText = ""
+ state.allSearchResults = []
+ state.filteredSearchResults = []
+ state.currentSearchQuery = ""
+ state.selectedCategory = .all
+ state.musicCount = 0
+ state.movieCount = 0
+ state.podcastCount = 0
+ state.etcCount = 0
+ }
+ }
+
+ @Test("selectMusicItem은 공유 상태에 디테일 저장")
+ func navigation_selectMusicItem_setsSharedDetail() async throws {
+ let picked = Entity.MusicItem.stub(trackId: 77, trackName: "Pick", mediaType: .music)
+
+ let store = TestStore(initialState: SearchReducer.State()) {
+ SearchReducer()
+ }
+
+ await store.send(.navigation(.selectMusicItem(picked))) { state in
+ state.$detailMusicItem.withLock { $0 = picked }
+ }
+
+ #expect(store.state.detailMusicItem?.trackId == 77)
+ }
+
+ @Test("searchSubmitted 실패 시 결과 초기화 및 isSearching false")
+ func searchSubmitted_failure_clearsAndStops() async throws {
+ let useCase = StubMusicSearchUseCase(
+ searchMediaHandler: { _,_,_ in throw DummyError.fail }
+ )
+
+ let store = TestStore(initialState: SearchReducer.State()) {
+ SearchReducer()
+ } withDependencies: {
+ $0[MusicSearchUseCase.self] = useCase
+ $0.mainQueue = .immediate
+ }
+
+ store.exhaustivity = .off(showSkippedAssertions: false)
+
+ await store.send(.view(.searchSubmitted("error"))) { state in
+ state.isSearching = true
+ state.currentSearchQuery = "error"
+ }
+ await store.skipReceivedActions()
+
+ #expect(store.state.isSearching == false)
+ #expect(store.state.allSearchResults.isEmpty)
+ #expect(store.state.filteredSearchResults.isEmpty)
+ #expect(store.state.musicCount == 0)
+ #expect(store.state.movieCount == 0)
+ #expect(store.state.podcastCount == 0)
+ #expect(store.state.etcCount == 0)
+ }
+}
diff --git a/Projects/Presentation/Search/Sources/Coordinator/Reducer/SearchCoordinator.swift b/Projects/Presentation/Search/Sources/Coordinator/Reducer/SearchCoordinator.swift
new file mode 100644
index 0000000..6da2ce2
--- /dev/null
+++ b/Projects/Presentation/Search/Sources/Coordinator/Reducer/SearchCoordinator.swift
@@ -0,0 +1,102 @@
+//
+// SearchCoordinator.swift
+// Search
+//
+// Created by Wonji Suh on 10/28/25.
+//
+
+import Foundation
+import ComposableArchitecture
+import TCACoordinators
+
+import Core
+import Detail
+
+
+@Reducer
+public struct SearchCoordinator {
+ public init() {}
+
+ @ObservableState
+ public struct State: Equatable {
+
+ var routes: [Route]
+ public init() {
+ self.routes = [.root(.search(.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 SearchCoordinator {
+ private func routerAction(
+ state: inout State,
+ action: IndexedRouterActionOf
+ ) -> Effect {
+ switch action {
+
+ case .routeAction(id: _, action: .search(.navigation(.selectMusicItem(let item)))):
+ state.routes.push(.detail(.init(musicItem: item)))
+ return .none
+
+ case .routeAction(id: _, action: .detail(.navigation(.backToHome))):
+// state.routes.goBackToRoot()
+ return .send(.view(.backToRoot))
+
+ default:
+ return .none
+
+ }
+ }
+
+ private func handleViewAction(
+ state: inout State,
+ action: View
+ ) -> Effect {
+ switch action {
+ case .backToRoot:
+ state.routes.goBackTo(\.search)
+ return .none
+
+ }
+ }
+}
+
+
+extension SearchCoordinator {
+
+ @Reducer(state: .equatable)
+ public enum SearchScreen {
+ case search(SearchReducer)
+ case detail(DetailReducer)
+ }
+}
+
diff --git a/Projects/Presentation/Search/Sources/Coordinator/View/SearchCoordinatorView.swift b/Projects/Presentation/Search/Sources/Coordinator/View/SearchCoordinatorView.swift
new file mode 100644
index 0000000..bdd3f80
--- /dev/null
+++ b/Projects/Presentation/Search/Sources/Coordinator/View/SearchCoordinatorView.swift
@@ -0,0 +1,34 @@
+//
+// SearchCoordinatorView.swift
+// Search
+//
+// Created by Wonji Suh on 10/28/25.
+//
+
+import SwiftUI
+import ComposableArchitecture
+import TCACoordinators
+
+import Detail
+
+public struct SearchCoordinatorView: 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 .search(let searchStore):
+ SearchView(store: searchStore)
+ .navigationBarBackButtonHidden()
+
+ case .detail(let detailStore):
+ DetailView(store: detailStore)
+ .navigationBarBackButtonHidden()
+ }
+ }
+ }
+}
diff --git a/Projects/Presentation/Search/Sources/Main /Reducer/SearchReducer.swift b/Projects/Presentation/Search/Sources/Main /Reducer/SearchReducer.swift
new file mode 100644
index 0000000..e331319
--- /dev/null
+++ b/Projects/Presentation/Search/Sources/Main /Reducer/SearchReducer.swift
@@ -0,0 +1,260 @@
+//
+// SearchReducer.swift
+// Search
+//
+// Created by Wonji Suh on 10/27/25.
+//
+
+
+import Foundation
+import ComposableArchitecture
+import Core
+import Entity
+
+@Reducer
+public struct SearchReducer {
+ public init() {}
+
+ @ObservableState
+ public struct State: Equatable {
+ var searchText: String = ""
+ var recentSearches: [String] = []
+ var allSearchResults: [MusicItem] = []
+ var filteredSearchResults: [MusicItem] = []
+ var isSearching: Bool = false
+ var currentSearchQuery: String = ""
+ var selectedCategory: SearchCategory = .all
+ var musicCount: Int = 0
+ var movieCount: Int = 0
+ var podcastCount: Int = 0
+ var etcCount: Int = 0
+
+ @Shared(.inMemory("MusicItem")) var detailMusicItem : MusicItem? = nil
+
+ public init() {}
+ }
+
+ 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 searchTextChanged(String)
+ case searchSubmitted(String)
+ case selectRecentSearch(String)
+ case selectCategory(SearchCategory)
+ case selectTrendingItem(String)
+ case clearSearch
+ }
+
+
+
+ //MARK: - AsyncAction 비동기 처리 액션
+ public enum AsyncAction: Equatable {
+ case searchMedia(query: String, category: SearchCategory)
+ }
+
+ //MARK: - 앱내에서 사용하는 액션
+ public enum InnerAction {
+ case searchResponse(Result<[MusicItem], Error>)
+ }
+
+ //MARK: - NavigationAction
+ public enum NavigationAction: Equatable {
+ case selectMusicItem(MusicItem)
+
+ }
+
+ private enum CancelID: Hashable {
+ case searchMedia
+ }
+
+ @Dependency(MusicSearchUseCase.self) var musicSearchUseCase
+
+ 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 SearchReducer {
+ private func handleViewAction(
+ state: inout State,
+ action: View
+ ) -> Effect {
+ switch action {
+ case .searchTextChanged(let text):
+ state.searchText = text
+
+ // 검색어가 비어있으면 초기 상태로 복원
+ if text.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty {
+ state.allSearchResults = []
+ state.filteredSearchResults = []
+ state.currentSearchQuery = ""
+ state.selectedCategory = .all
+ state.musicCount = 0
+ state.movieCount = 0
+ state.podcastCount = 0
+ state.etcCount = 0
+ state.isSearching = false
+ }
+ return .cancel(id: CancelID.searchMedia)
+
+ case .searchSubmitted(let searchText):
+ let trimmedText = searchText.trimmingCharacters(in: .whitespacesAndNewlines)
+ if !trimmedText.isEmpty {
+ // 기존 검색어가 있으면 제거하고 앞에 추가
+ state.recentSearches.removeAll { $0 == trimmedText }
+ state.recentSearches.insert(trimmedText, at: 0)
+
+ // 최대 10개까지만 저장
+ if state.recentSearches.count > 10 {
+ state.recentSearches = Array(state.recentSearches.prefix(10))
+ }
+
+ // 검색 실행
+ state.isSearching = true
+ state.currentSearchQuery = trimmedText
+ return .send(.async(.searchMedia(query: trimmedText, category: state.selectedCategory)))
+ }
+ return .none
+
+ case .selectRecentSearch(let searchText):
+ state.searchText = searchText
+ return .send(.view(.searchSubmitted(searchText)))
+
+ case .selectTrendingItem(let searchText):
+ state.searchText = searchText
+ return .send(.view(.searchSubmitted(searchText)))
+
+
+ case .selectCategory(let category):
+ state.selectedCategory = category
+
+ // 현재 검색어가 있으면 새로운 카테고리로 다시 검색
+ if !state.currentSearchQuery.isEmpty {
+ state.isSearching = true
+ return .send(.async(.searchMedia(query: state.currentSearchQuery, category: category)))
+ } else {
+ // 검색어가 없으면 기존 결과를 필터링만 (정렬은 이미 되어있음)
+ state.filteredSearchResults = state.allSearchResults.filterByCategory(category)
+ return .none
+ }
+
+ case .clearSearch:
+ state.searchText = ""
+ state.allSearchResults = []
+ state.filteredSearchResults = []
+ state.currentSearchQuery = ""
+ state.selectedCategory = .all
+ state.musicCount = 0
+ state.movieCount = 0
+ state.podcastCount = 0
+ state.etcCount = 0
+ return .none
+ }
+ }
+
+
+
+
+ private func handleAsyncAction(
+ state: inout State,
+ action: AsyncAction
+ ) -> Effect {
+ switch action {
+ case .searchMedia(let query, let category):
+ return .run { send in
+ let searchResult = await Result {
+ // 카테고리에 따라 다른 media/entity 조합으로 검색
+ switch category {
+ case .all:
+ // 모든 미디어 타입 검색
+ try await musicSearchUseCase.searchMedia(query: query, media: "all", entity: "")
+ case .music:
+ // 음악만 검색
+ try await musicSearchUseCase.searchMedia(query: query, media: "music", entity: "song")
+ case .movies:
+ // 영화 검색
+ try await musicSearchUseCase.searchMedia(query: query, media: "movie", entity: "movie")
+ case .podcast:
+ // 팟캐스트 검색
+ try await musicSearchUseCase.searchMedia(query: query, media: "podcast", entity: "podcast")
+ case .etc:
+ // 기타 미디어 검색
+ try await musicSearchUseCase.searchMedia(query: query, media: "all", entity: "")
+ }
+ }
+
+ await send(.inner(.searchResponse(searchResult)))
+ }
+ .cancellable(id: CancelID.searchMedia, cancelInFlight: true)
+ }
+ }
+
+ private func handleNavigationAction(
+ state: inout State,
+ action: NavigationAction
+ ) -> Effect {
+ switch action {
+ case .selectMusicItem(let musicItem):
+ state.$detailMusicItem.withLock { $0 = musicItem }
+ return .none
+ }
+ }
+
+ private func handleInnerAction(
+ state: inout State,
+ action: InnerAction
+ ) -> Effect {
+ switch action {
+ case .searchResponse(let result):
+ state.isSearching = false
+
+ switch result {
+ case .success(let results):
+ let sortedResults = results.sortedByLatest()
+ state.allSearchResults = sortedResults
+ state.filteredSearchResults = sortedResults.filterByCategory(state.selectedCategory)
+ state.musicCount = musicSearchUseCase.getCategoryCount(from: sortedResults, category: .music)
+ state.movieCount = musicSearchUseCase.getCategoryCount(from: sortedResults, category: .movies)
+ state.podcastCount = musicSearchUseCase.getCategoryCount(from: sortedResults, category: .podcast)
+ state.etcCount = musicSearchUseCase.getCategoryCount(from: sortedResults, category: .etc)
+ case .failure(let error):
+ print("🔥 검색 에러: \(error.localizedDescription)")
+ state.allSearchResults = []
+ state.filteredSearchResults = []
+ state.musicCount = 0
+ state.movieCount = 0
+ state.podcastCount = 0
+ state.etcCount = 0
+ }
+
+ return .none
+ }
+ }
+}
diff --git a/Projects/Presentation/Search/Sources/Main /View/Component/NoResultsView.swift b/Projects/Presentation/Search/Sources/Main /View/Component/NoResultsView.swift
new file mode 100644
index 0000000..c2ee455
--- /dev/null
+++ b/Projects/Presentation/Search/Sources/Main /View/Component/NoResultsView.swift
@@ -0,0 +1,103 @@
+//
+// NoResultsView.swift
+// Search
+//
+// Created by Wonji Suh on 10/27/25.
+//
+
+import SwiftUI
+import DesignSystem
+
+struct NoResultsView: View {
+ let searchQuery: String
+ var onSuggestionTap: (String) -> Void = { _ in }
+
+ private let suggestions = ["Top Hits", "K-Pop", "Jazz", "Podcasts"]
+
+ var body: some View {
+ VStack(spacing: 24) {
+ Spacer()
+
+ // 검색 아이콘
+ Image(systemName: "magnifyingglass")
+ .font(.system(size: 80, weight: .light))
+ .foregroundStyle(.gray.opacity(0.6))
+
+ VStack(spacing: 12) {
+ // "No results found" 메시지
+ Text("No results found")
+ .font(.pretendardFont(family: .semiBold, size: 20))
+ .foregroundStyle(.white)
+
+ // 서브 메시지
+ Text("Try different keywords or check spelling")
+ .font(.pretendardFont(family: .regular, size: 16))
+ .foregroundStyle(.gray)
+ .multilineTextAlignment(.center)
+ }
+
+ VStack(alignment: .leading, spacing: 16) {
+ // "Suggestions:" 텍스트
+ HStack {
+ Spacer()
+
+ Text("Suggestions:")
+ .font(.pretendardFont(family: .semiBold, size: 16))
+ .foregroundStyle(.white)
+
+ Spacer()
+ }
+
+ // 제안 태그들
+ HStack(spacing: 12) {
+ SuggestionTag(text: "Top Hits") {
+ onSuggestionTap("Top Hits")
+ }
+
+ SuggestionTag(text: "K-Pop") {
+ onSuggestionTap("K-Pop")
+ }
+
+ SuggestionTag(text: "Jazz") {
+ onSuggestionTap("Jazz")
+ }
+
+ SuggestionTag(text: "Podcasts") {
+ onSuggestionTap("Podcasts")
+ }
+
+ Spacer()
+ }
+ }
+ .padding(.horizontal, 20)
+
+ Spacer()
+ }
+ .frame(maxWidth: .infinity, maxHeight: .infinity)
+ }
+}
+
+struct SuggestionTag: View {
+ let text: String
+ let onTap: () -> Void
+
+ var body: some View {
+ Button(action: onTap) {
+ Text(text)
+ .font(.pretendardFont(family: .medium, size: 14))
+ .foregroundStyle(.gray)
+ .padding(.horizontal, 16)
+ .padding(.vertical, 10)
+ .background(
+ RoundedRectangle(cornerRadius: 20, style: .continuous)
+ .fill(.gray.opacity(0.2))
+ )
+ }
+ .buttonStyle(PlainButtonStyle())
+ }
+}
+
+#Preview {
+ NoResultsView(searchQuery: "Top Hits")
+ .background(Color.black)
+}
diff --git a/Projects/Presentation/Search/Sources/Main /View/Component/RecentSearchesSection.swift b/Projects/Presentation/Search/Sources/Main /View/Component/RecentSearchesSection.swift
new file mode 100644
index 0000000..617f41d
--- /dev/null
+++ b/Projects/Presentation/Search/Sources/Main /View/Component/RecentSearchesSection.swift
@@ -0,0 +1,79 @@
+//
+// RecentSearchesSection.swift
+// Search
+//
+// Created by Wonji Suh on 10/27/25.
+//
+
+import SwiftUI
+import DesignSystem
+
+struct RecentSearchesSection: View {
+ let recentSearches: [String]
+ var onTapSearch: (String) -> Void = { _ in }
+
+ var body: some View {
+ VStack(alignment: .leading, spacing: 12) {
+ HStack(spacing: 8) {
+ Image(systemName: "clock")
+ .font(.pretendardFont(family: .semiBold, size: 16))
+ .foregroundStyle(.gray)
+
+ Text("Recent Searches")
+ .font(.pretendardFont(family: .semiBold, size: 18))
+ .foregroundStyle(.white)
+
+ Spacer()
+ }
+ .padding(.horizontal, 20)
+
+ if !recentSearches.isEmpty {
+ ScrollView(.horizontal, showsIndicators: false) {
+ HStack(spacing: 12) {
+ ForEach(recentSearches, id: \.self) { search in
+ SearchTag(text: search) {
+ onTapSearch(search)
+ }
+ }
+ }
+ .padding(.horizontal, 20)
+ }
+ } else {
+ HStack {
+ Text("No recent searches")
+ .font(.pretendardFont(family: .regular, size: 14))
+ .foregroundStyle(.gray)
+
+ Spacer()
+ }
+ .padding(.horizontal, 20)
+ }
+ }
+ .frame(maxWidth: .infinity, alignment: .leading)
+ }
+}
+
+struct SearchTag: View {
+ let text: String
+ let onTap: () -> Void
+
+ var body: some View {
+ Button(action: onTap) {
+ Text(text)
+ .font(.pretendardFont(family: .medium, size: 14))
+ .foregroundStyle(.white)
+ .padding(.horizontal, 16)
+ .padding(.vertical, 8)
+ .background(
+ RoundedRectangle(cornerRadius: 20, style: .continuous)
+ .fill(Color.gray.opacity(0.3))
+ )
+ }
+ .buttonStyle(PlainButtonStyle())
+ }
+}
+
+#Preview {
+ RecentSearchesSection(recentSearches: ["Top Hits", "K-Pop", "Jazz", "Marvel"])
+ .background(Color.black)
+}
\ No newline at end of file
diff --git a/Projects/Presentation/Search/Sources/Main /View/Component/SearchBackground.swift b/Projects/Presentation/Search/Sources/Main /View/Component/SearchBackground.swift
new file mode 100644
index 0000000..f31652d
--- /dev/null
+++ b/Projects/Presentation/Search/Sources/Main /View/Component/SearchBackground.swift
@@ -0,0 +1,53 @@
+//
+// SearchBackground.swift
+// Search
+//
+// Created by Wonji Suh on 10/27/25.
+//
+
+import SwiftUI
+import DesignSystem
+
+public struct SearchBackground: View {
+
+ public init() {}
+
+ public var body: some View {
+ ZStack {
+ LinearGradient(
+ colors: [
+ Color.backgroundDark,
+ Color.neutralBlack,
+ Color.nightRider,
+ ],
+ startPoint: .topTrailing,
+ endPoint: .bottomLeading
+ )
+
+
+ RadialGradient(
+ gradient: Gradient(colors: [
+ Color.white.opacity(0.08),
+ Color.clear
+ ]),
+ center: .top,
+ startRadius: 20,
+ endRadius: 420
+ )
+ .blendMode(.softLight)
+
+ LinearGradient(
+ colors: [
+ Color.green.opacity(0.06),
+ Color.clear
+ ],
+ startPoint: .top,
+ endPoint: .center
+ )
+ .blur(radius: 40)
+ .allowsHitTesting(false)
+ }
+ .ignoresSafeArea()
+ }
+}
+
diff --git a/Projects/Presentation/Search/Sources/Main /View/Component/SearchBar.swift b/Projects/Presentation/Search/Sources/Main /View/Component/SearchBar.swift
new file mode 100644
index 0000000..e4239d3
--- /dev/null
+++ b/Projects/Presentation/Search/Sources/Main /View/Component/SearchBar.swift
@@ -0,0 +1,81 @@
+//
+// SearchBar.swift
+// Search
+//
+// Created by Wonji Suh on 10/27/25.
+//
+
+import SwiftUI
+import DesignSystem
+
+struct SearchBar: View {
+ let searchText: String
+ var onTextChange: (String) -> Void = { _ in }
+ var onSearchSubmit: (String) -> Void = { _ in }
+ var onClearSearch: () -> Void = {}
+
+ @State private var internalText: String = ""
+
+ var body: some View {
+ HStack(spacing: 12) {
+ Image(systemName: "magnifyingglass")
+ .font(.pretendardFont(family: .medium, size: 16))
+ .foregroundStyle(.gray)
+
+ ZStack(alignment: .leading) {
+ if internalText.isEmpty {
+ Text("검색 할 영화 또는 음악을 입력하세요!")
+ .font(.pretendardFont(family: .regular, size: 16))
+ .foregroundStyle(.gray.opacity(0.6))
+ }
+
+ TextField("", text: $internalText)
+ .font(.pretendardFont(family: .regular, size: 16))
+ .foregroundStyle(.white)
+ .submitLabel(.search)
+ .onChange(of: internalText) { newValue in
+ onTextChange(newValue)
+ }
+ .onSubmit {
+ if !internalText.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty {
+ onSearchSubmit(internalText)
+ }
+ }
+ }
+
+ if !internalText.isEmpty {
+ Button(action: {
+ internalText = ""
+ onClearSearch()
+ }) {
+ Image(systemName: "xmark.circle.fill")
+ .font(.system(size: 18))
+ .foregroundStyle(.gray)
+ }
+ .buttonStyle(PlainButtonStyle())
+ }
+ }
+ .padding(.horizontal, 14)
+ .frame(height: 48)
+ .background(
+ RoundedRectangle(cornerRadius: 12, style: .continuous)
+ .fill(.neutralBlack)
+ .overlay(
+ RoundedRectangle(cornerRadius: 12, style: .continuous)
+ .stroke(.gray.opacity(0.2), lineWidth: 1)
+ )
+ )
+ .padding(.leading, 16)
+ .onAppear {
+ internalText = searchText
+ }
+ .onChange(of: searchText) { newValue in
+ internalText = newValue
+ }
+ }
+}
+
+#Preview {
+ SearchBar(searchText: "")
+ .background(Color.black)
+}
diff --git a/Projects/Presentation/Search/Sources/Main /View/Component/SearchCategoryFilter.swift b/Projects/Presentation/Search/Sources/Main /View/Component/SearchCategoryFilter.swift
new file mode 100644
index 0000000..010ba9c
--- /dev/null
+++ b/Projects/Presentation/Search/Sources/Main /View/Component/SearchCategoryFilter.swift
@@ -0,0 +1,121 @@
+//
+// SearchCategoryFilter.swift
+// Search
+//
+// Created by Wonji Suh on 10/27/25.
+//
+
+import SwiftUI
+import DesignSystem
+import Entity
+
+struct SearchCategoryFilter: View {
+ let selectedCategory: SearchCategory
+ let musicCount: Int
+ let movieCount: Int
+ let podcastCount: Int
+ let etcCount: Int
+ var onCategorySelect: (SearchCategory) -> Void = { _ in }
+
+ var body: some View {
+ ScrollViewReader { proxy in
+ ScrollView(.horizontal, showsIndicators: false) {
+ HStack(spacing: 16) {
+ ForEach(SearchCategory.allCases, id: \.self) { category in
+ CategoryTab(
+ category: category,
+ isSelected: selectedCategory == category,
+ count: countForCategory(category),
+ onTap: {
+ onCategorySelect(category)
+ }
+ )
+ .id(category)
+ }
+ }
+ .padding(.horizontal, 20)
+ }
+ .onChange(of: selectedCategory) { newCategory in
+ withAnimation(.easeInOut(duration: 0.3)) {
+ proxy.scrollTo(newCategory, anchor: .center)
+ }
+ }
+ }
+ }
+
+ private func countForCategory(_ category: SearchCategory) -> Int {
+ switch category {
+ case .all:
+ return musicCount + movieCount + podcastCount + etcCount
+ case .music:
+ return musicCount
+ case .movies:
+ return movieCount
+ case .podcast:
+ return podcastCount
+ case .etc:
+ return etcCount
+ }
+ }
+}
+
+struct CategoryTab: View {
+ let category: SearchCategory
+ let isSelected: Bool
+ let count: Int
+ let onTap: () -> Void
+
+ var body: some View {
+ Button(action: onTap) {
+ HStack(spacing: 6) {
+ Text(category.rawValue)
+ .font(.pretendardFont(family: isSelected ? .semiBold : .medium, size: 16))
+
+ if count > 0 {
+ Text("\(count)")
+ .font(.pretendardFont(family: .medium, size: 14))
+ .foregroundStyle(isSelected ? .black : .gray)
+ .padding(.horizontal, 6)
+ .padding(.vertical, 2)
+ .background(
+ RoundedRectangle(cornerRadius: 8)
+ .fill(isSelected ? .green : .gray.opacity(0.3))
+ )
+ }
+ }
+ .foregroundStyle(isSelected ? .black : .gray)
+ .padding(.horizontal, 16)
+ .padding(.vertical, 10)
+ .background(
+ RoundedRectangle(cornerRadius: 20, style: .continuous)
+ .fill(isSelected ? .green : .clear)
+ .overlay(
+ RoundedRectangle(cornerRadius: 20, style: .continuous)
+ .stroke(isSelected ? .green : .gray.opacity(0.3), lineWidth: 1)
+ )
+ )
+ }
+ .buttonStyle(PlainButtonStyle())
+ }
+}
+
+#Preview {
+ VStack(spacing: 20) {
+ SearchCategoryFilter(
+ selectedCategory: .all,
+ musicCount: 15,
+ movieCount: 3,
+ podcastCount: 1,
+ etcCount: 2
+ )
+
+ SearchCategoryFilter(
+ selectedCategory: .music,
+ musicCount: 15,
+ movieCount: 3,
+ podcastCount: 1,
+ etcCount: 2
+ )
+ }
+ .background(Color.black)
+}
\ No newline at end of file
diff --git a/Projects/Presentation/Search/Sources/Main /View/Component/SearchResultItem.swift b/Projects/Presentation/Search/Sources/Main /View/Component/SearchResultItem.swift
new file mode 100644
index 0000000..fe1ca77
--- /dev/null
+++ b/Projects/Presentation/Search/Sources/Main /View/Component/SearchResultItem.swift
@@ -0,0 +1,79 @@
+//
+// SearchResultItem.swift
+// Search
+//
+// Created by Wonji Suh on 10/27/25.
+//
+
+import SwiftUI
+import DesignSystem
+import Core
+import Shared
+
+struct SearchResultItem: View {
+ let musicItem: MusicItem
+ var onTap: () -> Void = {}
+
+ var body: some View {
+ HStack(spacing: 12) {
+ // 앨범 아트워크
+ AsyncImage(
+ url: musicItem.artworkURL,
+ transaction: Transaction(animation: .easeInOut(duration: 0.25))
+ ) { phase in
+ switch phase {
+ case .empty:
+ SkeletonView(width: 60, height: 60, cornerRadius: 8)
+
+ case .success(let image):
+ image
+ .resizable()
+ .interpolation(.high)
+ .aspectRatio(1, contentMode: .fill)
+ .frame(width: 60, height: 60)
+ .clipped()
+
+ case .failure:
+ RoundedRectangle(cornerRadius: 8)
+ .fill(Color.gray.opacity(0.3))
+ .frame(width: 60, height: 60)
+ .overlay(
+ Image(systemName: "music.note")
+ .font(.system(size: 20))
+ .foregroundColor(.gray)
+ )
+
+ @unknown default:
+ Color.clear
+ }
+ }
+ .clipShape(RoundedRectangle(cornerRadius: 8))
+
+ // 음악 정보
+ VStack(alignment: .leading, spacing: 4) {
+ Text(musicItem.trackName)
+ .font(.pretendardFont(family: .semiBold, size: 16))
+ .foregroundStyle(.white)
+ .lineLimit(1)
+
+ Text(musicItem.artist)
+ .font(.pretendardFont(family: .medium, size: 14))
+ .foregroundStyle(.textSecondary)
+ .lineLimit(1)
+
+ Text(musicItem.album)
+ .font(.pretendardFont(family: .regular, size: 12))
+ .foregroundStyle(.gray)
+ .lineLimit(1)
+ }
+
+ Spacer()
+
+ }
+ .padding(.horizontal, 20)
+ .padding(.vertical, 8)
+ .contentShape(Rectangle())
+ .onTapGesture(perform: onTap)
+ }
+}
+
diff --git a/Projects/Presentation/Search/Sources/Main /View/Component/SearchResultsList.swift b/Projects/Presentation/Search/Sources/Main /View/Component/SearchResultsList.swift
new file mode 100644
index 0000000..0d60717
--- /dev/null
+++ b/Projects/Presentation/Search/Sources/Main /View/Component/SearchResultsList.swift
@@ -0,0 +1,27 @@
+//
+// SearchResultsList.swift
+// Search
+//
+// Created by Wonji Suh on 10/27/25.
+//
+
+import SwiftUI
+import DesignSystem
+import Core
+
+struct SearchResultsList: View {
+ let searchResults: [MusicItem]
+ var onTapMusicItem: (MusicItem) -> Void = { _ in }
+
+ var body: some View {
+ LazyVStack(spacing: 0) {
+ ForEach(searchResults) { musicItem in
+ SearchResultItem(musicItem: musicItem) {
+ onTapMusicItem(musicItem)
+ }
+ .background(.clear)
+ }
+ }
+ }
+}
+
diff --git a/Projects/Presentation/Search/Sources/Main /View/Component/TrendingCard.swift b/Projects/Presentation/Search/Sources/Main /View/Component/TrendingCard.swift
new file mode 100644
index 0000000..2ae3f03
--- /dev/null
+++ b/Projects/Presentation/Search/Sources/Main /View/Component/TrendingCard.swift
@@ -0,0 +1,48 @@
+//
+// TrendingCard.swift
+// Search
+//
+// Created by Wonji Suh on 10/27/25.
+//
+
+import SwiftUI
+import DesignSystem
+import Entity
+
+public struct TrendingCard: View {
+ private let item: TrendingItem
+
+ public init(
+ item: TrendingItem
+ ) {
+ self.item = item
+ }
+
+ public var body: some View {
+ ZStack(alignment: .topLeading) {
+ RoundedRectangle(cornerRadius: 16, style: .continuous)
+ .fill(.neutralBlack)
+ .overlay(
+ RoundedRectangle(cornerRadius: 16, style: .continuous)
+ .stroke(Color.black.opacity(0.06))
+ )
+ .shadow(color: .black.opacity(0.12), radius: 10, x: 0, y: 4)
+
+ VStack(alignment: .leading, spacing: 10) {
+ Image(systemName: "chart.line.uptrend.xyaxis")
+ .font(.pretendardFont(family: .semiBold, size: 18))
+ .foregroundStyle(.green)
+
+ Spacer(minLength: 0)
+
+ Text(item.title)
+ .font(.pretendardFont(family: .semiBold, size: 16))
+ .foregroundStyle(.white)
+ }
+ .padding(16)
+ }
+ .frame(height: 92)
+ .contentShape(RoundedRectangle(cornerRadius: 16, style: .continuous))
+ }
+}
+
diff --git a/Projects/Presentation/Search/Sources/Main /View/Component/TrendingSection.swift b/Projects/Presentation/Search/Sources/Main /View/Component/TrendingSection.swift
new file mode 100644
index 0000000..aa567ed
--- /dev/null
+++ b/Projects/Presentation/Search/Sources/Main /View/Component/TrendingSection.swift
@@ -0,0 +1,56 @@
+//
+// TrendingSection.swift
+// Search
+//
+// Created by Wonji Suh on 10/27/25.
+//
+
+import SwiftUI
+import DesignSystem
+import Entity
+
+struct TrendingSection: View {
+ let items: [TrendingItem] = [
+ TrendingItem(title: "Top Charts"),
+ TrendingItem(title: "New Releases"),
+ TrendingItem(title: "Podcasts"),
+ TrendingItem(title: "Movies")
+ ]
+
+ // 필요 시 외부에서 주입해도 됨
+ var onTap: (TrendingItem) -> Void = { _ in }
+
+ // 카드 2열 그리드
+ private let columns = [
+ GridItem(.flexible(), spacing: 12),
+ GridItem(.flexible(), spacing: 12)
+ ]
+
+ var body: some View {
+ VStack(alignment: .leading, spacing: 12) {
+ HStack(spacing: 8) {
+ Image(systemName: "chart.line.uptrend.xyaxis")
+ .font(.pretendardFont(family: .semiBold, size: 16))
+ .foregroundStyle(.green)
+
+ Text("Trending")
+ .font(.pretendardFont(family: .semiBold, size: 18))
+ .foregroundStyle(.white)
+ }
+ .padding(.horizontal, 4)
+
+ Spacer()
+ .frame(height: 5)
+
+ LazyVGrid(columns: columns, spacing: 12) {
+ ForEach(items) { item in
+ TrendingCard(item: item)
+ .onTapGesture { onTap(item) }
+ }
+ }
+ }
+ .padding(16)
+ .background(Color.clear)
+ }
+}
+
diff --git a/Projects/Presentation/Search/Sources/Main /View/SearchView.swift b/Projects/Presentation/Search/Sources/Main /View/SearchView.swift
new file mode 100644
index 0000000..f302a8f
--- /dev/null
+++ b/Projects/Presentation/Search/Sources/Main /View/SearchView.swift
@@ -0,0 +1,115 @@
+//
+// SearchView.swift
+// Search
+//
+// Created by Wonji Suh on 10/27/25.
+//
+
+import SwiftUI
+import ComposableArchitecture
+import Shared
+
+public struct SearchView: View {
+ @Perception.Bindable public var store: StoreOf
+
+ public init(store: StoreOf) {
+ self.store = store
+ }
+
+ public var body: some View {
+ WithPerceptionTracking {
+ ZStack {
+ SearchBackground()
+ .ignoresSafeArea()
+
+ VStack(spacing: 0) {
+ // 고정된 검색바와 Cancel 버튼
+ HStack(spacing: 12) {
+ SearchBar(
+ searchText: store.searchText,
+ onTextChange: { text in
+ store.send(.view(.searchTextChanged(text)))
+ },
+ onSearchSubmit: { searchText in
+ store.send(.view(.searchSubmitted(searchText)))
+ },
+ onClearSearch: {
+ store.send(.view(.clearSearch))
+ }
+ )
+
+ // Cancel 버튼
+ if !store.searchText.isEmpty || !store.currentSearchQuery.isEmpty {
+ Button(action: {
+ store.send(.view(.clearSearch))
+ }) {
+ Text("Cancel")
+ .font(.pretendardFont(family: .medium, size: 16))
+ .foregroundStyle(.green)
+ }
+ .buttonStyle(PlainButtonStyle())
+ .padding(.trailing, 16)
+ }
+ }
+ .padding(.top, 8)
+
+ // 검색을 했을 때 카테고리 필터 표시
+ if !store.currentSearchQuery.isEmpty {
+ SearchCategoryFilter(
+ selectedCategory: store.selectedCategory,
+ musicCount: store.musicCount,
+ movieCount: store.movieCount,
+ podcastCount: store.podcastCount,
+ etcCount: store.etcCount,
+ onCategorySelect: { category in
+ store.send(.view(.selectCategory(category)))
+ }
+ )
+ .padding(.top, 12)
+ }
+
+ // 스크롤 가능한 컨텐츠
+ ScrollView {
+ VStack(spacing: 24) {
+ if !store.filteredSearchResults.isEmpty {
+ SearchResultsList(
+ searchResults: store.filteredSearchResults,
+ onTapMusicItem: { musicItem in
+ store.send(.navigation(.selectMusicItem(musicItem)))
+ }
+ )
+ } else if !store.currentSearchQuery.isEmpty && store.allSearchResults.isEmpty {
+ NoResultsView(searchQuery: store.currentSearchQuery) { suggestion in
+ store.send(.view(.selectRecentSearch(suggestion)))
+ }
+ } else if !store.allSearchResults.isEmpty && store.filteredSearchResults.isEmpty {
+ NoResultsView(searchQuery: store.currentSearchQuery) { suggestion in
+ store.send(.view(.selectRecentSearch(suggestion)))
+ }
+ } else {
+
+ RecentSearchesSection(
+ recentSearches: store.recentSearches,
+ onTapSearch: { searchText in
+ store.send(.view(.selectRecentSearch(searchText)))
+ }
+ )
+
+ TrendingSection(
+ onTap: { trendingItem in
+ store.send(.view(.selectTrendingItem(trendingItem.title)))
+ }
+ )
+ }
+
+ Spacer(minLength: 100)
+ }
+ .padding(.top, 16)
+ }
+ .scrollIndicators(.hidden)
+ .scrollBounceBehavior(.basedOnSize)
+ }
+ }
+ }
+ }
+}
diff --git a/README.md b/README.md
index e0d4469..8cf7338 100644
--- a/README.md
+++ b/README.md
@@ -108,7 +108,17 @@ Data/Repository implements DataInterface
```
### Tuist graph
-
+
+
+
+## 📸 구현 미리보기
+
+| 홈 메인 | 검색 상세 |
+| --- | --- |
+|  |  |
+
+> 스크린샷은 `Docs/Screenshots` 디렉터리에 저장되어 있으며, 최신 UI 상태에 맞춰 교체할 수 있습니다.
+
## 개발 환경
@@ -125,6 +135,49 @@ Data/Repository implements DataInterface
- **WeaveDI**: 의존성 주입
- **SwiftLint**: 코드 스타일 체크
+## 설계 및 의사결정 기록
+
+### 모듈화 & Clean Architecture
+- Domain/Data/Presentation을 독립 모듈로 분리하여 의존성 역전과 테스트 용이성을 확보했습니다.
+- 각 레이어는 Protocol 기반 인터페이스로만 연결하여 구현체 교체가 자유롭습니다.
+
+### 상태 관리: Composable Architecture
+- 비동기 작업과 사이드이펙트를 Reducer/Effect로 통일해 화면 간 일관된 패턴을 유지했습니다.
+- TestStore 기반 단위 테스트를 통해 onAppear, 검색, 탭 전환 등 주요 시나리오를 검증합니다.
+
+### 네트워킹 & 데이터 흐름
+- `AsyncMoya` 조합으로 iTunes API를 호출하고, DTO → Domain 매핑을 통해 Presentation 의존성을 최소화했습니다.
+- Repository는 DomainInterface를 구현하며, 테스트에서는 Mock Repository로 교체해 빠른 회귀 검증이 가능합니다.
+
+### 의존성 주입: WeaveDI
+- KeyPath 기반 등록으로 모듈 간 결합도를 낮추고, 테스트 환경에서 Mock을 손쉽게 주입할 수 있게 했습니다.
+- Shared 모듈의 `@AutoSyncExtension`을 통해 TCA Environment와 DI 컨테이너를 자연스럽게 연결했습니다.
+
+### UI & 내비게이션 전략
+- `TCACoordinators`로 루트 탭과 상세 화면 전환을 구성하여 화면 상태를 명확히 추적합니다.
+- `Shared/DesignSystem`에서 공통 UI 자산을 관리해 피처 모듈이 비즈니스 로직에 집중하도록 했습니다.
+
+## 추가 구현 사항
+
+- **계절별 자동 로딩**: 홈 진입 시 5개의 시즌 곡을 병렬로 가져와 최신 순 정렬 후 중복 제거.
+- **검색 카테고리 통계**: 전체/음악/영화/팟캐스트/기타 탭별 결과 수를 실시간 표시.
+- **최근/추천 검색 흐름**: 최근 검색어 관리 및 Trending 항목을 통해 원탭 재검색 지원.
+- **상세 공유 상태**: 홈과 검색에서 선택한 곡을 Shared Storage로 보존해 Detail 화면에서 즉시 활용.
+- **테스트 강화**: Reducer 테스트로 에러 처리, 정렬, 카운트 로직 등을 회귀 검증.
+
+## 메모리 관리 분석
+
+- **도구**: Xcode Instruments의 *Leaks*와 *Allocations*를 활용했습니다.
+- **점검 절차**
+ 1. 홈 → 검색 → 상세 → 뒤로 이동 흐름을 반복 실행하면서 Allocations 그래프를 확인했습니다.
+ 2. Reducer/UseCase/Repository 인스턴스의 Retain Count가 화면 이탈 후 안정적으로 감소하는지 체크했습니다.
+ 3. Leaks 세션을 녹화하여 비동기 `Effect.run` 및 DI 등록부에서 순환 참조가 발생하지 않는지 조사했습니다.
+- **결과**
+ - 누수 및 순환 참조가 검출되지 않았습니다. Reducer 내부 비동기 작업은 `await send` 후 종료되어 self 캡처를 남기지 않습니다.
+ - Repository/UseCase는 값 타입 또는 단순 클래스이므로 추가적인 `weak` 처리 없이도 회수되었습니다.
+- **향후 가이드**
+ - 새 피처 추가 시 Instruments 세션을 재실행해 메모리 안정성을 주기적으로 확인하는 것을 권장합니다.
+
## 🏗 Clean Architecture 설계
### 🎯 인터페이스 분리 설계
@@ -256,4 +309,3 @@ swiftc TuistTool.swift -o tuisttool
- 입력 받은 의존성들을 `Projects///Project.swift`의 `dependencies: [` 영역에 자동 삽입합니다.
- Domain 계층 생성 시, `Interface/Sources/Base.swift`를 템플릿으로 생성하도록 선택 가능.
-
diff --git a/graph.png b/graph.png
index ffa4c21..8cd06a7 100644
Binary files a/graph.png and b/graph.png differ