diff --git a/Modules/App/App.entitlements b/Modules/App/App.entitlements
new file mode 100644
index 00000000..a812db50
--- /dev/null
+++ b/Modules/App/App.entitlements
@@ -0,0 +1,10 @@
+
+
+
+
+ com.apple.developer.applesignin
+
+ Default
+
+
+
diff --git a/Modules/App/App.xcodeproj/project.pbxproj b/Modules/App/App.xcodeproj/project.pbxproj
index ef1b0dbb..4b62f2b8 100644
--- a/Modules/App/App.xcodeproj/project.pbxproj
+++ b/Modules/App/App.xcodeproj/project.pbxproj
@@ -3,10 +3,11 @@
archiveVersion = 1;
classes = {
};
- objectVersion = 55;
+ objectVersion = 60;
objects = {
/* Begin PBXBuildFile section */
+ 00907C0C40B6C87BF82F1310 /* Promises_Promises.bundle in Resources */ = {isa = PBXBuildFile; fileRef = F260309AD89688149AD615B2 /* Promises_Promises.bundle */; };
00DB7DDCAF9469B0E81AC51B /* NetworkKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EF021344F16945968371F691 /* NetworkKit.framework */; };
0263D464A0060067F7C699E4 /* Firebase.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7F44EDE91A79696F3FBBFE16 /* Firebase.framework */; };
03C31E734B72B29FEA1E066D /* SubscribeDomain.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6403E5FCF0FC81B2922FA5E5 /* SubscribeDomain.framework */; };
@@ -16,58 +17,62 @@
0F8046F0C49F3F5E27E44E16 /* MyPageRoute.swift in Sources */ = {isa = PBXBuildFile; fileRef = F29FA5D3B936B1F16BFF75CD /* MyPageRoute.swift */; };
100701B9BFA1DFBDD27D1BF0 /* GoogleAppMeasurementTarget.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FBAB840F54EFA40D6A143F7F /* GoogleAppMeasurementTarget.framework */; };
151CD1C7340B25AF05B5F1F3 /* Security.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4459AC440B063044813E979E /* Security.framework */; };
+ 16B06C4306001183D71A4F9B /* GoogleUtilities_GoogleUtilities_Environment.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 54C16966143C68BB125F5D74 /* GoogleUtilities_GoogleUtilities_Environment.bundle */; };
19AA6DB30A90955617F9B7FD /* BookmarkInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E72FF74C328526DB94E50010 /* BookmarkInterface.framework */; };
1ADFB6F0C0F33AE51F6793BD /* FirebaseInstallations.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1EDD3D57F65917DB1A07B052 /* FirebaseInstallations.framework */; };
1BC5B98AD386E5E8F84A45D6 /* Shared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB40F3B3D8E2DCB2AC3C9605 /* Shared.framework */; };
1C97140162D8A52649A79034 /* DatabaseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 20472DE96208EAF694E16719 /* DatabaseKit.framework */; };
1DAF338EC3091F9B6BB61A11 /* Detail.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6FB9E693CAE8686756749690 /* Detail.framework */; };
1DBB02B22B48ED08B3B93563 /* HomeStack.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1ED1B83ED44A88938979E608 /* HomeStack.swift */; };
- 232800970AFA0DEF4018B1FB /* GoogleUtilities_Environment.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 49A8F44173AE773538037143 /* GoogleUtilities_Environment.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ 2050CD74997BC9376C6B205A /* Firebase_FirebaseCoreInternal.bundle in Resources */ = {isa = PBXBuildFile; fileRef = EFE2491E32CAC50F848EF255 /* Firebase_FirebaseCoreInternal.bundle */; };
+ 214B61C781E79DEA591F1751 /* DesignSystem_DesignSystem.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 4EB562E78DEEF2FAC4EDDEBF /* DesignSystem_DesignSystem.bundle */; };
+ 21A01C75053E1F862D201926 /* Firebase_FirebaseCore.bundle in Resources */ = {isa = PBXBuildFile; fileRef = AD69D01DF7849A86F4C17EF3 /* Firebase_FirebaseCore.bundle */; };
+ 221E79D0C4EE7C160F28AC4E /* GoogleUtilities_GoogleUtilities_Logger.bundle in Resources */ = {isa = PBXBuildFile; fileRef = FC8C9536B1CA387C5E5002E9 /* GoogleUtilities_GoogleUtilities_Logger.bundle */; };
24B03597CF38DDDB6A79FECE /* GoogleUtilities_UserDefaults.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E636F12029AD4B16C7FB0A49 /* GoogleUtilities_UserDefaults.framework */; };
25C16329B5447E96E40BAB34 /* DetailInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 86C4E404056697A170B2B575 /* DetailInterface.framework */; };
- 2A9E6C9228EFD0F89BB15873 /* FirebaseCore.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 6057899A5EBA0F72DCB4F9FB /* FirebaseCore.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
2DECB327F9E1EFE0AE533114 /* Launch.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7E710496E985656C6B2D0826 /* Launch.framework */; };
2E52F27A54B699D9FDADE3EA /* GoogleUtilities_Reachability.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 586B2137F5665C47D8CBF265 /* GoogleUtilities_Reachability.framework */; };
2E743A6F76CCB6064D781210 /* TuistAssets+App.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95D529DAAF6A9D59C44D9D68 /* TuistAssets+App.swift */; };
2F849686E3F1AB9940B88C90 /* Explore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 233D852B07E4FC2B2B1F1179 /* Explore.framework */; };
- 2FEC4C6AC218B26FF4A2F4A8 /* GoogleUtilities_Network.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = C99EEBAAE10B045CF1A64A0E /* GoogleUtilities_Network.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
326C0B3CADC173970CDF3EAF /* Auth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 709ECB981BF7FB2A9D697179 /* Auth.framework */; };
33E81FC86F95AFABE4A4C1CE /* HomeDomain.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A384F9952484B3EE82AEEEB0 /* HomeDomain.framework */; };
- 343BDB365A3C8C6E6705D1F5 /* GoogleAppMeasurementIdentitySupport.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = A6CC5BE38C825952D62A4FEA /* GoogleAppMeasurementIdentitySupport.xcframework */; };
352FA513E7B4EF4FF9C5A9A0 /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 80E02385EF041EF7C0B15DA4 /* CoreTelephony.framework */; };
390C981C40F4FEC12F19402B /* AppCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B0685C94FE185B23B0219AB /* AppCoordinator.swift */; };
+ 3924822A85CCB856CF6D53E7 /* Firebase_FirebaseInstallations.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 21B8EE4A1F0458879F0B90F2 /* Firebase_FirebaseInstallations.bundle */; };
3B197E4B3C8EC9C0A91A7459 /* FBLPromises.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A04862A34120F5891A8E63BD /* FBLPromises.framework */; };
3B8CD8CA059DB727F00BFCFD /* KakaoSDKCommon.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 07A64FDDEF0AA8332A7C2E8F /* KakaoSDKCommon.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
3C5F34441E5BE18D3A80FB67 /* HomeRoute.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35DEB0BB71823B6387131290 /* HomeRoute.swift */; };
3E218B454583303272ECB968 /* DetailData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 56CEFEBE90EBB1FAFCA079B3 /* DetailData.framework */; };
- 3F828FC9E0F2A854B6E472EF /* FirebaseInstallations.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 1EDD3D57F65917DB1A07B052 /* FirebaseInstallations.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
- 4056A0FE42A1656466061EE8 /* Alamofire.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = C86E6E6BCDFAB61BBD09E06F /* Alamofire.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ 3F9833F6C4BC374663C6FE35 /* DesignSystem_DesignSystem.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 4EB562E78DEEF2FAC4EDDEBF /* DesignSystem_DesignSystem.bundle */; };
+ 454F1A3A0FFEA9BCBD874E3E /* GoogleUtilities_GoogleUtilities_AppDelegateSwizzler.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 5DDB2F4EA01B0EEF77406ED9 /* GoogleUtilities_GoogleUtilities_AppDelegateSwizzler.bundle */; };
+ 455BCB85C4E266C816471B82 /* Firebase_FirebaseCore.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = AD69D01DF7849A86F4C17EF3 /* Firebase_FirebaseCore.bundle */; };
+ 46C14C6043CB9460A652AEC7 /* Detail_Detail.bundle in Resources */ = {isa = PBXBuildFile; fileRef = F0D118266653E3D17C69D780 /* Detail_Detail.bundle */; };
48469C5111BF762561C9B9B6 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 8F7F83A194E1D17030DCA033 /* Assets.xcassets */; };
492675EEAF29D31EF314EE9E /* GoogleUtilities_AppDelegateSwizzler.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 48998AA38F90160E6A754556 /* GoogleUtilities_AppDelegateSwizzler.framework */; };
- 4943C02C8CCE2B41CF3E2D13 /* FirebaseCoreInternal.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 64190CDE29515E79F9CFDF34 /* FirebaseCoreInternal.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
4AF6277B6AD48D9FB004CA49 /* ExploreRoute.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A0C78488ACCB4EC45CD33F3 /* ExploreRoute.swift */; };
4B145EC4CCB33E190DBB4467 /* AuthFlow.swift in Sources */ = {isa = PBXBuildFile; fileRef = B6E6B457B0A45148B574F626 /* AuthFlow.swift */; };
- 4B4BEDFFBA8F6B8697F6D658 /* GoogleUtilities_NSData.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 97F9F26BC0A0A0A32CD460D4 /* GoogleUtilities_NSData.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ 4F5500B75F6D9A39D8518EAE /* Firebase_FirebaseInstallations.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 21B8EE4A1F0458879F0B90F2 /* Firebase_FirebaseInstallations.bundle */; };
509D382CCFE306D7B52B5D3F /* FirebaseSessionsObjC.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03CE70F210A2CC94EABD7C03 /* FirebaseSessionsObjC.framework */; };
- 51247B74AD34D897B25E4802 /* Detail.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 6FB9E693CAE8686756749690 /* Detail.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
- 5189CF63EEE31ED6C09F5354 /* FirebaseCoreExtension.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = D986AB50C6EC5E677534690A /* FirebaseCoreExtension.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ 5199DCE2F06390D49C5B3E99 /* GoogleUtilities_GoogleUtilities_UserDefaults.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 1A24FC5D83E61ED5CD9BE219 /* GoogleUtilities_GoogleUtilities_UserDefaults.bundle */; };
+ 52792251855EB8FA202BAC86 /* nanopb_nanopb.bundle in Resources */ = {isa = PBXBuildFile; fileRef = ADED33C4EE6E5E141B0AB27F /* nanopb_nanopb.bundle */; };
5533C7995DDE899C36BC2346 /* third_party_IsAppEncrypted.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 255DFB5369032FF8E4C1007C /* third_party_IsAppEncrypted.framework */; };
557E5EB9CE186DC932D2D731 /* GoogleUtilities_NSData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 97F9F26BC0A0A0A32CD460D4 /* GoogleUtilities_NSData.framework */; };
55C10C02F203892AF5DFBEC5 /* Moya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 97590F8716CD862F585CC863 /* Moya.framework */; };
- 5B8ED560C12821F468B19513 /* GoogleAdsOnDeviceConversion.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7CE72C73A76A964F8E7408D6 /* GoogleAdsOnDeviceConversion.xcframework */; };
+ 5B0876950287ADC67A485B67 /* Detail_Detail.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = F0D118266653E3D17C69D780 /* Detail_Detail.bundle */; };
5C67BAA15381AE7145205E2B /* SearchInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1398C2480450D84DC3712CB1 /* SearchInterface.framework */; };
5D498E3D12F6070817B573C5 /* FoundationKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 137FBFC1E48C21B372502272 /* FoundationKit.framework */; };
+ 5DC88C3A58701D9C098920F4 /* nanopb_nanopb.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = ADED33C4EE6E5E141B0AB27F /* nanopb_nanopb.bundle */; };
60BAC7B09140821CE84C3573 /* NetworkErrorAppMapper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DC4BECC212699120AF58DCF /* NetworkErrorAppMapper.swift */; };
- 617287F49CD5AF999D4CC84E /* GoogleUtilities_UserDefaults.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E636F12029AD4B16C7FB0A49 /* GoogleUtilities_UserDefaults.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
618C5A4BDBBDA7F1A2F8DC93 /* Home.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 76E66C32BAE4D2C1EE4C64CB /* Home.framework */; };
+ 6238E134AEF9AF7C7D62F513 /* Promises_Promises.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = F260309AD89688149AD615B2 /* Promises_Promises.bundle */; };
65C48DAD150D3041D0A25442 /* VersionCheckService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8C9623594413736EB5B5E46F /* VersionCheckService.swift */; };
- 667E72036A7944FECF2FEBB0 /* GoogleUtilities_MethodSwizzler.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 426373E4E665642601D5BE1A /* GoogleUtilities_MethodSwizzler.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ 684249CA8A3486EB41BE1783 /* FirebaseAnalytics.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 25C4E914C21B7ADF81495C99 /* FirebaseAnalytics.xcframework */; };
69B40BAF2815D2969E4A0FB1 /* Kingfisher.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 77D69EAF942AA87F8A9468BF /* Kingfisher.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ 6B3574A6BF172B5045B3F44A /* GoogleUtilities_GoogleUtilities_Environment.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 54C16966143C68BB125F5D74 /* GoogleUtilities_GoogleUtilities_Environment.bundle */; };
+ 6DA58C0BE7A7A82BB4058DC1 /* GoogleUtilities_GoogleUtilities_Network.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 39BF2D18DFB89E880E42645F /* GoogleUtilities_GoogleUtilities_Network.bundle */; };
6E8362D867B53D4394477600 /* Moya.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 97590F8716CD862F585CC863 /* Moya.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
6F40F0302996AC8E9B709719 /* BookmarkDomain.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F8F861BEFA693139AC601928 /* BookmarkDomain.framework */; };
6F454DB6DF4C752D7E218FFF /* SubscribeRoute.swift in Sources */ = {isa = PBXBuildFile; fileRef = EA4616639497709FF78B11EC /* SubscribeRoute.swift */; };
- 6F52EB8BAB38DBC2979F5AB7 /* GoogleDataTransport.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = CAA551898AB3AD913E2B2E80 /* GoogleDataTransport.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
- 70F3CF0BB9F240B2A59853E0 /* DesignSystem.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E9369BFA2C65412102538303 /* DesignSystem.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
729F10544E8CB2CD05A2D73D /* KakaoSDKAuth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6C71FCA8677FAE2B173DC8BC /* KakaoSDKAuth.framework */; };
7389C3BF0F6EE9AA745BEADA /* Subscribe.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7280B4F86503740125AA0E61 /* Subscribe.framework */; };
73F3FC1D4FF7EB1EE2A318E4 /* FirebaseCrashlytics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 579A16AE603CDAC89FBACF86 /* FirebaseCrashlytics.framework */; };
@@ -81,15 +86,18 @@
7B9C33FCCE5877A1A9EAE367 /* ExploreStack.swift in Sources */ = {isa = PBXBuildFile; fileRef = 540F7C6DDBDE7E9CAA207079 /* ExploreStack.swift */; };
7B9F449FE333FAF6C557BDCD /* Promises.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4DF851AB63186CE3D1CB0DED /* Promises.framework */; };
7BCB27357632345470081169 /* GoogleDataTransport.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CAA551898AB3AD913E2B2E80 /* GoogleDataTransport.framework */; };
+ 7C119429E6762110C64C8124 /* Promises_FBLPromises.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 7DFD84ECD2039208E4B5D331 /* Promises_FBLPromises.bundle */; };
7CB41A05775C83D5F8362582 /* BookmarkStack.swift in Sources */ = {isa = PBXBuildFile; fileRef = E3FD82EB3E15D948FDA8FAD1 /* BookmarkStack.swift */; };
80319378A3DAAAA15CA9AEEA /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FCA3C5FAA7EFDD728B5A5DA0 /* UIKit.framework */; };
- 82084C94D10127344D2915C5 /* GoogleUtilities_Reachability.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 586B2137F5665C47D8CBF265 /* GoogleUtilities_Reachability.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ 82139E5A2BB0D66FFFF431C2 /* GoogleUtilities_GoogleUtilities_NSData.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = F64687C01E47DB17FF48B3F0 /* GoogleUtilities_GoogleUtilities_NSData.bundle */; };
825230B66CE03FD8757C0F13 /* MypageInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 96DD70846B0784404F045D9B /* MypageInterface.framework */; };
+ 8372A983930DA8599F6C2972 /* GoogleDataTransport_GoogleDataTransport.bundle in Resources */ = {isa = PBXBuildFile; fileRef = D23E56F96E077CA1BDF4848B /* GoogleDataTransport_GoogleDataTransport.bundle */; };
83989972E0EFDFDC98B9D266 /* AuthData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 90F102DAA3B6B8E740853FB0 /* AuthData.framework */; };
+ 84E0D6A44FC3649840CB2891 /* Firebase_FirebaseCoreExtension.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 001331504CFB608C259AD01C /* Firebase_FirebaseCoreExtension.bundle */; };
+ 87FD203588C881E516CEEF31 /* GoogleDataTransport_GoogleDataTransport.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = D23E56F96E077CA1BDF4848B /* GoogleDataTransport_GoogleDataTransport.bundle */; };
886EBD382F20C3E46CEA0427 /* DetailDomain.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4307B0453450735C4C2D0075 /* DetailDomain.framework */; };
88B77F146FB7D3D00F3C2450 /* GoogleUtilities_Environment.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 49A8F44173AE773538037143 /* GoogleUtilities_Environment.framework */; };
8B7F4D5F182C6C286C41D29C /* MypageDomain.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BF295CF0B578304BEF374ADF /* MypageDomain.framework */; };
- 8C1ECE2C139ABD512A2275C6 /* FirebaseAnalytics.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 59562D711788A69AA94F066C /* FirebaseAnalytics.xcframework */; };
8F3691F7301E714387485350 /* DesignSystem.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E9369BFA2C65412102538303 /* DesignSystem.framework */; };
8FC13E553A63D7A2F007D79B /* SubscribeData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C31F0BDE173A605012E7B8AC /* SubscribeData.framework */; };
92F54D6F46C20B4A9B9764D4 /* MypageData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 25D86E385893D41F56082155 /* MypageData.framework */; };
@@ -101,9 +109,13 @@
9D12C99AAD2F9CD449517FBA /* SearchData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8D326740F43A5F556E2007C0 /* SearchData.framework */; };
9D2DD36569CD3FA02C1A5DAD /* ExploreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2EE2EA788E57C11B55BBF8A /* ExploreData.framework */; };
9E97060454F08C720AC1E1DB /* FirebaseCrashlyticsSwift.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 61F2B8D3FBE655A0B9B1C1C3 /* FirebaseCrashlyticsSwift.framework */; };
+ 9EFB4F1605EAD76AB26CF7D4 /* GoogleUtilities_GoogleUtilities_MethodSwizzler.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = CFD5674BA4AFC34FEC904609 /* GoogleUtilities_GoogleUtilities_MethodSwizzler.bundle */; };
9FC27D46D287335E3F17DE53 /* Bookmark.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84FBE2452C04B4D7AC7749E0 /* Bookmark.framework */; };
A0142B1AA7D90160EBBC2FE8 /* SearchDomain.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A00883EC86642517904880FC /* SearchDomain.framework */; };
A0EBB486D9671C02D5B5293F /* AuthInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 364B2FD98E76A3247813D747 /* AuthInterface.framework */; };
+ A445AE128B99A52E7FECCEB3 /* Firebase_FirebaseCrashlytics.bundle in Resources */ = {isa = PBXBuildFile; fileRef = A519D8A682020144739488CD /* Firebase_FirebaseCrashlytics.bundle */; };
+ A58B5C813FBF9A8D1C3EDE82 /* GoogleUtilities_GoogleUtilities_UserDefaults.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 1A24FC5D83E61ED5CD9BE219 /* GoogleUtilities_GoogleUtilities_UserDefaults.bundle */; };
+ A63FF532A5DE421354BF1D50 /* Alamofire_Alamofire.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = FA19395CE67AB6554BDAFCF5 /* Alamofire_Alamofire.bundle */; };
A74DFCAC53D088F807F9FF1D /* SubscribeStack.swift in Sources */ = {isa = PBXBuildFile; fileRef = BECC235BCF8EEC6740150B1F /* SubscribeStack.swift */; };
A74FEE290A5DA1D3F24DF935 /* KakaoSDKUser.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = D38B74E3880A33963F2FC652 /* KakaoSDKUser.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
A76F97E3ED283C3131700469 /* KakaoSDKCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 07A64FDDEF0AA8332A7C2E8F /* KakaoSDKCommon.framework */; };
@@ -111,39 +123,48 @@
A92C683605E31D18E761A10D /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9FE0ECF9910AB356967B5279 /* SystemConfiguration.framework */; };
A9FE5F68F85E5B7109D5A150 /* Router.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85DB091534BC4A342165F84D /* Router.swift */; };
AA253D8AD1A1D49463E18C89 /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 0BE35C6E44DDB3DC2EAFA79F /* libz.tbd */; };
+ AA6B4867B53B4ACECC7EC473 /* GoogleAdsOnDeviceConversion.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 03093B9870F2D113F9FA3696 /* GoogleAdsOnDeviceConversion.xcframework */; };
AB34FB6F6DB90E6EABE7E0D3 /* FirebaseAnalyticsWrapper.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9FBB016895105DD820FB961E /* FirebaseAnalyticsWrapper.framework */; };
ACB9F921EC8195E3A4550EF3 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = E554DAA4AB515DAF86082D9E /* GoogleService-Info.plist */; };
AF2C76A0516AA27E58A19304 /* FirebaseCore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6057899A5EBA0F72DCB4F9FB /* FirebaseCore.framework */; };
B0F5FC2CBE0632DF445A58CC /* BookmarkRoute.swift in Sources */ = {isa = PBXBuildFile; fileRef = F583B421B451B7D4ACF64E4A /* BookmarkRoute.swift */; };
+ B1AB58CEEE97101BB03E214A /* GoogleUtilities_GoogleUtilities_Network.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 39BF2D18DFB89E880E42645F /* GoogleUtilities_GoogleUtilities_Network.bundle */; };
B202306A3AFE89A5BDBFB17A /* KakaoSDKUser.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D38B74E3880A33963F2FC652 /* KakaoSDKUser.framework */; };
BA0821813F9EFEC96108F29C /* FirebaseSessions.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 235BA3CECEDCE6AB843915C7 /* FirebaseSessions.framework */; };
- BCC9EDD6ADD2F07F95D4BAC9 /* GoogleUtilities_AppDelegateSwizzler.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 48998AA38F90160E6A754556 /* GoogleUtilities_AppDelegateSwizzler.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ BC4240217A601EA172B9234C /* Firebase_FirebaseCoreInternal.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = EFE2491E32CAC50F848EF255 /* Firebase_FirebaseCoreInternal.bundle */; };
C3589A70DFF400CA5B499F90 /* AppRootView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 81B1B1045BA33FE4E4B7B2BE /* AppRootView.swift */; };
+ C4617ABF620439B41E6D77CE /* GoogleAppMeasurementIdentitySupport.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = FFF70D51AD4B207AB8DD7AD3 /* GoogleAppMeasurementIdentitySupport.xcframework */; };
C4B75090C0B2C8C29DCB5A6C /* AppContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14007BBD56368520EDB35575 /* AppContainer.swift */; };
+ C6DB28A3E3B8988BEA603F69 /* GoogleAppMeasurement.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = A868C7007862E33B3D0B0E83 /* GoogleAppMeasurement.xcframework */; };
+ C6E77641A727E0AF1DD9DF26 /* GoogleUtilities_GoogleUtilities_NSData.bundle in Resources */ = {isa = PBXBuildFile; fileRef = F64687C01E47DB17FF48B3F0 /* GoogleUtilities_GoogleUtilities_NSData.bundle */; };
CCA882DEDF8A62AB1141EBD4 /* TuistPlists+App.swift in Sources */ = {isa = PBXBuildFile; fileRef = AB0EC4037905D748A3AC2129 /* TuistPlists+App.swift */; };
CF3C49C4B9CB32CF2ABAAE6C /* AuthDomain.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F171699E8077C4150AFB994 /* AuthDomain.framework */; };
D0C295699905C71F5BA36345 /* GoogleUtilities_Network.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C99EEBAAE10B045CF1A64A0E /* GoogleUtilities_Network.framework */; };
D0D65E408FF57299A1762EC2 /* GoogleUtilities_Logger.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2FAFAA40E48DF2BAD19BC548 /* GoogleUtilities_Logger.framework */; };
- D7023AF7E9A9396BAF28A867 /* FBLPromises.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = A04862A34120F5891A8E63BD /* FBLPromises.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
- D7ABC7FF8DF5D9DD20A14358 /* Promises.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 4DF851AB63186CE3D1CB0DED /* Promises.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ D14B768C8A9BC8DB06A8176C /* CrashlyticsErrorLogger.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07D70261E566E247AFF2EFAC /* CrashlyticsErrorLogger.swift */; };
+ D30AF7E0E537F481B35D857F /* Firebase_FirebaseCoreExtension.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 001331504CFB608C259AD01C /* Firebase_FirebaseCoreExtension.bundle */; };
+ D597461A2B9FF9A82840B3C4 /* GoogleUtilities_GoogleUtilities_Logger.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = FC8C9536B1CA387C5E5002E9 /* GoogleUtilities_GoogleUtilities_Logger.bundle */; };
+ DA7881D366B229EA84781AB6 /* GoogleUtilities_GoogleUtilities_Reachability.bundle in Resources */ = {isa = PBXBuildFile; fileRef = D6375694D1B80179B7C090E9 /* GoogleUtilities_GoogleUtilities_Reachability.bundle */; };
DCD1CDA51C0E83201D9519D5 /* SubscribeInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 819B3A414C51EAA10DE042A0 /* SubscribeInterface.framework */; };
+ DD677EE5EF51492839B9E43E /* GoogleUtilities_GoogleUtilities_AppDelegateSwizzler.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 5DDB2F4EA01B0EEF77406ED9 /* GoogleUtilities_GoogleUtilities_AppDelegateSwizzler.bundle */; };
DE94F4759ADE18287F00A3FB /* FirebaseAnalyticsTarget.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C85A81A03B5267CA8CC2EC9 /* FirebaseAnalyticsTarget.framework */; };
E492654A9AF926A52A47BCCC /* Mypage.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6AE449FC872A10DA9227F0A7 /* Mypage.framework */; };
E5EECDAED4239341C2F24AE2 /* ExploreDomain.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B81DA1013615941AD811A574 /* ExploreDomain.framework */; };
+ E77E2BAE7976D9A70C4A966E /* GoogleUtilities_GoogleUtilities_MethodSwizzler.bundle in Resources */ = {isa = PBXBuildFile; fileRef = CFD5674BA4AFC34FEC904609 /* GoogleUtilities_GoogleUtilities_MethodSwizzler.bundle */; };
E876353B6A37EF48E58A9D39 /* PopupView.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7D4C1070D34B90B47363412F /* PopupView.framework */; };
+ E9C58ECCD59D1AF6ED04CA0A /* Promises_FBLPromises.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 7DFD84ECD2039208E4B5D331 /* Promises_FBLPromises.bundle */; };
ED14030AAE7234BDD355EFB0 /* nanopb.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5F4076E956478B59F7481B80 /* nanopb.framework */; };
+ EDFE67D4B01135905A134FC7 /* GoogleUtilities_GoogleUtilities_Reachability.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = D6375694D1B80179B7C090E9 /* GoogleUtilities_GoogleUtilities_Reachability.bundle */; };
F093B195EA3559F7AD713EE0 /* ExploreInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 78CD79CD69E90D94B6A94553 /* ExploreInterface.framework */; };
+ F099CD980652945E75D48F5F /* Alamofire_Alamofire.bundle in Resources */ = {isa = PBXBuildFile; fileRef = FA19395CE67AB6554BDAFCF5 /* Alamofire_Alamofire.bundle */; };
F1113AB299F42FEAAB55681C /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = D5C086E361BFD0D4DF600B2D /* libc++.tbd */; };
- F1597A735BFBCAEA1FAC7971 /* GoogleUtilities_Logger.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 2FAFAA40E48DF2BAD19BC548 /* GoogleUtilities_Logger.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ F1980F2C5A2659EE94119A81 /* Firebase_FirebaseCrashlytics.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = A519D8A682020144739488CD /* Firebase_FirebaseCrashlytics.bundle */; };
F2527FB2BF7081A7A0F63630 /* HomeData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 399957C9AAC3B887DDD3649B /* HomeData.framework */; };
F4F71442B9CC6C3E397CD7E8 /* Search.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 460AADA523E2A539BF85F4C6 /* Search.framework */; };
- F63766E053EA36F3C0101C0D /* GoogleAppMeasurement.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 85D9916874570E959AD65449 /* GoogleAppMeasurement.xcframework */; };
F8CB5ED6F921603868665787 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9794475B8B6D993D855A2001 /* StoreKit.framework */; };
FADEAB676778FB739860219D /* MyPageStack.swift in Sources */ = {isa = PBXBuildFile; fileRef = 033342B810467F440C2F1C7B /* MyPageStack.swift */; };
- FB2D3CD81D0E7CCDE4156363 /* nanopb.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 5F4076E956478B59F7481B80 /* nanopb.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
FE060CC116FAC5B10EC8A846 /* GoogleAdsOnDeviceConversionTarget.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EE6F604B0FACC3BEB663D1D1 /* GoogleAdsOnDeviceConversionTarget.framework */; };
FE078F42728C23B77EE02A1B /* TuistBundle+App.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083CD4D343ECF7F321C1905D /* TuistBundle+App.swift */; };
- FED64D5941C7FDEB946F6B3D /* FirebaseCrashlytics.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 579A16AE603CDAC89FBACF86 /* FirebaseCrashlytics.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
/* End PBXBuildFile section */
/* Begin PBXCopyFilesBuildPhase section */
@@ -153,43 +174,55 @@
dstPath = "";
dstSubfolderSpec = 10;
files = (
- 4056A0FE42A1656466061EE8 /* Alamofire.framework in Embed Frameworks */,
- 70F3CF0BB9F240B2A59853E0 /* DesignSystem.framework in Embed Frameworks */,
- 51247B74AD34D897B25E4802 /* Detail.framework in Embed Frameworks */,
- D7023AF7E9A9396BAF28A867 /* FBLPromises.framework in Embed Frameworks */,
- 2A9E6C9228EFD0F89BB15873 /* FirebaseCore.framework in Embed Frameworks */,
- 5189CF63EEE31ED6C09F5354 /* FirebaseCoreExtension.framework in Embed Frameworks */,
- 4943C02C8CCE2B41CF3E2D13 /* FirebaseCoreInternal.framework in Embed Frameworks */,
- FED64D5941C7FDEB946F6B3D /* FirebaseCrashlytics.framework in Embed Frameworks */,
- 3F828FC9E0F2A854B6E472EF /* FirebaseInstallations.framework in Embed Frameworks */,
- 6F52EB8BAB38DBC2979F5AB7 /* GoogleDataTransport.framework in Embed Frameworks */,
- BCC9EDD6ADD2F07F95D4BAC9 /* GoogleUtilities_AppDelegateSwizzler.framework in Embed Frameworks */,
- 232800970AFA0DEF4018B1FB /* GoogleUtilities_Environment.framework in Embed Frameworks */,
- F1597A735BFBCAEA1FAC7971 /* GoogleUtilities_Logger.framework in Embed Frameworks */,
- 667E72036A7944FECF2FEBB0 /* GoogleUtilities_MethodSwizzler.framework in Embed Frameworks */,
- 4B4BEDFFBA8F6B8697F6D658 /* GoogleUtilities_NSData.framework in Embed Frameworks */,
- 2FEC4C6AC218B26FF4A2F4A8 /* GoogleUtilities_Network.framework in Embed Frameworks */,
- 82084C94D10127344D2915C5 /* GoogleUtilities_Reachability.framework in Embed Frameworks */,
- 617287F49CD5AF999D4CC84E /* GoogleUtilities_UserDefaults.framework in Embed Frameworks */,
98213E62324FAFF244E18FFB /* KakaoSDKAuth.framework in Embed Frameworks */,
3B8CD8CA059DB727F00BFCFD /* KakaoSDKCommon.framework in Embed Frameworks */,
A74FEE290A5DA1D3F24DF935 /* KakaoSDKUser.framework in Embed Frameworks */,
69B40BAF2815D2969E4A0FB1 /* Kingfisher.framework in Embed Frameworks */,
6E8362D867B53D4394477600 /* Moya.framework in Embed Frameworks */,
9531452380F62186E3D0D24B /* PopupView.framework in Embed Frameworks */,
- D7ABC7FF8DF5D9DD20A14358 /* Promises.framework in Embed Frameworks */,
- FB2D3CD81D0E7CCDE4156363 /* nanopb.framework in Embed Frameworks */,
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
};
+ FBDA11870C9384049F1DFEDD /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ A63FF532A5DE421354BF1D50 /* Alamofire_Alamofire.bundle in Dependencies */,
+ 214B61C781E79DEA591F1751 /* DesignSystem_DesignSystem.bundle in Dependencies */,
+ 5B0876950287ADC67A485B67 /* Detail_Detail.bundle in Dependencies */,
+ 455BCB85C4E266C816471B82 /* Firebase_FirebaseCore.bundle in Dependencies */,
+ D30AF7E0E537F481B35D857F /* Firebase_FirebaseCoreExtension.bundle in Dependencies */,
+ BC4240217A601EA172B9234C /* Firebase_FirebaseCoreInternal.bundle in Dependencies */,
+ F1980F2C5A2659EE94119A81 /* Firebase_FirebaseCrashlytics.bundle in Dependencies */,
+ 4F5500B75F6D9A39D8518EAE /* Firebase_FirebaseInstallations.bundle in Dependencies */,
+ 87FD203588C881E516CEEF31 /* GoogleDataTransport_GoogleDataTransport.bundle in Dependencies */,
+ 454F1A3A0FFEA9BCBD874E3E /* GoogleUtilities_GoogleUtilities_AppDelegateSwizzler.bundle in Dependencies */,
+ 6B3574A6BF172B5045B3F44A /* GoogleUtilities_GoogleUtilities_Environment.bundle in Dependencies */,
+ D597461A2B9FF9A82840B3C4 /* GoogleUtilities_GoogleUtilities_Logger.bundle in Dependencies */,
+ 9EFB4F1605EAD76AB26CF7D4 /* GoogleUtilities_GoogleUtilities_MethodSwizzler.bundle in Dependencies */,
+ 82139E5A2BB0D66FFFF431C2 /* GoogleUtilities_GoogleUtilities_NSData.bundle in Dependencies */,
+ B1AB58CEEE97101BB03E214A /* GoogleUtilities_GoogleUtilities_Network.bundle in Dependencies */,
+ EDFE67D4B01135905A134FC7 /* GoogleUtilities_GoogleUtilities_Reachability.bundle in Dependencies */,
+ A58B5C813FBF9A8D1C3EDE82 /* GoogleUtilities_GoogleUtilities_UserDefaults.bundle in Dependencies */,
+ E9C58ECCD59D1AF6ED04CA0A /* Promises_FBLPromises.bundle in Dependencies */,
+ 6238E134AEF9AF7C7D62F513 /* Promises_Promises.bundle in Dependencies */,
+ 5DC88C3A58701D9C098920F4 /* nanopb_nanopb.bundle in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
+ 001331504CFB608C259AD01C /* Firebase_FirebaseCoreExtension.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Firebase_FirebaseCoreExtension.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
01E1AA015F9EE84780DE15E5 /* App-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "App-Info.plist"; sourceTree = ""; };
+ 03093B9870F2D113F9FA3696 /* GoogleAdsOnDeviceConversion.xcframework */ = {isa = PBXFileReference; expectedSignature = "AppleDeveloperProgram:EQHXZ8M8AV:Google LLC"; lastKnownFileType = wrapper.xcframework; name = GoogleAdsOnDeviceConversion.xcframework; path = "/Users/minjae/Desktop/Newdok/Tuist/.build/artifacts/google-ads-on-device-conversion-ios-sdk/GoogleAdsOnDeviceConversion/GoogleAdsOnDeviceConversion.xcframework"; sourceTree = ""; };
033342B810467F440C2F1C7B /* MyPageStack.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyPageStack.swift; sourceTree = ""; };
03CE70F210A2CC94EABD7C03 /* FirebaseSessionsObjC.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FirebaseSessionsObjC.framework; sourceTree = BUILT_PRODUCTS_DIR; };
07A64FDDEF0AA8332A7C2E8F /* KakaoSDKCommon.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = KakaoSDKCommon.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 07D70261E566E247AFF2EFAC /* CrashlyticsErrorLogger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CrashlyticsErrorLogger.swift; sourceTree = ""; };
083CD4D343ECF7F321C1905D /* TuistBundle+App.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistBundle+App.swift"; sourceTree = ""; };
0BE35C6E44DDB3DC2EAFA79F /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/libz.tbd; sourceTree = DEVELOPER_DIR; };
0DBF32E59C44117542EBDEFB /* BookmarkData.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = BookmarkData.framework; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -198,13 +231,16 @@
137FBFC1E48C21B372502272 /* FoundationKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FoundationKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
1398C2480450D84DC3712CB1 /* SearchInterface.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SearchInterface.framework; sourceTree = BUILT_PRODUCTS_DIR; };
14007BBD56368520EDB35575 /* AppContainer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppContainer.swift; sourceTree = ""; };
+ 1A24FC5D83E61ED5CD9BE219 /* GoogleUtilities_GoogleUtilities_UserDefaults.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GoogleUtilities_GoogleUtilities_UserDefaults.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
1ED1B83ED44A88938979E608 /* HomeStack.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeStack.swift; sourceTree = ""; };
1EDD3D57F65917DB1A07B052 /* FirebaseInstallations.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FirebaseInstallations.framework; sourceTree = BUILT_PRODUCTS_DIR; };
1F171699E8077C4150AFB994 /* AuthDomain.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AuthDomain.framework; sourceTree = BUILT_PRODUCTS_DIR; };
20472DE96208EAF694E16719 /* DatabaseKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DatabaseKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 21B8EE4A1F0458879F0B90F2 /* Firebase_FirebaseInstallations.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Firebase_FirebaseInstallations.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
233D852B07E4FC2B2B1F1179 /* Explore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Explore.framework; sourceTree = BUILT_PRODUCTS_DIR; };
235BA3CECEDCE6AB843915C7 /* FirebaseSessions.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FirebaseSessions.framework; sourceTree = BUILT_PRODUCTS_DIR; };
255DFB5369032FF8E4C1007C /* third_party_IsAppEncrypted.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = third_party_IsAppEncrypted.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 25C4E914C21B7ADF81495C99 /* FirebaseAnalytics.xcframework */ = {isa = PBXFileReference; expectedSignature = "AppleDeveloperProgram:EQHXZ8M8AV:Google LLC"; lastKnownFileType = wrapper.xcframework; name = FirebaseAnalytics.xcframework; path = "/Users/minjae/Desktop/Newdok/Tuist/.build/artifacts/firebase-ios-sdk/FirebaseAnalytics/FirebaseAnalytics.xcframework"; sourceTree = ""; };
25D86E385893D41F56082155 /* MypageData.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = MypageData.framework; sourceTree = BUILT_PRODUCTS_DIR; };
2EC0EED4803AED8EF066F337 /* FirebaseRemoteConfigInterop.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FirebaseRemoteConfigInterop.framework; sourceTree = BUILT_PRODUCTS_DIR; };
2FAFAA40E48DF2BAD19BC548 /* GoogleUtilities_Logger.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = GoogleUtilities_Logger.framework; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -212,6 +248,7 @@
35DEB0BB71823B6387131290 /* HomeRoute.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeRoute.swift; sourceTree = ""; };
364B2FD98E76A3247813D747 /* AuthInterface.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AuthInterface.framework; sourceTree = BUILT_PRODUCTS_DIR; };
399957C9AAC3B887DDD3649B /* HomeData.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = HomeData.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 39BF2D18DFB89E880E42645F /* GoogleUtilities_GoogleUtilities_Network.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GoogleUtilities_GoogleUtilities_Network.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
426373E4E665642601D5BE1A /* GoogleUtilities_MethodSwizzler.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = GoogleUtilities_MethodSwizzler.framework; sourceTree = BUILT_PRODUCTS_DIR; };
4307B0453450735C4C2D0075 /* DetailDomain.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DetailDomain.framework; sourceTree = BUILT_PRODUCTS_DIR; };
4459AC440B063044813E979E /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/Security.framework; sourceTree = DEVELOPER_DIR; };
@@ -220,13 +257,16 @@
49A8F44173AE773538037143 /* GoogleUtilities_Environment.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = GoogleUtilities_Environment.framework; sourceTree = BUILT_PRODUCTS_DIR; };
4B1CAF05B8E3BD379195EB98 /* AuthRoute.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthRoute.swift; sourceTree = ""; };
4DF851AB63186CE3D1CB0DED /* Promises.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Promises.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 4EB562E78DEEF2FAC4EDDEBF /* DesignSystem_DesignSystem.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DesignSystem_DesignSystem.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
+ 50C4E4206185DE9D06029506 /* App.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = App.entitlements; sourceTree = ""; };
540F7C6DDBDE7E9CAA207079 /* ExploreStack.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExploreStack.swift; sourceTree = ""; };
+ 54C16966143C68BB125F5D74 /* GoogleUtilities_GoogleUtilities_Environment.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GoogleUtilities_GoogleUtilities_Environment.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
56CEFEBE90EBB1FAFCA079B3 /* DetailData.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DetailData.framework; sourceTree = BUILT_PRODUCTS_DIR; };
571E08A9083FD4334E4B7D06 /* App.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = App.app; sourceTree = BUILT_PRODUCTS_DIR; };
579A16AE603CDAC89FBACF86 /* FirebaseCrashlytics.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FirebaseCrashlytics.framework; sourceTree = BUILT_PRODUCTS_DIR; };
586B2137F5665C47D8CBF265 /* GoogleUtilities_Reachability.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = GoogleUtilities_Reachability.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- 59562D711788A69AA94F066C /* FirebaseAnalytics.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; path = FirebaseAnalytics.xcframework; sourceTree = ""; };
5C85A81A03B5267CA8CC2EC9 /* FirebaseAnalyticsTarget.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FirebaseAnalyticsTarget.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 5DDB2F4EA01B0EEF77406ED9 /* GoogleUtilities_GoogleUtilities_AppDelegateSwizzler.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GoogleUtilities_GoogleUtilities_AppDelegateSwizzler.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
5F4076E956478B59F7481B80 /* nanopb.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = nanopb.framework; sourceTree = BUILT_PRODUCTS_DIR; };
6057899A5EBA0F72DCB4F9FB /* FirebaseCore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FirebaseCore.framework; sourceTree = BUILT_PRODUCTS_DIR; };
61F2B8D3FBE655A0B9B1C1C3 /* FirebaseCrashlyticsSwift.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FirebaseCrashlyticsSwift.framework; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -242,9 +282,9 @@
77D69EAF942AA87F8A9468BF /* Kingfisher.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Kingfisher.framework; sourceTree = BUILT_PRODUCTS_DIR; };
78CD79CD69E90D94B6A94553 /* ExploreInterface.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ExploreInterface.framework; sourceTree = BUILT_PRODUCTS_DIR; };
7B0685C94FE185B23B0219AB /* AppCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppCoordinator.swift; sourceTree = ""; };
- 7CE72C73A76A964F8E7408D6 /* GoogleAdsOnDeviceConversion.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; path = GoogleAdsOnDeviceConversion.xcframework; sourceTree = ""; };
7D4C1070D34B90B47363412F /* PopupView.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PopupView.framework; sourceTree = BUILT_PRODUCTS_DIR; };
7DC4BECC212699120AF58DCF /* NetworkErrorAppMapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkErrorAppMapper.swift; sourceTree = ""; };
+ 7DFD84ECD2039208E4B5D331 /* Promises_FBLPromises.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Promises_FBLPromises.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
7E710496E985656C6B2D0826 /* Launch.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Launch.framework; sourceTree = BUILT_PRODUCTS_DIR; };
7F44EDE91A79696F3FBBFE16 /* Firebase.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Firebase.framework; sourceTree = BUILT_PRODUCTS_DIR; };
80E02385EF041EF7C0B15DA4 /* CoreTelephony.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreTelephony.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/CoreTelephony.framework; sourceTree = DEVELOPER_DIR; };
@@ -252,7 +292,6 @@
81B1B1045BA33FE4E4B7B2BE /* AppRootView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppRootView.swift; sourceTree = ""; };
839C7785F67E3906215F67C8 /* NewDokTabView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NewDokTabView.swift; sourceTree = ""; };
84FBE2452C04B4D7AC7749E0 /* Bookmark.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Bookmark.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- 85D9916874570E959AD65449 /* GoogleAppMeasurement.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; path = GoogleAppMeasurement.xcframework; sourceTree = ""; };
85DB091534BC4A342165F84D /* Router.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Router.swift; sourceTree = ""; };
86C4E404056697A170B2B575 /* DetailInterface.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DetailInterface.framework; sourceTree = BUILT_PRODUCTS_DIR; };
87508572DAF45259CFBDF271 /* Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; };
@@ -272,22 +311,27 @@
A00883EC86642517904880FC /* SearchDomain.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SearchDomain.framework; sourceTree = BUILT_PRODUCTS_DIR; };
A04862A34120F5891A8E63BD /* FBLPromises.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FBLPromises.framework; sourceTree = BUILT_PRODUCTS_DIR; };
A384F9952484B3EE82AEEEB0 /* HomeDomain.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = HomeDomain.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ A519D8A682020144739488CD /* Firebase_FirebaseCrashlytics.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Firebase_FirebaseCrashlytics.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
A6527EDA66DBCA90ED0AF755 /* AppDependencies.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDependencies.swift; sourceTree = ""; };
- A6CC5BE38C825952D62A4FEA /* GoogleAppMeasurementIdentitySupport.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; path = GoogleAppMeasurementIdentitySupport.xcframework; sourceTree = ""; };
+ A868C7007862E33B3D0B0E83 /* GoogleAppMeasurement.xcframework */ = {isa = PBXFileReference; expectedSignature = "AppleDeveloperProgram:EQHXZ8M8AV:Google LLC"; lastKnownFileType = wrapper.xcframework; name = GoogleAppMeasurement.xcframework; path = /Users/minjae/Desktop/Newdok/Tuist/.build/artifacts/googleappmeasurement/GoogleAppMeasurement/GoogleAppMeasurement.xcframework; sourceTree = ""; };
AB0EC4037905D748A3AC2129 /* TuistPlists+App.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "TuistPlists+App.swift"; sourceTree = ""; };
AB40F3B3D8E2DCB2AC3C9605 /* Shared.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Shared.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ AD69D01DF7849A86F4C17EF3 /* Firebase_FirebaseCore.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Firebase_FirebaseCore.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
+ ADED33C4EE6E5E141B0AB27F /* nanopb_nanopb.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = nanopb_nanopb.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
B6011F38009256ECAA5FCCE7 /* AppToastHost.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppToastHost.swift; sourceTree = ""; };
B6E6B457B0A45148B574F626 /* AuthFlow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthFlow.swift; sourceTree = ""; };
B81DA1013615941AD811A574 /* ExploreDomain.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ExploreDomain.framework; sourceTree = BUILT_PRODUCTS_DIR; };
BECC235BCF8EEC6740150B1F /* SubscribeStack.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubscribeStack.swift; sourceTree = ""; };
BF295CF0B578304BEF374ADF /* MypageDomain.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = MypageDomain.framework; sourceTree = BUILT_PRODUCTS_DIR; };
C31F0BDE173A605012E7B8AC /* SubscribeData.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SubscribeData.framework; sourceTree = BUILT_PRODUCTS_DIR; };
- C86E6E6BCDFAB61BBD09E06F /* Alamofire.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Alamofire.framework; sourceTree = BUILT_PRODUCTS_DIR; };
C99EEBAAE10B045CF1A64A0E /* GoogleUtilities_Network.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = GoogleUtilities_Network.framework; sourceTree = BUILT_PRODUCTS_DIR; };
CAA551898AB3AD913E2B2E80 /* GoogleDataTransport.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = GoogleDataTransport.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ CFD5674BA4AFC34FEC904609 /* GoogleUtilities_GoogleUtilities_MethodSwizzler.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GoogleUtilities_GoogleUtilities_MethodSwizzler.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
+ D23E56F96E077CA1BDF4848B /* GoogleDataTransport_GoogleDataTransport.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GoogleDataTransport_GoogleDataTransport.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
D2EE2EA788E57C11B55BBF8A /* ExploreData.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ExploreData.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D38B74E3880A33963F2FC652 /* KakaoSDKUser.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = KakaoSDKUser.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D5C086E361BFD0D4DF600B2D /* libc++.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libc++.tbd"; path = "Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/libc++.tbd"; sourceTree = DEVELOPER_DIR; };
+ D6375694D1B80179B7C090E9 /* GoogleUtilities_GoogleUtilities_Reachability.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GoogleUtilities_GoogleUtilities_Reachability.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
D986AB50C6EC5E677534690A /* FirebaseCoreExtension.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FirebaseCoreExtension.framework; sourceTree = BUILT_PRODUCTS_DIR; };
E3FD82EB3E15D948FDA8FAD1 /* BookmarkStack.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarkStack.swift; sourceTree = ""; };
E554DAA4AB515DAF86082D9E /* GoogleService-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "GoogleService-Info.plist"; sourceTree = ""; };
@@ -297,11 +341,18 @@
EA4616639497709FF78B11EC /* SubscribeRoute.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubscribeRoute.swift; sourceTree = ""; };
EE6F604B0FACC3BEB663D1D1 /* GoogleAdsOnDeviceConversionTarget.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = GoogleAdsOnDeviceConversionTarget.framework; sourceTree = BUILT_PRODUCTS_DIR; };
EF021344F16945968371F691 /* NetworkKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = NetworkKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ EFE2491E32CAC50F848EF255 /* Firebase_FirebaseCoreInternal.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Firebase_FirebaseCoreInternal.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
+ F0D118266653E3D17C69D780 /* Detail_Detail.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Detail_Detail.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
+ F260309AD89688149AD615B2 /* Promises_Promises.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Promises_Promises.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
F29FA5D3B936B1F16BFF75CD /* MyPageRoute.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyPageRoute.swift; sourceTree = ""; };
F583B421B451B7D4ACF64E4A /* BookmarkRoute.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarkRoute.swift; sourceTree = ""; };
+ F64687C01E47DB17FF48B3F0 /* GoogleUtilities_GoogleUtilities_NSData.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GoogleUtilities_GoogleUtilities_NSData.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
F8F861BEFA693139AC601928 /* BookmarkDomain.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = BookmarkDomain.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ FA19395CE67AB6554BDAFCF5 /* Alamofire_Alamofire.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Alamofire_Alamofire.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
FBAB840F54EFA40D6A143F7F /* GoogleAppMeasurementTarget.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = GoogleAppMeasurementTarget.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ FC8C9536B1CA387C5E5002E9 /* GoogleUtilities_GoogleUtilities_Logger.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = GoogleUtilities_GoogleUtilities_Logger.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
FCA3C5FAA7EFDD728B5A5DA0 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; };
+ FFF70D51AD4B207AB8DD7AD3 /* GoogleAppMeasurementIdentitySupport.xcframework */ = {isa = PBXFileReference; expectedSignature = "AppleDeveloperProgram:EQHXZ8M8AV:Google LLC"; lastKnownFileType = wrapper.xcframework; name = GoogleAppMeasurementIdentitySupport.xcframework; path = /Users/minjae/Desktop/Newdok/Tuist/.build/artifacts/googleappmeasurement/GoogleAppMeasurementIdentitySupport/GoogleAppMeasurementIdentitySupport.xcframework; sourceTree = ""; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -389,10 +440,10 @@
DCD1CDA51C0E83201D9519D5 /* SubscribeInterface.framework in Frameworks */,
ED14030AAE7234BDD355EFB0 /* nanopb.framework in Frameworks */,
5533C7995DDE899C36BC2346 /* third_party_IsAppEncrypted.framework in Frameworks */,
- 8C1ECE2C139ABD512A2275C6 /* FirebaseAnalytics.xcframework in Frameworks */,
- 5B8ED560C12821F468B19513 /* GoogleAdsOnDeviceConversion.xcframework in Frameworks */,
- F63766E053EA36F3C0101C0D /* GoogleAppMeasurement.xcframework in Frameworks */,
- 343BDB365A3C8C6E6705D1F5 /* GoogleAppMeasurementIdentitySupport.xcframework in Frameworks */,
+ 684249CA8A3486EB41BE1783 /* FirebaseAnalytics.xcframework in Frameworks */,
+ AA6B4867B53B4ACECC7EC473 /* GoogleAdsOnDeviceConversion.xcframework in Frameworks */,
+ C6DB28A3E3B8988BEA603F69 /* GoogleAppMeasurement.xcframework in Frameworks */,
+ C4617ABF620439B41E6D77CE /* GoogleAppMeasurementIdentitySupport.xcframework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -409,22 +460,6 @@
path = ../../Configurations;
sourceTree = "";
};
- 2B532F2F24B3806AA00CA782 /* firebase-ios-sdk */ = {
- isa = PBXGroup;
- children = (
- EB592668F4660E34F5D78F27 /* FirebaseAnalytics */,
- );
- path = "firebase-ios-sdk";
- sourceTree = "";
- };
- 30738C833C3B6BB1FE637F27 /* GoogleAppMeasurementIdentitySupport */ = {
- isa = PBXGroup;
- children = (
- A6CC5BE38C825952D62A4FEA /* GoogleAppMeasurementIdentitySupport.xcframework */,
- );
- path = GoogleAppMeasurementIdentitySupport;
- sourceTree = "";
- };
3A443C92BF615B174B13C048 /* Services */ = {
isa = PBXGroup;
children = (
@@ -442,15 +477,6 @@
);
sourceTree = "";
};
- 4FFC2DDE62C74F3CF60D4731 /* Tuist */ = {
- isa = PBXGroup;
- children = (
- BC8F91C2FAA18CA0D1391EB7 /* .build */,
- );
- name = Tuist;
- path = ../../Tuist;
- sourceTree = "";
- };
52611B11A5E6A7198C4E57A3 /* Project */ = {
isa = PBXGroup;
children = (
@@ -458,7 +484,7 @@
B3BCDE38B26B330C9A04FADE /* Derived */,
62EFB15EC88C1D2636544B42 /* Resources */,
858C4E433DBF0294DFED1B0C /* Sources */,
- 4FFC2DDE62C74F3CF60D4731 /* Tuist */,
+ 50C4E4206185DE9D06029506 /* App.entitlements */,
);
name = Project;
sourceTree = "";
@@ -502,6 +528,7 @@
3A443C92BF615B174B13C048 /* Services */,
6F41BED0C1858EA69ED3F19E /* Tabs */,
FA93CC6EFD37E79110C86AFE /* Toast */,
+ 07D70261E566E247AFF2EFAC /* CrashlyticsErrorLogger.swift */,
0E742829AD9D1D2B50EFB2A0 /* NewdokApp.swift */,
);
path = Sources;
@@ -533,14 +560,6 @@
path = Navigation;
sourceTree = "";
};
- A582907BA4DE68BF5C585D80 /* GoogleAdsOnDeviceConversion */ = {
- isa = PBXGroup;
- children = (
- 7CE72C73A76A964F8E7408D6 /* GoogleAdsOnDeviceConversion.xcframework */,
- );
- path = GoogleAdsOnDeviceConversion;
- sourceTree = "";
- };
A66C63392A87266E27A23862 /* Root */ = {
isa = PBXGroup;
children = (
@@ -558,27 +577,15 @@
path = Derived;
sourceTree = "";
};
- BC1FA09C060027D4E8C5047D /* GoogleAppMeasurement */ = {
- isa = PBXGroup;
- children = (
- 85D9916874570E959AD65449 /* GoogleAppMeasurement.xcframework */,
- );
- path = GoogleAppMeasurement;
- sourceTree = "";
- };
- BC8F91C2FAA18CA0D1391EB7 /* .build */ = {
- isa = PBXGroup;
- children = (
- F1808424065DE458DD8D7E93 /* artifacts */,
- );
- path = .build;
- sourceTree = "";
- };
BDD1182E50DC622819F25364 /* Frameworks */ = {
isa = PBXGroup;
children = (
91FB685CB6A1E3D66A15E903 /* AppKit.framework */,
80E02385EF041EF7C0B15DA4 /* CoreTelephony.framework */,
+ 25C4E914C21B7ADF81495C99 /* FirebaseAnalytics.xcframework */,
+ 03093B9870F2D113F9FA3696 /* GoogleAdsOnDeviceConversion.xcframework */,
+ A868C7007862E33B3D0B0E83 /* GoogleAppMeasurement.xcframework */,
+ FFF70D51AD4B207AB8DD7AD3 /* GoogleAppMeasurementIdentitySupport.xcframework */,
D5C086E361BFD0D4DF600B2D /* libc++.tbd */,
75C1D964EE1929E7F47691C1 /* libsqlite3.tbd */,
0BE35C6E44DDB3DC2EAFA79F /* libz.tbd */,
@@ -590,14 +597,6 @@
name = Frameworks;
sourceTree = "";
};
- D0B8970BE595EFAFFDEFF6EF /* google-ads-on-device-conversion-ios-sdk */ = {
- isa = PBXGroup;
- children = (
- A582907BA4DE68BF5C585D80 /* GoogleAdsOnDeviceConversion */,
- );
- path = "google-ads-on-device-conversion-ios-sdk";
- sourceTree = "";
- };
E7BF953E865040847C6A1924 /* DI */ = {
isa = PBXGroup;
children = (
@@ -611,7 +610,7 @@
E9C3DB3EC6D7655028A9C0D3 /* Products */ = {
isa = PBXGroup;
children = (
- C86E6E6BCDFAB61BBD09E06F /* Alamofire.framework */,
+ FA19395CE67AB6554BDAFCF5 /* Alamofire_Alamofire.bundle */,
571E08A9083FD4334E4B7D06 /* App.app */,
709ECB981BF7FB2A9D697179 /* Auth.framework */,
90F102DAA3B6B8E740853FB0 /* AuthData.framework */,
@@ -622,7 +621,9 @@
F8F861BEFA693139AC601928 /* BookmarkDomain.framework */,
E72FF74C328526DB94E50010 /* BookmarkInterface.framework */,
20472DE96208EAF694E16719 /* DatabaseKit.framework */,
+ 4EB562E78DEEF2FAC4EDDEBF /* DesignSystem_DesignSystem.bundle */,
E9369BFA2C65412102538303 /* DesignSystem.framework */,
+ F0D118266653E3D17C69D780 /* Detail_Detail.bundle */,
6FB9E693CAE8686756749690 /* Detail.framework */,
56CEFEBE90EBB1FAFCA079B3 /* DetailData.framework */,
4307B0453450735C4C2D0075 /* DetailDomain.framework */,
@@ -632,6 +633,11 @@
B81DA1013615941AD811A574 /* ExploreDomain.framework */,
78CD79CD69E90D94B6A94553 /* ExploreInterface.framework */,
A04862A34120F5891A8E63BD /* FBLPromises.framework */,
+ AD69D01DF7849A86F4C17EF3 /* Firebase_FirebaseCore.bundle */,
+ 001331504CFB608C259AD01C /* Firebase_FirebaseCoreExtension.bundle */,
+ EFE2491E32CAC50F848EF255 /* Firebase_FirebaseCoreInternal.bundle */,
+ A519D8A682020144739488CD /* Firebase_FirebaseCrashlytics.bundle */,
+ 21B8EE4A1F0458879F0B90F2 /* Firebase_FirebaseInstallations.bundle */,
7F44EDE91A79696F3FBBFE16 /* Firebase.framework */,
5C85A81A03B5267CA8CC2EC9 /* FirebaseAnalyticsTarget.framework */,
9FBB016895105DD820FB961E /* FirebaseAnalyticsWrapper.framework */,
@@ -647,9 +653,18 @@
137FBFC1E48C21B372502272 /* FoundationKit.framework */,
EE6F604B0FACC3BEB663D1D1 /* GoogleAdsOnDeviceConversionTarget.framework */,
FBAB840F54EFA40D6A143F7F /* GoogleAppMeasurementTarget.framework */,
+ D23E56F96E077CA1BDF4848B /* GoogleDataTransport_GoogleDataTransport.bundle */,
CAA551898AB3AD913E2B2E80 /* GoogleDataTransport.framework */,
48998AA38F90160E6A754556 /* GoogleUtilities_AppDelegateSwizzler.framework */,
49A8F44173AE773538037143 /* GoogleUtilities_Environment.framework */,
+ 5DDB2F4EA01B0EEF77406ED9 /* GoogleUtilities_GoogleUtilities_AppDelegateSwizzler.bundle */,
+ 54C16966143C68BB125F5D74 /* GoogleUtilities_GoogleUtilities_Environment.bundle */,
+ FC8C9536B1CA387C5E5002E9 /* GoogleUtilities_GoogleUtilities_Logger.bundle */,
+ CFD5674BA4AFC34FEC904609 /* GoogleUtilities_GoogleUtilities_MethodSwizzler.bundle */,
+ 39BF2D18DFB89E880E42645F /* GoogleUtilities_GoogleUtilities_Network.bundle */,
+ F64687C01E47DB17FF48B3F0 /* GoogleUtilities_GoogleUtilities_NSData.bundle */,
+ D6375694D1B80179B7C090E9 /* GoogleUtilities_GoogleUtilities_Reachability.bundle */,
+ 1A24FC5D83E61ED5CD9BE219 /* GoogleUtilities_GoogleUtilities_UserDefaults.bundle */,
2FAFAA40E48DF2BAD19BC548 /* GoogleUtilities_Logger.framework */,
426373E4E665642601D5BE1A /* GoogleUtilities_MethodSwizzler.framework */,
C99EEBAAE10B045CF1A64A0E /* GoogleUtilities_Network.framework */,
@@ -670,9 +685,12 @@
25D86E385893D41F56082155 /* MypageData.framework */,
BF295CF0B578304BEF374ADF /* MypageDomain.framework */,
96DD70846B0784404F045D9B /* MypageInterface.framework */,
+ ADED33C4EE6E5E141B0AB27F /* nanopb_nanopb.bundle */,
5F4076E956478B59F7481B80 /* nanopb.framework */,
EF021344F16945968371F691 /* NetworkKit.framework */,
7D4C1070D34B90B47363412F /* PopupView.framework */,
+ 7DFD84ECD2039208E4B5D331 /* Promises_FBLPromises.bundle */,
+ F260309AD89688149AD615B2 /* Promises_Promises.bundle */,
4DF851AB63186CE3D1CB0DED /* Promises.framework */,
460AADA523E2A539BF85F4C6 /* Search.framework */,
8D326740F43A5F556E2007C0 /* SearchData.framework */,
@@ -688,33 +706,6 @@
name = Products;
sourceTree = "";
};
- EAFCD759662FE9DDE2A42051 /* googleappmeasurement */ = {
- isa = PBXGroup;
- children = (
- BC1FA09C060027D4E8C5047D /* GoogleAppMeasurement */,
- 30738C833C3B6BB1FE637F27 /* GoogleAppMeasurementIdentitySupport */,
- );
- path = googleappmeasurement;
- sourceTree = "";
- };
- EB592668F4660E34F5D78F27 /* FirebaseAnalytics */ = {
- isa = PBXGroup;
- children = (
- 59562D711788A69AA94F066C /* FirebaseAnalytics.xcframework */,
- );
- path = FirebaseAnalytics;
- sourceTree = "";
- };
- F1808424065DE458DD8D7E93 /* artifacts */ = {
- isa = PBXGroup;
- children = (
- 2B532F2F24B3806AA00CA782 /* firebase-ios-sdk */,
- D0B8970BE595EFAFFDEFF6EF /* google-ads-on-device-conversion-ios-sdk */,
- EAFCD759662FE9DDE2A42051 /* googleappmeasurement */,
- );
- path = artifacts;
- sourceTree = "";
- };
FA93CC6EFD37E79110C86AFE /* Toast */ = {
isa = PBXGroup;
children = (
@@ -734,6 +725,7 @@
37BFF6A8CB5CC7FA21AD3FA3 /* Resources */,
BC0DC3536DED64E0E8C9923E /* Frameworks */,
8EFDE6013C818852098745E7 /* Embed Frameworks */,
+ FBDA11870C9384049F1DFEDD /* Dependencies */,
);
buildRules = (
);
@@ -754,8 +746,6 @@
attributes = {
BuildIndependentTargetsInParallel = YES;
ORGANIZATIONNAME = Newdok;
- TargetAttributes = {
- };
};
buildConfigurationList = B3FD05C59F197F398A0B04AB /* Build configuration list for PBXProject "App" */;
compatibilityVersion = "Xcode 14.0";
@@ -782,6 +772,26 @@
files = (
48469C5111BF762561C9B9B6 /* Assets.xcassets in Resources */,
ACB9F921EC8195E3A4550EF3 /* GoogleService-Info.plist in Resources */,
+ F099CD980652945E75D48F5F /* Alamofire_Alamofire.bundle in Resources */,
+ 3F9833F6C4BC374663C6FE35 /* DesignSystem_DesignSystem.bundle in Resources */,
+ 46C14C6043CB9460A652AEC7 /* Detail_Detail.bundle in Resources */,
+ 21A01C75053E1F862D201926 /* Firebase_FirebaseCore.bundle in Resources */,
+ 84E0D6A44FC3649840CB2891 /* Firebase_FirebaseCoreExtension.bundle in Resources */,
+ 2050CD74997BC9376C6B205A /* Firebase_FirebaseCoreInternal.bundle in Resources */,
+ A445AE128B99A52E7FECCEB3 /* Firebase_FirebaseCrashlytics.bundle in Resources */,
+ 3924822A85CCB856CF6D53E7 /* Firebase_FirebaseInstallations.bundle in Resources */,
+ 8372A983930DA8599F6C2972 /* GoogleDataTransport_GoogleDataTransport.bundle in Resources */,
+ DD677EE5EF51492839B9E43E /* GoogleUtilities_GoogleUtilities_AppDelegateSwizzler.bundle in Resources */,
+ 16B06C4306001183D71A4F9B /* GoogleUtilities_GoogleUtilities_Environment.bundle in Resources */,
+ 221E79D0C4EE7C160F28AC4E /* GoogleUtilities_GoogleUtilities_Logger.bundle in Resources */,
+ E77E2BAE7976D9A70C4A966E /* GoogleUtilities_GoogleUtilities_MethodSwizzler.bundle in Resources */,
+ C6E77641A727E0AF1DD9DF26 /* GoogleUtilities_GoogleUtilities_NSData.bundle in Resources */,
+ 6DA58C0BE7A7A82BB4058DC1 /* GoogleUtilities_GoogleUtilities_Network.bundle in Resources */,
+ DA7881D366B229EA84781AB6 /* GoogleUtilities_GoogleUtilities_Reachability.bundle in Resources */,
+ 5199DCE2F06390D49C5B3E99 /* GoogleUtilities_GoogleUtilities_UserDefaults.bundle in Resources */,
+ 7C119429E6762110C64C8124 /* Promises_FBLPromises.bundle in Resources */,
+ 00907C0C40B6C87BF82F1310 /* Promises_Promises.bundle in Resources */,
+ 52792251855EB8FA202BAC86 /* nanopb_nanopb.bundle in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -795,6 +805,7 @@
2E743A6F76CCB6064D781210 /* TuistAssets+App.swift in Sources */,
FE078F42728C23B77EE02A1B /* TuistBundle+App.swift in Sources */,
CCA882DEDF8A62AB1141EBD4 /* TuistPlists+App.swift in Sources */,
+ D14B768C8A9BC8DB06A8176C /* CrashlyticsErrorLogger.swift in Sources */,
C4B75090C0B2C8C29DCB5A6C /* AppContainer.swift in Sources */,
0C267D12DF8888A49CDF7F4C /* AppDependencies.swift in Sources */,
60BAC7B09140821CE84C3573 /* NetworkErrorAppMapper.swift in Sources */,
@@ -827,6 +838,7 @@
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
+ CODE_SIGN_ENTITLEMENTS = App.entitlements;
CODE_SIGN_IDENTITY = "iPhone Developer";
ENABLE_PREVIEWS = YES;
FRAMEWORK_SEARCH_PATHS = (
@@ -896,53 +908,11 @@
"-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/nanopb/nanopb.modulemap",
"-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/third_party_IsAppEncrypted/third_party_IsAppEncrypted.modulemap",
);
- OTHER_SWIFT_FLAGS = (
+ OTHER_LDFLAGS = (
"$(inherited)",
- "-Xcc",
- "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/checkouts/firebase-ios-sdk/CoreOnly/Sources/module.modulemap",
- "-Xcc",
- "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/checkouts/promises/Sources/FBLPromises/include/module.modulemap",
- "-Xcc",
- "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/FirebaseAnalyticsTarget/FirebaseAnalyticsTarget.modulemap",
- "-Xcc",
- "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/FirebaseAnalyticsWrapper/FirebaseAnalyticsWrapper.modulemap",
- "-Xcc",
- "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/FirebaseCore/FirebaseCore.modulemap",
- "-Xcc",
- "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/FirebaseCoreExtension/FirebaseCoreExtension.modulemap",
- "-Xcc",
- "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/FirebaseCrashlytics/FirebaseCrashlytics.modulemap",
- "-Xcc",
- "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/FirebaseInstallations/FirebaseInstallations.modulemap",
- "-Xcc",
- "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/FirebaseSessionsObjC/FirebaseSessionsObjC.modulemap",
- "-Xcc",
- "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/GoogleAdsOnDeviceConversionTarget/GoogleAdsOnDeviceConversionTarget.modulemap",
- "-Xcc",
- "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/GoogleAppMeasurementTarget/GoogleAppMeasurementTarget.modulemap",
- "-Xcc",
- "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/GoogleDataTransport/GoogleDataTransport.modulemap",
- "-Xcc",
- "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/GoogleUtilities_AppDelegateSwizzler/GoogleUtilities_AppDelegateSwizzler.modulemap",
- "-Xcc",
- "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/GoogleUtilities_Environment/GoogleUtilities_Environment.modulemap",
- "-Xcc",
- "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/GoogleUtilities_Logger/GoogleUtilities_Logger.modulemap",
- "-Xcc",
- "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/GoogleUtilities_MethodSwizzler/GoogleUtilities_MethodSwizzler.modulemap",
- "-Xcc",
- "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/GoogleUtilities_NSData/GoogleUtilities_NSData.modulemap",
- "-Xcc",
- "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/GoogleUtilities_Network/GoogleUtilities_Network.modulemap",
- "-Xcc",
- "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/GoogleUtilities_Reachability/GoogleUtilities_Reachability.modulemap",
- "-Xcc",
- "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/GoogleUtilities_UserDefaults/GoogleUtilities_UserDefaults.modulemap",
- "-Xcc",
- "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/nanopb/nanopb.modulemap",
- "-Xcc",
- "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/third_party_IsAppEncrypted/third_party_IsAppEncrypted.modulemap",
+ "-L$(DT_TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)",
);
+ OTHER_SWIFT_FLAGS = "$(inherited) -Xcc -fmodule-map-file=$(SRCROOT)/../../Tuist/.build/checkouts/firebase-ios-sdk/CoreOnly/Sources/module.modulemap -Xcc -fmodule-map-file=$(SRCROOT)/../../Tuist/.build/checkouts/promises/Sources/FBLPromises/include/module.modulemap -Xcc -fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/FirebaseAnalyticsTarget/FirebaseAnalyticsTarget.modulemap -Xcc -fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/FirebaseAnalyticsWrapper/FirebaseAnalyticsWrapper.modulemap -Xcc -fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/FirebaseCore/FirebaseCore.modulemap -Xcc -fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/FirebaseCoreExtension/FirebaseCoreExtension.modulemap -Xcc -fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/FirebaseCrashlytics/FirebaseCrashlytics.modulemap -Xcc -fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/FirebaseInstallations/FirebaseInstallations.modulemap -Xcc -fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/FirebaseSessionsObjC/FirebaseSessionsObjC.modulemap -Xcc -fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/GoogleAdsOnDeviceConversionTarget/GoogleAdsOnDeviceConversionTarget.modulemap -Xcc -fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/GoogleAppMeasurementTarget/GoogleAppMeasurementTarget.modulemap -Xcc -fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/GoogleDataTransport/GoogleDataTransport.modulemap -Xcc -fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/GoogleUtilities_AppDelegateSwizzler/GoogleUtilities_AppDelegateSwizzler.modulemap -Xcc -fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/GoogleUtilities_Environment/GoogleUtilities_Environment.modulemap -Xcc -fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/GoogleUtilities_Logger/GoogleUtilities_Logger.modulemap -Xcc -fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/GoogleUtilities_MethodSwizzler/GoogleUtilities_MethodSwizzler.modulemap -Xcc -fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/GoogleUtilities_NSData/GoogleUtilities_NSData.modulemap -Xcc -fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/GoogleUtilities_Network/GoogleUtilities_Network.modulemap -Xcc -fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/GoogleUtilities_Reachability/GoogleUtilities_Reachability.modulemap -Xcc -fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/GoogleUtilities_UserDefaults/GoogleUtilities_UserDefaults.modulemap -Xcc -fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/nanopb/nanopb.modulemap -Xcc -fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/third_party_IsAppEncrypted/third_party_IsAppEncrypted.modulemap";
PRODUCT_BUNDLE_IDENTIFIER = "$(PRODUCT_BUNDLE_IDENTIFIER)";
PRODUCT_NAME = App;
SDKROOT = iphoneos;
@@ -1018,6 +988,7 @@
isa = XCBuildConfiguration;
buildSettings = {
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
+ CODE_SIGN_ENTITLEMENTS = App.entitlements;
CODE_SIGN_IDENTITY = "iPhone Developer";
ENABLE_PREVIEWS = YES;
FRAMEWORK_SEARCH_PATHS = (
@@ -1087,53 +1058,11 @@
"-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/nanopb/nanopb.modulemap",
"-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/third_party_IsAppEncrypted/third_party_IsAppEncrypted.modulemap",
);
- OTHER_SWIFT_FLAGS = (
+ OTHER_LDFLAGS = (
"$(inherited)",
- "-Xcc",
- "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/checkouts/firebase-ios-sdk/CoreOnly/Sources/module.modulemap",
- "-Xcc",
- "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/checkouts/promises/Sources/FBLPromises/include/module.modulemap",
- "-Xcc",
- "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/FirebaseAnalyticsTarget/FirebaseAnalyticsTarget.modulemap",
- "-Xcc",
- "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/FirebaseAnalyticsWrapper/FirebaseAnalyticsWrapper.modulemap",
- "-Xcc",
- "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/FirebaseCore/FirebaseCore.modulemap",
- "-Xcc",
- "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/FirebaseCoreExtension/FirebaseCoreExtension.modulemap",
- "-Xcc",
- "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/FirebaseCrashlytics/FirebaseCrashlytics.modulemap",
- "-Xcc",
- "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/FirebaseInstallations/FirebaseInstallations.modulemap",
- "-Xcc",
- "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/FirebaseSessionsObjC/FirebaseSessionsObjC.modulemap",
- "-Xcc",
- "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/GoogleAdsOnDeviceConversionTarget/GoogleAdsOnDeviceConversionTarget.modulemap",
- "-Xcc",
- "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/GoogleAppMeasurementTarget/GoogleAppMeasurementTarget.modulemap",
- "-Xcc",
- "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/GoogleDataTransport/GoogleDataTransport.modulemap",
- "-Xcc",
- "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/GoogleUtilities_AppDelegateSwizzler/GoogleUtilities_AppDelegateSwizzler.modulemap",
- "-Xcc",
- "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/GoogleUtilities_Environment/GoogleUtilities_Environment.modulemap",
- "-Xcc",
- "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/GoogleUtilities_Logger/GoogleUtilities_Logger.modulemap",
- "-Xcc",
- "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/GoogleUtilities_MethodSwizzler/GoogleUtilities_MethodSwizzler.modulemap",
- "-Xcc",
- "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/GoogleUtilities_NSData/GoogleUtilities_NSData.modulemap",
- "-Xcc",
- "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/GoogleUtilities_Network/GoogleUtilities_Network.modulemap",
- "-Xcc",
- "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/GoogleUtilities_Reachability/GoogleUtilities_Reachability.modulemap",
- "-Xcc",
- "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/GoogleUtilities_UserDefaults/GoogleUtilities_UserDefaults.modulemap",
- "-Xcc",
- "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/nanopb/nanopb.modulemap",
- "-Xcc",
- "-fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/third_party_IsAppEncrypted/third_party_IsAppEncrypted.modulemap",
+ "-L$(DT_TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)",
);
+ OTHER_SWIFT_FLAGS = "$(inherited) -Xcc -fmodule-map-file=$(SRCROOT)/../../Tuist/.build/checkouts/firebase-ios-sdk/CoreOnly/Sources/module.modulemap -Xcc -fmodule-map-file=$(SRCROOT)/../../Tuist/.build/checkouts/promises/Sources/FBLPromises/include/module.modulemap -Xcc -fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/FirebaseAnalyticsTarget/FirebaseAnalyticsTarget.modulemap -Xcc -fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/FirebaseAnalyticsWrapper/FirebaseAnalyticsWrapper.modulemap -Xcc -fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/FirebaseCore/FirebaseCore.modulemap -Xcc -fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/FirebaseCoreExtension/FirebaseCoreExtension.modulemap -Xcc -fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/FirebaseCrashlytics/FirebaseCrashlytics.modulemap -Xcc -fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/FirebaseInstallations/FirebaseInstallations.modulemap -Xcc -fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/FirebaseSessionsObjC/FirebaseSessionsObjC.modulemap -Xcc -fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/GoogleAdsOnDeviceConversionTarget/GoogleAdsOnDeviceConversionTarget.modulemap -Xcc -fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/GoogleAppMeasurementTarget/GoogleAppMeasurementTarget.modulemap -Xcc -fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/GoogleDataTransport/GoogleDataTransport.modulemap -Xcc -fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/GoogleUtilities_AppDelegateSwizzler/GoogleUtilities_AppDelegateSwizzler.modulemap -Xcc -fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/GoogleUtilities_Environment/GoogleUtilities_Environment.modulemap -Xcc -fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/GoogleUtilities_Logger/GoogleUtilities_Logger.modulemap -Xcc -fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/GoogleUtilities_MethodSwizzler/GoogleUtilities_MethodSwizzler.modulemap -Xcc -fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/GoogleUtilities_NSData/GoogleUtilities_NSData.modulemap -Xcc -fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/GoogleUtilities_Network/GoogleUtilities_Network.modulemap -Xcc -fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/GoogleUtilities_Reachability/GoogleUtilities_Reachability.modulemap -Xcc -fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/GoogleUtilities_UserDefaults/GoogleUtilities_UserDefaults.modulemap -Xcc -fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/nanopb/nanopb.modulemap -Xcc -fmodule-map-file=$(SRCROOT)/../../Tuist/.build/tuist-derived/third_party_IsAppEncrypted/third_party_IsAppEncrypted.modulemap";
PRODUCT_BUNDLE_IDENTIFIER = "$(PRODUCT_BUNDLE_IDENTIFIER)";
PRODUCT_NAME = App;
SDKROOT = iphoneos;
diff --git a/Modules/App/App.xcodeproj/xcuserdata/minjae.xcuserdatad/xcschemes/xcschememanagement.plist b/Modules/App/App.xcodeproj/xcuserdata/minjae.xcuserdatad/xcschemes/xcschememanagement.plist
index 652100b7..1318fe78 100644
--- a/Modules/App/App.xcodeproj/xcuserdata/minjae.xcuserdatad/xcschemes/xcschememanagement.plist
+++ b/Modules/App/App.xcodeproj/xcuserdata/minjae.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -16,7 +16,7 @@
isShown
orderHint
- 30
+ 32
diff --git a/Modules/App/Project.swift b/Modules/App/Project.swift
index 07318d7e..17a53177 100644
--- a/Modules/App/Project.swift
+++ b/Modules/App/Project.swift
@@ -38,6 +38,7 @@ let project = Project(
infoPlist: .extendingDefault(
with: [
"API_BASE_URL": "$(API_BASE_URL)",
+ "KAKAO_NATIVE_APP_KEY": "$(KAKAO_NATIVE_APP_KEY)",
"CFBundleDisplayName": "$(APP_DISPLAY_NAME)",
"CFBundleShortVersionString": "$(MARKETING_VERSION)",
"CFBundleVersion": "$(CURRENT_PROJECT_VERSION)",
@@ -68,13 +69,24 @@ let project = Project(
[
"CFBundleURLName": "$(PRODUCT_BUNDLE_IDENTIFIER)",
"CFBundleURLSchemes": ["newdok"]
+ ],
+ [
+ "CFBundleURLName": "kakao",
+ "CFBundleURLSchemes": ["kakao$(KAKAO_NATIVE_APP_KEY)"]
]
],
+ "LSApplicationQueriesSchemes": [
+ "kakaokompassauth",
+ "kakaotalk",
+ "kakaolink",
+ "kakaoplus"
+ ],
"ITSAppUsesNonExemptEncryption": false
]
),
sources: ["Sources/**"],
resources: ["Resources/**"],
+ entitlements: "App.entitlements",
dependencies: [
// Infrastructure
.networkKit,
diff --git a/Modules/App/Sources/DI/AppContainer.swift b/Modules/App/Sources/DI/AppContainer.swift
index 56128ab9..1601c7f8 100644
--- a/Modules/App/Sources/DI/AppContainer.swift
+++ b/Modules/App/Sources/DI/AppContainer.swift
@@ -95,6 +95,7 @@ final class AppContainer {
onBack: @escaping () -> Void,
onRecovery: @escaping () -> Void,
onSignup: @escaping () -> Void,
+ onNeedSignup: @escaping (String, String?) -> Void,
onAuthenticated: @escaping () -> Void
) -> some View {
authBuilder.makeLoginView(
@@ -102,17 +103,22 @@ final class AppContainer {
onBack: onBack,
onRecovery: onRecovery,
onSignup: onSignup,
+ onNeedSignup: onNeedSignup,
onAuthenticated: onAuthenticated
)
}
func makeSignupView(
+ signupToken: String,
+ nickname: String?,
onBack: @escaping () -> Void,
onLogin: @escaping () -> Void,
onRecovery: @escaping () -> Void,
onAuthenticated: @escaping () -> Void
) -> some View {
authBuilder.makeSignupView(
+ signupToken: signupToken,
+ nickname: nickname,
onBack: onBack,
onLogin: onLogin,
onRecovery: onRecovery,
diff --git a/Modules/App/Sources/Navigation/AuthFlow.swift b/Modules/App/Sources/Navigation/AuthFlow.swift
index 790c1709..eeb96a1f 100644
--- a/Modules/App/Sources/Navigation/AuthFlow.swift
+++ b/Modules/App/Sources/Navigation/AuthFlow.swift
@@ -20,8 +20,9 @@ struct AuthFlow: View {
private func routeView(_ route: AuthRoute) -> some View {
switch route {
case .onboarding:
+ // 소셜 로그인: 직접 회원가입 진입 없음 — 회원가입 버튼도 로그인 화면으로
container.makeOnboardingView(
- onSignup: { router.push(.signup) },
+ onSignup: { router.push(.login) },
onLogin: { router.push(.login) }
)
case .login:
@@ -29,11 +30,16 @@ struct AuthFlow: View {
canGoBack: !router.path.isEmpty,
onBack: { router.pop() },
onRecovery: { router.push(.recovery) },
- onSignup: { router.push(.signup) },
+ onSignup: { router.push(.login) },
+ onNeedSignup: { token, nickname in
+ router.push(.signup(signupToken: token, nickname: nickname))
+ },
onAuthenticated: { coordinator.finishAuth() }
)
- case .signup:
+ case let .signup(token, nickname):
container.makeSignupView(
+ signupToken: token,
+ nickname: nickname,
onBack: { router.pop() },
onLogin: { router.push(.login) },
onRecovery: { router.push(.recovery) },
@@ -42,7 +48,7 @@ struct AuthFlow: View {
case .recovery:
container.makeRecoveryView(
onBack: { router.pop() },
- onSignup: { router.push(.signup) },
+ onSignup: { router.push(.login) },
onLogin: { router.push(.login) },
onServiceFeedback: { router.push(.serviceFeedback) }
)
diff --git a/Modules/App/Sources/Navigation/AuthRoute.swift b/Modules/App/Sources/Navigation/AuthRoute.swift
index 8d9fd199..639d4752 100644
--- a/Modules/App/Sources/Navigation/AuthRoute.swift
+++ b/Modules/App/Sources/Navigation/AuthRoute.swift
@@ -1,7 +1,7 @@
enum AuthRoute: Hashable, Identifiable {
case onboarding
case login
- case signup
+ case signup(signupToken: String, nickname: String?)
case recovery
case serviceFeedback
diff --git a/Modules/App/Sources/Tabs/BookmarkStack.swift b/Modules/App/Sources/Tabs/BookmarkStack.swift
index b7787a83..cdb17f91 100644
--- a/Modules/App/Sources/Tabs/BookmarkStack.swift
+++ b/Modules/App/Sources/Tabs/BookmarkStack.swift
@@ -36,7 +36,7 @@ struct BookmarkStack: View {
container.makeBrandDetailView(
id: id,
onBack: { coordinator.bookmarkRouter.pop() },
- onSignup: { coordinator.presentAuth(.signup) },
+ onSignup: { coordinator.presentAuth(.login) },
onGoHome: { coordinator.goHome() },
onArticleTap: { coordinator.bookmarkRouter.push(.articleDetail(id: $0, isPast: true)) }
)
diff --git a/Modules/App/Sources/Tabs/ExploreStack.swift b/Modules/App/Sources/Tabs/ExploreStack.swift
index 371298a4..050456a6 100644
--- a/Modules/App/Sources/Tabs/ExploreStack.swift
+++ b/Modules/App/Sources/Tabs/ExploreStack.swift
@@ -12,7 +12,7 @@ struct ExploreStack: View {
exploreTrigger: coordinator.exploreTrigger,
onConsumePending: { coordinator.consumeExploreParams() },
onSearch: { coordinator.exploreRouter.push(.search) },
- onSignup: { coordinator.presentAuth(.signup) },
+ onSignup: { coordinator.presentAuth(.login) },
onLogin: { coordinator.presentAuth(.login) },
onEditProfile: { coordinator.openEditProfile() },
onBrandTap: { coordinator.exploreRouter.push(.brandDetail(id: $0)) }
@@ -36,7 +36,7 @@ struct ExploreStack: View {
container.makeBrandDetailView(
id: id,
onBack: { coordinator.exploreRouter.pop() },
- onSignup: { coordinator.presentAuth(.signup) },
+ onSignup: { coordinator.presentAuth(.login) },
onGoHome: { coordinator.goHome() },
onArticleTap: { coordinator.exploreRouter.push(.articleDetail(id: $0, isPast: true)) }
)
diff --git a/Modules/App/Sources/Tabs/HomeStack.swift b/Modules/App/Sources/Tabs/HomeStack.swift
index a5535240..232c9aa8 100644
--- a/Modules/App/Sources/Tabs/HomeStack.swift
+++ b/Modules/App/Sources/Tabs/HomeStack.swift
@@ -11,7 +11,7 @@ struct HomeStack: View {
container.makeHomeView(
onArticleTap: { coordinator.homeRouter.push(.articleDetail(id: $0, isPast: false)) },
onSearch: { coordinator.homeRouter.push(.search) },
- onSignup: { coordinator.presentAuth(.signup) },
+ onSignup: { coordinator.presentAuth(.login) },
onLogin: { coordinator.presentAuth(.login) },
onGoToExplore: { day, tab in coordinator.moveToExplore(day: day, tab: tab) }
)
@@ -38,7 +38,7 @@ struct HomeStack: View {
container.makeBrandDetailView(
id: id,
onBack: { coordinator.homeRouter.pop() },
- onSignup: { coordinator.presentAuth(.signup) },
+ onSignup: { coordinator.presentAuth(.login) },
onGoHome: { coordinator.goHome() },
onArticleTap: { coordinator.homeRouter.push(.articleDetail(id: $0, isPast: true)) }
)
diff --git a/Modules/App/Sources/Tabs/SubscribeStack.swift b/Modules/App/Sources/Tabs/SubscribeStack.swift
index e342c802..27da2de5 100644
--- a/Modules/App/Sources/Tabs/SubscribeStack.swift
+++ b/Modules/App/Sources/Tabs/SubscribeStack.swift
@@ -32,7 +32,7 @@ struct SubscribeStack: View {
container.makeBrandDetailView(
id: id,
onBack: { coordinator.subscribeRouter.pop() },
- onSignup: { coordinator.presentAuth(.signup) },
+ onSignup: { coordinator.presentAuth(.login) },
onGoHome: { coordinator.goHome() },
onArticleTap: { coordinator.subscribeRouter.push(.articleDetail(id: $0, isPast: true)) }
)
diff --git a/Modules/DesignSystem/Derived/Sources/TuistAssets+DesignSystem.swift b/Modules/DesignSystem/Derived/Sources/TuistAssets+DesignSystem.swift
index 0feaa448..e2eeccee 100644
--- a/Modules/DesignSystem/Derived/Sources/TuistAssets+DesignSystem.swift
+++ b/Modules/DesignSystem/Derived/Sources/TuistAssets+DesignSystem.swift
@@ -44,6 +44,7 @@ public enum DesignSystemAsset: Sendable {
public static let font = DesignSystemImages(name: "font")
public static let highlight = DesignSystemImages(name: "highlight")
public static let home = DesignSystemImages(name: "home")
+ public static let kakaoBubble = DesignSystemImages(name: "kakaoBubble")
public static let letter = DesignSystemImages(name: "letter")
public static let logo = DesignSystemImages(name: "logo")
public static let mailbox = DesignSystemImages(name: "mailbox")
diff --git a/Modules/DesignSystem/Derived/Sources/TuistBundle+DesignSystem.swift b/Modules/DesignSystem/Derived/Sources/TuistBundle+DesignSystem.swift
index 2d4b511f..7ffa9857 100644
--- a/Modules/DesignSystem/Derived/Sources/TuistBundle+DesignSystem.swift
+++ b/Modules/DesignSystem/Derived/Sources/TuistBundle+DesignSystem.swift
@@ -8,59 +8,49 @@ public import Foundation
#else
import Foundation
#endif
-// MARK: - Swift Bundle Accessor for Static Frameworks
+// MARK: - Swift Bundle Accessor - for SPM
+private class BundleFinder {}
extension Foundation.Bundle {
-/// Since DesignSystem is a static framework, a cut down framework is embedded, with all the resources but only a stub Mach-O image.
+/// Since DesignSystem is a static framework, the bundle containing the resources is copied into the final product.
static let module: Bundle = {
- class BundleFinder {}
- let hostBundle = Bundle(for: BundleFinder.self)
- var candidates: [URL?] = [
- hostBundle.privateFrameworksURL,
- hostBundle.bundleURL.appendingPathComponent("Frameworks"),
- hostBundle.bundleURL,
- hostBundle.bundleURL.deletingLastPathComponent(),
- hostBundle.resourceURL,
- Bundle.main.privateFrameworksURL,
- Bundle.main.bundleURL.appendingPathComponent("Frameworks"),
- Bundle.main.bundleURL,
- Bundle.main.resourceURL,
- // App extensions are placed under PlugIns/ in the host app bundle.
- // Navigate up from the extension to the containing app's Frameworks directory.
- hostBundle.bundleURL.deletingLastPathComponent().deletingLastPathComponent().appendingPathComponent("Frameworks"),
- ].map({ $0?.appendingPathComponent("DesignSystem.framework") })
-
- for candidate in candidates {
- if let bundle = candidate.flatMap(Bundle.init(url:)) {
- return bundle
- }
- }
-
- var bundleCandidates: [URL?] = [
- hostBundle.resourceURL,
- hostBundle.bundleURL,
- hostBundle.privateFrameworksURL,
- hostBundle.bundleURL.appendingPathComponent("Frameworks"),
- hostBundle.bundleURL.deletingLastPathComponent(),
+ let bundleName = "DesignSystem_DesignSystem"
+ let bundleFinderResourceURL = Bundle(for: BundleFinder.self).resourceURL
+ var candidates = [
Bundle.main.resourceURL,
+ bundleFinderResourceURL,
Bundle.main.bundleURL,
- Bundle.main.privateFrameworksURL,
- Bundle.main.bundleURL.appendingPathComponent("Frameworks"),
- hostBundle.bundleURL.deletingLastPathComponent().deletingLastPathComponent().appendingPathComponent("Frameworks"),
]
- if ProcessInfo.processInfo.processName == "xctest"
- || ProcessInfo.processInfo.processName == "swift-testing"
- {
- bundleCandidates.append(hostBundle.bundleURL.appendingPathComponent(".."))
+ // This is a fix to make Previews work with bundled resources.
+ // Logic here is taken from SPM's generated `resource_bundle_accessors.swift` file,
+ // which is located under the derived data directory after building the project.
+ if let override = ProcessInfo.processInfo.environment["PACKAGE_RESOURCE_BUNDLE_PATH"] {
+ candidates.append(URL(fileURLWithPath: override))
+ // Deleting derived data and not rebuilding the frameworks containing resources may result in a state
+ // where the bundles are only available in the framework's directory that is actively being previewed.
+ // Since we don't know which framework this is, we also need to look in all the framework subpaths.
+ if let subpaths = try? Foundation.FileManager.default.contentsOfDirectory(atPath: override) {
+ for subpath in subpaths {
+ if subpath.hasSuffix(".framework") {
+ candidates.append(URL(fileURLWithPath: override + "/" + subpath))
+ }
+ }
+ }
}
- for candidate in bundleCandidates {
- let bundlePath = candidate?.appendingPathComponent("DesignSystem_DesignSystem.bundle")
+ // This is a fix to make unit tests work with bundled resources.
+ // Making this change allows unit tests to search one directory up for a bundle.
+ // More context can be found in this PR: https://github.com/tuist/tuist/pull/6895
+ #if canImport(XCTest)
+ candidates.append(bundleFinderResourceURL?.appendingPathComponent(".."))
+ #endif
+
+ for candidate in candidates {
+ let bundlePath = candidate?.appendingPathComponent(bundleName + ".bundle")
if let bundle = bundlePath.flatMap(Bundle.init(url:)) {
return bundle
}
}
-
- return Bundle.main
+ fatalError("unable to find bundle named DesignSystem_DesignSystem")
}()
}
// MARK: - Objective-C Bundle Accessor
diff --git a/Modules/DesignSystem/DesignSystem.xcodeproj/project.pbxproj b/Modules/DesignSystem/DesignSystem.xcodeproj/project.pbxproj
index 2a6d31e0..ffd6a19d 100644
--- a/Modules/DesignSystem/DesignSystem.xcodeproj/project.pbxproj
+++ b/Modules/DesignSystem/DesignSystem.xcodeproj/project.pbxproj
@@ -8,23 +8,23 @@
/* Begin PBXBuildFile section */
07AB90021A70B1D55E233DDA /* NoDataView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AF6A52DBE12C84500829BA2 /* NoDataView.swift */; };
- 0BFDC77A09ED37206E78FD25 /* SpoqaHanSansNeo-Light.otf in Resources */ = {isa = PBXBuildFile; fileRef = D45E4F8E9B8A1813A5ADE0C1 /* SpoqaHanSansNeo-Light.otf */; };
10CD774838BC725239E13F32 /* ServerErrorPopupView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB10DEC593FE87C6FF2F2CEF /* ServerErrorPopupView.swift */; };
- 13DF60422EC2F2B2EBA47DB5 /* SpoqaHanSansNeo-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = 56DFA51B1676775D07DC3DD2 /* SpoqaHanSansNeo-Regular.otf */; };
17F1EA7C9E3FF456C6E7A249 /* DesignToken.swift in Sources */ = {isa = PBXBuildFile; fileRef = 492AE22B6B053E92F864EFAD /* DesignToken.swift */; };
1A358594D74B1F60E1BF9612 /* SubscribeCheckPopupView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 470F5079EDDB033641E50DED /* SubscribeCheckPopupView.swift */; };
1FA24D3FDDFF21AFE5CFC0D9 /* NetworkErrorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 43927DC076C8D16C0564FAD5 /* NetworkErrorView.swift */; };
+ 222061C7A7A3B1724EA3FFF4 /* SpoqaHanSansNeo-Medium.otf in Resources */ = {isa = PBXBuildFile; fileRef = 3A89362609648144517CFE75 /* SpoqaHanSansNeo-Medium.otf */; };
25340958D416067BB478FB71 /* Kingfisher.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 28746752247E3911CD5C3C07 /* Kingfisher.framework */; };
2C2A6F1B0843699ACFE53D23 /* TuistFonts+DesignSystem.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1489E7809DA4DADA471C2CDC /* TuistFonts+DesignSystem.swift */; };
- 317C16F03A5E8BF0EA256954 /* SpoqaHanSansNeo-Medium.otf in Resources */ = {isa = PBXBuildFile; fileRef = 3A89362609648144517CFE75 /* SpoqaHanSansNeo-Medium.otf */; };
+ 2EDDF3D2C0A79069831FB1B8 /* SpoqaHanSansNeo-Light.otf in Resources */ = {isa = PBXBuildFile; fileRef = D45E4F8E9B8A1813A5ADE0C1 /* SpoqaHanSansNeo-Light.otf */; };
3C49F77F8ACF1FC3BD37A181 /* LoadingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9ED3D8DA640FE3624B7ACF45 /* LoadingView.swift */; };
41412A573756BE6C91B6AA4D /* ToastView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1516FE4B1E4C70074B90CC52 /* ToastView.swift */; };
4A114BB04ACEC0F11EF431BE /* CheckIsSubscribeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8855864E885ED8AA71D9183 /* CheckIsSubscribeView.swift */; };
- 4C768B0DAB889891D8E0145C /* SpoqaHanSansNeo-Bold.otf in Resources */ = {isa = PBXBuildFile; fileRef = 1CFCDF29DFB293A9C3F9D6D9 /* SpoqaHanSansNeo-Bold.otf */; };
+ 4B40701BFDF0C8C2E2EEB8C2 /* load.gif in Resources */ = {isa = PBXBuildFile; fileRef = 48854A6B16F3CFBA5DA0F0AD /* load.gif */; };
4D1C8FAC5AA3A85D2B2BFAAF /* Color+Extension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B424097EED4FD25BE22C5E1 /* Color+Extension.swift */; };
574EA4DB241751A576797002 /* NotRegisteredIdPopupView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDF5531123A3004A8540D621 /* NotRegisteredIdPopupView.swift */; };
640485EA967CD4669600CD37 /* SwipeBackHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71BC3474A53F2F77D7EB19EC /* SwipeBackHandler.swift */; };
654333589294F1C702FC438B /* Shared.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 56A7772AA0518B04428BE5C5 /* Shared.framework */; };
+ 6730CF576CD7C88793997534 /* Assets.xcassets in Sources */ = {isa = PBXBuildFile; fileRef = 4F6AF114A38FDBD9663A6B1B /* Assets.xcassets */; };
68B44B93AD7ED2B47CD71A4A /* SubscribeGuestAlertView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F04616C3C5DB23A49097D3BF /* SubscribeGuestAlertView.swift */; };
6F4DC4FB98D3EF58306E1CDA /* BackButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 86103BCC821FCC1FE2B9F3CD /* BackButton.swift */; };
70C7D51B82F95045C9DDF2D0 /* LottieView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F249E8F2A7648435125CF681 /* LottieView.swift */; };
@@ -37,28 +37,39 @@
90D6A5AEB9B8DACDEBE64A29 /* SystemErrorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE683B09BDE84B3483EE6137 /* SystemErrorView.swift */; };
963BD2E45D7172CE4BF69364 /* VerificationButtonStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84DEFF305135085B93F19593 /* VerificationButtonStyle.swift */; };
995B9101E7615E81051315F2 /* ServerErrorPopupModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1C99E8042EF39E3FF60FBED8 /* ServerErrorPopupModifier.swift */; };
- 99AD012E16AE91B0DA8273E7 /* SpoqaHanSansNeo-Thin.otf in Resources */ = {isa = PBXBuildFile; fileRef = 1EAA4A417D2996F4DF2DED40 /* SpoqaHanSansNeo-Thin.otf */; };
A202EC13E48DCA48C5318D26 /* PopupView.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B6654808CA89C3FC25B33948 /* PopupView.framework */; };
+ A34723E76FBB0E7BC50177C2 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4F6AF114A38FDBD9663A6B1B /* Assets.xcassets */; };
AB862E59C188B650427CF4E2 /* LoadingDotsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 531101C9CF4F7EADA8C4F207 /* LoadingDotsView.swift */; };
ABB14811E13F7B1ECCF8B086 /* TuistAssets+DesignSystem.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5263BC75B281154AC0B5A7B /* TuistAssets+DesignSystem.swift */; };
BC4360B914A0E6C10A4A851E /* CheckSubscribeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9CF8A496C7E691DCF3A7C603 /* CheckSubscribeView.swift */; };
BDD988384DEC9A8C4E1B5F71 /* PullToRefreshView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 480127A043369072FC6A4A0E /* PullToRefreshView.swift */; };
C35D008C753D8412BCE4632E /* EmailInfoModalView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0409EEB7627BF07C31330B2A /* EmailInfoModalView.swift */; };
+ C5ED47454F1440981737F4E0 /* SpoqaHanSansNeo-Regular.otf in Resources */ = {isa = PBXBuildFile; fileRef = 56DFA51B1676775D07DC3DD2 /* SpoqaHanSansNeo-Regular.otf */; };
C762D2313D50B4F194A883EA /* SubscribeModalView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CE5A82649FDA27AE6DC525DF /* SubscribeModalView.swift */; };
- C76B2F629431891F99DAB0A3 /* load.gif in Resources */ = {isa = PBXBuildFile; fileRef = 48854A6B16F3CFBA5DA0F0AD /* load.gif */; };
D077CFC5DD281F26BDA2376F /* AuthFailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41950894E4E9C8FF11201792 /* AuthFailView.swift */; };
- D2E21543F5B3B63472BE98A1 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 4F6AF114A38FDBD9663A6B1B /* Assets.xcassets */; };
D35DFD63D8CD70868B230DA2 /* CustomTextFieldModifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B4CDA86843A89A3AD229E60 /* CustomTextFieldModifier.swift */; };
D748D56D7CAC703E51B32DD4 /* CalendarPopupView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 743901F00E06BB210FBD1E5B /* CalendarPopupView.swift */; };
E3003B318BD827C1E876F9C9 /* UnsubscribePopupView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0A1DCEB0845AC2B2D687FA2A /* UnsubscribePopupView.swift */; };
E4DAAFF70B6D667729E15EDE /* LoginErrorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A3CC877F7AECA4386F75D208 /* LoginErrorView.swift */; };
+ E581A24F3469865C4F8CB742 /* SpoqaHanSansNeo-Thin.otf in Resources */ = {isa = PBXBuildFile; fileRef = 1EAA4A417D2996F4DF2DED40 /* SpoqaHanSansNeo-Thin.otf */; };
E76992BBB4AB0B14426864B0 /* OverlayRootView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C8C517C8B4DCEC79C458B727 /* OverlayRootView.swift */; };
EA14ADB3FF1DCA11D8B9D962 /* ColorPalette.swift in Sources */ = {isa = PBXBuildFile; fileRef = BFD516035027585AFC53F053 /* ColorPalette.swift */; };
EBF8A05ADDF1FF48833C370E /* BirthYearPickerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4B7519630D4BA8D550F1D471 /* BirthYearPickerView.swift */; };
F6018B5F7748E322214C52D6 /* TuistBundle+DesignSystem.swift in Sources */ = {isa = PBXBuildFile; fileRef = BE4AD9735556ECA8C8008FEC /* TuistBundle+DesignSystem.swift */; };
F69B0539C8191095A861614C /* SubscribeStatePopupView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CCE4C52744BC5AEDA5913B79 /* SubscribeStatePopupView.swift */; };
+ F8D28129A82E22B7978D772C /* SpoqaHanSansNeo-Bold.otf in Resources */ = {isa = PBXBuildFile; fileRef = 1CFCDF29DFB293A9C3F9D6D9 /* SpoqaHanSansNeo-Bold.otf */; };
/* End PBXBuildFile section */
+/* Begin PBXContainerItemProxy section */
+ 4A4956649CBDCC6BF0221AD1 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = F639F9585E77B0BBBB642E14 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = C777EA7684CF3B97BE76C38C;
+ remoteInfo = DesignSystem_DesignSystem;
+ };
+/* End PBXContainerItemProxy section */
+
/* Begin PBXCopyFilesBuildPhase section */
261A68F06D4B4813FC5879A5 /* Dependencies */ = {
isa = PBXCopyFilesBuildPhase;
@@ -70,6 +81,16 @@
name = Dependencies;
runOnlyForDeploymentPostprocessing = 1;
};
+ 3FBA6A1C0FF2C099107F7C40 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
49C4A8593835DDF36FBC2A05 /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
@@ -97,6 +118,7 @@
28746752247E3911CD5C3C07 /* Kingfisher.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Kingfisher.framework; sourceTree = BUILT_PRODUCTS_DIR; };
3A89362609648144517CFE75 /* SpoqaHanSansNeo-Medium.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SpoqaHanSansNeo-Medium.otf"; sourceTree = ""; };
41950894E4E9C8FF11201792 /* AuthFailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthFailView.swift; sourceTree = ""; };
+ 42D7C40704F4FCBCDB855667 /* DesignSystem_DesignSystem.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DesignSystem_DesignSystem.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
43927DC076C8D16C0564FAD5 /* NetworkErrorView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NetworkErrorView.swift; sourceTree = ""; };
470F5079EDDB033641E50DED /* SubscribeCheckPopupView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubscribeCheckPopupView.swift; sourceTree = ""; };
480127A043369072FC6A4A0E /* PullToRefreshView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PullToRefreshView.swift; sourceTree = ""; };
@@ -132,12 +154,20 @@
CE5A82649FDA27AE6DC525DF /* SubscribeModalView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubscribeModalView.swift; sourceTree = ""; };
D45E4F8E9B8A1813A5ADE0C1 /* SpoqaHanSansNeo-Light.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SpoqaHanSansNeo-Light.otf"; sourceTree = ""; };
D8855864E885ED8AA71D9183 /* CheckIsSubscribeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CheckIsSubscribeView.swift; sourceTree = ""; };
+ DDA12AD00E98A3497D3A729E /* DesignSystem_DesignSystem-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "DesignSystem_DesignSystem-Info.plist"; sourceTree = ""; };
DE683B09BDE84B3483EE6137 /* SystemErrorView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SystemErrorView.swift; sourceTree = ""; };
F04616C3C5DB23A49097D3BF /* SubscribeGuestAlertView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubscribeGuestAlertView.swift; sourceTree = ""; };
F249E8F2A7648435125CF681 /* LottieView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LottieView.swift; sourceTree = ""; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
+ 1964AC1CF76FA8EBDF2A15A1 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
21D2E38EFDFDB350406F7982 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
@@ -238,6 +268,7 @@
82664F67710540CBDEBE5B11 /* Products */ = {
isa = PBXGroup;
children = (
+ 42D7C40704F4FCBCDB855667 /* DesignSystem_DesignSystem.bundle */,
69B7BBEAD5472C7195924AC8 /* DesignSystem.framework */,
28746752247E3911CD5C3C07 /* Kingfisher.framework */,
B6654808CA89C3FC25B33948 /* PopupView.framework */,
@@ -347,6 +378,7 @@
F2F0D6EECE384EBEC3AFDEB4 /* InfoPlists */ = {
isa = PBXGroup;
children = (
+ DDA12AD00E98A3497D3A729E /* DesignSystem_DesignSystem-Info.plist */,
8937FA9427EEA938B58C5B3E /* DesignSystem-Info.plist */,
);
path = InfoPlists;
@@ -376,6 +408,7 @@
buildRules = (
);
dependencies = (
+ 5EE60265510B17C28AE5EBA4 /* PBXTargetDependency */,
);
name = DesignSystem;
packageProductDependencies = (
@@ -384,6 +417,26 @@
productReference = 69B7BBEAD5472C7195924AC8 /* DesignSystem.framework */;
productType = "com.apple.product-type.framework";
};
+ C777EA7684CF3B97BE76C38C /* DesignSystem_DesignSystem */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 05AE9C11574FFE2195EAFA90 /* Build configuration list for PBXNativeTarget "DesignSystem_DesignSystem" */;
+ buildPhases = (
+ 97B9A85DB0C77866043716C8 /* Sources */,
+ B43C3DC03910608BAD041023 /* Resources */,
+ 1964AC1CF76FA8EBDF2A15A1 /* Frameworks */,
+ 3FBA6A1C0FF2C099107F7C40 /* Embed Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = DesignSystem_DesignSystem;
+ packageProductDependencies = (
+ );
+ productName = DesignSystem_DesignSystem;
+ productReference = 42D7C40704F4FCBCDB855667 /* DesignSystem_DesignSystem.bundle */;
+ productType = "com.apple.product-type.bundle";
+ };
/* End PBXNativeTarget section */
/* Begin PBXProject section */
@@ -409,6 +462,7 @@
projectRoot = "";
targets = (
83C9B5D1938C22907FF6E247 /* DesignSystem */,
+ C777EA7684CF3B97BE76C38C /* DesignSystem_DesignSystem */,
);
};
/* End PBXProject section */
@@ -418,19 +472,33 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- D2E21543F5B3B63472BE98A1 /* Assets.xcassets in Resources */,
- 4C768B0DAB889891D8E0145C /* SpoqaHanSansNeo-Bold.otf in Resources */,
- 0BFDC77A09ED37206E78FD25 /* SpoqaHanSansNeo-Light.otf in Resources */,
- 317C16F03A5E8BF0EA256954 /* SpoqaHanSansNeo-Medium.otf in Resources */,
- 13DF60422EC2F2B2EBA47DB5 /* SpoqaHanSansNeo-Regular.otf in Resources */,
- 99AD012E16AE91B0DA8273E7 /* SpoqaHanSansNeo-Thin.otf in Resources */,
- C76B2F629431891F99DAB0A3 /* load.gif in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ B43C3DC03910608BAD041023 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ A34723E76FBB0E7BC50177C2 /* Assets.xcassets in Resources */,
+ F8D28129A82E22B7978D772C /* SpoqaHanSansNeo-Bold.otf in Resources */,
+ 2EDDF3D2C0A79069831FB1B8 /* SpoqaHanSansNeo-Light.otf in Resources */,
+ 222061C7A7A3B1724EA3FFF4 /* SpoqaHanSansNeo-Medium.otf in Resources */,
+ C5ED47454F1440981737F4E0 /* SpoqaHanSansNeo-Regular.otf in Resources */,
+ E581A24F3469865C4F8CB742 /* SpoqaHanSansNeo-Thin.otf in Resources */,
+ 4B40701BFDF0C8C2E2EEB8C2 /* load.gif in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
+ 97B9A85DB0C77866043716C8 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
BA6DF36C53063F00B80115EA /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
@@ -438,6 +506,7 @@
ABB14811E13F7B1ECCF8B086 /* TuistAssets+DesignSystem.swift in Sources */,
F6018B5F7748E322214C52D6 /* TuistBundle+DesignSystem.swift in Sources */,
2C2A6F1B0843699ACFE53D23 /* TuistFonts+DesignSystem.swift in Sources */,
+ 6730CF576CD7C88793997534 /* Assets.xcassets in Sources */,
6F4DC4FB98D3EF58306E1CDA /* BackButton.swift in Sources */,
963BD2E45D7172CE4BF69364 /* VerificationButtonStyle.swift in Sources */,
4D1C8FAC5AA3A85D2B2BFAAF /* Color+Extension.swift in Sources */,
@@ -480,7 +549,43 @@
};
/* End PBXSourcesBuildPhase section */
+/* Begin PBXTargetDependency section */
+ 5EE60265510B17C28AE5EBA4 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ name = DesignSystem_DesignSystem;
+ target = C777EA7684CF3B97BE76C38C /* DesignSystem_DesignSystem */;
+ targetProxy = 4A4956649CBDCC6BF0221AD1 /* PBXContainerItemProxy */;
+ };
+/* End PBXTargetDependency section */
+
/* Begin XCBuildConfiguration section */
+ 06FE36F5BCD04B71D2901212 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGNING_ALLOWED = NO;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ GENERATE_MASTER_OBJECT_FILE = NO;
+ INFOPLIST_FILE = "Derived/InfoPlists/DesignSystem_DesignSystem-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 18.0;
+ PRODUCT_BUNDLE_IDENTIFIER = com.newdok.designsystem.generated.resources;
+ PRODUCT_NAME = DesignSystem_DesignSystem;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;
+ 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,2";
+ VERSIONING_SYSTEM = "";
+ };
+ name = Debug;
+ };
0C02DEECDC95653FCDD00F9F /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -499,6 +604,7 @@
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
+ PACKAGE_RESOURCE_BUNDLE_NAME = DesignSystem_DesignSystem;
PRODUCT_BUNDLE_IDENTIFIER = com.newdok.designsystem;
PRODUCT_NAME = DesignSystem;
SDKROOT = iphoneos;
@@ -539,6 +645,7 @@
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
+ PACKAGE_RESOURCE_BUNDLE_NAME = DesignSystem_DesignSystem;
PRODUCT_BUNDLE_IDENTIFIER = com.newdok.designsystem;
PRODUCT_NAME = DesignSystem;
SDKROOT = iphoneos;
@@ -616,6 +723,29 @@
};
name = Debug;
};
+ 85B6B79ADD7A4E7548F316CC /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGNING_ALLOWED = NO;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ GENERATE_MASTER_OBJECT_FILE = NO;
+ INFOPLIST_FILE = "Derived/InfoPlists/DesignSystem_DesignSystem-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 18.0;
+ PRODUCT_BUNDLE_IDENTIFIER = com.newdok.designsystem.generated.resources;
+ PRODUCT_NAME = DesignSystem_DesignSystem;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-O";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VERSIONING_SYSTEM = "";
+ };
+ name = Release;
+ };
88DC404DB5E70F332291F97C /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -672,6 +802,15 @@
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
+ 05AE9C11574FFE2195EAFA90 /* Build configuration list for PBXNativeTarget "DesignSystem_DesignSystem" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 06FE36F5BCD04B71D2901212 /* Debug */,
+ 85B6B79ADD7A4E7548F316CC /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
5C0CBBA2BFE0CEE21375AF0A /* Build configuration list for PBXProject "DesignSystem" */ = {
isa = XCConfigurationList;
buildConfigurations = (
diff --git a/Modules/DesignSystem/DesignSystem.xcodeproj/xcuserdata/minjae.xcuserdatad/xcschemes/xcschememanagement.plist b/Modules/DesignSystem/DesignSystem.xcodeproj/xcuserdata/minjae.xcuserdatad/xcschemes/xcschememanagement.plist
index dc4e9aa9..cadebdd0 100644
--- a/Modules/DesignSystem/DesignSystem.xcodeproj/xcuserdata/minjae.xcuserdatad/xcschemes/xcschememanagement.plist
+++ b/Modules/DesignSystem/DesignSystem.xcodeproj/xcuserdata/minjae.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -11,6 +11,13 @@
orderHint
9
+ DesignSystem_DesignSystem.xcscheme_^#shared#^_
+
+ isShown
+
+ orderHint
+ 10
+
diff --git a/Modules/DesignSystem/Resources/Assets.xcassets/kakaoBubble.imageset/Contents.json b/Modules/DesignSystem/Resources/Assets.xcassets/kakaoBubble.imageset/Contents.json
new file mode 100644
index 00000000..be4b98c0
--- /dev/null
+++ b/Modules/DesignSystem/Resources/Assets.xcassets/kakaoBubble.imageset/Contents.json
@@ -0,0 +1,16 @@
+{
+ "images" : [
+ {
+ "filename" : "kakaoBubble.pdf",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "preserves-vector-representation" : true,
+ "template-rendering-intent" : "template"
+ }
+}
diff --git a/Modules/DesignSystem/Resources/Assets.xcassets/kakaoBubble.imageset/kakaoBubble.pdf b/Modules/DesignSystem/Resources/Assets.xcassets/kakaoBubble.imageset/kakaoBubble.pdf
new file mode 100644
index 00000000..ba8f3d96
Binary files /dev/null and b/Modules/DesignSystem/Resources/Assets.xcassets/kakaoBubble.imageset/kakaoBubble.pdf differ
diff --git a/Modules/Features/Auth/Auth.xcodeproj/project.pbxproj b/Modules/Features/Auth/Auth.xcodeproj/project.pbxproj
index b146bf3e..10a6d7be 100644
--- a/Modules/Features/Auth/Auth.xcodeproj/project.pbxproj
+++ b/Modules/Features/Auth/Auth.xcodeproj/project.pbxproj
@@ -8,20 +8,20 @@
/* Begin PBXBuildFile section */
031E2B926BC3F4B22BBFCA35 /* NetworkKit.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 62778DFF53ACB46ECC6F5F35 /* NetworkKit.framework */; };
+ 05B26DCC15BAC48E1F871A86 /* AppleAuthServiceProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = CA0BAEBE3CDD9B85B10AE26D /* AppleAuthServiceProtocol.swift */; };
068F8D60BA7BADAEE244105C /* LoginError.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7179D642D174007438E18BB /* LoginError.swift */; };
06C7F1D619C3D8813EC698DC /* LoginViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = ADA7DDBBA02C09D5678982D1 /* LoginViewModel.swift */; };
0AAC727B5804E8861378DBA9 /* AuthErrorResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8002CFA53E586CEF850C3B0A /* AuthErrorResponseDTO.swift */; };
- 0C8A59F69E82B238BBACE038 /* PwInputView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C904E1C986F43E7E3173A68 /* PwInputView.swift */; };
0DD4957EB4B1CA41581F98F0 /* AuthLoginResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 252C2F86266EE72217090DE5 /* AuthLoginResponseDTO.swift */; };
0F56C20E1DA7712315D9E806 /* AuthUser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3D19C06CB9237BDD75BDE6D0 /* AuthUser.swift */; };
11398BE7E7D82516E37D424D /* SignupFormatStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9F2A7B152CF8BFC2A33B5864 /* SignupFormatStyle.swift */; };
122C53001252A72B60454C84 /* Kingfisher.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2FDB1F539F81A1BE90F87D4C /* Kingfisher.framework */; };
132D2FA4E5F037EC5B17C668 /* AuthInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E5E69594651E831F6B39550 /* AuthInterface.swift */; };
+ 137BF12EC0FDBB780C48D99B /* KakaoSDKUser.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CF43922EE1D6125FE8B383ED /* KakaoSDKUser.framework */; };
1463124D79BBAFE03BC7BF17 /* NetworkKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 62778DFF53ACB46ECC6F5F35 /* NetworkKit.framework */; };
15945F0A7DFC670E3A6F579E /* AuthDomain.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7C94165A812E44E5FD3BFC7F /* AuthDomain.framework */; };
1637E15B361BE0077BB2E4A4 /* AuthSignupResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7AF374FFD2C1DCB9C67C232 /* AuthSignupResponse.swift */; };
16D5D214569544F40FBBDB04 /* AuthTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = DA9479B1142A48D6DA9E15EB /* AuthTests.swift */; };
- 1BABD6D99B96B85A977A088C /* AuthSMSResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7943E1660F0F8C03171DA01B /* AuthSMSResponseDTO.swift */; };
1F96AE8D6C41A9E6FC6BA978 /* AuthInterface.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = BE8C09C4CE36E3D06B61DAB5 /* AuthInterface.framework */; };
1FE2762E1914BB12D2471757 /* AuthData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FC8AEB8E0082B038CB7521FA /* AuthData.framework */; };
20967759C2FB3DD4A69AE22C /* AuthMain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 083CBFE74C9E7F71EDD0C703 /* AuthMain.swift */; };
@@ -30,59 +30,68 @@
282B5EF203975D1974BBA825 /* AuthDIContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6B7EBA8D7806B48F8D71D29A /* AuthDIContainer.swift */; };
2A7224C686420CFF1A66C683 /* Moya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 83D56B45D644E0B2DBA11EEC /* Moya.framework */; };
2B882611CD5D55FF9AA4BA30 /* CurationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FF5156C9688647B73261D5AA /* CurationView.swift */; };
+ 2D93D0C06F2FDF0903805593 /* Alamofire_Alamofire.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 78FF525D0E8F54DA8ADC5422 /* Alamofire_Alamofire.bundle */; };
30FBE074985429C4E16AC952 /* AuthInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BE8C09C4CE36E3D06B61DAB5 /* AuthInterface.framework */; };
- 317F10B7A78A02208AD5F199 /* AuthSimpleUser.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A168642EA52AD1A834F65CA /* AuthSimpleUser.swift */; };
32D5A7DC8F48CD0FCC017BC4 /* FoundationKit.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 29FA6C20A6564CB1A65D83B5 /* FoundationKit.framework */; };
3439C05F4186A8EAEAB3AAC7 /* AuthInterface.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = BE8C09C4CE36E3D06B61DAB5 /* AuthInterface.framework */; };
38885CC0C2414879F652B0A7 /* Shared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2D55F8F97BF588B8074069DA /* Shared.framework */; };
394486121B1C9520A5164E43 /* AuthData.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = FC8AEB8E0082B038CB7521FA /* AuthData.framework */; };
3DE41050BD58F53CEBF1CD89 /* SignupUseCaseImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 189DB6C61185D4742A4F68D5 /* SignupUseCaseImpl.swift */; };
+ 4305092A6017903397FDA5DD /* Shared.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 2D55F8F97BF588B8074069DA /* Shared.framework */; };
452C194C93875A657D1EF472 /* PolicyWebSheetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0CC431E5DC117F84221E3049 /* PolicyWebSheetView.swift */; };
4AC581D077DF9A536B6119DD /* PopupView.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A03B7D8DBF8FA6DF9A7FAB5E /* PopupView.framework */; };
54098FD0A269D65E21141F44 /* AuthRecommendedBrand.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AEEA4760F10DA275AAD667C /* AuthRecommendedBrand.swift */; };
57943534CBB1B0733A0580B1 /* OnboardingPageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E92D4A67D04128BB7B34CC41 /* OnboardingPageView.swift */; };
+ 581473F58B2101FA8819F6FD /* KakaoAuthServiceProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBE015DFA89E6676D907A335 /* KakaoAuthServiceProtocol.swift */; };
584FF6C187A388DDE2785C63 /* LoginUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95E8500002BC4B6ABD877A90 /* LoginUseCase.swift */; };
585839CA64514AE531B3B0E1 /* AuthUserDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 32B432D7D19D2651FD4EA9D0 /* AuthUserDTO.swift */; };
- 63C7E725C2305C1E327EBA3A /* AuthIDCheckResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5ED3793EBF1965006A6246AA /* AuthIDCheckResult.swift */; };
63F1911F5DA70E6FF6B0936C /* AuthDomain.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 7C94165A812E44E5FD3BFC7F /* AuthDomain.framework */; };
67B7704E819E86BACD4CF144 /* LoginRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 114EA565B42439D2BD31D001 /* LoginRequest.swift */; };
684614D8E6FDC6F7CF4C413F /* SignupViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F194D0253B7B41E31A2318E0 /* SignupViewModel.swift */; };
- 6A6F3F4667ED7D186BCA77C2 /* IDInputView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B1C581C211BB1E550A1B7F9F /* IDInputView.swift */; };
6BAE6A217722795DA8B18F6E /* DesignSystem.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 45A8BB59B621EFC832DCFE0F /* DesignSystem.framework */; };
6DBDE15A3229AEC6AD04315F /* LoginUseCaseImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6D3D3E4DD934FD1AB010EE7 /* LoginUseCaseImpl.swift */; };
70FD0520699A99F87E907143 /* IndustrySurveyView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 529EEA7B499B7A83B7C62D3A /* IndustrySurveyView.swift */; };
+ 713CD4B5400822ACBE3098A1 /* KakaoAuthService.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5D807F75F499DBD2AF39E92 /* KakaoAuthService.swift */; };
71A2A19E91125B3B05216EEF /* SignupUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB8FAA33147E7CBDF3C9BC71 /* SignupUseCase.swift */; };
- 88D7670D4BE1270B9CEC6115 /* SignupAPIRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 83317B7D942AFBFF7BF79908 /* SignupAPIRequest.swift */; };
+ 78E4129880FADAC971EDCBA3 /* AuthAgreement.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9157EC605745CAD73475CA84 /* AuthAgreement.swift */; };
+ 7AF6C54D10C7AC3CAB25F44F /* KakaoSDKCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1327587164DBBAA16F3C33DE /* KakaoSDKCommon.framework */; };
8E1720B8F639A95ABC17313B /* SignupCurationSkeletonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27AC2DEAF917CC5E6CAE23A3 /* SignupCurationSkeletonView.swift */; };
+ 8E1DE8EEA3B43CEEB1BC3350 /* SocialLoginResultType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 791F16AF341F57533D166B00 /* SocialLoginResultType.swift */; };
+ 95708794CC0EFBB17C81A967 /* KakaoSDKUser.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CF43922EE1D6125FE8B383ED /* KakaoSDKUser.framework */; };
+ 9ADF09FF06C78C632CCB3E3F /* KakaoSDKCommon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1327587164DBBAA16F3C33DE /* KakaoSDKCommon.framework */; };
9D083976CECA423E68F0F099 /* AuthRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DFBFB5E537C38ADF3FC6F51 /* AuthRepository.swift */; };
9D88DB33AC00BF061BEFF003 /* AuthRepositoryImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED7D603A82E085B8AD32B04F /* AuthRepositoryImpl.swift */; };
9ECE5640A650A001E9195A0F /* AuthUserAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = E5BA7E5065E6BFA71F04B38E /* AuthUserAPI.swift */; };
9F49D0A2DD12B3C6F2C9D9AA /* AuthBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = EDE7484E60F831CBAFFBD577 /* AuthBuilder.swift */; };
9FD0E0B05397F67F37A1530A /* AuthTesting.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5642BA06A94EBFDDB6B192CB /* AuthTesting.framework */; };
+ A0136FA014429C88E340055B /* DesignSystem_DesignSystem.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 053F11E926A414E7E0C9D2C3 /* DesignSystem_DesignSystem.bundle */; };
A47F3F9CC80909D5A826ED2E /* LoginView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A6061C08937A7986D4F7D042 /* LoginView.swift */; };
A5D92D5C6F4866C1716747F6 /* FoundationKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 29FA6C20A6564CB1A65D83B5 /* FoundationKit.framework */; };
A873D6E66ACC7A15AE540405 /* BirthYearDropdown.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59EBC0CC5D916C5A4CB83108 /* BirthYearDropdown.swift */; };
+ AD16ADE5EA0A857DC8FCA049 /* AuthSocialLoginResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4DA3D0897326D379FB89FB89 /* AuthSocialLoginResponseDTO.swift */; };
AD2E02356CD05728AF7F6BED /* FoundationKit.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 29FA6C20A6564CB1A65D83B5 /* FoundationKit.framework */; };
ADD5AC589E22E51E680E9367 /* DesignSystem.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 45A8BB59B621EFC832DCFE0F /* DesignSystem.framework */; };
- AE4E796AB6754D3972831029 /* AuthSimpleUserDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79D73FBD79BD1D75BD7F6D35 /* AuthSimpleUserDTO.swift */; };
+ B1B883AD5FA839D4A8A34813 /* DesignSystem_DesignSystem.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 053F11E926A414E7E0C9D2C3 /* DesignSystem_DesignSystem.bundle */; };
B1B8CA1ED66CA91DBA0C6606 /* AuthDomain.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 7C94165A812E44E5FD3BFC7F /* AuthDomain.framework */; };
B3BCEF7C74425A532B13BCA1 /* AuthSignupResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = E65656E0C636D6AF23FD06E9 /* AuthSignupResponseDTO.swift */; };
- B99AFB0451E067C8FE60A309 /* PhoneNumberRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 08278EF2ED11A60DB6D330B6 /* PhoneNumberRequest.swift */; };
- BB5132E0726E9AD5CDE5A167 /* AuthSMSResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D9606FB084D1C548133A03A /* AuthSMSResponse.swift */; };
+ BE76C14172FBC93CFF00C6EB /* SocialSignupRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6C3738B5D3CB94C1EAE7091C /* SocialSignupRequest.swift */; };
+ BF9C7ADABAF6E76DBD66CC18 /* AppleAuthService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31D1F0799992DED05F63CE19 /* AppleAuthService.swift */; };
CEECBC8150603B9D9911E035 /* Shared.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 2D55F8F97BF588B8074069DA /* Shared.framework */; };
CFC5F5E41FBB37824529D154 /* CompleteView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7BDA675B82B10EC8A13AFB6B /* CompleteView.swift */; };
D417671EFC2BB25A1ED34B9A /* AuthBrandListResponseDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 89277BD77D124EAB69AE0989 /* AuthBrandListResponseDTO.swift */; };
DAB7DF3408A8935171BD2FAB /* SignupView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B61AAE20E84CFDA0CD5581B7 /* SignupView.swift */; };
DB7091B9F2506C318356C761 /* AgreeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E1BDDFC6BDACA5DBB3EA0C30 /* AgreeView.swift */; };
- DEC116B8172E6EC0EE96B13D /* PhoneVerificationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18C9108C9EC4721DDB960586 /* PhoneVerificationView.swift */; };
+ E1A5DE4105173FE48B0A8A12 /* KakaoSDKAuth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 46E7D8C72118ED61834F52D6 /* KakaoSDKAuth.framework */; };
+ E2D87D4F27F5006602D75147 /* KakaoSDKAuth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 46E7D8C72118ED61834F52D6 /* KakaoSDKAuth.framework */; };
E446254DECC0CB9FABD7CF86 /* NetworkKit.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 62778DFF53ACB46ECC6F5F35 /* NetworkKit.framework */; };
E57A016EEFDE2A1DEF13C80E /* CurationRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07848F750646D4321324EFC6 /* CurationRow.swift */; };
E5BC4A325DD1F4C9FFC406C6 /* ProfileInputView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BEFBC36DB36A7FB5F4EF2146 /* ProfileInputView.swift */; };
E70B49DE0EB688032C6698F5 /* RecommendView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3DF1746A90A2DDFCD5AE9CB3 /* RecommendView.swift */; };
+ E8972536C344E7B0BDCDAD2D /* Alamofire_Alamofire.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 78FF525D0E8F54DA8ADC5422 /* Alamofire_Alamofire.bundle */; };
+ EBFC25633602E81D366CEF7F /* SocialProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = EC378D97E8C797A1B2CB788B /* SocialProvider.swift */; };
EEFF897EFB63EEF67243F2BF /* AuthTesting.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A1EE55F16E7D24969D6632E /* AuthTesting.swift */; };
F42073A1A98F2AF60F8938C8 /* Auth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8895FC8BB8C3644A2923E77A /* Auth.framework */; };
F7B5E87E9981AE8BBA072E77 /* AuthDomain.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 7C94165A812E44E5FD3BFC7F /* AuthDomain.framework */; };
- FC24FEA6A044D05C84A21BF3 /* SignupPopupView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 809C13866FB7C74A59818EDF /* SignupPopupView.swift */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@@ -155,6 +164,17 @@
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
};
+ 684EC3987431A3767320D468 /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ 2D93D0C06F2FDF0903805593 /* Alamofire_Alamofire.bundle in Dependencies */,
+ A0136FA014429C88E340055B /* DesignSystem_DesignSystem.bundle in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
6B0F51A6942BBFE323B15EA1 /* Dependencies */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 8;
@@ -213,6 +233,7 @@
files = (
F7B5E87E9981AE8BBA072E77 /* AuthDomain.framework in Dependencies */,
1F96AE8D6C41A9E6FC6BA978 /* AuthInterface.framework in Dependencies */,
+ 4305092A6017903397FDA5DD /* Shared.framework in Dependencies */,
);
name = Dependencies;
runOnlyForDeploymentPostprocessing = 1;
@@ -256,69 +277,72 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
+ 053F11E926A414E7E0C9D2C3 /* DesignSystem_DesignSystem.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DesignSystem_DesignSystem.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
05A17C657D4A51BEE81CB99C /* OnboardView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardView.swift; sourceTree = ""; };
07848F750646D4321324EFC6 /* CurationRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CurationRow.swift; sourceTree = ""; };
- 08278EF2ED11A60DB6D330B6 /* PhoneNumberRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhoneNumberRequest.swift; sourceTree = ""; };
083CBFE74C9E7F71EDD0C703 /* AuthMain.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthMain.swift; sourceTree = ""; };
0AEEA4760F10DA275AAD667C /* AuthRecommendedBrand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthRecommendedBrand.swift; sourceTree = ""; };
- 0C904E1C986F43E7E3173A68 /* PwInputView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PwInputView.swift; sourceTree = ""; };
0CC431E5DC117F84221E3049 /* PolicyWebSheetView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PolicyWebSheetView.swift; sourceTree = ""; };
10C1F41914414CE45C317D84 /* AuthData-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "AuthData-Info.plist"; sourceTree = ""; };
114EA565B42439D2BD31D001 /* LoginRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginRequest.swift; sourceTree = ""; };
+ 1327587164DBBAA16F3C33DE /* KakaoSDKCommon.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = KakaoSDKCommon.framework; sourceTree = BUILT_PRODUCTS_DIR; };
189DB6C61185D4742A4F68D5 /* SignupUseCaseImpl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignupUseCaseImpl.swift; sourceTree = ""; };
- 18C9108C9EC4721DDB960586 /* PhoneVerificationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhoneVerificationView.swift; sourceTree = ""; };
1A1EE55F16E7D24969D6632E /* AuthTesting.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthTesting.swift; sourceTree = ""; };
252C2F86266EE72217090DE5 /* AuthLoginResponseDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthLoginResponseDTO.swift; sourceTree = ""; };
27AC2DEAF917CC5E6CAE23A3 /* SignupCurationSkeletonView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignupCurationSkeletonView.swift; sourceTree = ""; };
29FA6C20A6564CB1A65D83B5 /* FoundationKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = FoundationKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
2D55F8F97BF588B8074069DA /* Shared.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Shared.framework; sourceTree = BUILT_PRODUCTS_DIR; };
2FDB1F539F81A1BE90F87D4C /* Kingfisher.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Kingfisher.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 31D1F0799992DED05F63CE19 /* AppleAuthService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppleAuthService.swift; sourceTree = ""; };
32B432D7D19D2651FD4EA9D0 /* AuthUserDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthUserDTO.swift; sourceTree = ""; };
3B5098B4E6393EB4AD46B5F8 /* AuthTesting-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "AuthTesting-Info.plist"; sourceTree = ""; };
3D19C06CB9237BDD75BDE6D0 /* AuthUser.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthUser.swift; sourceTree = ""; };
3DF1746A90A2DDFCD5AE9CB3 /* RecommendView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RecommendView.swift; sourceTree = ""; };
45A8BB59B621EFC832DCFE0F /* DesignSystem.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DesignSystem.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 46E7D8C72118ED61834F52D6 /* KakaoSDKAuth.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = KakaoSDKAuth.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 4DA3D0897326D379FB89FB89 /* AuthSocialLoginResponseDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthSocialLoginResponseDTO.swift; sourceTree = ""; };
4F6F33418EB25913880BECBA /* AuthInterface-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "AuthInterface-Info.plist"; sourceTree = ""; };
529EEA7B499B7A83B7C62D3A /* IndustrySurveyView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IndustrySurveyView.swift; sourceTree = ""; };
5642BA06A94EBFDDB6B192CB /* AuthTesting.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AuthTesting.framework; sourceTree = BUILT_PRODUCTS_DIR; };
59EBC0CC5D916C5A4CB83108 /* BirthYearDropdown.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BirthYearDropdown.swift; sourceTree = ""; };
5E5E69594651E831F6B39550 /* AuthInterface.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthInterface.swift; sourceTree = ""; };
- 5ED3793EBF1965006A6246AA /* AuthIDCheckResult.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthIDCheckResult.swift; sourceTree = ""; };
62778DFF53ACB46ECC6F5F35 /* NetworkKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = NetworkKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
6B7EBA8D7806B48F8D71D29A /* AuthDIContainer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthDIContainer.swift; sourceTree = ""; };
+ 6C3738B5D3CB94C1EAE7091C /* SocialSignupRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SocialSignupRequest.swift; sourceTree = ""; };
6DFBFB5E537C38ADF3FC6F51 /* AuthRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthRepository.swift; sourceTree = ""; };
- 7943E1660F0F8C03171DA01B /* AuthSMSResponseDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthSMSResponseDTO.swift; sourceTree = ""; };
- 79D73FBD79BD1D75BD7F6D35 /* AuthSimpleUserDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthSimpleUserDTO.swift; sourceTree = ""; };
+ 78FF525D0E8F54DA8ADC5422 /* Alamofire_Alamofire.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Alamofire_Alamofire.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
+ 791F16AF341F57533D166B00 /* SocialLoginResultType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SocialLoginResultType.swift; sourceTree = ""; };
7BDA675B82B10EC8A13AFB6B /* CompleteView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CompleteView.swift; sourceTree = ""; };
7C94165A812E44E5FD3BFC7F /* AuthDomain.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AuthDomain.framework; sourceTree = BUILT_PRODUCTS_DIR; };
8002CFA53E586CEF850C3B0A /* AuthErrorResponseDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthErrorResponseDTO.swift; sourceTree = ""; };
- 809C13866FB7C74A59818EDF /* SignupPopupView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignupPopupView.swift; sourceTree = ""; };
- 83317B7D942AFBFF7BF79908 /* SignupAPIRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignupAPIRequest.swift; sourceTree = ""; };
83D56B45D644E0B2DBA11EEC /* Moya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Moya.framework; sourceTree = BUILT_PRODUCTS_DIR; };
8895FC8BB8C3644A2923E77A /* Auth.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Auth.framework; sourceTree = BUILT_PRODUCTS_DIR; };
89277BD77D124EAB69AE0989 /* AuthBrandListResponseDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthBrandListResponseDTO.swift; sourceTree = ""; };
+ 9157EC605745CAD73475CA84 /* AuthAgreement.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthAgreement.swift; sourceTree = ""; };
95E8500002BC4B6ABD877A90 /* LoginUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginUseCase.swift; sourceTree = ""; };
- 9A168642EA52AD1A834F65CA /* AuthSimpleUser.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthSimpleUser.swift; sourceTree = ""; };
- 9D9606FB084D1C548133A03A /* AuthSMSResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthSMSResponse.swift; sourceTree = ""; };
9F2A7B152CF8BFC2A33B5864 /* SignupFormatStyle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignupFormatStyle.swift; sourceTree = ""; };
A03B7D8DBF8FA6DF9A7FAB5E /* PopupView.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = PopupView.framework; sourceTree = BUILT_PRODUCTS_DIR; };
A6061C08937A7986D4F7D042 /* LoginView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginView.swift; sourceTree = ""; };
ADA7DDBBA02C09D5678982D1 /* LoginViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginViewModel.swift; sourceTree = ""; };
- B1C581C211BB1E550A1B7F9F /* IDInputView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IDInputView.swift; sourceTree = ""; };
+ B5D807F75F499DBD2AF39E92 /* KakaoAuthService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KakaoAuthService.swift; sourceTree = ""; };
B61AAE20E84CFDA0CD5581B7 /* SignupView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignupView.swift; sourceTree = ""; };
BE8C09C4CE36E3D06B61DAB5 /* AuthInterface.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AuthInterface.framework; sourceTree = BUILT_PRODUCTS_DIR; };
BEFBC36DB36A7FB5F4EF2146 /* ProfileInputView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ProfileInputView.swift; sourceTree = ""; };
C857B2C600CA35873D2A9D32 /* Auth-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Auth-Info.plist"; sourceTree = ""; };
+ CA0BAEBE3CDD9B85B10AE26D /* AppleAuthServiceProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppleAuthServiceProtocol.swift; sourceTree = ""; };
+ CF43922EE1D6125FE8B383ED /* KakaoSDKUser.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = KakaoSDKUser.framework; sourceTree = BUILT_PRODUCTS_DIR; };
CF8FCFE4AC3B608B5042F210 /* AuthTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AuthTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
D7AF374FFD2C1DCB9C67C232 /* AuthSignupResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthSignupResponse.swift; sourceTree = ""; };
DA9479B1142A48D6DA9E15EB /* AuthTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthTests.swift; sourceTree = ""; };
DB8FAA33147E7CBDF3C9BC71 /* SignupUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignupUseCase.swift; sourceTree = ""; };
+ DBE015DFA89E6676D907A335 /* KakaoAuthServiceProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KakaoAuthServiceProtocol.swift; sourceTree = ""; };
E1BDDFC6BDACA5DBB3EA0C30 /* AgreeView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AgreeView.swift; sourceTree = ""; };
E5BA7E5065E6BFA71F04B38E /* AuthUserAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthUserAPI.swift; sourceTree = ""; };
E65656E0C636D6AF23FD06E9 /* AuthSignupResponseDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthSignupResponseDTO.swift; sourceTree = ""; };
E6D3D3E4DD934FD1AB010EE7 /* LoginUseCaseImpl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginUseCaseImpl.swift; sourceTree = ""; };
E7179D642D174007438E18BB /* LoginError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoginError.swift; sourceTree = ""; };
E92D4A67D04128BB7B34CC41 /* OnboardingPageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingPageView.swift; sourceTree = ""; };
+ EC378D97E8C797A1B2CB788B /* SocialProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SocialProvider.swift; sourceTree = ""; };
ED7D603A82E085B8AD32B04F /* AuthRepositoryImpl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthRepositoryImpl.swift; sourceTree = ""; };
EDE7484E60F831CBAFFBD577 /* AuthBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthBuilder.swift; sourceTree = ""; };
EF08C43BB60D5CD101D7A686 /* AuthTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "AuthTests-Info.plist"; sourceTree = ""; };
@@ -362,6 +386,9 @@
9FD0E0B05397F67F37A1530A /* AuthTesting.framework in Frameworks */,
6BAE6A217722795DA8B18F6E /* DesignSystem.framework in Frameworks */,
A5D92D5C6F4866C1716747F6 /* FoundationKit.framework in Frameworks */,
+ E2D87D4F27F5006602D75147 /* KakaoSDKAuth.framework in Frameworks */,
+ 9ADF09FF06C78C632CCB3E3F /* KakaoSDKCommon.framework in Frameworks */,
+ 95708794CC0EFBB17C81A967 /* KakaoSDKUser.framework in Frameworks */,
122C53001252A72B60454C84 /* Kingfisher.framework in Frameworks */,
2A7224C686420CFF1A66C683 /* Moya.framework in Frameworks */,
1463124D79BBAFE03BC7BF17 /* NetworkKit.framework in Frameworks */,
@@ -381,6 +408,9 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
+ E1A5DE4105173FE48B0A8A12 /* KakaoSDKAuth.framework in Frameworks */,
+ 7AF6C54D10C7AC3CAB25F44F /* KakaoSDKCommon.framework in Frameworks */,
+ 137BF12EC0FDBB780C48D99B /* KakaoSDKUser.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -399,13 +429,13 @@
1F7FCF002E9EA49C9154B97A /* Models */ = {
isa = PBXGroup;
children = (
- 5ED3793EBF1965006A6246AA /* AuthIDCheckResult.swift */,
+ 9157EC605745CAD73475CA84 /* AuthAgreement.swift */,
0AEEA4760F10DA275AAD667C /* AuthRecommendedBrand.swift */,
D7AF374FFD2C1DCB9C67C232 /* AuthSignupResponse.swift */,
- 9A168642EA52AD1A834F65CA /* AuthSimpleUser.swift */,
- 9D9606FB084D1C548133A03A /* AuthSMSResponse.swift */,
3D19C06CB9237BDD75BDE6D0 /* AuthUser.swift */,
E7179D642D174007438E18BB /* LoginError.swift */,
+ 791F16AF341F57533D166B00 /* SocialLoginResultType.swift */,
+ EC378D97E8C797A1B2CB788B /* SocialProvider.swift */,
);
path = Models;
sourceTree = "";
@@ -448,6 +478,7 @@
CA67E9589C79D55919B4AC98 /* Format */,
1F7FCF002E9EA49C9154B97A /* Models */,
2E50C36B10E667A8B5B249DB /* Repository */,
+ 67B1B968B12862927CA5D06F /* Service */,
E7ADF26634B3AEC468A96EFB /* UseCase */,
);
path = Sources;
@@ -456,14 +487,19 @@
47BB2EF37CEDEF87800073AF /* Products */ = {
isa = PBXGroup;
children = (
+ 78FF525D0E8F54DA8ADC5422 /* Alamofire_Alamofire.bundle */,
8895FC8BB8C3644A2923E77A /* Auth.framework */,
FC8AEB8E0082B038CB7521FA /* AuthData.framework */,
7C94165A812E44E5FD3BFC7F /* AuthDomain.framework */,
BE8C09C4CE36E3D06B61DAB5 /* AuthInterface.framework */,
5642BA06A94EBFDDB6B192CB /* AuthTesting.framework */,
CF8FCFE4AC3B608B5042F210 /* AuthTests.xctest */,
+ 053F11E926A414E7E0C9D2C3 /* DesignSystem_DesignSystem.bundle */,
45A8BB59B621EFC832DCFE0F /* DesignSystem.framework */,
29FA6C20A6564CB1A65D83B5 /* FoundationKit.framework */,
+ 46E7D8C72118ED61834F52D6 /* KakaoSDKAuth.framework */,
+ 1327587164DBBAA16F3C33DE /* KakaoSDKCommon.framework */,
+ CF43922EE1D6125FE8B383ED /* KakaoSDKUser.framework */,
2FDB1F539F81A1BE90F87D4C /* Kingfisher.framework */,
83D56B45D644E0B2DBA11EEC /* Moya.framework */,
62778DFF53ACB46ECC6F5F35 /* NetworkKit.framework */,
@@ -527,8 +563,7 @@
8002CFA53E586CEF850C3B0A /* AuthErrorResponseDTO.swift */,
252C2F86266EE72217090DE5 /* AuthLoginResponseDTO.swift */,
E65656E0C636D6AF23FD06E9 /* AuthSignupResponseDTO.swift */,
- 79D73FBD79BD1D75BD7F6D35 /* AuthSimpleUserDTO.swift */,
- 7943E1660F0F8C03171DA01B /* AuthSMSResponseDTO.swift */,
+ 4DA3D0897326D379FB89FB89 /* AuthSocialLoginResponseDTO.swift */,
32B432D7D19D2651FD4EA9D0 /* AuthUserDTO.swift */,
);
path = DTO;
@@ -542,6 +577,15 @@
path = ViewModel;
sourceTree = "";
};
+ 67B1B968B12862927CA5D06F /* Service */ = {
+ isa = PBXGroup;
+ children = (
+ CA0BAEBE3CDD9B85B10AE26D /* AppleAuthServiceProtocol.swift */,
+ DBE015DFA89E6676D907A335 /* KakaoAuthServiceProtocol.swift */,
+ );
+ path = Service;
+ sourceTree = "";
+ };
6C19D8EF6FBB8C39757E46B1 /* Sources */ = {
isa = PBXGroup;
children = (
@@ -555,7 +599,6 @@
children = (
59EBC0CC5D916C5A4CB83108 /* BirthYearDropdown.swift */,
0CC431E5DC117F84221E3049 /* PolicyWebSheetView.swift */,
- 809C13866FB7C74A59818EDF /* SignupPopupView.swift */,
);
path = Popup;
sourceTree = "";
@@ -565,6 +608,7 @@
children = (
D213E4CBC9366CE3FD45FDED /* API */,
61EAB215B4B277EBBEBB30EA /* DTO */,
+ F0975FF2DD59FA556C7AF3E6 /* Social */,
ED7D603A82E085B8AD32B04F /* AuthRepositoryImpl.swift */,
);
path = Sources;
@@ -589,10 +633,7 @@
children = (
E1BDDFC6BDACA5DBB3EA0C30 /* AgreeView.swift */,
7BDA675B82B10EC8A13AFB6B /* CompleteView.swift */,
- B1C581C211BB1E550A1B7F9F /* IDInputView.swift */,
- 18C9108C9EC4721DDB960586 /* PhoneVerificationView.swift */,
BEFBC36DB36A7FB5F4EF2146 /* ProfileInputView.swift */,
- 0C904E1C986F43E7E3173A68 /* PwInputView.swift */,
3DF1746A90A2DDFCD5AE9CB3 /* RecommendView.swift */,
);
path = Step;
@@ -614,8 +655,7 @@
isa = PBXGroup;
children = (
114EA565B42439D2BD31D001 /* LoginRequest.swift */,
- 08278EF2ED11A60DB6D330B6 /* PhoneNumberRequest.swift */,
- 83317B7D942AFBFF7BF79908 /* SignupAPIRequest.swift */,
+ 6C3738B5D3CB94C1EAE7091C /* SocialSignupRequest.swift */,
);
path = Encodable;
sourceTree = "";
@@ -696,6 +736,15 @@
path = InfoPlists;
sourceTree = "";
};
+ F0975FF2DD59FA556C7AF3E6 /* Social */ = {
+ isa = PBXGroup;
+ children = (
+ 31D1F0799992DED05F63CE19 /* AppleAuthService.swift */,
+ B5D807F75F499DBD2AF39E92 /* KakaoAuthService.swift */,
+ );
+ path = Social;
+ sourceTree = "";
+ };
F801810B5F8B8D58E891B0B5 /* Data */ = {
isa = PBXGroup;
children = (
@@ -736,6 +785,7 @@
E9C7F24A38551DB28EEA9184 /* Resources */,
B6A5B1067558D5212CD51DA8 /* Frameworks */,
DFA2E33A5B95A9DDC48D1C33 /* Embed Frameworks */,
+ 684EC3987431A3767320D468 /* Dependencies */,
);
buildRules = (
);
@@ -906,6 +956,8 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
+ E8972536C344E7B0BDCDAD2D /* Alamofire_Alamofire.bundle in Resources */,
+ B1B883AD5FA839D4A8A34813 /* DesignSystem_DesignSystem.bundle in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -924,14 +976,16 @@
buildActionMask = 2147483647;
files = (
11398BE7E7D82516E37D424D /* SignupFormatStyle.swift in Sources */,
- 63C7E725C2305C1E327EBA3A /* AuthIDCheckResult.swift in Sources */,
+ 78E4129880FADAC971EDCBA3 /* AuthAgreement.swift in Sources */,
54098FD0A269D65E21141F44 /* AuthRecommendedBrand.swift in Sources */,
- BB5132E0726E9AD5CDE5A167 /* AuthSMSResponse.swift in Sources */,
1637E15B361BE0077BB2E4A4 /* AuthSignupResponse.swift in Sources */,
- 317F10B7A78A02208AD5F199 /* AuthSimpleUser.swift in Sources */,
0F56C20E1DA7712315D9E806 /* AuthUser.swift in Sources */,
068F8D60BA7BADAEE244105C /* LoginError.swift in Sources */,
+ 8E1DE8EEA3B43CEEB1BC3350 /* SocialLoginResultType.swift in Sources */,
+ EBFC25633602E81D366CEF7F /* SocialProvider.swift in Sources */,
9D083976CECA423E68F0F099 /* AuthRepository.swift in Sources */,
+ 05B26DCC15BAC48E1F871A86 /* AppleAuthServiceProtocol.swift in Sources */,
+ 581473F58B2101FA8819F6FD /* KakaoAuthServiceProtocol.swift in Sources */,
584FF6C187A388DDE2785C63 /* LoginUseCase.swift in Sources */,
71A2A19E91125B3B05216EEF /* SignupUseCase.swift in Sources */,
);
@@ -955,15 +1009,11 @@
8E1720B8F639A95ABC17313B /* SignupCurationSkeletonView.swift in Sources */,
A873D6E66ACC7A15AE540405 /* BirthYearDropdown.swift in Sources */,
452C194C93875A657D1EF472 /* PolicyWebSheetView.swift in Sources */,
- FC24FEA6A044D05C84A21BF3 /* SignupPopupView.swift in Sources */,
DAB7DF3408A8935171BD2FAB /* SignupView.swift in Sources */,
684614D8E6FDC6F7CF4C413F /* SignupViewModel.swift in Sources */,
DB7091B9F2506C318356C761 /* AgreeView.swift in Sources */,
CFC5F5E41FBB37824529D154 /* CompleteView.swift in Sources */,
- 6A6F3F4667ED7D186BCA77C2 /* IDInputView.swift in Sources */,
- DEC116B8172E6EC0EE96B13D /* PhoneVerificationView.swift in Sources */,
E5BC4A325DD1F4C9FFC406C6 /* ProfileInputView.swift in Sources */,
- 0C8A59F69E82B238BBACE038 /* PwInputView.swift in Sources */,
E70B49DE0EB688032C6698F5 /* RecommendView.swift in Sources */,
6DBDE15A3229AEC6AD04315F /* LoginUseCaseImpl.swift in Sources */,
3DE41050BD58F53CEBF1CD89 /* SignupUseCaseImpl.swift in Sources */,
@@ -1000,16 +1050,16 @@
files = (
9ECE5640A650A001E9195A0F /* AuthUserAPI.swift in Sources */,
67B7704E819E86BACD4CF144 /* LoginRequest.swift in Sources */,
- B99AFB0451E067C8FE60A309 /* PhoneNumberRequest.swift in Sources */,
- 88D7670D4BE1270B9CEC6115 /* SignupAPIRequest.swift in Sources */,
+ BE76C14172FBC93CFF00C6EB /* SocialSignupRequest.swift in Sources */,
9D88DB33AC00BF061BEFF003 /* AuthRepositoryImpl.swift in Sources */,
D417671EFC2BB25A1ED34B9A /* AuthBrandListResponseDTO.swift in Sources */,
0AAC727B5804E8861378DBA9 /* AuthErrorResponseDTO.swift in Sources */,
0DD4957EB4B1CA41581F98F0 /* AuthLoginResponseDTO.swift in Sources */,
- 1BABD6D99B96B85A977A088C /* AuthSMSResponseDTO.swift in Sources */,
B3BCEF7C74425A532B13BCA1 /* AuthSignupResponseDTO.swift in Sources */,
- AE4E796AB6754D3972831029 /* AuthSimpleUserDTO.swift in Sources */,
+ AD16ADE5EA0A857DC8FCA049 /* AuthSocialLoginResponseDTO.swift in Sources */,
585839CA64514AE531B3B0E1 /* AuthUserDTO.swift in Sources */,
+ BF9C7ADABAF6E76DBD66CC18 /* AppleAuthService.swift in Sources */,
+ 713CD4B5400822ACBE3098A1 /* KakaoAuthService.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1572,6 +1622,10 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-L$(DT_TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)",
+ );
PRODUCT_BUNDLE_IDENTIFIER = com.newdok.auth.tests;
PRODUCT_NAME = AuthTests;
SDKROOT = iphoneos;
@@ -1600,6 +1654,10 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-L$(DT_TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)",
+ );
PRODUCT_BUNDLE_IDENTIFIER = com.newdok.auth.tests;
PRODUCT_NAME = AuthTests;
SDKROOT = iphoneos;
diff --git a/Modules/Features/Auth/Data/Sources/API/AuthUserAPI.swift b/Modules/Features/Auth/Data/Sources/API/AuthUserAPI.swift
index c55115b1..9fb0d975 100644
--- a/Modules/Features/Auth/Data/Sources/API/AuthUserAPI.swift
+++ b/Modules/Features/Auth/Data/Sources/API/AuthUserAPI.swift
@@ -7,65 +7,40 @@ private enum AuthBaseURL {
}
struct Login: APIRequest {
- typealias Response = AuthLoginResponseDTO
- let loginId: String
- let password: String
- var baseURL: URL { AuthBaseURL.users }
- var path: String { "/login" }
+ typealias Response = AuthSocialLoginResponseDTO
+ let provider: String
+ let idToken: String
+ var baseURL: URL { AuthBaseURL.auth }
+ var path: String { "/social-login" }
var method: HTTPMethod { .post }
- var task: RequestTask { .jsonBody(LoginRequest(loginId: loginId, password: password)) }
+ var emitsUnauthorizedEvent: Bool { false }
+ var task: RequestTask {
+ .jsonBody(LoginRequest(provider: provider, platform: "IOS", idToken: idToken))
+ }
}
-struct Signup: APIRequest {
+struct SocialSignup: APIRequest {
typealias Response = AuthSignupResponseDTO
- let loginId: String
- let password: String
- let phoneNumber: String
+ let signupToken: String
let nickname: String
let birthYear: String
let gender: String
- var baseURL: URL { AuthBaseURL.users }
- var path: String { "/signup" }
+ let agreements: [SocialSignupAgreementRequest]
+ var baseURL: URL { AuthBaseURL.auth }
+ var path: String { "/social-login/signup" }
var method: HTTPMethod { .post }
+ var emitsUnauthorizedEvent: Bool { false }
var task: RequestTask {
- .jsonBody(SignupAPIRequest(
- loginId: loginId,
- password: password,
- phoneNumber: phoneNumber,
+ .jsonBody(SocialSignupRequest(
+ signupToken: signupToken,
nickname: nickname,
birthYear: birthYear,
- gender: gender
+ gender: gender,
+ agreements: agreements
))
}
}
-struct CheckPhoneNumber: APIRequest {
- typealias Response = [AuthSimpleUserDTO]
- let phoneNumber: String
- var baseURL: URL { AuthBaseURL.users }
- var path: String { "/check/phoneNumber" }
- var method: HTTPMethod { .get }
- var task: RequestTask { .query(["phoneNumber": phoneNumber]) }
-}
-
-struct CheckIDDup: APIRequest {
- typealias Response = AuthSimpleUserDTO
- let loginId: String
- var baseURL: URL { AuthBaseURL.users }
- var path: String { "/check/loginId" }
- var method: HTTPMethod { .get }
- var task: RequestTask { .query(["loginId": loginId]) }
-}
-
-struct AuthSMS: APIRequest {
- typealias Response = AuthSMSResponseDTO
- let phoneNumber: String
- var baseURL: URL { AuthBaseURL.auth }
- var path: String { "/SMS" }
- var method: HTTPMethod { .post }
- var task: RequestTask { .jsonBody(PhoneNumberRequest(phoneNumber: phoneNumber)) }
-}
-
struct PreInvestigate: APIRequest {
typealias Response = AuthRecommendedBrandListResponseDTO
let industryId: String
diff --git a/Modules/Features/Auth/Data/Sources/API/Encodable/LoginRequest.swift b/Modules/Features/Auth/Data/Sources/API/Encodable/LoginRequest.swift
index 350c3fdb..0608b41b 100644
--- a/Modules/Features/Auth/Data/Sources/API/Encodable/LoginRequest.swift
+++ b/Modules/Features/Auth/Data/Sources/API/Encodable/LoginRequest.swift
@@ -1,4 +1,5 @@
struct LoginRequest: Encodable, Sendable {
- let loginId: String
- let password: String
+ let provider: String
+ let platform: String
+ let idToken: String
}
diff --git a/Modules/Features/Auth/Data/Sources/API/Encodable/PhoneNumberRequest.swift b/Modules/Features/Auth/Data/Sources/API/Encodable/PhoneNumberRequest.swift
deleted file mode 100644
index 432ec8e9..00000000
--- a/Modules/Features/Auth/Data/Sources/API/Encodable/PhoneNumberRequest.swift
+++ /dev/null
@@ -1,3 +0,0 @@
-struct PhoneNumberRequest: Encodable, Sendable {
- let phoneNumber: String
-}
diff --git a/Modules/Features/Auth/Data/Sources/API/Encodable/SignupAPIRequest.swift b/Modules/Features/Auth/Data/Sources/API/Encodable/SignupAPIRequest.swift
deleted file mode 100644
index 65922d1b..00000000
--- a/Modules/Features/Auth/Data/Sources/API/Encodable/SignupAPIRequest.swift
+++ /dev/null
@@ -1,8 +0,0 @@
-struct SignupAPIRequest: Encodable, Sendable {
- let loginId: String
- let password: String
- let phoneNumber: String
- let nickname: String
- let birthYear: String
- let gender: String
-}
diff --git a/Modules/Features/Auth/Data/Sources/API/Encodable/SocialSignupRequest.swift b/Modules/Features/Auth/Data/Sources/API/Encodable/SocialSignupRequest.swift
new file mode 100644
index 00000000..d8c8dec5
--- /dev/null
+++ b/Modules/Features/Auth/Data/Sources/API/Encodable/SocialSignupRequest.swift
@@ -0,0 +1,12 @@
+struct SocialSignupAgreementRequest: Encodable, Sendable {
+ let type: String
+ let agreed: Bool
+}
+
+struct SocialSignupRequest: Encodable, Sendable {
+ let signupToken: String
+ let nickname: String
+ let birthYear: String
+ let gender: String
+ let agreements: [SocialSignupAgreementRequest]
+}
diff --git a/Modules/Features/Auth/Data/Sources/AuthRepositoryImpl.swift b/Modules/Features/Auth/Data/Sources/AuthRepositoryImpl.swift
index d80cb25a..f47ed469 100644
--- a/Modules/Features/Auth/Data/Sources/AuthRepositoryImpl.swift
+++ b/Modules/Features/Auth/Data/Sources/AuthRepositoryImpl.swift
@@ -18,54 +18,45 @@ public final class AuthRepositoryImpl: AuthRepository {
self.userInfoStore = userInfoStore
}
- public func login(loginId: String, password: String) async throws -> (AuthUser, String) {
- let user: AuthUser
- let token: String
+ public func login(provider: SocialProvider, idToken: String) async throws -> SocialLoginResultType {
do {
let response = try await network.request(
- Login(loginId: loginId, password: password)
+ Login(provider: provider.rawValue, idToken: idToken)
)
- user = response.user.toDomain()
- token = response.accessToken
- } catch let error as NetworkError {
- if case .serverError(let statusCode, let message) = error, statusCode == 400 {
- let errorMessage = message ?? ""
- if errorMessage.contains("비밀번호") {
- throw LoginError.invalidPassword
- } else if errorMessage.contains("계정") {
- throw LoginError.accountNotFound
+ let result = try response.toDomain()
+
+ if case let .registered(user, accessToken) = result {
+ // Keychain 저장 실패 시 로그인 실패로 처리 — 다음 실행 때 조용히 로그아웃되는 것 방지.
+ guard tokenStorage.saveAccessToken(accessToken) else {
+ throw LoginError.tokenPersistenceFailed
}
+ persistLocalUser(from: user)
}
- throw LoginError.networkError(error)
+
+ return result
+ } catch let error as LoginError {
+ throw error
} catch {
throw LoginError.networkError(error)
}
-
- // Keychain 저장 실패 시 로그인 실패로 처리 — 다음 실행 때 조용히 로그아웃되는 것 방지.
- guard tokenStorage.saveAccessToken(token) else {
- throw LoginError.tokenPersistenceFailed
- }
- persistLocalUser(from: user)
-
- return (user, token)
}
public func signup(
- loginId: String,
- password: String,
- phoneNumber: String,
+ signupToken: String,
nickname: String,
birthYear: String,
- gender: String
+ gender: String,
+ agreements: [AuthAgreement]
) async throws -> AuthSignupResponse {
let response = try await network.request(
- Signup(
- loginId: loginId,
- password: password,
- phoneNumber: phoneNumber,
+ SocialSignup(
+ signupToken: signupToken,
nickname: nickname,
birthYear: birthYear,
- gender: gender
+ gender: gender,
+ agreements: agreements.map {
+ SocialSignupAgreementRequest(type: $0.type.rawValue, agreed: $0.agreed)
+ }
)
)
let domain = response.toDomain()
@@ -78,42 +69,6 @@ public final class AuthRepositoryImpl: AuthRepository {
return domain
}
- public func checkPhoneNumber(_ phoneNumber: String) async throws -> [AuthSimpleUser] {
- do {
- let response = try await network.request(
- CheckPhoneNumber(phoneNumber: phoneNumber)
- )
- return response.map { $0.toDomain() }
- } catch let error as NetworkError {
- if case .serverError(let statusCode, _) = error, statusCode == 400 {
- return []
- } else {
- throw error
- }
- } catch {
- throw error
- }
- }
-
- public func checkIDDup(_ loginId: String) async throws -> AuthIDCheckResult {
- let result = try await network.checkRequest(
- CheckIDDup(loginId: loginId)
- )
- switch result {
- case .exists(let dto):
- return .exists(dto.toDomain())
- case .notFound:
- return .notFound
- }
- }
-
- public func authSMS(phoneNumber: String) async throws -> AuthSMSResponse {
- let response = try await network.request(
- AuthSMS(phoneNumber: phoneNumber)
- )
- return response.toDomain()
- }
-
public func preInvestigate(
industryId: String,
interestIds: [String]
@@ -132,8 +87,8 @@ public final class AuthRepositoryImpl: AuthRepository {
private func persistLocalUser(from user: AuthUser) {
let userInfo = UserInfo(
id: user.id,
- loginId: user.loginId,
- phoneNumber: user.phoneNumber,
+ loginId: "",
+ phoneNumber: "",
subscribeEmail: user.subscribeEmail,
nickname: user.nickname,
birthYear: user.birthYear,
diff --git a/Modules/Features/Auth/Data/Sources/DTO/AuthSMSResponseDTO.swift b/Modules/Features/Auth/Data/Sources/DTO/AuthSMSResponseDTO.swift
deleted file mode 100644
index 79af09dd..00000000
--- a/Modules/Features/Auth/Data/Sources/DTO/AuthSMSResponseDTO.swift
+++ /dev/null
@@ -1,9 +0,0 @@
-import AuthDomain
-
-struct AuthSMSResponseDTO: Decodable, Sendable {
- let code: Int
-
- func toDomain() -> AuthSMSResponse {
- return AuthSMSResponse(code: code)
- }
-}
diff --git a/Modules/Features/Auth/Data/Sources/DTO/AuthSimpleUserDTO.swift b/Modules/Features/Auth/Data/Sources/DTO/AuthSimpleUserDTO.swift
deleted file mode 100644
index 162b8b2c..00000000
--- a/Modules/Features/Auth/Data/Sources/DTO/AuthSimpleUserDTO.swift
+++ /dev/null
@@ -1,18 +0,0 @@
-import Foundation
-import AuthDomain
-
-struct AuthSimpleUserDTO: Decodable, Sendable {
- let id: Int
- let loginId: String
- let phoneNumber: String
- let createdAt: String
-
- func toDomain() -> AuthSimpleUser {
- return AuthSimpleUser(
- id: id,
- loginId: loginId,
- phoneNumber: phoneNumber,
- createdAt: createdAt
- )
- }
-}
diff --git a/Modules/Features/Auth/Data/Sources/DTO/AuthSocialLoginResponseDTO.swift b/Modules/Features/Auth/Data/Sources/DTO/AuthSocialLoginResponseDTO.swift
new file mode 100644
index 00000000..3b3bc8b0
--- /dev/null
+++ b/Modules/Features/Auth/Data/Sources/DTO/AuthSocialLoginResponseDTO.swift
@@ -0,0 +1,36 @@
+import Foundation
+import AuthDomain
+
+struct AuthSocialProfileDTO: Decodable, Sendable {
+ let provider: String?
+ let providerUserId: String?
+ let email: String?
+ let nickname: String?
+}
+
+struct AuthSocialLoginResponseDTO: Decodable, Sendable {
+ let isRegistered: Bool
+ let accessToken: String?
+ let user: AuthUserDTO?
+ let signupToken: String?
+ let profile: AuthSocialProfileDTO?
+
+ func toDomain() throws -> SocialLoginResultType {
+ if isRegistered {
+ guard let user, let accessToken else {
+ throw AuthSocialLoginDecodingError.missingRegisteredFields
+ }
+ return .registered(user.toDomain(), accessToken: accessToken)
+ } else {
+ guard let signupToken else {
+ throw AuthSocialLoginDecodingError.missingSignupToken
+ }
+ return .newUser(signupToken: signupToken, suggestedNickname: profile?.nickname)
+ }
+ }
+}
+
+enum AuthSocialLoginDecodingError: Error {
+ case missingRegisteredFields
+ case missingSignupToken
+}
diff --git a/Modules/Features/Auth/Data/Sources/DTO/AuthUserDTO.swift b/Modules/Features/Auth/Data/Sources/DTO/AuthUserDTO.swift
index f37ca7d4..ffcc58d6 100644
--- a/Modules/Features/Auth/Data/Sources/DTO/AuthUserDTO.swift
+++ b/Modules/Features/Auth/Data/Sources/DTO/AuthUserDTO.swift
@@ -18,8 +18,6 @@ struct AuthInterestDTO: Decodable, Sendable {
struct AuthUserDTO: Decodable, Sendable {
let id: Int
- let loginId: String
- let phoneNumber: String
let subscribeEmail: String?
let nickname: String
let birthYear: String
@@ -31,8 +29,6 @@ struct AuthUserDTO: Decodable, Sendable {
func toDomain() -> AuthUser {
return AuthUser(
id: id,
- loginId: loginId,
- phoneNumber: phoneNumber,
subscribeEmail: subscribeEmail,
nickname: nickname,
birthYear: birthYear,
diff --git a/Modules/Features/Auth/Data/Sources/Social/AppleAuthService.swift b/Modules/Features/Auth/Data/Sources/Social/AppleAuthService.swift
new file mode 100644
index 00000000..80b8d5da
--- /dev/null
+++ b/Modules/Features/Auth/Data/Sources/Social/AppleAuthService.swift
@@ -0,0 +1,95 @@
+import Foundation
+import UIKit
+import AuthDomain
+import AuthenticationServices
+
+@MainActor
+public struct AppleAuthService: AppleAuthServiceProtocol {
+ public init() {}
+
+ public func fetchIDToken() async throws -> String {
+ try await withCheckedThrowingContinuation { continuation in
+ // manager를 completion 클로저에서 강하게 잡아 콜백 시점까지 생존시킴
+ let manager = AppleSignInManager()
+ manager.request { result in
+ _ = manager
+ switch result {
+ case .success(let authorization):
+ if let idToken = Self.idToken(from: authorization) {
+ continuation.resume(returning: idToken)
+ } else {
+ continuation.resume(throwing: LoginError.missingIDToken)
+ }
+ case .failure(let error):
+ continuation.resume(throwing: Self.map(error))
+ }
+ }
+ }
+ }
+
+ private static func idToken(from authorization: ASAuthorization) -> String? {
+ guard
+ let credential = authorization.credential as? ASAuthorizationAppleIDCredential,
+ let tokenData = credential.identityToken
+ else { return nil }
+ return String(data: tokenData, encoding: .utf8)
+ }
+
+ private static func map(_ error: Error) -> LoginError {
+ if (error as? ASAuthorizationError)?.code == .canceled {
+ return .cancelled
+ }
+ return .networkError(error)
+ }
+}
+
+/// ASAuthorizationController를 async로 감싸기 위한 델리게이트 래퍼
+private final class AppleSignInManager: NSObject {
+ private var completion: ((Result) -> Void)?
+ private var controller: ASAuthorizationController?
+
+ func request(_ completion: @escaping (Result) -> Void) {
+ self.completion = completion
+ let request = ASAuthorizationAppleIDProvider().createRequest()
+ request.requestedScopes = [.fullName, .email]
+ let controller = ASAuthorizationController(authorizationRequests: [request])
+ controller.delegate = self
+ controller.presentationContextProvider = self
+ self.controller = controller
+ controller.performRequests()
+ }
+
+ private func finish(_ result: Result) {
+ completion?(result)
+ completion = nil
+ controller = nil
+ }
+}
+
+extension AppleSignInManager: ASAuthorizationControllerDelegate {
+ func authorizationController(
+ controller: ASAuthorizationController,
+ didCompleteWithAuthorization authorization: ASAuthorization
+ ) {
+ finish(.success(authorization))
+ }
+
+ func authorizationController(
+ controller: ASAuthorizationController,
+ didCompleteWithError error: Error
+ ) {
+ finish(.failure(error))
+ }
+}
+
+extension AppleSignInManager: ASAuthorizationControllerPresentationContextProviding {
+ func presentationAnchor(for controller: ASAuthorizationController) -> ASPresentationAnchor {
+ // ponytail: 델리게이트는 메인 스레드 콜백 — assumeIsolated로 keyWindow 조회
+ MainActor.assumeIsolated {
+ UIApplication.shared.connectedScenes
+ .compactMap { $0 as? UIWindowScene }
+ .flatMap(\.windows)
+ .first(where: \.isKeyWindow) ?? ASPresentationAnchor()
+ }
+ }
+}
diff --git a/Modules/Features/Auth/Data/Sources/Social/KakaoAuthService.swift b/Modules/Features/Auth/Data/Sources/Social/KakaoAuthService.swift
new file mode 100644
index 00000000..3464af18
--- /dev/null
+++ b/Modules/Features/Auth/Data/Sources/Social/KakaoAuthService.swift
@@ -0,0 +1,39 @@
+import Foundation
+import AuthDomain
+import KakaoSDKAuth
+import KakaoSDKUser
+import KakaoSDKCommon
+
+@MainActor
+public struct KakaoAuthService: KakaoAuthServiceProtocol {
+ public init() {}
+
+ public func fetchIDToken() async throws -> String {
+ try await withCheckedThrowingContinuation { continuation in
+ let completion: (OAuthToken?, Error?) -> Void = { token, error in
+ if let error {
+ continuation.resume(throwing: Self.map(error))
+ } else if let idToken = token?.idToken {
+ continuation.resume(returning: idToken)
+ } else {
+ continuation.resume(throwing: LoginError.missingIDToken)
+ }
+ }
+
+ if UserApi.isKakaoTalkLoginAvailable() {
+ UserApi.shared.loginWithKakaoTalk(completion: completion)
+ } else {
+ UserApi.shared.loginWithKakaoAccount(completion: completion)
+ }
+ }
+ }
+
+ private static func map(_ error: Error) -> LoginError {
+ if let sdkError = error as? SdkError,
+ case .ClientFailed(let reason, _) = sdkError,
+ reason == .Cancelled {
+ return .cancelled
+ }
+ return .networkError(error)
+ }
+}
diff --git a/Modules/Features/Auth/Domain/Sources/Models/AuthAgreement.swift b/Modules/Features/Auth/Domain/Sources/Models/AuthAgreement.swift
new file mode 100644
index 00000000..5640df59
--- /dev/null
+++ b/Modules/Features/Auth/Domain/Sources/Models/AuthAgreement.swift
@@ -0,0 +1,18 @@
+import Foundation
+
+public struct AuthAgreement: Sendable {
+ public enum AgreementType: String, Sendable {
+ case ageConfirmationOver14 = "AGE_CONFIRMATION_OVER_14"
+ case termsOfService = "TERMS_OF_SERVICE"
+ case personalInformation = "PERSONAL_INFORMATION_COLLECTION_AND_USE"
+ case marketing = "MARKETING_INFORMATION_RECEIPT"
+ }
+
+ public let type: AgreementType
+ public let agreed: Bool
+
+ public init(type: AgreementType, agreed: Bool) {
+ self.type = type
+ self.agreed = agreed
+ }
+}
diff --git a/Modules/Features/Auth/Domain/Sources/Models/AuthIDCheckResult.swift b/Modules/Features/Auth/Domain/Sources/Models/AuthIDCheckResult.swift
deleted file mode 100644
index 094bd41c..00000000
--- a/Modules/Features/Auth/Domain/Sources/Models/AuthIDCheckResult.swift
+++ /dev/null
@@ -1,4 +0,0 @@
-public enum AuthIDCheckResult {
- case exists(AuthSimpleUser)
- case notFound
-}
diff --git a/Modules/Features/Auth/Domain/Sources/Models/AuthSMSResponse.swift b/Modules/Features/Auth/Domain/Sources/Models/AuthSMSResponse.swift
deleted file mode 100644
index d096f36c..00000000
--- a/Modules/Features/Auth/Domain/Sources/Models/AuthSMSResponse.swift
+++ /dev/null
@@ -1,7 +0,0 @@
-public struct AuthSMSResponse {
- public let code: Int
-
- public init(code: Int) {
- self.code = code
- }
-}
diff --git a/Modules/Features/Auth/Domain/Sources/Models/AuthSimpleUser.swift b/Modules/Features/Auth/Domain/Sources/Models/AuthSimpleUser.swift
deleted file mode 100644
index 6c6e7d9e..00000000
--- a/Modules/Features/Auth/Domain/Sources/Models/AuthSimpleUser.swift
+++ /dev/null
@@ -1,35 +0,0 @@
-import Foundation
-import FoundationKit
-
-public struct AuthSimpleUser: Identifiable {
- public let id: Int
- public let loginId: String
- public let phoneNumber: String
- public let createdAt: String
-
- public var maskedLoginId: String {
- let prefix = loginId.prefix(4)
- let starCount = max(0, loginId.count - 4)
- let stars = String(repeating: "*", count: starCount)
- return "\(prefix)\(stars)"
- }
-
- public var formattedCreatedAt: String {
- guard let date = createdAt.newdokISODate else {
- return createdAt
- }
- return "\(date.newdokJoinDateText) 가입"
- }
-
- public init(
- id: Int,
- loginId: String,
- phoneNumber: String,
- createdAt: String
- ) {
- self.id = id
- self.loginId = loginId
- self.phoneNumber = phoneNumber
- self.createdAt = createdAt
- }
-}
diff --git a/Modules/Features/Auth/Domain/Sources/Models/AuthUser.swift b/Modules/Features/Auth/Domain/Sources/Models/AuthUser.swift
index 9dc8be6a..e784b7e0 100644
--- a/Modules/Features/Auth/Domain/Sources/Models/AuthUser.swift
+++ b/Modules/Features/Auth/Domain/Sources/Models/AuthUser.swift
@@ -2,8 +2,6 @@ import Foundation
public struct AuthUser {
public let id: Int
- public let loginId: String
- public let phoneNumber: String
public let subscribeEmail: String?
public let nickname: String
public let birthYear: String
@@ -14,8 +12,6 @@ public struct AuthUser {
public init(
id: Int,
- loginId: String,
- phoneNumber: String,
subscribeEmail: String?,
nickname: String,
birthYear: String,
@@ -25,8 +21,6 @@ public struct AuthUser {
interestIds: [Int]
) {
self.id = id
- self.loginId = loginId
- self.phoneNumber = phoneNumber
self.subscribeEmail = subscribeEmail
self.nickname = nickname
self.birthYear = birthYear
diff --git a/Modules/Features/Auth/Domain/Sources/Models/LoginError.swift b/Modules/Features/Auth/Domain/Sources/Models/LoginError.swift
index f19381f3..82d663e8 100644
--- a/Modules/Features/Auth/Domain/Sources/Models/LoginError.swift
+++ b/Modules/Features/Auth/Domain/Sources/Models/LoginError.swift
@@ -1,17 +1,19 @@
import Foundation
public enum LoginError: Error, LocalizedError {
- case invalidPassword
- case accountNotFound
+ /// 사용자가 소셜 로그인 동의/인증을 취소함
+ case cancelled
+ /// 소셜 SDK에서 idToken을 받지 못함
+ case missingIDToken
case networkError(Error)
case tokenPersistenceFailed
public var errorDescription: String? {
switch self {
- case .invalidPassword:
- return "비밀번호가 일치하지 않습니다"
- case .accountNotFound:
- return "등록되지 않은 계정이거나, 아이디를 다시 확인해주세요"
+ case .cancelled:
+ return "로그인이 취소되었습니다"
+ case .missingIDToken:
+ return "소셜 로그인 정보를 가져오지 못했습니다"
case .networkError(let error):
return "네트워크 오류: \(error.localizedDescription)"
case .tokenPersistenceFailed:
diff --git a/Modules/Features/Auth/Domain/Sources/Models/SocialLoginResultType.swift b/Modules/Features/Auth/Domain/Sources/Models/SocialLoginResultType.swift
new file mode 100644
index 00000000..6fba5b68
--- /dev/null
+++ b/Modules/Features/Auth/Domain/Sources/Models/SocialLoginResultType.swift
@@ -0,0 +1,6 @@
+import Foundation
+
+public enum SocialLoginResultType: Sendable {
+ case registered(AuthUser, accessToken: String)
+ case newUser(signupToken: String, suggestedNickname: String?)
+}
diff --git a/Modules/Features/Auth/Domain/Sources/Models/SocialProvider.swift b/Modules/Features/Auth/Domain/Sources/Models/SocialProvider.swift
new file mode 100644
index 00000000..ab0e1aca
--- /dev/null
+++ b/Modules/Features/Auth/Domain/Sources/Models/SocialProvider.swift
@@ -0,0 +1,6 @@
+import Foundation
+
+public enum SocialProvider: String, Sendable {
+ case kakao = "KAKAO"
+ case apple = "APPLE"
+}
diff --git a/Modules/Features/Auth/Domain/Sources/Repository/AuthRepository.swift b/Modules/Features/Auth/Domain/Sources/Repository/AuthRepository.swift
index 7e1d34e0..bb881d82 100644
--- a/Modules/Features/Auth/Domain/Sources/Repository/AuthRepository.swift
+++ b/Modules/Features/Auth/Domain/Sources/Repository/AuthRepository.swift
@@ -1,18 +1,14 @@
import Foundation
public protocol AuthRepository: Sendable {
- func login(loginId: String, password: String) async throws -> (AuthUser, String)
+ func login(provider: SocialProvider, idToken: String) async throws -> SocialLoginResultType
func signup(
- loginId: String,
- password: String,
- phoneNumber: String,
+ signupToken: String,
nickname: String,
birthYear: String,
- gender: String
+ gender: String,
+ agreements: [AuthAgreement]
) async throws -> AuthSignupResponse
- func checkPhoneNumber(_ phoneNumber: String) async throws -> [AuthSimpleUser]
- func checkIDDup(_ loginId: String) async throws -> AuthIDCheckResult
- func authSMS(phoneNumber: String) async throws -> AuthSMSResponse
func preInvestigate(industryId: String, interestIds: [String]) async throws -> [AuthRecommendedBrand]
func signOut() async
}
diff --git a/Modules/Features/Auth/Domain/Sources/Service/AppleAuthServiceProtocol.swift b/Modules/Features/Auth/Domain/Sources/Service/AppleAuthServiceProtocol.swift
new file mode 100644
index 00000000..b3f187c1
--- /dev/null
+++ b/Modules/Features/Auth/Domain/Sources/Service/AppleAuthServiceProtocol.swift
@@ -0,0 +1,6 @@
+import Foundation
+
+@MainActor
+public protocol AppleAuthServiceProtocol: Sendable {
+ func fetchIDToken() async throws -> String
+}
diff --git a/Modules/Features/Auth/Domain/Sources/Service/KakaoAuthServiceProtocol.swift b/Modules/Features/Auth/Domain/Sources/Service/KakaoAuthServiceProtocol.swift
new file mode 100644
index 00000000..15a27dd7
--- /dev/null
+++ b/Modules/Features/Auth/Domain/Sources/Service/KakaoAuthServiceProtocol.swift
@@ -0,0 +1,6 @@
+import Foundation
+
+@MainActor
+public protocol KakaoAuthServiceProtocol: Sendable {
+ func fetchIDToken() async throws -> String
+}
diff --git a/Modules/Features/Auth/Domain/Sources/UseCase/LoginUseCase.swift b/Modules/Features/Auth/Domain/Sources/UseCase/LoginUseCase.swift
index c07819ee..ee16182c 100644
--- a/Modules/Features/Auth/Domain/Sources/UseCase/LoginUseCase.swift
+++ b/Modules/Features/Auth/Domain/Sources/UseCase/LoginUseCase.swift
@@ -1,5 +1,5 @@
import Foundation
public protocol LoginUseCase: Sendable {
- func execute(loginId: String, password: String) async throws -> AuthUser
+ func execute(provider: SocialProvider, idToken: String) async throws -> SocialLoginResultType
}
diff --git a/Modules/Features/Auth/Domain/Sources/UseCase/SignupUseCase.swift b/Modules/Features/Auth/Domain/Sources/UseCase/SignupUseCase.swift
index 26811213..c5f96b73 100644
--- a/Modules/Features/Auth/Domain/Sources/UseCase/SignupUseCase.swift
+++ b/Modules/Features/Auth/Domain/Sources/UseCase/SignupUseCase.swift
@@ -1,27 +1,24 @@
import Foundation
public struct AuthSignupRequest {
- public let loginId: String
- public let password: String
- public let phoneNumber: String
+ public let signupToken: String
public let nickname: String
public let birthYear: String
public let gender: String
+ public let agreements: [AuthAgreement]
public init(
- loginId: String,
- password: String,
- phoneNumber: String,
+ signupToken: String,
nickname: String,
birthYear: String,
- gender: String
+ gender: String,
+ agreements: [AuthAgreement]
) {
- self.loginId = loginId
- self.password = password
- self.phoneNumber = phoneNumber
+ self.signupToken = signupToken
self.nickname = nickname
self.birthYear = birthYear
self.gender = gender
+ self.agreements = agreements
}
}
diff --git a/Modules/Features/Auth/Interface/Sources/AuthInterface.swift b/Modules/Features/Auth/Interface/Sources/AuthInterface.swift
index 64859cc4..0e0c1d14 100644
--- a/Modules/Features/Auth/Interface/Sources/AuthInterface.swift
+++ b/Modules/Features/Auth/Interface/Sources/AuthInterface.swift
@@ -12,10 +12,13 @@ public protocol AuthBuildable {
onBack: @escaping () -> Void,
onRecovery: @escaping () -> Void,
onSignup: @escaping () -> Void,
+ onNeedSignup: @escaping (String, String?) -> Void,
onAuthenticated: @escaping () -> Void
) -> AnyView
func makeSignupView(
+ signupToken: String,
+ nickname: String?,
onBack: @escaping () -> Void,
onLogin: @escaping () -> Void,
onRecovery: @escaping () -> Void,
diff --git a/Modules/Features/Auth/Project.swift b/Modules/Features/Auth/Project.swift
index 2acfb4a6..ceb60c9a 100644
--- a/Modules/Features/Auth/Project.swift
+++ b/Modules/Features/Auth/Project.swift
@@ -4,7 +4,11 @@ import ProjectDescriptionHelpers
let project = Project.feature(
name: "Auth",
domainDependencies: [.foundationKit],
- dataDependencies: [],
+ dataDependencies: [
+ .external(name: "KakaoSDKCommon"),
+ .external(name: "KakaoSDKAuth"),
+ .external(name: "KakaoSDKUser")
+ ],
featureDependencies: [.foundationKit, .featureData("Auth"), .networkKit],
testDependencies: [.foundationKit],
hasInterface: true
diff --git a/Modules/Features/Auth/Sources/AuthBuilder.swift b/Modules/Features/Auth/Sources/AuthBuilder.swift
index efbe5666..0c0be9e7 100644
--- a/Modules/Features/Auth/Sources/AuthBuilder.swift
+++ b/Modules/Features/Auth/Sources/AuthBuilder.swift
@@ -42,6 +42,7 @@ public struct AuthBuilder: AuthBuildable {
onBack: @escaping () -> Void,
onRecovery: @escaping () -> Void,
onSignup: @escaping () -> Void,
+ onNeedSignup: @escaping (String, String?) -> Void,
onAuthenticated: @escaping () -> Void
) -> AnyView {
AnyView(
@@ -49,14 +50,15 @@ public struct AuthBuilder: AuthBuildable {
viewModel: container.makeLoginViewModel(),
canGoBack: canGoBack,
onBack: onBack,
- onRecovery: onRecovery,
- onSignup: onSignup,
+ onNeedSignup: onNeedSignup,
onAuthenticated: onAuthenticated
)
)
}
public func makeSignupView(
+ signupToken: String,
+ nickname: String?,
onBack: @escaping () -> Void,
onLogin: @escaping () -> Void,
onRecovery: @escaping () -> Void,
@@ -64,7 +66,7 @@ public struct AuthBuilder: AuthBuildable {
) -> AnyView {
AnyView(
SignupView(
- viewModel: container.makeSignupViewModel(),
+ viewModel: container.makeSignupViewModel(signupToken: signupToken, nickname: nickname),
onBack: onBack,
onLogin: onLogin,
onRecovery: onRecovery,
diff --git a/Modules/Features/Auth/Sources/AuthDIContainer.swift b/Modules/Features/Auth/Sources/AuthDIContainer.swift
index 900a141c..5f8cea03 100644
--- a/Modules/Features/Auth/Sources/AuthDIContainer.swift
+++ b/Modules/Features/Auth/Sources/AuthDIContainer.swift
@@ -36,14 +36,18 @@ final class AuthDIContainer {
let repository = makeRepository()
return LoginViewModel(
loginUseCase: LoginUseCaseImpl(authRepository: repository),
+ kakaoAuthService: KakaoAuthService(),
+ appleAuthService: AppleAuthService(),
tokenStorage: tokenStorage,
appState: appState
)
}
- func makeSignupViewModel() -> SignupViewModel {
+ func makeSignupViewModel(signupToken: String, nickname: String?) -> SignupViewModel {
let repository = makeRepository()
return SignupViewModel(
+ signupToken: signupToken,
+ suggestedNickname: nickname,
authRepository: repository,
signupUseCase: SignupUseCaseImpl(authRepository: repository),
userInfoStore: userInfoStore,
diff --git a/Modules/Features/Auth/Sources/Login/View/LoginView.swift b/Modules/Features/Auth/Sources/Login/View/LoginView.swift
index 6a183b8d..a8e1d6fe 100644
--- a/Modules/Features/Auth/Sources/Login/View/LoginView.swift
+++ b/Modules/Features/Auth/Sources/Login/View/LoginView.swift
@@ -13,137 +13,58 @@ import PopupView
public struct LoginView: View {
@State private var viewModel: LoginViewModel
- @FocusState private var isIdFocused: Bool
- @FocusState private var isPwdFocused: Bool
- @State private var showHomeView = false
@State private var showToast: Bool = false
@State private var toastMessage: String = ""
-
+
private let canGoBack: Bool
private let onBack: () -> Void
- private let onRecovery: () -> Void
- private let onSignup: () -> Void
+ private let onNeedSignup: (String, String?) -> Void
private let onAuthenticated: () -> Void
public init(
viewModel: LoginViewModel,
canGoBack: Bool,
onBack: @escaping () -> Void,
- onRecovery: @escaping () -> Void,
- onSignup: @escaping () -> Void,
+ onNeedSignup: @escaping (String, String?) -> Void,
onAuthenticated: @escaping () -> Void
) {
self.viewModel = viewModel
self.canGoBack = canGoBack
self.onBack = onBack
- self.onRecovery = onRecovery
- self.onSignup = onSignup
+ self.onNeedSignup = onNeedSignup
self.onAuthenticated = onAuthenticated
}
public var body: some View {
- ZStack {
- VStack {
- HStack {
- Image(asset: DesignSystemAsset.logo)
- .frame(alignment: .leading)
- .padding(.leading, 28)
- Spacer()
- }
- .padding(.bottom, 24)
-
- VStack(alignment: .leading) {
- Text("아이디")
- .font(.hanSansNeo(14, .medium))
+ VStack {
+ Spacer()
- TextField("아이디를 입력하세요", text: $viewModel.loginId)
- .font(.hanSansNeo(14, .medium))
- .frame(height: 56)
- .customTextFieldStyle(isError: viewModel.isLoginIdError, isFocused: $isIdFocused)
- .focused($isIdFocused)
- Text(viewModel.isLoginIdError ? (viewModel.errorMessage ?? "") : " ")
- .font(.hanSansNeo(12, .medium))
- .foregroundStyle(Color.errorNormal)
+ Image(asset: DesignSystemAsset.logo)
+ .resizable()
+ .scaledToFit()
+ .frame(height: 48)
- Text("비밀번호")
- .font(.hanSansNeo(14, .medium))
- .padding(.top, 16)
+ Spacer()
+ Spacer()
- Group {
- if viewModel.isSecurePassword {
- SecureField("비밀번호를 입력해주세요", text: $viewModel.password)
- .focused($isPwdFocused)
- } else {
- TextField("비밀번호를 입력해주세요", text: $viewModel.password)
- .focused($isPwdFocused)
+ VStack(spacing: 12) {
+ kakaoButton
+ .overlay(alignment: .top) {
+ startBadge.offset(y: -30)
}
- }
- .font(.hanSansNeo(14, .medium))
- .modifier(
- PasswordFieldModifier(
- isSecure: $viewModel.isSecurePassword,
- isFocused: $isPwdFocused,
- isError: viewModel.isPasswordError
- )
- )
- Text(viewModel.isPasswordError ? (viewModel.errorMessage ?? "") : " ")
- .font(.hanSansNeo(12, .medium))
- .foregroundStyle(Color.errorNormal)
- HStack {
- Spacer()
- Button("아이디/비밀번호 찾기") {
- onRecovery()
- }
- .font(.hanSansNeo(14, .medium))
- .foregroundStyle(Color.captionNeutral)
- }
- .padding(.top, 10)
+ appleButton
- Spacer()
-
- Button {
- viewModel.login {
- onAuthenticated()
- }
- } label: {
- Text("로그인")
- .font(.hanSansNeo(16, .bold))
- .disabled(!viewModel.isLoginEnabled)
- .frame(maxWidth: .infinity)
- .frame(height: 48)
- .background(viewModel.isLoginEnabled ? Color.primaryNormal : Color.lineNeutral)
- .foregroundColor(viewModel.isLoginEnabled ? .white : Color.captionDisabled)
- .cornerRadius(4)
- .contentShape(Rectangle())
+ Button("비회원으로 이용하기") {
+ viewModel.loginAsGuest()
+ onAuthenticated()
}
- .disabled(!viewModel.isLoginEnabled || viewModel.isLoading)
-
- HStack {
- Button("비회원으로 이용하기") {
- viewModel.loginAsGuest()
- onAuthenticated()
- }
- .font(.hanSansNeo(14, .medium))
- .foregroundStyle(Color.captionNeutral)
- .padding(.leading, 80)
-
- Text("|")
- .foregroundStyle(Color.lineAlternative)
-
- Button("회원가입") {
- onSignup()
- }
- .font(.hanSansNeo(14, .medium))
- .foregroundStyle(Color.primaryNormal)
- }
- .padding(.bottom, 56)
+ .font(.hanSansNeo(14, .medium))
+ .foregroundStyle(Color.captionNeutral)
+ .padding(.top, 8)
}
.padding(.horizontal, 24)
- }
- }
- .safeAreaInset(edge: .top, spacing: 0) {
- Color.clear.frame(height: 20)
+ .padding(.bottom, 56)
}
.ignoresSafeArea(.keyboard)
.navigationBarTitleDisplayMode(.inline)
@@ -168,17 +89,9 @@ public struct LoginView: View {
.toolbar {
ToolbarItem(placement: .navigationBarLeading) {
if canGoBack {
- BackButton(action: {
- onBack()
- })
+ BackButton(action: { onBack() })
}
}
-
- ToolbarItem(placement: .principal) {
- Text("로그인")
- .font(.hanSansNeo(16, .bold))
- .foregroundStyle(Color.captionHeavy)
- }
}
.serverErrorPopup(
error: $viewModel.currentError,
@@ -186,4 +99,85 @@ public struct LoginView: View {
onRetry: {}
)
}
+
+ private var kakaoButton: some View {
+ socialButton(
+ title: "카카오로 계속하기",
+ background: Color(red: 254 / 255, green: 229 / 255, blue: 0),
+ foreground: Color.black.opacity(0.85)
+ ) {
+ Image(asset: DesignSystemAsset.kakaoBubble)
+ .renderingMode(.template)
+ .resizable()
+ .scaledToFit()
+ .frame(width: 16, height: 16)
+ .foregroundColor(Color.black.opacity(0.85))
+ } action: {
+ viewModel.loginWithKakao {
+ onAuthenticated()
+ } onNeedSignup: { signupToken, nickname in
+ onNeedSignup(signupToken, nickname)
+ }
+ }
+ }
+
+ private var appleButton: some View {
+ socialButton(
+ title: "Apple로 계속하기",
+ background: .black,
+ foreground: .white
+ ) {
+ Image(systemName: "apple.logo")
+ .font(.system(size: 20))
+ .foregroundColor(.white)
+ } action: {
+ viewModel.loginWithApple {
+ onAuthenticated()
+ } onNeedSignup: { signupToken, nickname in
+ onNeedSignup(signupToken, nickname)
+ }
+ }
+ }
+
+ private func socialButton(
+ title: String,
+ background: Color,
+ foreground: Color,
+ @ViewBuilder icon: () -> some View,
+ action: @escaping () -> Void
+ ) -> some View {
+ Button(action: action) {
+ ZStack {
+ Text(title)
+ .font(.hanSansNeo(16, .bold))
+ .foregroundColor(foreground)
+ HStack {
+ icon()
+ Spacer()
+ }
+ .padding(.leading, 20)
+ }
+ .frame(maxWidth: .infinity)
+ .frame(height: 56)
+ .background(background)
+ .clipShape(RoundedRectangle(cornerRadius: 16, style: .continuous))
+ .contentShape(Rectangle())
+ }
+ .disabled(viewModel.isLoading)
+ }
+
+ private var startBadge: some View {
+ VStack(spacing: 0) {
+ Text("3초만에 시작하기")
+ .font(.hanSansNeo(12, .bold))
+ .foregroundStyle(.white)
+ .padding(.horizontal, 12)
+ .padding(.vertical, 6)
+ .background(Color(hex: "FB4F4F"), in: Capsule())
+ Image(systemName: "arrowtriangle.down.fill")
+ .font(.system(size: 10))
+ .foregroundStyle(Color(hex: "FB4F4F"))
+ .offset(y: -2)
+ }
+ }
}
diff --git a/Modules/Features/Auth/Sources/Login/View/ViewModel/LoginViewModel.swift b/Modules/Features/Auth/Sources/Login/View/ViewModel/LoginViewModel.swift
index 87454234..fe4ec4e6 100644
--- a/Modules/Features/Auth/Sources/Login/View/ViewModel/LoginViewModel.swift
+++ b/Modules/Features/Auth/Sources/Login/View/ViewModel/LoginViewModel.swift
@@ -13,88 +13,108 @@ import Observation
@MainActor
public final class LoginViewModel: ErrorHandling {
private let loginUseCase: LoginUseCase
+ private let kakaoAuthService: KakaoAuthServiceProtocol
+ private let appleAuthService: AppleAuthServiceProtocol
private let tokenStorage: TokenStorageProtocol
private let appState: AppState
- public var loginId: String
- public var password: String
- public var isUserIdValid: Bool
- public var isUserPwdValid: Bool
- public var errorMessage: String?
public var isLoading: Bool
- public var isSecurePassword: Bool = true
- public var user: AuthUser?
- public var isLoginIdError: Bool = false
- public var isPasswordError: Bool = false
public var currentError: AppError?
public init(
loginUseCase: LoginUseCase,
+ kakaoAuthService: KakaoAuthServiceProtocol,
+ appleAuthService: AppleAuthServiceProtocol,
tokenStorage: TokenStorageProtocol,
appState: AppState
) {
self.loginUseCase = loginUseCase
+ self.kakaoAuthService = kakaoAuthService
+ self.appleAuthService = appleAuthService
self.tokenStorage = tokenStorage
self.appState = appState
- self.loginId = ""
- self.password = ""
- self.isUserIdValid = false
- self.isUserPwdValid = false
self.isLoading = false
- self.errorMessage = nil
}
- public func login(onSuccess: @escaping () -> Void) {
+ /// 카카오 로그인: SDK로 idToken 획득 후 서버 로그인
+ public func loginWithKakao(
+ onLoggedIn: @escaping () -> Void,
+ onNeedSignup: @escaping (_ signupToken: String, _ suggestedNickname: String?) -> Void
+ ) {
guard !isLoading else { return }
isLoading = true
Task {
- defer { isLoading = false }
-
do {
- _ = try await loginUseCase.execute(loginId: loginId, password: password)
+ let idToken = try await kakaoAuthService.fetchIDToken()
+ try await authenticate(
+ provider: .kakao,
+ idToken: idToken,
+ onLoggedIn: onLoggedIn,
+ onNeedSignup: onNeedSignup
+ )
+ } catch {
+ isLoading = false
+ handle(error)
+ }
+ }
+ }
- errorMessage = nil
- isLoginIdError = false
- isPasswordError = false
+ /// 애플 로그인: 서비스로 idToken 획득 후 서버 로그인 (카카오와 동일 흐름)
+ public func loginWithApple(
+ onLoggedIn: @escaping () -> Void,
+ onNeedSignup: @escaping (_ signupToken: String, _ suggestedNickname: String?) -> Void
+ ) {
+ guard !isLoading else { return }
+ isLoading = true
- appState.login()
- onSuccess()
- } catch let error as LoginError {
- handleLoginError(error)
+ Task {
+ do {
+ let idToken = try await appleAuthService.fetchIDToken()
+ try await authenticate(
+ provider: .apple,
+ idToken: idToken,
+ onLoggedIn: onLoggedIn,
+ onNeedSignup: onNeedSignup
+ )
} catch {
- errorMessage = "로그인에 실패했습니다"
- isPasswordError = false
- isLoginIdError = false
- handleError(error, feature: "login", operation: "login")
+ isLoading = false
+ handle(error)
}
}
}
- private func handleLoginError(_ error: LoginError) {
- switch error {
- case .invalidPassword:
- errorMessage = error.localizedDescription
- isPasswordError = true
- isLoginIdError = false
- case .accountNotFound:
- errorMessage = error.localizedDescription
- isLoginIdError = true
- isPasswordError = false
- case .networkError(let underlying):
- isPasswordError = false
- isLoginIdError = false
- handleError(underlying, feature: "login", operation: "login")
- return
- case .tokenPersistenceFailed:
- isPasswordError = false
- isLoginIdError = false
+ private func authenticate(
+ provider: SocialProvider,
+ idToken: String,
+ onLoggedIn: @escaping () -> Void,
+ onNeedSignup: @escaping (_ signupToken: String, _ suggestedNickname: String?) -> Void
+ ) async throws {
+ defer { isLoading = false }
+ let result = try await loginUseCase.execute(provider: provider, idToken: idToken)
+ currentError = nil
+
+ switch result {
+ case .registered:
+ appState.login()
+ onLoggedIn()
+ case let .newUser(signupToken, suggestedNickname):
+ onNeedSignup(signupToken, suggestedNickname)
}
- currentError = .userMessage(error.localizedDescription)
}
- public var isLoginEnabled: Bool {
- !loginId.isEmpty && !password.isEmpty
+ private func handle(_ error: Error) {
+ switch error {
+ case LoginError.cancelled:
+ // 사용자가 취소 — 조용히 무시
+ break
+ case LoginError.missingIDToken:
+ currentError = .userMessage(LoginError.missingIDToken.localizedDescription)
+ case LoginError.networkError(let underlying):
+ handleError(underlying, feature: "login", operation: "socialLogin")
+ default:
+ handleError(error, feature: "login", operation: "socialLogin")
+ }
}
public func loginAsGuest() {
diff --git a/Modules/Features/Auth/Sources/Signup/Curation/CurationView.swift b/Modules/Features/Auth/Sources/Signup/Curation/CurationView.swift
index 43cf0539..4fae6c83 100644
--- a/Modules/Features/Auth/Sources/Signup/Curation/CurationView.swift
+++ b/Modules/Features/Auth/Sources/Signup/Curation/CurationView.swift
@@ -56,7 +56,6 @@ private extension CurationView {
.scrollIndicators(.hidden)
Button {
- viewModel.reset()
onAuthenticated()
} label: {
Text("메인으로")
diff --git a/Modules/Features/Auth/Sources/Signup/Popup/SignupPopupView.swift b/Modules/Features/Auth/Sources/Signup/Popup/SignupPopupView.swift
deleted file mode 100644
index f80386a9..00000000
--- a/Modules/Features/Auth/Sources/Signup/Popup/SignupPopupView.swift
+++ /dev/null
@@ -1,119 +0,0 @@
-//
-// SignupPopupView.swift
-// Signup
-//
-// Created by 권민재 on 4/7/25.
-// Copyright © 2025 Newdok. All rights reserved.
-//
-
-import SwiftUI
-import AuthDomain
-import DesignSystem
-
-public struct SignupPopupView: View {
- var infos: [AuthSimpleUser]
- var onClose: () -> Void
- var onLogin: () -> Void
- var onRecovery: () -> Void
-
- public var body: some View {
- VStack(spacing: 0) {
- Image(asset: DesignSystemAsset.warning)
- .resizable()
- .frame(width: 80, height: 80)
- .padding(.top, 20)
- .padding(.bottom, 6)
-
- Text("이미 가입된 정보입니다.")
- .font(.hanSansNeo(18, .bold))
-
- Text("한 번호로 최대 3개의\n계정을 만들 수 있어요.")
- .font(.hanSansNeo(14, .regular))
- .foregroundStyle(Color.captionBody)
- .multilineTextAlignment(.center)
- .padding(.top, 6)
-
- VStack(alignment: .leading) {
- ForEach(0..?
- private var verificationTask: Task?
- private var idCheckTask: Task?
private var interestsTask: Task?
private var signupTask: Task?
- // MARK: password
- public var password: String = ""
- public var checkedPassword: String = ""
-
- // MARK: profile
+ // MARK: - Profile
public var nickname: String = ""
public var birthYear: String = ""
public var gender: String = ""
+ // MARK: - Agreements
+ public var agreeOver14: Bool = false
+ public var agreeService: Bool = false
+ public var agreePersonalInfo: Bool = false
+ public var agreeMarketing: Bool = false
+
public var user: AuthUser?
- // MARK: Investigate
+ // MARK: - Investigate
public var myIndustry: String = ""
public var selectedInterests: Set = []
public var recommendedPost: [AuthRecommendedBrand] = []
public var isCurationLoading = false
public init(
+ signupToken: String,
+ suggestedNickname: String?,
authRepository: AuthRepository,
signupUseCase: SignupUseCase,
userInfoStore: UserInfoStoreProtocol,
selectableItemStore: SelectableItemStoreProtocol,
appState: AppState
) {
+ self.signupToken = signupToken
+ self.nickname = suggestedNickname ?? ""
self.authRepository = authRepository
self.signupUseCase = signupUseCase
self.userInfoStore = userInfoStore
@@ -122,179 +70,12 @@ public final class SignupViewModel: ErrorHandling {
public func goToNextStep() {
if let next = SignupStep(rawValue: currentStep.rawValue + 1) {
currentStep = next
- resendFailureCount = 0
- stopTimer()
- isRequestSent = false
- timerRemaining = 180
- showError = false
- skipUserCheck = false
- shouldFocusVerificationCode = false
}
}
public func goToPreviousStep() {
if let prev = SignupStep(rawValue: currentStep.rawValue - 1) {
currentStep = prev
- resendFailureCount = 0
- stopTimer()
- isRequestSent = false
- timerRemaining = 180
- showError = false
- skipUserCheck = false
- shouldFocusVerificationCode = false
- }
- }
-
- public func resetVerificationState() {
- stopTimer()
- isShowPopup = false
- isRequestSent = false
- timerRemaining = 180
- showError = false
- enteredVerificationCode = ""
- resendFailureCount = 0
- verificationCode = ""
- skipUserCheck = false
- shouldFocusVerificationCode = false
- }
-
- // MARK: - 인증코드 전송 (초기/재전송 공통)
- public func sendVerificationCode(skipCheck: Bool = false) {
- #if DEBUG
- enteredVerificationCode = ""
- showError = false
- timerRemaining = 180
- isRequestSent = true
- startTimer()
- shouldFocusVerificationCode = true
- verificationCode = "121212"
- #else
- guard resendFailureCount < 3 else {
- isShowPopup = true
- return
- }
-
- if isRequestSent {
- resendFailureCount += 1
- }
- verificationTask?.cancel()
- verificationTask = Task {
- do {
- isLoading = true
- userList = []
- isShowUserList = false
- errorMessage = nil
- enteredVerificationCode = ""
- showError = false
- timerRemaining = 180
-
- if !skipCheck && !skipUserCheck {
- let users = try await authRepository.checkPhoneNumber(phoneNumber)
- if !users.isEmpty {
- userList = users
- isShowUserList = true
- showAlreadyRegisteredAlert = true
- isLoading = false
- return
- }
- }
-
- let result = try await authRepository.authSMS(phoneNumber: phoneNumber)
- verificationCode = String(result.code)
- await MainActor.run {
- isRequestSent = true
- startTimer()
- shouldFocusVerificationCode = true
- }
- } catch {
- handleError(error, feature: "signup", operation: "sendVerificationCode")
- errorMessage = currentError?.userFacingMessage
- resendFailureCount += 1
- }
- isLoading = false
- }
- #endif
- }
-
- // MARK: - 인증번호 검증
- func verifyCode() -> Bool {
- guard isRequestSent else { return false }
- if timerRemaining <= 0 {
- showError = true
- return false
- }
-
- #if DEBUG
- if enteredVerificationCode == "121212" {
- stopTimer()
- resendFailureCount = 0
- showError = false
- return true
- }
- #endif
-
- if enteredVerificationCode == verificationCode {
- stopTimer()
- resendFailureCount = 0
- showError = false
- return true
- } else {
- showError = true
- return false
- }
- }
-
- // MARK: - Timer
- private func startTimer() {
- stopTimer()
- isTimerActive = true
- timerTask = Task { [weak self] in
- while !Task.isCancelled {
- guard let vm = self, vm.timerRemaining > 0 else { break }
- do {
- try await Task.sleep(for: .seconds(1))
- } catch {
- break
- }
- if Task.isCancelled { break }
- vm.timerRemaining -= 1
- }
- if let vm = self, vm.timerRemaining <= 0 {
- vm.isTimerActive = false
- vm.showError = true
- }
- }
- }
-
- private func stopTimer() {
- isTimerActive = false
- timerTask?.cancel()
- timerTask = nil
- }
-
- // MARK: - ID Dup Check
- public func checkIDDup() {
- guard SignupFormatStyle.validateID(loginID) == nil else {
- isIDAvailable = nil
- return
- }
-
- isIDAvailable = nil
- idCheckTask?.cancel()
- idCheckTask = Task { @MainActor in
- do {
- let result = try await authRepository.checkIDDup(loginID)
- switch result {
- case .exists:
- isIDAvailable = false
- case .notFound:
- isIDAvailable = true
- }
- } catch {
- guard !Task.isCancelled else { return }
- isIDAvailable = nil
- handleError(error, feature: "signup", operation: "checkIDDup")
- }
}
}
@@ -358,12 +139,16 @@ public final class SignupViewModel: ErrorHandling {
signupTask = Task {
do {
let request = AuthSignupRequest(
- loginId: loginID,
- password: password,
- phoneNumber: phoneNumber,
+ signupToken: signupToken,
nickname: nickname,
birthYear: birthYear,
- gender: gender
+ gender: gender,
+ agreements: [
+ AuthAgreement(type: .ageConfirmationOver14, agreed: agreeOver14),
+ AuthAgreement(type: .termsOfService, agreed: agreeService),
+ AuthAgreement(type: .personalInformation, agreed: agreePersonalInfo),
+ AuthAgreement(type: .marketing, agreed: agreeMarketing)
+ ]
)
let resultUser = try await signupUseCase.execute(request: request)
@@ -380,40 +165,4 @@ public final class SignupViewModel: ErrorHandling {
}
}
}
-
- // MARK: - 초기화 메서드
- public func reset() {
- currentStep = .phoneVerification
-
- phoneNumber = ""
- enteredVerificationCode = ""
- verificationCode = ""
- resendFailureCount = 0
-
- loginID = ""
- isIDAvailable = nil
- password = ""
- nickname = ""
- birthYear = ""
- gender = ""
-
- user = nil
- recommendedPost = []
- selectedInterests.removeAll()
- myIndustry = ""
-
- errorMessage = nil
- showError = false
- isLoading = false
- isRequestSent = false
- timerRemaining = 180
- isShowPopup = false
-
- stopTimer()
- verificationTask?.cancel()
- idCheckTask?.cancel()
- interestsTask?.cancel()
- signupTask?.cancel()
- isCurationLoading = false
- }
}
diff --git a/Modules/Features/Auth/Sources/Signup/Step/AgreeView.swift b/Modules/Features/Auth/Sources/Signup/Step/AgreeView.swift
index 275f37b8..e0e68d8a 100644
--- a/Modules/Features/Auth/Sources/Signup/Step/AgreeView.swift
+++ b/Modules/Features/Auth/Sources/Signup/Step/AgreeView.swift
@@ -10,11 +10,6 @@ import DesignSystem
import WebKit
public struct AgreeView: View {
- @State private var isOver14 = false
- @State private var serviceAgreement = false
- @State private var personalInfoAgreement = false
- @State private var marketingAgreement = false
-
@State private var showSheet = false
@State private var sheetType: SheetType?
@@ -33,31 +28,31 @@ public struct AgreeView: View {
VStack(spacing: 16) {
// 버튼 없는 행
- SimpleAgreementRow(title: "만 14세 이상 확인", required: true, isChecked: $isOver14)
-
+ SimpleAgreementRow(title: "만 14세 이상 확인", required: true, isChecked: $viewModel.agreeOver14)
+
// 버튼 있는 행
TappableAgreementRow(
mainText: "서비스 이용",
required: true,
- isChecked: $serviceAgreement,
+ isChecked: $viewModel.agreeService,
onTextTap: {
sheetType = .terms
showSheet = true
}
)
-
+
TappableAgreementRow(
mainText: "개인정보 수집 및 이용",
required: true,
- isChecked: $personalInfoAgreement,
+ isChecked: $viewModel.agreePersonalInfo,
onTextTap: {
sheetType = .privacy
showSheet = true
}
)
-
+
// 버튼 없는 행
- SimpleAgreementRow(title: "마케팅 활용/광고성 정보 수신", required: false, isChecked: $marketingAgreement)
+ SimpleAgreementRow(title: "마케팅 활용/광고성 정보 수신", required: false, isChecked: $viewModel.agreeMarketing)
}
.padding(.top, 8)
.padding(.horizontal, 24)
@@ -71,11 +66,11 @@ public struct AgreeView: View {
.font(.hanSansNeo(16, .medium))
Spacer()
Button {
- let toggle = !(isOver14 && serviceAgreement && personalInfoAgreement && marketingAgreement)
- isOver14 = toggle
- serviceAgreement = toggle
- personalInfoAgreement = toggle
- marketingAgreement = toggle
+ let toggle = !isAllAgreed
+ viewModel.agreeOver14 = toggle
+ viewModel.agreeService = toggle
+ viewModel.agreePersonalInfo = toggle
+ viewModel.agreeMarketing = toggle
} label: {
Image(asset: isAllAgreed ? DesignSystemAsset.allcheck : DesignSystemAsset.uncheck)
.frame(width: 44, height: 44)
@@ -128,11 +123,11 @@ public struct AgreeView: View {
}
private var isSignUpEnabled: Bool {
- isOver14 && serviceAgreement && personalInfoAgreement
+ viewModel.agreeOver14 && viewModel.agreeService && viewModel.agreePersonalInfo
}
private var isAllAgreed: Bool {
- isOver14 && serviceAgreement && personalInfoAgreement && marketingAgreement
+ viewModel.agreeOver14 && viewModel.agreeService && viewModel.agreePersonalInfo && viewModel.agreeMarketing
}
enum SheetType {
diff --git a/Modules/Features/Auth/Sources/Signup/Step/IDInputView.swift b/Modules/Features/Auth/Sources/Signup/Step/IDInputView.swift
deleted file mode 100644
index c4510193..00000000
--- a/Modules/Features/Auth/Sources/Signup/Step/IDInputView.swift
+++ /dev/null
@@ -1,99 +0,0 @@
-//
-// IDInputView.swift
-// Newdok
-//
-// Created by 권민재 on 2/20/25.
-//
-
-import SwiftUI
-import DesignSystem
-
-
-public struct IDInputView: View {
- @FocusState private var isIDFocused: Bool
- @Bindable private var viewModel: SignupViewModel
-
- public init(viewModel: SignupViewModel) {
- self.viewModel = viewModel
- }
-
- public var body: some View {
- ZStack(alignment: .bottom) {
- ScrollView {
- VStack(alignment: .leading, spacing: 0) {
- Text("아이디를\n입력해주세요.")
- .font(.hanSansNeo(20, .bold))
- .padding(.top, 24)
-
- Text("아이디")
- .font(.hanSansNeo(14, .medium))
- .foregroundStyle(Color.captionNeutral)
- .padding(.top, 42)
- .padding(.bottom, 8)
-
- HStack {
- TextField("6~12자,영문/숫자 조합", text: $viewModel.loginID)
- .font(.hanSansNeo(14, .medium))
- .customTextFieldStyle(isError: viewModel.isIDErrorState, isFocused: $isIDFocused)
- .frame(height: 56)
- .focused($isIDFocused)
-
- Button("중복확인") {
- viewModel.checkIDDup()
- }
- .font(.hanSansNeo(14, .bold))
- .frame(width: 94, height: 48)
- .foregroundStyle(viewModel.isIDCheckEnabled ? Color.primaryNormal : Color.captionDisabled)
- .overlay {
- RoundedRectangle(cornerRadius: 4)
- .stroke(viewModel.isIDCheckEnabled ? Color.primaryNormal : Color.captionDisabled, lineWidth: 1)
- }
- .disabled(!viewModel.isIDCheckEnabled)
- }
-
- if let message = viewModel.idValidationMessage {
- Text(message.text)
- .font(.hanSansNeo(12, .medium))
- .foregroundStyle(message.color)
- .padding(.top, 8)
- }
-
- Spacer().frame(height: 100)
- }
- .padding(.horizontal, 24)
- }
-
- .ignoresSafeArea(.keyboard)
-
- Button(action: {
- viewModel.goToNextStep()
- }) {
- Text("다음")
- .font(.hanSansNeo(14, .bold))
- .frame(height: 48)
- .frame(maxWidth: .infinity)
- .background(viewModel.isIDAvailable == true ? Color.primaryNormal : Color.lineNeutral)
- .foregroundColor(.white)
- .cornerRadius(4)
- }
- .disabled(viewModel.isIDAvailable != true)
- .padding(.horizontal, 24)
- .padding(.bottom, 20)
- }
- .scrollDisabled(true)
- .toolbar {
- ToolbarItemGroup(placement: .keyboard) {
- Spacer()
- Button("Done") {
- isIDFocused = false
- }
- .foregroundStyle(Color.primaryNormal)
- .font(.hanSansNeo(17, .medium))
- }
- }
- }
-}
-
-// #Preview {
-// IDInputView(nextStep: {})
-// }
diff --git a/Modules/Features/Auth/Sources/Signup/Step/PhoneVerificationView.swift b/Modules/Features/Auth/Sources/Signup/Step/PhoneVerificationView.swift
deleted file mode 100644
index 471fbaf8..00000000
--- a/Modules/Features/Auth/Sources/Signup/Step/PhoneVerificationView.swift
+++ /dev/null
@@ -1,248 +0,0 @@
-//
-// PhoneVerificationView.swift
-// Newdok
-//
-// Created by 권민재 on 2/18/25.
-//
-import SwiftUI
-
-import DesignSystem
-import Shared
-import FoundationKit
-import PopupView
-import AuthDomain
-
-public struct PhoneVerificationView: View {
- @FocusState private var isPhoneFieldFocused: Bool
- @FocusState private var isVerificationCodeFocused: Bool
-
- @Bindable private var viewModel: SignupViewModel
- private let onLogin: () -> Void
- private let onRecovery: () -> Void
-
- public init(
- viewModel: SignupViewModel,
- onLogin: @escaping () -> Void,
- onRecovery: @escaping () -> Void
- ) {
- self.viewModel = viewModel
- self.onLogin = onLogin
- self.onRecovery = onRecovery
- }
-
- public var body: some View {
- ZStack(alignment: .bottom) {
- ScrollView(.vertical, showsIndicators: false) {
- VStack(alignment: .leading, spacing: 0) {
- Text("본인 확인을 위해\n휴대폰 번호를 입력해주세요.")
- .font(.hanSansNeo(20, .bold))
- .padding(.leading, 24)
- .padding(.top, 24)
-
- Text("휴대폰 번호")
- .font(.hanSansNeo(14, .medium))
- .foregroundStyle(Color.captionNeutral)
- .padding(.top, 42)
- .padding(.leading, 28)
- .padding(.bottom, 8)
-
- HStack(spacing: 8) {
- HStack {
- Image(asset: DesignSystemAsset.phone)
- .renderingMode(.template)
- .foregroundStyle(isPhoneFieldFocused ? Color.captionStrong : Color.captionAssistive)
- .padding(.leading, 20)
-
- TextField("-구분 없이 입력", text: $viewModel.phoneNumber)
- .font(.hanSansNeo(14, .medium))
- .keyboardType(.numberPad)
- .focused($isPhoneFieldFocused)
- .padding(.vertical, 12)
- .padding(.horizontal, 8)
- .onChange(of: viewModel.phoneNumber) { _, newValue in
- viewModel.phoneNumber = newValue.newdokDigitsOnly(limit: 11)
- }
- }
- .frame(height: 48)
- .background(Color.white)
- .overlay(
- RoundedRectangle(cornerRadius: 4)
- .stroke(isPhoneFieldFocused ? Color.primaryNormal : Color.lineAlternative, lineWidth: 1)
- )
-
- // 일반적인 인증 요청/재전송 버튼 (항상 표시)
- Button(viewModel.isRequestSent ? "재전송" : "인증 요청") {
- viewModel.enteredVerificationCode = ""
- viewModel.showError = false
- // 재전송인 경우 skipCheck: true로 호출
- if viewModel.isRequestSent {
- viewModel.sendVerificationCode(skipCheck: true)
- } else {
- viewModel.sendVerificationCode()
- }
- }
- .font(.hanSansNeo(14, .bold))
- .foregroundStyle(!viewModel.isPhoneNumberValid ? Color.grayLight : Color.primaryNormal)
- .disabled(!viewModel.isPhoneNumberValid)
- .frame(width: 94, height: 48)
- .overlay(
- RoundedRectangle(cornerRadius: 4)
- .stroke(!viewModel.isPhoneNumberValid ? Color.captionDisabled : Color.primaryNormal, lineWidth: 1)
- )
- }
- .padding(.horizontal, 24)
-
- if viewModel.isRequestSent {
- VStack(alignment: .leading) {
- Text("인증번호")
- .font(.hanSansNeo(14, .medium))
- .padding(.leading, 24)
- .padding(.top, 24)
-
- HStack {
- HStack {
- Image(asset: DesignSystemAsset.lineLock)
- .renderingMode(.template)
- .foregroundStyle(isVerificationCodeFocused ? Color.captionStrong : Color.captionAssistive)
- TextField("6자리 숫자 입력", text: $viewModel.enteredVerificationCode)
- .keyboardType(.numberPad)
- .font(.hanSansNeo(14, .medium))
- .focused($isVerificationCodeFocused)
- .onChange(of: viewModel.enteredVerificationCode) { _, newValue in
- viewModel.enteredVerificationCode = newValue.newdokDigitsOnly(limit: 6)
- }
- }
- .padding(.horizontal, 16)
- .frame(height: 50)
-
- Text(viewModel.timerRemaining > 0 ? NewdokVerificationTimerFormatStyle().format(viewModel.timerRemaining) : "만료됨")
- .foregroundStyle(Color.captionStrong)
- .font(.hanSansNeo(12, .medium))
- .padding(.trailing, 10)
- }
- .background(viewModel.showError || viewModel.timerRemaining <= 0 ? Color.red.opacity(0.1) : .white)
- .overlay(
- RoundedRectangle(cornerRadius: 5)
- .stroke(viewModel.showError || viewModel.timerRemaining <= 0 ? .red : (isVerificationCodeFocused ? Color.primaryNormal : Color.lineAlternative), lineWidth: 1)
- )
- .padding(.horizontal, 24)
-
- Text(viewModel.timerRemaining <= 0 ? "인증번호를 재전송해주세요." : (viewModel.showError ? "인증번호를 다시 확인해주세요." : "문자가 오지 않는다면 '재전송'을 눌러주세요."))
- .font(.hanSansNeo(12, .medium))
- .foregroundStyle(viewModel.timerRemaining <= 0 || viewModel.showError ? .red : Color.captionBody)
- .padding(.leading, 24)
- .padding(.top, 6)
- }
- }
-
- Spacer().frame(height: 100)
- }
- }
- .toolbar {
- ToolbarItemGroup(placement: .keyboard) {
- Spacer()
- Button("Done") {
- isPhoneFieldFocused = false
- isVerificationCodeFocused = false
- }
- .foregroundStyle(Color.primaryNormal)
- .font(.hanSansNeo(17, .medium))
- }
- }
-
- .onChange(of: viewModel.shouldFocusVerificationCode) { _, shouldFocus in
- if shouldFocus {
- // UI 업데이트 완료를 위한 약간의 지연
- Task {
- try await Task.sleep(for: .seconds(0.1))
- isVerificationCodeFocused = true
- }
- viewModel.shouldFocusVerificationCode = false // 상태 리셋
- }
- }
-
- if viewModel.isRequestSent {
- Button(action: {
- if viewModel.verifyCode() {
- viewModel.goToNextStep()
- }
- }) {
- Text("다음")
- .font(.hanSansNeo(14, .bold))
- .frame(height: 48)
- .frame(maxWidth: .infinity)
- .background((viewModel.enteredVerificationCode.count < 6 || viewModel.timerRemaining <= 0) ? Color.lineNeutral : Color.primaryNormal)
- .foregroundColor(.white)
- .cornerRadius(4)
- }
- .disabled(viewModel.enteredVerificationCode.count < 6 || viewModel.timerRemaining <= 0)
- .padding(.horizontal, 24)
- .padding(.bottom, 20)
- .contentShape(Rectangle())
- }
- }
- .scrollDisabled(true)
- .ignoresSafeArea(.keyboard)
- .onAppear {
- // 화면 진입 시 휴대폰 번호 입력 필드로 포커스
- isPhoneFieldFocused = true
- }
- .popup(isPresented: $viewModel.isShowUserList) {
- SignupPopupView(
- infos: viewModel.userList,
- onClose: {
- viewModel.isShowUserList = false
- // 기존 사용자가 3명 미만일 때만 계속 진행
- if viewModel.userList.count < 3 {
- viewModel.skipUserCheck = true
- viewModel.sendVerificationCode(skipCheck: true)
- }
- },
- onLogin: {
- viewModel.isShowUserList = false
- onLogin()
- },
- onRecovery: {
- viewModel.isShowUserList = false
- onRecovery()
- }
- )
- } customize: {
- $0
- .type(.default)
- .position(.center)
- .animation(.easeInOut)
- .closeOnTapOutside(false)
- .closeOnTap(false)
- .allowTapThroughBG(false)
- .backgroundColor(Color.bgPopupDim.opacity(0.6))
- }
-
- .popup(isPresented: $viewModel.isShowPopup) {
- AuthFailView(onClose: {
- viewModel.resetVerificationState()
- })
- } customize: {
- $0
- .type(.default)
- .position(.center)
- .animation(.easeInOut)
- .closeOnTapOutside(false)
- .closeOnTap(false)
- .allowTapThroughBG(false)
- .backgroundColor(Color.bgPopupDim.opacity(0.6))
- }
- }
-
-}
-
-struct PrimaryButtonStyle: ButtonStyle {
- func makeBody(configuration: Configuration) -> some View {
- configuration.label
- .frame(maxWidth: .infinity)
- .background(configuration.isPressed ? .gray : .primaryNormal)
- .font(.hanSansNeo(14, .medium))
- .foregroundColor(.white)
- .cornerRadius(8)
- }
-}
diff --git a/Modules/Features/Auth/Sources/Signup/Step/PwInputView.swift b/Modules/Features/Auth/Sources/Signup/Step/PwInputView.swift
deleted file mode 100644
index c33130d5..00000000
--- a/Modules/Features/Auth/Sources/Signup/Step/PwInputView.swift
+++ /dev/null
@@ -1,164 +0,0 @@
-//
-// PwInputView.swift
-// Newdok
-//
-// Created by 권민재 on 2/20/25.
-//
-
-import SwiftUI
-import DesignSystem
-import AuthDomain
-import FoundationKit
-
-public struct PwInputView: View {
- @State private var isSecurePassword: Bool = true
- @State private var isSecureConfirmPassword: Bool = true
-
- @FocusState private var isPasswordFocused: Bool
- @FocusState private var isConfirmPasswordFocused: Bool
-
- @Bindable private var viewModel: SignupViewModel
-
- public init(viewModel: SignupViewModel) {
- self.viewModel = viewModel
- }
-
- public var body: some View {
- ZStack(alignment: .bottom) {
- ScrollView {
- VStack(alignment: .leading) {
- Text("비밀번호를\n입력해주세요.")
- .font(.hanSansNeo(20, .bold))
- .padding(.top, 24)
-
- // MARK: - 비밀번호
- Text("비밀번호")
- .font(.hanSansNeo(14, .medium))
- .foregroundStyle(Color.captionNeutral)
- .padding(.top, 42)
-
- Group {
- if isSecurePassword {
- SecureField("8자 이상, 영문/숫자 조합", text: $viewModel.password)
- .font(.hanSansNeo(14, .medium))
- } else {
- TextField("8자 이상, 영문/숫자 조합", text: $viewModel.password)
- .font(.hanSansNeo(14, .medium))
- }
- }
- .modifier(
- PasswordFieldModifier(
- isSecure: $isSecurePassword,
- isFocused: $isPasswordFocused,
- isError: viewModel.isPasswordInputError
- )
- )
- .focused($isPasswordFocused)
-
- if let message = viewModel.passwordValidationMessage {
- Text(message)
- .font(.hanSansNeo(12, .medium))
- .foregroundColor(.red)
- .padding(.top, 4)
- }
-
- // MARK: - 비밀번호 확인
- Text("비밀번호 확인")
- .font(.hanSansNeo(14, .medium))
- .foregroundStyle(Color.captionNeutral)
- .padding(.top, 22)
-
- Group {
- if isSecureConfirmPassword {
- SecureField("8자 이상, 영문/숫자 조합", text: $viewModel.checkedPassword)
- .font(.hanSansNeo(14, .medium))
- } else {
- TextField("8자 이상, 영문/숫자 조합", text: $viewModel.checkedPassword)
- .font(.hanSansNeo(14, .medium))
- }
- }
- .modifier(
- PasswordFieldModifier(
- isSecure: $isSecureConfirmPassword,
- isFocused: $isConfirmPasswordFocused,
- isError: viewModel.isConfirmPasswordError
- )
- )
- .focused($isConfirmPasswordFocused)
-
- if viewModel.isConfirmPasswordError {
- Text("비밀번호가 일치하지 않습니다.")
- .font(.hanSansNeo(12, .medium))
- .foregroundColor(.red)
- .padding(.top, 4)
- }
-
- Spacer().frame(height: 100)
- }
- .padding(.horizontal, 24)
- }
- .ignoresSafeArea(.keyboard)
-
-
- // MARK: - 다음 버튼
- Button(action: {
- viewModel.goToNextStep()
- }) {
- Text("다음")
- .font(.hanSansNeo(14, .bold))
- .frame(height: 48)
- .frame(maxWidth: .infinity)
- .background(viewModel.isPasswordConfirmed ? Color.primaryNormal : Color.lineNeutral)
- .cornerRadius(4)
- .foregroundColor(.white)
- .contentShape(Rectangle())
- }
- .padding(.horizontal, 24)
- .padding(.bottom, 20)
- .disabled(!viewModel.isPasswordConfirmed)
- }
- .scrollDisabled(true)
- .toolbar {
- ToolbarItemGroup(placement: .keyboard) {
- Spacer()
- Button("Done") {
- isPasswordFocused = false
- isConfirmPasswordFocused = false
- }
- .foregroundStyle(Color.primaryNormal)
- .font(.hanSansNeo(17, .medium))
- }
- }
- }
-}
-
-extension SignupViewModel {
- var isPasswordValid: Bool {
- SignupFormatStyle.validatePassword(password) == nil
- }
-
- var isPasswordConfirmed: Bool {
- isPasswordValid && password == checkedPassword
- }
-
- var passwordsMismatch: Bool {
- !checkedPassword.isEmpty && password != checkedPassword
- }
-
- var isPasswordInputError: Bool {
- !password.isEmpty && !isPasswordValid
- }
-
- var isConfirmPasswordError: Bool {
- !checkedPassword.isEmpty && password != checkedPassword
- }
-
- var passwordValidationError: PasswordValidationError? {
- guard !password.isEmpty else { return nil }
- return SignupFormatStyle.validatePassword(password)
- }
-
- var passwordValidationMessage: String? {
- passwordValidationError?.message
- }
-}
diff --git a/Modules/Features/Auth/Sources/UseCase/LoginUseCaseImpl.swift b/Modules/Features/Auth/Sources/UseCase/LoginUseCaseImpl.swift
index 7ab93934..9de5c531 100644
--- a/Modules/Features/Auth/Sources/UseCase/LoginUseCaseImpl.swift
+++ b/Modules/Features/Auth/Sources/UseCase/LoginUseCaseImpl.swift
@@ -1,10 +1,3 @@
-//
-// LoginUseCaseImpl.swift
-// Domain
-//
-// Created by 권민재 on 2/14/26.
-//
-
import Foundation
import AuthDomain
import Shared
@@ -16,8 +9,7 @@ public final class LoginUseCaseImpl: LoginUseCase {
self.authRepository = authRepository
}
- public func execute(loginId: String, password: String) async throws -> AuthUser {
- let (user, _) = try await authRepository.login(loginId: loginId, password: password)
- return user
+ public func execute(provider: SocialProvider, idToken: String) async throws -> SocialLoginResultType {
+ try await authRepository.login(provider: provider, idToken: idToken)
}
}
diff --git a/Modules/Features/Auth/Sources/UseCase/SignupUseCaseImpl.swift b/Modules/Features/Auth/Sources/UseCase/SignupUseCaseImpl.swift
index a6d1f7c5..063ecd5e 100644
--- a/Modules/Features/Auth/Sources/UseCase/SignupUseCaseImpl.swift
+++ b/Modules/Features/Auth/Sources/UseCase/SignupUseCaseImpl.swift
@@ -13,22 +13,13 @@ public final class SignupUseCaseImpl: SignupUseCase {
let trimmedNickname = request.nickname.trimmingCharacters(in: .whitespacesAndNewlines)
let result = try await authRepository.signup(
- loginId: request.loginId,
- password: request.password,
- phoneNumber: request.phoneNumber,
+ signupToken: request.signupToken,
nickname: trimmedNickname,
birthYear: request.birthYear,
- gender: request.gender
+ gender: request.gender,
+ agreements: request.agreements
)
- do {
- let (user, _) = try await authRepository.login(
- loginId: request.loginId,
- password: request.password
- )
- return user
- } catch {
- return result.user
- }
+ return result.user
}
}
diff --git a/Modules/Features/Auth/Testing/Sources/AuthTesting.swift b/Modules/Features/Auth/Testing/Sources/AuthTesting.swift
index 0e5241f4..333f556a 100644
--- a/Modules/Features/Auth/Testing/Sources/AuthTesting.swift
+++ b/Modules/Features/Auth/Testing/Sources/AuthTesting.swift
@@ -2,21 +2,46 @@ import Foundation
import AuthDomain
public final class MockLoginUseCase: LoginUseCase, @unchecked Sendable {
- public var result: Result = .success(
- AuthUser(id: 1, loginId: "test", phoneNumber: "010", subscribeEmail: nil,
- nickname: "테스터", birthYear: "2000", gender: "M",
- createdAt: "2025-01-01", industryId: nil, interestIds: [])
+ public var result: Result = .success(
+ .registered(
+ AuthUser(id: 1, subscribeEmail: nil,
+ nickname: "테스터", birthYear: "2000", gender: "남자",
+ createdAt: "2025-01-01", industryId: nil, interestIds: []),
+ accessToken: "mock-access-token"
+ )
)
- public private(set) var executedLoginId: String?
- public private(set) var executedPassword: String?
+ public private(set) var executedProvider: SocialProvider?
+ public private(set) var executedIDToken: String?
public private(set) var executeCallCount = 0
public init() {}
- public func execute(loginId: String, password: String) async throws -> AuthUser {
+ public func execute(provider: SocialProvider, idToken: String) async throws -> SocialLoginResultType {
executeCallCount += 1
- executedLoginId = loginId
- executedPassword = password
+ executedProvider = provider
+ executedIDToken = idToken
return try result.get()
}
}
+
+@MainActor
+public final class MockKakaoAuthService: KakaoAuthServiceProtocol {
+ public var result: Result = .success("mock-id-token")
+
+ public nonisolated init() {}
+
+ public func fetchIDToken() async throws -> String {
+ try result.get()
+ }
+}
+
+@MainActor
+public final class MockAppleAuthService: AppleAuthServiceProtocol {
+ public var result: Result = .success("apple-id-token")
+
+ public nonisolated init() {}
+
+ public func fetchIDToken() async throws -> String {
+ try result.get()
+ }
+}
diff --git a/Modules/Features/Auth/Tests/AuthTests.swift b/Modules/Features/Auth/Tests/AuthTests.swift
index 33e40567..7c28415f 100644
--- a/Modules/Features/Auth/Tests/AuthTests.swift
+++ b/Modules/Features/Auth/Tests/AuthTests.swift
@@ -1,4 +1,5 @@
import Testing
+import Foundation
import Shared
import FoundationKit
@testable import Auth
@@ -279,51 +280,26 @@ private final class StubTokenStorage: TokenStorageProtocol, @unchecked Sendable
@MainActor
struct LoginViewModelTests {
private func makeSUT(
- loginUseCase: MockLoginUseCase = .init()
- ) -> (vm: LoginViewModel, login: MockLoginUseCase, tokenStorage: StubTokenStorage) {
+ loginUseCase: MockLoginUseCase = .init(),
+ kakaoAuthService: MockKakaoAuthService = .init(),
+ appleAuthService: MockAppleAuthService = .init()
+ ) -> (vm: LoginViewModel, login: MockLoginUseCase, kakao: MockKakaoAuthService, tokenStorage: StubTokenStorage) {
let tokenStorage = StubTokenStorage()
let vm = LoginViewModel(
loginUseCase: loginUseCase,
+ kakaoAuthService: kakaoAuthService,
+ appleAuthService: appleAuthService,
tokenStorage: tokenStorage,
appState: AppState.shared
)
- return (vm, loginUseCase, tokenStorage)
- }
-
- // MARK: - isLoginEnabled
-
- @Test("아이디/비밀번호 모두 입력 시 로그인 활성화")
- func isLoginEnabled_bothFilled() {
- let (vm, _, _) = makeSUT()
- vm.loginId = "testuser"
- vm.password = "pass1234"
-
- #expect(vm.isLoginEnabled == true)
- }
-
- @Test("아이디 비어있으면 로그인 비활성화")
- func isLoginEnabled_emptyId() {
- let (vm, _, _) = makeSUT()
- vm.loginId = ""
- vm.password = "pass1234"
-
- #expect(vm.isLoginEnabled == false)
- }
-
- @Test("비밀번호 비어있으면 로그인 비활성화")
- func isLoginEnabled_emptyPassword() {
- let (vm, _, _) = makeSUT()
- vm.loginId = "testuser"
- vm.password = ""
-
- #expect(vm.isLoginEnabled == false)
+ return (vm, loginUseCase, kakaoAuthService, tokenStorage)
}
// MARK: - loginAsGuest
@Test("게스트 로그인 시 토큰 클리어 및 로그아웃")
func loginAsGuest_clearsTokenAndLogsOut() {
- let (vm, _, tokenStorage) = makeSUT()
+ let (vm, _, _, tokenStorage) = makeSUT()
AppState.shared.login()
tokenStorage.accessToken = "some-token"
@@ -333,71 +309,69 @@ struct LoginViewModelTests {
#expect(AppState.shared.authState == .guest)
}
- // MARK: - login
+ // MARK: - loginWithKakao
- @Test("로그인 성공 시 에러 초기화 및 인증 상태 전환")
- func login_success() async {
+ @Test("카카오 로그인 성공 시 idToken 전달 및 인증 상태 전환")
+ func kakaoLogin_success() async {
let mock = MockLoginUseCase()
- let (vm, _, _) = makeSUT(loginUseCase: mock)
- vm.loginId = "testuser"
- vm.password = "pass1234"
+ let kakao = MockKakaoAuthService()
+ kakao.result = .success("kakao-id-token")
+ let (vm, _, _, _) = makeSUT(loginUseCase: mock, kakaoAuthService: kakao)
AppState.shared.logout()
var successCalled = false
- vm.login { successCalled = true }
+ vm.loginWithKakao(onLoggedIn: { successCalled = true }, onNeedSignup: { _, _ in })
// 내부 Task 완료 대기
try? await Task.sleep(for: .milliseconds(50))
- #expect(mock.executedLoginId == "testuser")
- #expect(mock.executedPassword == "pass1234")
+ #expect(mock.executedProvider == .kakao)
+ #expect(mock.executedIDToken == "kakao-id-token")
#expect(successCalled == true)
- #expect(vm.errorMessage == nil)
- #expect(vm.isLoginIdError == false)
- #expect(vm.isPasswordError == false)
+ #expect(vm.currentError == nil)
#expect(AppState.shared.authState == .authenticated)
}
- @Test("로그인 실패 — invalidPassword")
- func login_invalidPassword() async {
- let mock = MockLoginUseCase()
- mock.result = .failure(LoginError.invalidPassword)
- let (vm, _, _) = makeSUT(loginUseCase: mock)
- vm.loginId = "testuser"
- vm.password = "wrongpass"
+ @Test("카카오 로그인 취소 시 에러 표시 없이 무시")
+ func kakaoLogin_cancelled() async {
+ let kakao = MockKakaoAuthService()
+ kakao.result = .failure(LoginError.cancelled)
+ let (vm, _, _, _) = makeSUT(kakaoAuthService: kakao)
- vm.login { }
+ var successCalled = false
+ vm.loginWithKakao(onLoggedIn: { successCalled = true }, onNeedSignup: { _, _ in })
try? await Task.sleep(for: .milliseconds(50))
- #expect(vm.isPasswordError == true)
- #expect(vm.isLoginIdError == false)
- #expect(vm.errorMessage != nil)
+ #expect(successCalled == false)
+ #expect(vm.currentError == nil)
+ #expect(vm.isLoading == false)
}
- @Test("로그인 실패 — accountNotFound")
- func login_accountNotFound() async {
+ @Test("카카오 로그인 네트워크 실패 시 에러 표시")
+ func kakaoLogin_networkError() async {
let mock = MockLoginUseCase()
- mock.result = .failure(LoginError.accountNotFound)
- let (vm, _, _) = makeSUT(loginUseCase: mock)
- vm.loginId = "nouser"
- vm.password = "pass1234"
+ mock.result = .failure(LoginError.networkError(URLError(.notConnectedToInternet)))
+ let kakao = MockKakaoAuthService()
+ kakao.result = .success("kakao-id-token")
+ let (vm, _, _, _) = makeSUT(loginUseCase: mock, kakaoAuthService: kakao)
- vm.login { }
+ vm.loginWithKakao(onLoggedIn: { }, onNeedSignup: { _, _ in })
try? await Task.sleep(for: .milliseconds(50))
- #expect(vm.isLoginIdError == true)
- #expect(vm.isPasswordError == false)
- #expect(vm.errorMessage != nil)
+ #expect(vm.currentError != nil)
+ #expect(vm.isLoading == false)
}
@Test("로딩 중 중복 호출 방지")
- func login_duplicatePrevented() {
- let (vm, mock, _) = makeSUT()
+ func kakaoLogin_duplicatePrevented() async {
+ let (vm, mock, _, _) = makeSUT()
vm.isLoading = true
- vm.login { }
+ vm.loginWithKakao(onLoggedIn: { }, onNeedSignup: { _, _ in })
+
+ try? await Task.sleep(for: .milliseconds(50))
#expect(mock.executeCallCount == 0)
}
diff --git a/Modules/Features/Bookmark/Bookmark.xcodeproj/project.pbxproj b/Modules/Features/Bookmark/Bookmark.xcodeproj/project.pbxproj
index 348ea2ac..b9b12e89 100644
--- a/Modules/Features/Bookmark/Bookmark.xcodeproj/project.pbxproj
+++ b/Modules/Features/Bookmark/Bookmark.xcodeproj/project.pbxproj
@@ -12,6 +12,7 @@
041E31D70D5CEF8FC84F8A6A /* BookmarkViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = F66F6C2D2FE5931531949059 /* BookmarkViewModel.swift */; };
087F2C6B78A32AE7E1D205C4 /* BookmarkDomain.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 7D71C9FA16EA7F7B8C065C3F /* BookmarkDomain.framework */; };
1458ECB9E29B36B27B2C65B4 /* Moya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD58982C5C438D314E6BEC2A /* Moya.framework */; };
+ 15B5B61710D883857442F7D8 /* Alamofire_Alamofire.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 89B93615CAA3A4B6EDE00CC7 /* Alamofire_Alamofire.bundle */; };
176538BC0FF6A9B25033A910 /* MonthlyBookmark.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0206BD8483F955BBBE9319B6 /* MonthlyBookmark.swift */; };
17D27226B3ACEBBA22B67FA4 /* BookmarkGuestView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A47C7D14746696637C609C95 /* BookmarkGuestView.swift */; };
1A9388B3195E7434819F3A90 /* BookmarkDomain.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 7D71C9FA16EA7F7B8C065C3F /* BookmarkDomain.framework */; };
@@ -26,6 +27,7 @@
35E55A3EB79F3C79237B06A9 /* BookmarkData.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 82057388BFC0F3F42C3F8205 /* BookmarkData.framework */; };
36A1C8F8DBC81433306D7FFD /* Bookmark.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 76BD577AD93EFB89FF1662CC /* Bookmark.framework */; };
398C358B05E39D463566987A /* BookmarkSortBottomSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = D13F9A4DD3CE365312FF6EFD /* BookmarkSortBottomSheet.swift */; };
+ 3F1C052B1B8FCFABBE443EF9 /* Alamofire_Alamofire.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 89B93615CAA3A4B6EDE00CC7 /* Alamofire_Alamofire.bundle */; };
41214122226FE32CD3C03506 /* BookmarkDomain.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7D71C9FA16EA7F7B8C065C3F /* BookmarkDomain.framework */; };
45925DF8DE7496C4348BD0F9 /* BookmarkInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E7655ACA3BC556B119528725 /* BookmarkInterface.framework */; };
46544D3CC066630ECA9B0AFE /* BookmarkDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 177C50DB84A2207F875A86A6 /* BookmarkDTO.swift */; };
@@ -36,6 +38,7 @@
5206F4FEEE24DA160A8A73E1 /* BookmarkRepositoryImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DEC7FF30725688E6BE8DE19 /* BookmarkRepositoryImpl.swift */; };
52645DC713DA5763373B841A /* DesignSystem.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F2A5BEA1A83032F8516C05FC /* DesignSystem.framework */; };
55B78CD6D6C94876F593D4D4 /* BookmarkDomain.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7D71C9FA16EA7F7B8C065C3F /* BookmarkDomain.framework */; };
+ 58118EB0B59B21E0BB307280 /* DesignSystem_DesignSystem.bundle in Resources */ = {isa = PBXBuildFile; fileRef = BBDE9251A6A0136A7E26B3E5 /* DesignSystem_DesignSystem.bundle */; };
5D699E791C8658B19EB124BE /* BookmarkRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5E4D1C21AD8172E2DE26AB5 /* BookmarkRepository.swift */; };
5DA795FD8AE82AF3E6657BB5 /* DesignSystem.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = F2A5BEA1A83032F8516C05FC /* DesignSystem.framework */; };
612EE9439A6C38F03EABBCF4 /* Kingfisher.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 722BE9794BB696843B2378B9 /* Kingfisher.framework */; };
@@ -54,18 +57,20 @@
9CDFF7E5C35845724D00EEF8 /* BookmarkItem.swift in Sources */ = {isa = PBXBuildFile; fileRef = D276B3421EA24CE847FEE3A2 /* BookmarkItem.swift */; };
9D7C75A36F3F477772BD7FBE /* BookmarkEmptyView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 962531354FC80D68BEDB100B /* BookmarkEmptyView.swift */; };
A04E9AADF186FE1832AF4D59 /* NetworkKit.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = DFCFEC2F6E5E0AB50AFCB559 /* NetworkKit.framework */; };
+ A291F84729C809444E84AA46 /* Shared.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 22775B642171631175E5C887 /* Shared.framework */; };
A4986F3B592504E5025275B6 /* DesignSystem.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F2A5BEA1A83032F8516C05FC /* DesignSystem.framework */; };
+ A5876B6DBB7C98F72CFD191F /* DesignSystem_DesignSystem.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = BBDE9251A6A0136A7E26B3E5 /* DesignSystem_DesignSystem.bundle */; };
A7A6863FE15A79DB2C7C5B88 /* BookmarkDIContainer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 877A2A9247AC50B3C3131A91 /* BookmarkDIContainer.swift */; };
+ AFA065CCADB1C955C11D1EE7 /* Alamofire_Alamofire.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 89B93615CAA3A4B6EDE00CC7 /* Alamofire_Alamofire.bundle */; };
B077BEF4EBFB5B47890445A2 /* BookmarkView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A67016F7ECAD609354E68E6 /* BookmarkView.swift */; };
B3DDE87514556E0BA6A6257E /* PopupView.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D7097229A5B4D0C77F9A1AA9 /* PopupView.framework */; };
- B5602D28474E43E016E4B621 /* DesignSystem.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = F2A5BEA1A83032F8516C05FC /* DesignSystem.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
BB3583AB8AFF5A8582A7EA5C /* Bookmark.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 76BD577AD93EFB89FF1662CC /* Bookmark.framework */; };
BCB178B26120DAE57F765D76 /* FetchBookmarkedInterestsUseCaseImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDB8DFAD64525DD3CF1E7EDF /* FetchBookmarkedInterestsUseCaseImpl.swift */; };
BD2761C3F5A24B3D07E0DD13 /* BookmarkArticleAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 311265B76A7A915B60EE7767 /* BookmarkArticleAPI.swift */; };
C1101C88BE3BC60EDA35F222 /* MockFetchBookmarkedArticlesUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBEAB6D95837215A0E40807C /* MockFetchBookmarkedArticlesUseCase.swift */; };
C12F9D2C0850C3C1B5039645 /* NetworkKit.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = DFCFEC2F6E5E0AB50AFCB559 /* NetworkKit.framework */; };
+ C200E53FF641FB80FF25FBBC /* DesignSystem_DesignSystem.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = BBDE9251A6A0136A7E26B3E5 /* DesignSystem_DesignSystem.bundle */; };
C3326C3758B8FE084CAF4D0A /* Shared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 22775B642171631175E5C887 /* Shared.framework */; };
- C6294624C9177D6AB21D9D1C /* Alamofire.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = F0CCCA6FC1C50F4DD02B1CCC /* Alamofire.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
C6D2F181D424BE4BA0E205C4 /* BookmarkMain.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8CAFD478C6DDC83E089E3A7 /* BookmarkMain.swift */; };
C9713249EFF54B95D5957871 /* Shared.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 22775B642171631175E5C887 /* Shared.framework */; };
CB39ECF8F89EB6D5AAC4958E /* BookmarkInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E7655ACA3BC556B119528725 /* BookmarkInterface.framework */; };
@@ -73,9 +78,11 @@
DB824CEA2A1609AD8764FBAB /* Moya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CD58982C5C438D314E6BEC2A /* Moya.framework */; };
E5164B2889523A1E7FCCA93E /* BookmarkTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D833BD260020B2F30A7E7FC8 /* BookmarkTests.swift */; };
E8D17997A650266731C11F30 /* MockFetchBookmarkedInterestsUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5D72B487917F46352154A5D /* MockFetchBookmarkedInterestsUseCase.swift */; };
+ EA5E9ECBD41EC0272310C6FE /* Alamofire_Alamofire.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 89B93615CAA3A4B6EDE00CC7 /* Alamofire_Alamofire.bundle */; };
EFEA28987FB90851599084C2 /* BookmarkInterestDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3A8328380BADA8FF551AC269 /* BookmarkInterestDTO.swift */; };
F3A20883E17372BAE2995BDA /* NetworkKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DFCFEC2F6E5E0AB50AFCB559 /* NetworkKit.framework */; };
F783D19B9CDAD845A9C48311 /* PopupView.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D7097229A5B4D0C77F9A1AA9 /* PopupView.framework */; };
+ FF071D7F25F1A1CD20AC825D /* DesignSystem_DesignSystem.bundle in Resources */ = {isa = PBXBuildFile; fileRef = BBDE9251A6A0136A7E26B3E5 /* DesignSystem_DesignSystem.bundle */; };
FF662E892BCA85526915A148 /* FetchBookmarkedArticlesUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = D31CA5BDB3B22749605469DE /* FetchBookmarkedArticlesUseCase.swift */; };
/* End PBXBuildFile section */
@@ -177,6 +184,18 @@
files = (
8B9E4218261392B76342AFC1 /* BookmarkDomain.framework in Dependencies */,
6E2E23C7B71C7263BB660EE8 /* BookmarkInterface.framework in Dependencies */,
+ A291F84729C809444E84AA46 /* Shared.framework in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ 40DAC921EE2E1CE51FBB2E5C /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ AFA065CCADB1C955C11D1EE7 /* Alamofire_Alamofire.bundle in Dependencies */,
+ A5876B6DBB7C98F72CFD191F /* DesignSystem_DesignSystem.bundle in Dependencies */,
);
name = Dependencies;
runOnlyForDeploymentPostprocessing = 1;
@@ -207,8 +226,6 @@
dstPath = "";
dstSubfolderSpec = 10;
files = (
- C6294624C9177D6AB21D9D1C /* Alamofire.framework in Embed Frameworks */,
- B5602D28474E43E016E4B621 /* DesignSystem.framework in Embed Frameworks */,
D90025D498615250A14DA6C7 /* Kingfisher.framework in Embed Frameworks */,
0353DF8DA771DC2B45C38979 /* Moya.framework in Embed Frameworks */,
2B296FFE6CB88BCC3C50EF7B /* PopupView.framework in Embed Frameworks */,
@@ -251,6 +268,17 @@
name = Dependencies;
runOnlyForDeploymentPostprocessing = 1;
};
+ BF69A515542BB9C5AB004EB7 /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ 15B5B61710D883857442F7D8 /* Alamofire_Alamofire.bundle in Dependencies */,
+ C200E53FF641FB80FF25FBBC /* DesignSystem_DesignSystem.bundle in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
C6A55BA645C11580C9F657C7 /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
@@ -300,6 +328,7 @@
7D71C9FA16EA7F7B8C065C3F /* BookmarkDomain.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = BookmarkDomain.framework; sourceTree = BUILT_PRODUCTS_DIR; };
82057388BFC0F3F42C3F8205 /* BookmarkData.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = BookmarkData.framework; sourceTree = BUILT_PRODUCTS_DIR; };
877A2A9247AC50B3C3131A91 /* BookmarkDIContainer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarkDIContainer.swift; sourceTree = ""; };
+ 89B93615CAA3A4B6EDE00CC7 /* Alamofire_Alamofire.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Alamofire_Alamofire.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
928A9853C70554E2166EA819 /* BookmarkInterest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarkInterest.swift; sourceTree = ""; };
962531354FC80D68BEDB100B /* BookmarkEmptyView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarkEmptyView.swift; sourceTree = ""; };
97DAA337D2CC52A06A96F0BF /* BookmarkInterface.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarkInterface.swift; sourceTree = ""; };
@@ -309,6 +338,7 @@
B5D72B487917F46352154A5D /* MockFetchBookmarkedInterestsUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockFetchBookmarkedInterestsUseCase.swift; sourceTree = ""; };
B5E4D1C21AD8172E2DE26AB5 /* BookmarkRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarkRepository.swift; sourceTree = ""; };
B5F84BC7D11297441DD5C5C4 /* BookmarkExample-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "BookmarkExample-Info.plist"; sourceTree = ""; };
+ BBDE9251A6A0136A7E26B3E5 /* DesignSystem_DesignSystem.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DesignSystem_DesignSystem.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
BE0794787B1481BD387B2CC6 /* BookmarkExampleApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarkExampleApp.swift; sourceTree = ""; };
CD58982C5C438D314E6BEC2A /* Moya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Moya.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D13F9A4DD3CE365312FF6EFD /* BookmarkSortBottomSheet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BookmarkSortBottomSheet.swift; sourceTree = ""; };
@@ -320,7 +350,6 @@
E20CAF6D40A69ECF1CABB4B5 /* BookmarkItem+Sample.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "BookmarkItem+Sample.swift"; sourceTree = ""; };
E7655ACA3BC556B119528725 /* BookmarkInterface.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = BookmarkInterface.framework; sourceTree = BUILT_PRODUCTS_DIR; };
EBEAB6D95837215A0E40807C /* MockFetchBookmarkedArticlesUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockFetchBookmarkedArticlesUseCase.swift; sourceTree = ""; };
- F0CCCA6FC1C50F4DD02B1CCC /* Alamofire.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Alamofire.framework; sourceTree = BUILT_PRODUCTS_DIR; };
F1105013526F13651EC442F5 /* BookmarkTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BookmarkTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
F2A5BEA1A83032F8516C05FC /* DesignSystem.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DesignSystem.framework; sourceTree = BUILT_PRODUCTS_DIR; };
F5CC4B625E176A882F77C5A9 /* BookmarkData-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "BookmarkData-Info.plist"; sourceTree = ""; };
@@ -439,7 +468,7 @@
349FAF58BCF75F1E87F887B1 /* Products */ = {
isa = PBXGroup;
children = (
- F0CCCA6FC1C50F4DD02B1CCC /* Alamofire.framework */,
+ 89B93615CAA3A4B6EDE00CC7 /* Alamofire_Alamofire.bundle */,
76BD577AD93EFB89FF1662CC /* Bookmark.framework */,
82057388BFC0F3F42C3F8205 /* BookmarkData.framework */,
7D71C9FA16EA7F7B8C065C3F /* BookmarkDomain.framework */,
@@ -447,6 +476,7 @@
E7655ACA3BC556B119528725 /* BookmarkInterface.framework */,
455970BB067D86A1E0357180 /* BookmarkTesting.framework */,
F1105013526F13651EC442F5 /* BookmarkTests.xctest */,
+ BBDE9251A6A0136A7E26B3E5 /* DesignSystem_DesignSystem.bundle */,
F2A5BEA1A83032F8516C05FC /* DesignSystem.framework */,
722BE9794BB696843B2378B9 /* Kingfisher.framework */,
CD58982C5C438D314E6BEC2A /* Moya.framework */,
@@ -685,6 +715,7 @@
2BBBA6E24C5983E3548F5BA6 /* Resources */,
CEC9DA134F79755CB448916B /* Frameworks */,
9767153D635DF53C78790F4A /* Embed Frameworks */,
+ 40DAC921EE2E1CE51FBB2E5C /* Dependencies */,
);
buildRules = (
);
@@ -817,6 +848,7 @@
ACE72C6E428CCBA07334E279 /* Resources */,
20B520E08F0B31EDFD381617 /* Frameworks */,
9BC99EC1B32ACA3FFCFA4EAA /* Embed Frameworks */,
+ BF69A515542BB9C5AB004EB7 /* Dependencies */,
);
buildRules = (
);
@@ -878,6 +910,8 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
+ 3F1C052B1B8FCFABBE443EF9 /* Alamofire_Alamofire.bundle in Resources */,
+ 58118EB0B59B21E0BB307280 /* DesignSystem_DesignSystem.bundle in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -892,6 +926,8 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
+ EA5E9ECBD41EC0272310C6FE /* Alamofire_Alamofire.bundle in Resources */,
+ FF071D7F25F1A1CD20AC825D /* DesignSystem_DesignSystem.bundle in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1128,6 +1164,10 @@
"$(inherited)",
"@executable_path/Frameworks",
);
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-L$(DT_TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)",
+ );
PRODUCT_BUNDLE_IDENTIFIER = com.newdok.bookmark.example;
PRODUCT_NAME = BookmarkExample;
SDKROOT = iphoneos;
@@ -1249,6 +1289,10 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-L$(DT_TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)",
+ );
PRODUCT_BUNDLE_IDENTIFIER = com.newdok.bookmark.tests;
PRODUCT_NAME = BookmarkTests;
SDKROOT = iphoneos;
@@ -1309,6 +1353,10 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-L$(DT_TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)",
+ );
PRODUCT_BUNDLE_IDENTIFIER = com.newdok.bookmark.tests;
PRODUCT_NAME = BookmarkTests;
SDKROOT = iphoneos;
@@ -1570,6 +1618,10 @@
"$(inherited)",
"@executable_path/Frameworks",
);
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-L$(DT_TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)",
+ );
PRODUCT_BUNDLE_IDENTIFIER = com.newdok.bookmark.example;
PRODUCT_NAME = BookmarkExample;
SDKROOT = iphoneos;
diff --git a/Modules/Features/Detail/Derived/Sources/TuistBundle+Detail.swift b/Modules/Features/Detail/Derived/Sources/TuistBundle+Detail.swift
index ed5f8133..7fbaf208 100644
--- a/Modules/Features/Detail/Derived/Sources/TuistBundle+Detail.swift
+++ b/Modules/Features/Detail/Derived/Sources/TuistBundle+Detail.swift
@@ -8,59 +8,49 @@ public import Foundation
#else
import Foundation
#endif
-// MARK: - Swift Bundle Accessor for Static Frameworks
+// MARK: - Swift Bundle Accessor - for SPM
+private class BundleFinder {}
extension Foundation.Bundle {
-/// Since Detail is a static framework, a cut down framework is embedded, with all the resources but only a stub Mach-O image.
+/// Since Detail is a static framework, the bundle containing the resources is copied into the final product.
static let module: Bundle = {
- class BundleFinder {}
- let hostBundle = Bundle(for: BundleFinder.self)
- var candidates: [URL?] = [
- hostBundle.privateFrameworksURL,
- hostBundle.bundleURL.appendingPathComponent("Frameworks"),
- hostBundle.bundleURL,
- hostBundle.bundleURL.deletingLastPathComponent(),
- hostBundle.resourceURL,
- Bundle.main.privateFrameworksURL,
- Bundle.main.bundleURL.appendingPathComponent("Frameworks"),
- Bundle.main.bundleURL,
- Bundle.main.resourceURL,
- // App extensions are placed under PlugIns/ in the host app bundle.
- // Navigate up from the extension to the containing app's Frameworks directory.
- hostBundle.bundleURL.deletingLastPathComponent().deletingLastPathComponent().appendingPathComponent("Frameworks"),
- ].map({ $0?.appendingPathComponent("Detail.framework") })
-
- for candidate in candidates {
- if let bundle = candidate.flatMap(Bundle.init(url:)) {
- return bundle
- }
- }
-
- var bundleCandidates: [URL?] = [
- hostBundle.resourceURL,
- hostBundle.bundleURL,
- hostBundle.privateFrameworksURL,
- hostBundle.bundleURL.appendingPathComponent("Frameworks"),
- hostBundle.bundleURL.deletingLastPathComponent(),
+ let bundleName = "Detail_Detail"
+ let bundleFinderResourceURL = Bundle(for: BundleFinder.self).resourceURL
+ var candidates = [
Bundle.main.resourceURL,
+ bundleFinderResourceURL,
Bundle.main.bundleURL,
- Bundle.main.privateFrameworksURL,
- Bundle.main.bundleURL.appendingPathComponent("Frameworks"),
- hostBundle.bundleURL.deletingLastPathComponent().deletingLastPathComponent().appendingPathComponent("Frameworks"),
]
- if ProcessInfo.processInfo.processName == "xctest"
- || ProcessInfo.processInfo.processName == "swift-testing"
- {
- bundleCandidates.append(hostBundle.bundleURL.appendingPathComponent(".."))
+ // This is a fix to make Previews work with bundled resources.
+ // Logic here is taken from SPM's generated `resource_bundle_accessors.swift` file,
+ // which is located under the derived data directory after building the project.
+ if let override = ProcessInfo.processInfo.environment["PACKAGE_RESOURCE_BUNDLE_PATH"] {
+ candidates.append(URL(fileURLWithPath: override))
+ // Deleting derived data and not rebuilding the frameworks containing resources may result in a state
+ // where the bundles are only available in the framework's directory that is actively being previewed.
+ // Since we don't know which framework this is, we also need to look in all the framework subpaths.
+ if let subpaths = try? Foundation.FileManager.default.contentsOfDirectory(atPath: override) {
+ for subpath in subpaths {
+ if subpath.hasSuffix(".framework") {
+ candidates.append(URL(fileURLWithPath: override + "/" + subpath))
+ }
+ }
+ }
}
- for candidate in bundleCandidates {
- let bundlePath = candidate?.appendingPathComponent("Detail_Detail.bundle")
+ // This is a fix to make unit tests work with bundled resources.
+ // Making this change allows unit tests to search one directory up for a bundle.
+ // More context can be found in this PR: https://github.com/tuist/tuist/pull/6895
+ #if canImport(XCTest)
+ candidates.append(bundleFinderResourceURL?.appendingPathComponent(".."))
+ #endif
+
+ for candidate in candidates {
+ let bundlePath = candidate?.appendingPathComponent(bundleName + ".bundle")
if let bundle = bundlePath.flatMap(Bundle.init(url:)) {
return bundle
}
}
-
- return Bundle.main
+ fatalError("unable to find bundle named Detail_Detail")
}()
}
// MARK: - Objective-C Bundle Accessor
diff --git a/Modules/Features/Detail/Detail.xcodeproj/project.pbxproj b/Modules/Features/Detail/Detail.xcodeproj/project.pbxproj
index faa810ec..9c3e0e17 100644
--- a/Modules/Features/Detail/Detail.xcodeproj/project.pbxproj
+++ b/Modules/Features/Detail/Detail.xcodeproj/project.pbxproj
@@ -10,16 +10,18 @@
02011050E354A89285B0F4A3 /* BrandHeroSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED00ED0D2221095DD00FB727 /* BrandHeroSection.swift */; };
0450697F87CB8BC06F7A5E9F /* DetailDomain.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = A96794BD3377F90430EF0E9C /* DetailDomain.framework */; };
04C546B0F4B70C1166B95B1F /* NetworkKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DE04B8BBFA30AEACC4320117 /* NetworkKit.framework */; };
+ 0667E782E5C24B811488AF76 /* DesignSystem_DesignSystem.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 8A87F248EFB679644B4B5755 /* DesignSystem_DesignSystem.bundle */; };
08BA15218FCD111910D8BC25 /* WebViewHighlightRenderer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7C5356B36ADC85270B5B7CDB /* WebViewHighlightRenderer.swift */; };
0D96F6D256F648B72CDA8740 /* DetailBrandRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = FCA96E6A68D1DB019BABD685 /* DetailBrandRepository.swift */; };
0E9AD2803FD7D0A62CC1A072 /* MockToggleArticleBookmarkUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E155CB1056429557CEFA7CB /* MockToggleArticleBookmarkUseCase.swift */; };
1104AEB09AC223B45D45C575 /* Moya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 767F6388D464E3D8420F18D2 /* Moya.framework */; };
- 1469C8EDD99065CD7F6A484B /* highlight-core.js in Resources */ = {isa = PBXBuildFile; fileRef = 00857E16F4612780B31D3541 /* highlight-core.js */; };
1536F42215DB595E7BF87726 /* DetailData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 05B413B7BB7364B2A8EB43B8 /* DetailData.framework */; };
168C6F27B1CEEDCFF161D62E /* HighlightStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 42B2228FB1F42508CD26B420 /* HighlightStyle.swift */; };
17317F475E53E771034636AE /* Moya.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 767F6388D464E3D8420F18D2 /* Moya.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ 1782F3096C1E7CF5B47F2DD1 /* Shared.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 16E9D08E995905CE2B02915B /* Shared.framework */; };
19F643E350D25CC82773DF53 /* Kingfisher.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 037730AF7DDB88D4A7CFEC27 /* Kingfisher.framework */; };
1A2F518D2EDE2203A73E7E80 /* Kingfisher.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 037730AF7DDB88D4A7CFEC27 /* Kingfisher.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ 1D263DFC676106D57B258376 /* DesignSystem_DesignSystem.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 8A87F248EFB679644B4B5755 /* DesignSystem_DesignSystem.bundle */; };
1D3BD41B18EAB5E2D01FAF9B /* SubscriptionStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C3341D48D082CA7690C2B06 /* SubscriptionStatus.swift */; };
1F1C24F349A1AE534F26506D /* DetailBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0E2DB91D8F8F689EC06B102 /* DetailBuilder.swift */; };
1FD29103A636498CA0DB2477 /* MockDetailHighlightRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1ECFC5C90FF58B3D2AF210DD /* MockDetailHighlightRepository.swift */; };
@@ -39,7 +41,6 @@
41EDDEB6A736501BBDC3B8EF /* ViewUtilities.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67323218CF9E12697D8FE546 /* ViewUtilities.swift */; };
42BE7BCA68F9154F81B54052 /* FontSizeControlView.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE5F7436AF686B88FA2D5EDE /* FontSizeControlView.swift */; };
46307C5E2B1A1F7797AC400C /* DetailBrandDetailDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = F6752E8B1EC679205553468F /* DetailBrandDetailDTO.swift */; };
- 486BA0DC650B8C96131BEB8B /* Detail.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 3B95DEB0BB0769D679538C4A /* Detail.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
4B5E536F51C6DA57CD664AC5 /* TuistBundle+Detail.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FB723250EB0641E40F4B90A /* TuistBundle+Detail.swift */; };
4C3F28585649FEC6674AB04D /* ArticleHTMLBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = FDBA229B6B3EF2923D805D2D /* ArticleHTMLBuilder.swift */; };
4E25DF1EA440EC32B957A409 /* DetailArticleDetailDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = F2342B528C8EF2F01C4011A5 /* DetailArticleDetailDTO.swift */; };
@@ -47,21 +48,29 @@
5964495ABC5CD31091FECF77 /* DetailError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8913DD26045FA9B30B463521 /* DetailError.swift */; };
5A2A8EA92A5DD81BB02464B9 /* HighlightStyleTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2298CEE69AC04C6C5CCF1106 /* HighlightStyleTests.swift */; };
5E7B91384F72F810EBFBE662 /* DetailInterest.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7F091D55409F8BB269CF55D /* DetailInterest.swift */; };
+ 5F7F75B508746A1E3DEC88F0 /* Detail_Detail.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 16E5CD9220DA0EB579A3075E /* Detail_Detail.bundle */; };
60ACB81D3B115BDA82C1C0A1 /* DetailInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6B1AE62965A0CCECBA5E4E62 /* DetailInterface.framework */; };
+ 61A13AEB3C66BF2540DE02A3 /* highlight-selection.js in Resources */ = {isa = PBXBuildFile; fileRef = E238F6A510832E68B7A93E83 /* highlight-selection.js */; };
62E57D9A477C43218EFCFD39 /* DetailMain.swift in Sources */ = {isa = PBXBuildFile; fileRef = A883D2FFA63ECF6643BD9A68 /* DetailMain.swift */; };
6700E3EA7BF1F1DB800C080F /* NetworkKit.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = DE04B8BBFA30AEACC4320117 /* NetworkKit.framework */; };
677E6DFCF06377899199516C /* ToggleArticleBookmarkUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E25901C49FE9D1DDF1D3F2D /* ToggleArticleBookmarkUseCase.swift */; };
+ 6794D14BFDEDB2DD9F1330C4 /* Alamofire_Alamofire.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 4B191A878566A0623A3E3FA0 /* Alamofire_Alamofire.bundle */; };
+ 718FFB94677AF52FEE96BB17 /* Alamofire_Alamofire.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 4B191A878566A0623A3E3FA0 /* Alamofire_Alamofire.bundle */; };
7244566371A2921D39B49139 /* DetailExampleApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 453D8A2E57EC8CB33197FB6A /* DetailExampleApp.swift */; };
724756B27F58CA6CA2A5E5C5 /* DatabaseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9F040FD94FD31D8B93AFC455 /* DatabaseKit.framework */; };
72848D5788E2DC95EDB93370 /* DetailInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6B1AE62965A0CCECBA5E4E62 /* DetailInterface.framework */; };
78582CE852B3A16DCF9DD930 /* HighlightListView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 710255FE24DC1AA428EBD25C /* HighlightListView.swift */; };
785EA326B43908DB97C3B147 /* FetchArticleDetailUseCaseImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 19C9C8E4DD02773C8AA3821B /* FetchArticleDetailUseCaseImpl.swift */; };
79B494C4D68174B622B3B2DC /* DetailDomain.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A96794BD3377F90430EF0E9C /* DetailDomain.framework */; };
+ 7F1C69D1E9C843D1EA552C47 /* Detail_Detail.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 16E5CD9220DA0EB579A3075E /* Detail_Detail.bundle */; };
+ 80EF48C1C96EBB4AB1E03A6C /* Detail_Detail.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 16E5CD9220DA0EB579A3075E /* Detail_Detail.bundle */; };
837CA0B6620C0FEA48AE923C /* DetailTesting.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5AD745E7440FC97A9CA14268 /* DetailTesting.framework */; };
83B6055429750F1EFA7AB439 /* DesignSystem.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AF10631497B2359FDEE1276E /* DesignSystem.framework */; };
84C5FBCACCCF602F4011179A /* SubscriptionRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = E382FC67A8F9821585CDB031 /* SubscriptionRequest.swift */; };
86AB8A12E9CB8B826C50BE18 /* Kingfisher.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 037730AF7DDB88D4A7CFEC27 /* Kingfisher.framework */; };
88CCA7BC3E911685B0D74076 /* DetailInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = E6BA99C3FC74CB681E8B504F /* DetailInterface.swift */; };
+ 8CF59F4EF6EE957462691CE3 /* Alamofire_Alamofire.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 4B191A878566A0623A3E3FA0 /* Alamofire_Alamofire.bundle */; };
+ 90BC00C25A87D9F08FF48D81 /* Detail_Detail.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 16E5CD9220DA0EB579A3075E /* Detail_Detail.bundle */; };
91FD09A50B171C61C895C539 /* DetailBrand+Sample.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99C5B3B6E99DC25CE4D40921 /* DetailBrand+Sample.swift */; };
9548271DCD9B0937B8383E56 /* FetchArticleDetailUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = B42B93ACDF818E1B36FEBE87 /* FetchArticleDetailUseCase.swift */; };
9631E3E676A86B8D59AA476E /* PopupView.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = A462F32EEA5D4222C73174FD /* PopupView.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
@@ -74,8 +83,8 @@
9DCDAC2D0E3790C2282376F4 /* FoundationKit.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 2DC131721167BC8AA615F8D6 /* FoundationKit.framework */; };
9E0570C4F8BD47BD7BB6BFDF /* DetailDomain.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A96794BD3377F90430EF0E9C /* DetailDomain.framework */; };
9F4E6D977ED6B80D1BB2B80B /* Detail.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B95DEB0BB0769D679538C4A /* Detail.framework */; };
+ A2E78A59380D11B48D0493C8 /* DesignSystem_DesignSystem.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 8A87F248EFB679644B4B5755 /* DesignSystem_DesignSystem.bundle */; };
A3707B6659E63069D378F84F /* DetailHighlightRepositoryImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 113B09463389CF5EFE2CFBFE /* DetailHighlightRepositoryImpl.swift */; };
- A3C7CA92CAC6E270FF98FD9C /* highlight-selection.js in Resources */ = {isa = PBXBuildFile; fileRef = E238F6A510832E68B7A93E83 /* highlight-selection.js */; };
A501A80C18812818FE3E2F23 /* DetailArticleDetail.swift in Sources */ = {isa = PBXBuildFile; fileRef = 44FAC0CD654C1727458CCD6B /* DetailArticleDetail.swift */; };
A5AD87EF646305798147569F /* DetailBrandDetail.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5EBC3117032F11AADF0A4DC /* DetailBrandDetail.swift */; };
A9DD2BA21B126A3A9C9B7AB0 /* BrandDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0B77220230DE1B29E53160F9 /* BrandDetailView.swift */; };
@@ -87,12 +96,13 @@
B8805B2A9E645DE8081DFBAC /* FoundationKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2DC131721167BC8AA615F8D6 /* FoundationKit.framework */; };
B900916B4421F17E5DE8A107 /* HighlightEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD19A75DB1E0E4B575056E07 /* HighlightEvent.swift */; };
BBB2AA8E96719EE07A07C445 /* DetailArticleRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF4697209D5D3C48696A3DD3 /* DetailArticleRepository.swift */; };
- C0302BAC5FB29B85950CA50F /* DesignSystem.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = AF10631497B2359FDEE1276E /* DesignSystem.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
C053252648DD62D20A07C6A9 /* Shared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 16E9D08E995905CE2B02915B /* Shared.framework */; };
C09C04D555251740EB0123DC /* DatabaseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9F040FD94FD31D8B93AFC455 /* DatabaseKit.framework */; };
+ C419A223927A4110D1A6C53F /* highlight-core.js in Resources */ = {isa = PBXBuildFile; fileRef = 00857E16F4612780B31D3541 /* highlight-core.js */; };
C5F11A5F3FF7FA90047EB1DE /* PopupView.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A462F32EEA5D4222C73174FD /* PopupView.framework */; };
C633E75E6702946A5DF9BE09 /* DetailArticleDetailResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = 25E300CBDD8DD1CB03AB6372 /* DetailArticleDetailResult.swift */; };
C6BA16E06B2321B9E3216F43 /* DetailArticleRepositoryImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23D5D8F4620FFA9D5FAD4CBE /* DetailArticleRepositoryImpl.swift */; };
+ D01027525066E8F6839C4943 /* Alamofire_Alamofire.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 4B191A878566A0623A3E3FA0 /* Alamofire_Alamofire.bundle */; };
D04BFE6FA711D99D1C625A45 /* ArticleHighlightJS.swift in Sources */ = {isa = PBXBuildFile; fileRef = FB01B27F8DEACEECEFDFA627 /* ArticleHighlightJS.swift */; };
D47AD455D6CE920C9CE1E8BE /* DetailNewsletterAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = F846D7141C8996200B58F7BA /* DetailNewsletterAPI.swift */; };
D5A476F4F89A71AFBACC56A8 /* ArticleDetailViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14FFF62190471C071159E97A /* ArticleDetailViewModel.swift */; };
@@ -100,7 +110,6 @@
DF8A5A0755FAF22FAAEC4A25 /* PopupView.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A462F32EEA5D4222C73174FD /* PopupView.framework */; };
E1D95026F34EC560BA662714 /* BrandSubscribeButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 806ADA3C0CDD4E6AF914A053 /* BrandSubscribeButton.swift */; };
E32984988E3C978F8093597F /* DetailInterface.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 6B1AE62965A0CCECBA5E4E62 /* DetailInterface.framework */; };
- E35BF2DC3E0EDE4B386C986D /* Alamofire.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 856AF65DBB58B6E79EF7DF24 /* Alamofire.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
E46E7A87A4F7768A8930506A /* BookmarkRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB98D8DC33A9D2CBD06B80AE /* BookmarkRequest.swift */; };
E6452BFC6770104F497B0A4F /* DetailTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DCF08A981030825A2FC8348 /* DetailTests.swift */; };
EB1BAEB515049D69E23D2F52 /* ToggleArticleBookmarkUseCaseImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1D53036A893CF0474D6D2A5 /* ToggleArticleBookmarkUseCaseImpl.swift */; };
@@ -111,6 +120,7 @@
F1B25E60B0311B0E8561F5B3 /* FoundationKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2DC131721167BC8AA615F8D6 /* FoundationKit.framework */; };
F2DE7432B78B29BB555248E4 /* ArticleDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A32E848FB34AC263D298782D /* ArticleDetailView.swift */; };
FC6DAEFF4D81A101A3FAEA5A /* DetailHighlight.swift in Sources */ = {isa = PBXBuildFile; fileRef = 315587186714BA35F86EACFA /* DetailHighlight.swift */; };
+ FE2A7B849A5EE791CA108F1C /* DesignSystem_DesignSystem.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 8A87F248EFB679644B4B5755 /* DesignSystem_DesignSystem.bundle */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@@ -121,6 +131,13 @@
remoteGlobalIDString = C88D15CEF71B110EE71D0D3F;
remoteInfo = DetailDomain;
};
+ 52D0EC946E6EEBDD20C632F9 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = AB08FD11D704AC1BA3ACB508 /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = 26FD65E4003CB95E3E791F5B;
+ remoteInfo = Detail_Detail;
+ };
6997F60FA1DCEDEDBF9EFE29 /* PBXContainerItemProxy */ = {
isa = PBXContainerItemProxy;
containerPortal = AB08FD11D704AC1BA3ACB508 /* Project object */;
@@ -204,6 +221,40 @@
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
};
+ 159A1FED64F5EB05764DA2E0 /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ 718FFB94677AF52FEE96BB17 /* Alamofire_Alamofire.bundle in Dependencies */,
+ A2E78A59380D11B48D0493C8 /* DesignSystem_DesignSystem.bundle in Dependencies */,
+ 90BC00C25A87D9F08FF48D81 /* Detail_Detail.bundle in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ 50A9E21E190436ADAE120395 /* Embed Frameworks */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 2147483647;
+ dstPath = "";
+ dstSubfolderSpec = 10;
+ files = (
+ );
+ name = "Embed Frameworks";
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 698BF416956A3A81F72C999F /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ 8CF59F4EF6EE957462691CE3 /* Alamofire_Alamofire.bundle in Dependencies */,
+ FE2A7B849A5EE791CA108F1C /* DesignSystem_DesignSystem.bundle in Dependencies */,
+ 7F1C69D1E9C843D1EA552C47 /* Detail_Detail.bundle in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
73273422BAC74AD62407AE33 /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
@@ -290,6 +341,7 @@
files = (
970EF75A181C2B329333334C /* DetailDomain.framework in Dependencies */,
E32984988E3C978F8093597F /* DetailInterface.framework in Dependencies */,
+ 1782F3096C1E7CF5B47F2DD1 /* Shared.framework in Dependencies */,
);
name = Dependencies;
runOnlyForDeploymentPostprocessing = 1;
@@ -300,9 +352,6 @@
dstPath = "";
dstSubfolderSpec = 10;
files = (
- E35BF2DC3E0EDE4B386C986D /* Alamofire.framework in Embed Frameworks */,
- C0302BAC5FB29B85950CA50F /* DesignSystem.framework in Embed Frameworks */,
- 486BA0DC650B8C96131BEB8B /* Detail.framework in Embed Frameworks */,
1A2F518D2EDE2203A73E7E80 /* Kingfisher.framework in Embed Frameworks */,
17317F475E53E771034636AE /* Moya.framework in Embed Frameworks */,
9631E3E676A86B8D59AA476E /* PopupView.framework in Embed Frameworks */,
@@ -320,6 +369,7 @@
1081C5FB722791B45F1EF2AD /* BrandDetailViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BrandDetailViewModel.swift; sourceTree = ""; };
113B09463389CF5EFE2CFBFE /* DetailHighlightRepositoryImpl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailHighlightRepositoryImpl.swift; sourceTree = ""; };
14FFF62190471C071159E97A /* ArticleDetailViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArticleDetailViewModel.swift; sourceTree = ""; };
+ 16E5CD9220DA0EB579A3075E /* Detail_Detail.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Detail_Detail.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
16E9D08E995905CE2B02915B /* Shared.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Shared.framework; sourceTree = BUILT_PRODUCTS_DIR; };
19C9C8E4DD02773C8AA3821B /* FetchArticleDetailUseCaseImpl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FetchArticleDetailUseCaseImpl.swift; sourceTree = ""; };
1ECFC5C90FF58B3D2AF210DD /* MockDetailHighlightRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockDetailHighlightRepository.swift; sourceTree = ""; };
@@ -335,6 +385,7 @@
42B2228FB1F42508CD26B420 /* HighlightStyle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HighlightStyle.swift; sourceTree = ""; };
44FAC0CD654C1727458CCD6B /* DetailArticleDetail.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailArticleDetail.swift; sourceTree = ""; };
453D8A2E57EC8CB33197FB6A /* DetailExampleApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailExampleApp.swift; sourceTree = ""; };
+ 4B191A878566A0623A3E3FA0 /* Alamofire_Alamofire.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Alamofire_Alamofire.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
520DC973A302CE54DF2F8D7A /* Detail-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Detail-Info.plist"; sourceTree = ""; };
57EE666730B6FB01E6451E14 /* DetailBrandArticleDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailBrandArticleDTO.swift; sourceTree = ""; };
5AD745E7440FC97A9CA14268 /* DetailTesting.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DetailTesting.framework; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -350,9 +401,9 @@
7DCF08A981030825A2FC8348 /* DetailTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailTests.swift; sourceTree = ""; };
7FE91A778D54F906BBB478EA /* DetailArticleAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailArticleAPI.swift; sourceTree = ""; };
806ADA3C0CDD4E6AF914A053 /* BrandSubscribeButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BrandSubscribeButton.swift; sourceTree = ""; };
- 856AF65DBB58B6E79EF7DF24 /* Alamofire.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Alamofire.framework; sourceTree = BUILT_PRODUCTS_DIR; };
8913DD26045FA9B30B463521 /* DetailError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailError.swift; sourceTree = ""; };
895ACCCB628BC9B6AA8FBE47 /* DetailData-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "DetailData-Info.plist"; sourceTree = ""; };
+ 8A87F248EFB679644B4B5755 /* DesignSystem_DesignSystem.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DesignSystem_DesignSystem.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
8E53E21BCF2EBF291EFF200E /* DetailInterface-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "DetailInterface-Info.plist"; sourceTree = ""; };
99C5B3B6E99DC25CE4D40921 /* DetailBrand+Sample.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "DetailBrand+Sample.swift"; sourceTree = ""; };
9AA0F26E33A078BEAA951AFF /* MockFetchArticleDetailUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockFetchArticleDetailUseCase.swift; sourceTree = ""; };
@@ -385,6 +436,7 @@
E6BA99C3FC74CB681E8B504F /* DetailInterface.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailInterface.swift; sourceTree = ""; };
E7332682AF3A45F10EBC84EF /* DetailBrandRepositoryImpl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailBrandRepositoryImpl.swift; sourceTree = ""; };
E79257768C8AA33BAEAF7888 /* DetailExample-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "DetailExample-Info.plist"; sourceTree = ""; };
+ E939CAA6DBD23D40F457B47D /* Detail_Detail-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Detail_Detail-Info.plist"; sourceTree = ""; };
ED00ED0D2221095DD00FB727 /* BrandHeroSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BrandHeroSection.swift; sourceTree = ""; };
F2342B528C8EF2F01C4011A5 /* DetailArticleDetailDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailArticleDetailDTO.swift; sourceTree = ""; };
F32F05CE24F8841B6FB502DF /* MockDetailBrandRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockDetailBrandRepository.swift; sourceTree = ""; };
@@ -446,6 +498,13 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
+ 9847307B1669C856813F179D /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
B54BFFA97BBD85C1147E4352 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
@@ -508,9 +567,11 @@
1E43E38C7AA0E336D84C5D66 /* Products */ = {
isa = PBXGroup;
children = (
- 856AF65DBB58B6E79EF7DF24 /* Alamofire.framework */,
+ 4B191A878566A0623A3E3FA0 /* Alamofire_Alamofire.bundle */,
9F040FD94FD31D8B93AFC455 /* DatabaseKit.framework */,
+ 8A87F248EFB679644B4B5755 /* DesignSystem_DesignSystem.bundle */,
AF10631497B2359FDEE1276E /* DesignSystem.framework */,
+ 16E5CD9220DA0EB579A3075E /* Detail_Detail.bundle */,
3B95DEB0BB0769D679538C4A /* Detail.framework */,
05B413B7BB7364B2A8EB43B8 /* DetailData.framework */,
A96794BD3377F90430EF0E9C /* DetailDomain.framework */,
@@ -629,6 +690,7 @@
7F63984D48F924C0603F0DEC /* InfoPlists */ = {
isa = PBXGroup;
children = (
+ E939CAA6DBD23D40F457B47D /* Detail_Detail-Info.plist */,
520DC973A302CE54DF2F8D7A /* Detail-Info.plist */,
895ACCCB628BC9B6AA8FBE47 /* DetailData-Info.plist */,
F5B7718F255BC6B70BDE4D42 /* DetailDomain-Info.plist */,
@@ -815,6 +877,26 @@
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
+ 26FD65E4003CB95E3E791F5B /* Detail_Detail */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = FC734CFE1F9E92CF5BF3D9D6 /* Build configuration list for PBXNativeTarget "Detail_Detail" */;
+ buildPhases = (
+ DF202121DA37B6AF26C3D505 /* Sources */,
+ 0F76D62C196B3AD00E959736 /* Resources */,
+ 9847307B1669C856813F179D /* Frameworks */,
+ 50A9E21E190436ADAE120395 /* Embed Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = Detail_Detail;
+ packageProductDependencies = (
+ );
+ productName = Detail_Detail;
+ productReference = 16E5CD9220DA0EB579A3075E /* Detail_Detail.bundle */;
+ productType = "com.apple.product-type.bundle";
+ };
378027671B59764DC5831691 /* DetailTests */ = {
isa = PBXNativeTarget;
buildConfigurationList = 2B9CAC1C11D83336656849FA /* Build configuration list for PBXNativeTarget "DetailTests" */;
@@ -823,6 +905,7 @@
8BB30DF501B5429006583AA6 /* Resources */,
3DF91622A6C5259174EAEA00 /* Frameworks */,
0A25737089C8EDC4FD9879B0 /* Embed Frameworks */,
+ 159A1FED64F5EB05764DA2E0 /* Dependencies */,
);
buildRules = (
);
@@ -853,6 +936,7 @@
9574E7263BD0D6194643E474 /* PBXTargetDependency */,
84872224FFDCA782F28CB5C1 /* PBXTargetDependency */,
9300CBCF81981E790795EC94 /* PBXTargetDependency */,
+ BD5D4EC5E844B636B3AB7779 /* PBXTargetDependency */,
);
name = Detail;
packageProductDependencies = (
@@ -954,6 +1038,7 @@
C148D5ECBDC8A76B2EB2F0AB /* Resources */,
B54BFFA97BBD85C1147E4352 /* Frameworks */,
F5691EE2348641E4FE0581CB /* Embed Frameworks */,
+ 698BF416956A3A81F72C999F /* Dependencies */,
);
buildRules = (
);
@@ -1000,6 +1085,7 @@
9A293940913ED0FF4D0EF915 /* DetailInterface */,
BB2FF893B90ACF9CC724F176 /* DetailTesting */,
378027671B59764DC5831691 /* DetailTests */,
+ 26FD65E4003CB95E3E791F5B /* Detail_Detail */,
);
};
/* End PBXProject section */
@@ -1012,12 +1098,19 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
+ 0F76D62C196B3AD00E959736 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ C419A223927A4110D1A6C53F /* highlight-core.js in Resources */,
+ 61A13AEB3C66BF2540DE02A3 /* highlight-selection.js in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
691873A78670D61FD175FA5C /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
- 1469C8EDD99065CD7F6A484B /* highlight-core.js in Resources */,
- A3C7CA92CAC6E270FF98FD9C /* highlight-selection.js in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1032,6 +1125,9 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
+ D01027525066E8F6839C4943 /* Alamofire_Alamofire.bundle in Resources */,
+ 0667E782E5C24B811488AF76 /* DesignSystem_DesignSystem.bundle in Resources */,
+ 80EF48C1C96EBB4AB1E03A6C /* Detail_Detail.bundle in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1046,6 +1142,9 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
+ 6794D14BFDEDB2DD9F1330C4 /* Alamofire_Alamofire.bundle in Resources */,
+ 1D263DFC676106D57B258376 /* DesignSystem_DesignSystem.bundle in Resources */,
+ 5F7F75B508746A1E3DEC88F0 /* Detail_Detail.bundle in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1165,6 +1264,13 @@
);
runOnlyForDeploymentPostprocessing = 0;
};
+ DF202121DA37B6AF26C3D505 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
@@ -1228,6 +1334,12 @@
target = BB2FF893B90ACF9CC724F176 /* DetailTesting */;
targetProxy = F40C95A682E8C46F43586CDD /* PBXContainerItemProxy */;
};
+ BD5D4EC5E844B636B3AB7779 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ name = Detail_Detail;
+ target = 26FD65E4003CB95E3E791F5B /* Detail_Detail */;
+ targetProxy = 52D0EC946E6EEBDD20C632F9 /* PBXContainerItemProxy */;
+ };
FC9E9FDF392FE7A90094F2BC /* PBXTargetDependency */ = {
isa = PBXTargetDependency;
name = Detail;
@@ -1476,6 +1588,10 @@
"$(inherited)",
"@executable_path/Frameworks",
);
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-L$(DT_TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)",
+ );
PRODUCT_BUNDLE_IDENTIFIER = com.newdok.detail.example;
PRODUCT_NAME = DetailExample;
SDKROOT = iphoneos;
@@ -1507,6 +1623,7 @@
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
+ PACKAGE_RESOURCE_BUNDLE_NAME = Detail_Detail;
PRODUCT_BUNDLE_IDENTIFIER = com.newdok.detail;
PRODUCT_NAME = Detail;
SDKROOT = iphoneos;
@@ -1526,6 +1643,33 @@
};
name = Release;
};
+ 56016448387FC0E951125353 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGNING_ALLOWED = NO;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ GENERATE_MASTER_OBJECT_FILE = NO;
+ INFOPLIST_FILE = "Derived/InfoPlists/Detail_Detail-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 18.0;
+ PRODUCT_BUNDLE_IDENTIFIER = com.newdok.detail.generated.resources;
+ PRODUCT_NAME = Detail_Detail;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;
+ 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,2";
+ VERSIONING_SYSTEM = "";
+ };
+ name = Debug;
+ };
56C81D832FDB9E6BAA518DEF /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
@@ -1544,6 +1688,7 @@
"@loader_path/Frameworks",
);
MACH_O_TYPE = staticlib;
+ PACKAGE_RESOURCE_BUNDLE_NAME = Detail_Detail;
PRODUCT_BUNDLE_IDENTIFIER = com.newdok.detail;
PRODUCT_NAME = Detail;
SDKROOT = iphoneos;
@@ -1582,6 +1727,10 @@
"$(inherited)",
"@executable_path/Frameworks",
);
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-L$(DT_TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)",
+ );
PRODUCT_BUNDLE_IDENTIFIER = com.newdok.detail.example;
PRODUCT_NAME = DetailExample;
SDKROOT = iphoneos;
@@ -1610,6 +1759,10 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-L$(DT_TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)",
+ );
PRODUCT_BUNDLE_IDENTIFIER = com.newdok.detail.tests;
PRODUCT_NAME = DetailTests;
SDKROOT = iphoneos;
@@ -1830,6 +1983,10 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-L$(DT_TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)",
+ );
PRODUCT_BUNDLE_IDENTIFIER = com.newdok.detail.tests;
PRODUCT_NAME = DetailTests;
SDKROOT = iphoneos;
@@ -1843,6 +2000,29 @@
};
name = Release;
};
+ EAD856625E2AE3B1F775B3AC /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGNING_ALLOWED = NO;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ GENERATE_MASTER_OBJECT_FILE = NO;
+ INFOPLIST_FILE = "Derived/InfoPlists/Detail_Detail-Info.plist";
+ IPHONEOS_DEPLOYMENT_TARGET = 18.0;
+ PRODUCT_BUNDLE_IDENTIFIER = com.newdok.detail.generated.resources;
+ PRODUCT_NAME = Detail_Detail;
+ SDKROOT = iphoneos;
+ SKIP_INSTALL = YES;
+ SUPPORTS_MACCATALYST = NO;
+ SUPPORTS_MAC_DESIGNED_FOR_IPHONE_IPAD = YES;
+ SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-O";
+ SWIFT_VERSION = 5.0;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ VERSIONING_SYSTEM = "";
+ };
+ name = Release;
+ };
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
@@ -1918,6 +2098,15 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
+ FC734CFE1F9E92CF5BF3D9D6 /* Build configuration list for PBXNativeTarget "Detail_Detail" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ 56016448387FC0E951125353 /* Debug */,
+ EAD856625E2AE3B1F775B3AC /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
/* End XCConfigurationList section */
};
rootObject = AB08FD11D704AC1BA3ACB508 /* Project object */;
diff --git a/Modules/Features/Detail/Detail.xcodeproj/xcuserdata/minjae.xcuserdatad/xcschemes/xcschememanagement.plist b/Modules/Features/Detail/Detail.xcodeproj/xcuserdata/minjae.xcuserdatad/xcschemes/xcschememanagement.plist
index 3366abbd..7c968003 100644
--- a/Modules/Features/Detail/Detail.xcodeproj/xcuserdata/minjae.xcuserdatad/xcschemes/xcschememanagement.plist
+++ b/Modules/Features/Detail/Detail.xcodeproj/xcuserdata/minjae.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -9,28 +9,35 @@
isShown
orderHint
- 10
+ 11
DetailData.xcscheme_^#shared#^_
isShown
orderHint
- 11
+ 12
DetailDomain.xcscheme_^#shared#^_
isShown
orderHint
- 12
+ 13
DetailExample.xcscheme_^#shared#^_
isShown
orderHint
- 13
+ 14
+
+ Detail_Detail.xcscheme_^#shared#^_
+
+ isShown
+
+ orderHint
+ 15
diff --git a/Modules/Features/Explore/Explore.xcodeproj/project.pbxproj b/Modules/Features/Explore/Explore.xcodeproj/project.pbxproj
index 1b59ee13..0d6d907a 100644
--- a/Modules/Features/Explore/Explore.xcodeproj/project.pbxproj
+++ b/Modules/Features/Explore/Explore.xcodeproj/project.pbxproj
@@ -14,6 +14,7 @@
073F229792FF7C0867DB771E /* ExploreView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C24D785C89919F6791BD7A33 /* ExploreView.swift */; };
09783F763339FDD665D20027 /* ExploreBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 888F76455723B0BB93117B37 /* ExploreBase.swift */; };
0C96D4AAECAD97812855C999 /* ExploreNoProfileSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1DC3D67031B54891AACACBB0 /* ExploreNoProfileSection.swift */; };
+ 1137F7C41C1775D4C6F620AD /* Alamofire_Alamofire.bundle in Resources */ = {isa = PBXBuildFile; fileRef = D20A4406B94CA5D712D3DE2D /* Alamofire_Alamofire.bundle */; };
11EFC05C0C6C2A6F7476CE9B /* TransformExploreRecommendationUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2FC211EFDA28CB6516DA622C /* TransformExploreRecommendationUseCase.swift */; };
151F78553C8953C647743454 /* ExploreDomain.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 93F5FA1DA86CFF691FF542B0 /* ExploreDomain.framework */; };
1568857A0C158C8FD24EA4A4 /* NewsletterDetailRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7A8975011C35FA609F5AD763 /* NewsletterDetailRow.swift */; };
@@ -21,11 +22,14 @@
17C36C1FA64A43AE83E20678 /* RecommendedNewsLetterView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9BCDA9A9CBE8807820971B4C /* RecommendedNewsLetterView.swift */; };
1A9DB85520140354256C93A6 /* ExploreOrderOption.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9B1184E3617FA54DA7DE55C0 /* ExploreOrderOption.swift */; };
1B6993E199FB0C966264508A /* ExploreData.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = C15F9F3CB6278990DB940B8F /* ExploreData.framework */; };
+ 1DCF1C3B6944E6A2608EE59B /* Alamofire_Alamofire.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = D20A4406B94CA5D712D3DE2D /* Alamofire_Alamofire.bundle */; };
1E4A2A6F8815FEB546CCAB74 /* TransformExploreRecommendationUseCaseTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A73A1AFEE5EC083C7A95B153 /* TransformExploreRecommendationUseCaseTests.swift */; };
+ 21069CA4265AC72853FDFCA9 /* Shared.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = EB6BFB9C49D58077BC4C3EE7 /* Shared.framework */; };
249A18D0808BFD907120A72F /* ExploreExampleApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = A0D54E2DECF8A17807B345D4 /* ExploreExampleApp.swift */; };
2754E16A9907767BB2CA89BE /* ExploreOptionDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC429B1C2535BCA693099ED9 /* ExploreOptionDTO.swift */; };
2774AF43D9408CF7A301B1B5 /* FetchExploreRecommendationUseCaseImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = AE849E14316C503C90BD0E45 /* FetchExploreRecommendationUseCaseImpl.swift */; };
28DBD961C7B7A994B075D8ED /* NetworkKit.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 250A5692EC2B284352F39DF6 /* NetworkKit.framework */; };
+ 28E9503C1DDAE6EED96EB1C8 /* DesignSystem_DesignSystem.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 62BB0862401C204E86A83ED0 /* DesignSystem_DesignSystem.bundle */; };
29A540B19553549BF05A0AA5 /* FetchGuestExploreNewslettersUseCaseImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC8C3E06DBBCA2C6681D98B9 /* FetchGuestExploreNewslettersUseCaseImpl.swift */; };
29DAC8EAE7B53F221D8A2958 /* LoadOptionsUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 71EB350DD845DB07C8A63B42 /* LoadOptionsUseCase.swift */; };
2A46E44695CBDFD14111F3C4 /* ExploreDomain.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 93F5FA1DA86CFF691FF542B0 /* ExploreDomain.framework */; };
@@ -43,8 +47,8 @@
56469C4FCC5443925EB06183 /* PrioritizeInterestsUseCaseImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDA7E33E9D12E87B28C264DE /* PrioritizeInterestsUseCaseImpl.swift */; };
58DCF75103B0F04322161FD7 /* ExploreAllNewsletterSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = D8FA180FF152AA423ED45A8B /* ExploreAllNewsletterSection.swift */; };
5EB7C5689377D6E8B3FF4717 /* ExploreInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79F1E6DBD7C2A06352AF9764 /* ExploreInterface.swift */; };
- 6434435EE71C2E259B5BAE46 /* DesignSystem.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 84F37D3F1E984B2DC46FF168 /* DesignSystem.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
655E69A7CF7BAE0041456773 /* Shared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EB6BFB9C49D58077BC4C3EE7 /* Shared.framework */; };
+ 69A549733531DC349706578E /* Alamofire_Alamofire.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = D20A4406B94CA5D712D3DE2D /* Alamofire_Alamofire.bundle */; };
6AE7DAB3726890EBE05F09A7 /* ExploreInterface.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 52848CDDBB14287A77B3B8D8 /* ExploreInterface.framework */; };
71474BA87E102C5721C20066 /* ExploreBrandDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = D72D063A51E4DF0D936E662B /* ExploreBrandDTO.swift */; };
71F3F5FBB3C658D7FF1A0274 /* Kingfisher.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9CC6C36B01EE7E27AAE4D727 /* Kingfisher.framework */; };
@@ -57,9 +61,9 @@
7D65A0514B8D9FB75519F3F8 /* NetworkKit.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 250A5692EC2B284352F39DF6 /* NetworkKit.framework */; };
7E61858AFAEBBF5880353E68 /* ExploreInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 52848CDDBB14287A77B3B8D8 /* ExploreInterface.framework */; };
7FE7744DEB271B2313999494 /* ExploreIndustryDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD6C44F04C3E9A543CFC3A3C /* ExploreIndustryDTO.swift */; };
- 864A3AEDACD95D4A500348EC /* Alamofire.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E8584C892020BB03C7F6C2EC /* Alamofire.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
868D4222231FD7682CCED247 /* ExploreIndustry.swift in Sources */ = {isa = PBXBuildFile; fileRef = 827B3F81E9669C6B25D4591C /* ExploreIndustry.swift */; };
8E50071138DE873A278F2167 /* FetchExploreRecommendationUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7CF738C0290EAA7435919F1B /* FetchExploreRecommendationUseCase.swift */; };
+ 9013B8ECC9EE97B247F7C87E /* Alamofire_Alamofire.bundle in Resources */ = {isa = PBXBuildFile; fileRef = D20A4406B94CA5D712D3DE2D /* Alamofire_Alamofire.bundle */; };
914A3608C0D32A093C290D54 /* PrioritizeInterestsUseCaseTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84A5E26974DA4DBB6685FD25 /* PrioritizeInterestsUseCaseTests.swift */; };
932A59E057F60558E758FC40 /* ExploreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C15F9F3CB6278990DB940B8F /* ExploreData.framework */; };
9607A76F7B9AE5079D3250D7 /* ExploreTesting.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C2C1F0C633ABCEAEF226F8ED /* ExploreTesting.framework */; };
@@ -68,6 +72,7 @@
9C9C98A881CC40F8D6980D3B /* ExploreBrand.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5FA968D7D77A7E89D97C740F /* ExploreBrand.swift */; };
9FA003749402F76FAB4B4395 /* MockFetchGuestExploreNewslettersUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD9973545623CF08E3378CEF /* MockFetchGuestExploreNewslettersUseCase.swift */; };
A305ACCAFCC6030E4592B5EA /* ExploreRecommendedNewsletterDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 343160A151CA05CFFB377D0D /* ExploreRecommendedNewsletterDTO.swift */; };
+ A33EC1FE8B7504FBD1EEAB26 /* DesignSystem_DesignSystem.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 62BB0862401C204E86A83ED0 /* DesignSystem_DesignSystem.bundle */; };
A3BC78D8D9ABBD4A12108517 /* MockPrioritizeInterestsUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0FF24FA935E3B7DDF6E12341 /* MockPrioritizeInterestsUseCase.swift */; };
A8D82DA9F46E630B99923408 /* FetchExploreOptionListUseCaseImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = F451F93F917934C7B6AA8B7C /* FetchExploreOptionListUseCaseImpl.swift */; };
A93A47968F782F087DA3E677 /* FetchExploreOptionListUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = F9A65E8DCC68016D13DD02A7 /* FetchExploreOptionListUseCase.swift */; };
@@ -76,6 +81,7 @@
ACC43D3DB3E0B7CCE985F9B4 /* NewletterRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4F358D13829D312F2BAD5833 /* NewletterRow.swift */; };
B09F17A3F771ED795BA24F25 /* Explore.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5C38C04CFD92482D29D36740 /* Explore.framework */; };
B0B496DA44C9B1D2E644CDA2 /* ExploreNewsletterAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = A9E5FC88EEBE9469E10BA69D /* ExploreNewsletterAPI.swift */; };
+ B1BC3C9AED7BB2761C3A2FB3 /* DesignSystem_DesignSystem.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 62BB0862401C204E86A83ED0 /* DesignSystem_DesignSystem.bundle */; };
B3EF99742C89D2A8CDDB51C4 /* TransformExploreRecommendationUseCaseImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 148DB4A52EAFEB707EF8485B /* TransformExploreRecommendationUseCaseImpl.swift */; };
B62F788290464F031196A574 /* DesignSystem.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 84F37D3F1E984B2DC46FF168 /* DesignSystem.framework */; };
B9584611F0D9629076314904 /* ExploreGuestSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 03107AFCD433376EFCD15D90 /* ExploreGuestSection.swift */; };
@@ -91,6 +97,7 @@
D3AEE36E88B5E6A7F21CB94A /* DesignSystem.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 84F37D3F1E984B2DC46FF168 /* DesignSystem.framework */; };
D3E1D5B2871B7F231B61713F /* ExploreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C15F9F3CB6278990DB940B8F /* ExploreData.framework */; };
D4399F288235646AB93D9EA0 /* Moya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 55B1E8DB65255934AF9129FC /* Moya.framework */; };
+ D8B91DBDD754C6BF1AEC8FD0 /* DesignSystem_DesignSystem.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 62BB0862401C204E86A83ED0 /* DesignSystem_DesignSystem.bundle */; };
D98BC6AD895838FE8B6F1595 /* ExploreDomain.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 93F5FA1DA86CFF691FF542B0 /* ExploreDomain.framework */; };
DD4C53B17A7E187C2C35DE68 /* PagingScrollView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B98D64C114E158DCBDB5A98F /* PagingScrollView.swift */; };
DFF6385287E2BD16C94D8D0F /* ExploreNewsletterDetailDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE33DBDE88BA0AC4A46767D2 /* ExploreNewsletterDetailDTO.swift */; };
@@ -210,8 +217,6 @@
dstPath = "";
dstSubfolderSpec = 10;
files = (
- 864A3AEDACD95D4A500348EC /* Alamofire.framework in Embed Frameworks */,
- 6434435EE71C2E259B5BAE46 /* DesignSystem.framework in Embed Frameworks */,
1721822F623580AE16DF2BDB /* Kingfisher.framework in Embed Frameworks */,
4EC49EC04D4BECD111CC242A /* Moya.framework in Embed Frameworks */,
BEAC42592153C460546222B7 /* PopupView.framework in Embed Frameworks */,
@@ -247,6 +252,18 @@
files = (
D98BC6AD895838FE8B6F1595 /* ExploreDomain.framework in Dependencies */,
C22F4F3FB777D8AB0BF36E4C /* ExploreInterface.framework in Dependencies */,
+ 21069CA4265AC72853FDFCA9 /* Shared.framework in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ 54F6958B7ECB64886E40B4D6 /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ 69A549733531DC349706578E /* Alamofire_Alamofire.bundle in Dependencies */,
+ A33EC1FE8B7504FBD1EEAB26 /* DesignSystem_DesignSystem.bundle in Dependencies */,
);
name = Dependencies;
runOnlyForDeploymentPostprocessing = 1;
@@ -271,6 +288,17 @@
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
};
+ CAC32E1FBE336AAF70608AB1 /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ 1DCF1C3B6944E6A2608EE59B /* Alamofire_Alamofire.bundle in Dependencies */,
+ B1BC3C9AED7BB2761C3A2FB3 /* DesignSystem_DesignSystem.bundle in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
CC7BF11F038CE57B5F946D1C /* Dependencies */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 8;
@@ -325,6 +353,7 @@
593A758FB76F8B18C48BD981 /* ExploreViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExploreViewModel.swift; sourceTree = ""; };
5C38C04CFD92482D29D36740 /* Explore.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Explore.framework; sourceTree = BUILT_PRODUCTS_DIR; };
5FA968D7D77A7E89D97C740F /* ExploreBrand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExploreBrand.swift; sourceTree = ""; };
+ 62BB0862401C204E86A83ED0 /* DesignSystem_DesignSystem.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DesignSystem_DesignSystem.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
64AEDB21409087596C001C42 /* ExploreExample-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "ExploreExample-Info.plist"; sourceTree = ""; };
71EB350DD845DB07C8A63B42 /* LoadOptionsUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LoadOptionsUseCase.swift; sourceTree = ""; };
787479014835E30089ED74AE /* ExploreRecommendationSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExploreRecommendationSection.swift; sourceTree = ""; };
@@ -365,13 +394,13 @@
C2C1F0C633ABCEAEF226F8ED /* ExploreTesting.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = ExploreTesting.framework; sourceTree = BUILT_PRODUCTS_DIR; };
C2CB7862ED357659A503E9B6 /* ExploreRecommendedNewsletter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExploreRecommendedNewsletter.swift; sourceTree = ""; };
CC8C3E06DBBCA2C6681D98B9 /* FetchGuestExploreNewslettersUseCaseImpl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FetchGuestExploreNewslettersUseCaseImpl.swift; sourceTree = ""; };
+ D20A4406B94CA5D712D3DE2D /* Alamofire_Alamofire.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Alamofire_Alamofire.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
D72D063A51E4DF0D936E662B /* ExploreBrandDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExploreBrandDTO.swift; sourceTree = ""; };
D8FA180FF152AA423ED45A8B /* ExploreAllNewsletterSection.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExploreAllNewsletterSection.swift; sourceTree = ""; };
DA2263923D4B545CDBF405D4 /* ExploreInterest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExploreInterest.swift; sourceTree = ""; };
DC237F88BE629BF3598049C7 /* SortBottomSheet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SortBottomSheet.swift; sourceTree = ""; };
DC80382D2E55CF54C5CD3311 /* MockTransformExploreRecommendationUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockTransformExploreRecommendationUseCase.swift; sourceTree = ""; };
DE33DBDE88BA0AC4A46767D2 /* ExploreNewsletterDetailDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExploreNewsletterDetailDTO.swift; sourceTree = ""; };
- E8584C892020BB03C7F6C2EC /* Alamofire.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Alamofire.framework; sourceTree = BUILT_PRODUCTS_DIR; };
EB6BFB9C49D58077BC4C3EE7 /* Shared.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Shared.framework; sourceTree = BUILT_PRODUCTS_DIR; };
F451F93F917934C7B6AA8B7C /* FetchExploreOptionListUseCaseImpl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FetchExploreOptionListUseCaseImpl.swift; sourceTree = ""; };
F9A65E8DCC68016D13DD02A7 /* FetchExploreOptionListUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FetchExploreOptionListUseCase.swift; sourceTree = ""; };
@@ -650,7 +679,8 @@
9BCD9434591CA445FFF60A51 /* Products */ = {
isa = PBXGroup;
children = (
- E8584C892020BB03C7F6C2EC /* Alamofire.framework */,
+ D20A4406B94CA5D712D3DE2D /* Alamofire_Alamofire.bundle */,
+ 62BB0862401C204E86A83ED0 /* DesignSystem_DesignSystem.bundle */,
84F37D3F1E984B2DC46FF168 /* DesignSystem.framework */,
5C38C04CFD92482D29D36740 /* Explore.framework */,
C15F9F3CB6278990DB940B8F /* ExploreData.framework */,
@@ -801,6 +831,7 @@
F25F656077B1A2B4969A6250 /* Resources */,
D10D45B11850700645CF28A3 /* Frameworks */,
FF83E117A08EA497CAE532F2 /* Embed Frameworks */,
+ CAC32E1FBE336AAF70608AB1 /* Dependencies */,
);
buildRules = (
);
@@ -912,6 +943,7 @@
76F6D2965F99AE60FF194E93 /* Resources */,
0B4CB767C23C300F01A73381 /* Frameworks */,
17810ED90893ECD508FCC6C4 /* Embed Frameworks */,
+ 54F6958B7ECB64886E40B4D6 /* Dependencies */,
);
buildRules = (
);
@@ -981,6 +1013,8 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
+ 9013B8ECC9EE97B247F7C87E /* Alamofire_Alamofire.bundle in Resources */,
+ D8B91DBDD754C6BF1AEC8FD0 /* DesignSystem_DesignSystem.bundle in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1009,6 +1043,8 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
+ 1137F7C41C1775D4C6F620AD /* Alamofire_Alamofire.bundle in Resources */,
+ 28E9503C1DDAE6EED96EB1C8 /* DesignSystem_DesignSystem.bundle in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1321,6 +1357,10 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-L$(DT_TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)",
+ );
PRODUCT_BUNDLE_IDENTIFIER = com.newdok.explore.tests;
PRODUCT_NAME = ExploreTests;
SDKROOT = iphoneos;
@@ -1345,6 +1385,10 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-L$(DT_TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)",
+ );
PRODUCT_BUNDLE_IDENTIFIER = com.newdok.explore.tests;
PRODUCT_NAME = ExploreTests;
SDKROOT = iphoneos;
@@ -1585,6 +1629,10 @@
"$(inherited)",
"@executable_path/Frameworks",
);
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-L$(DT_TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)",
+ );
PRODUCT_BUNDLE_IDENTIFIER = com.newdok.explore.example;
PRODUCT_NAME = ExploreExample;
SDKROOT = iphoneos;
@@ -1617,6 +1665,10 @@
"$(inherited)",
"@executable_path/Frameworks",
);
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-L$(DT_TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)",
+ );
PRODUCT_BUNDLE_IDENTIFIER = com.newdok.explore.example;
PRODUCT_NAME = ExploreExample;
SDKROOT = iphoneos;
diff --git a/Modules/Features/Explore/Explore.xcodeproj/xcuserdata/minjae.xcuserdatad/xcschemes/xcschememanagement.plist b/Modules/Features/Explore/Explore.xcodeproj/xcuserdata/minjae.xcuserdatad/xcschemes/xcschememanagement.plist
index b6412b3f..498125b3 100644
--- a/Modules/Features/Explore/Explore.xcodeproj/xcuserdata/minjae.xcuserdatad/xcschemes/xcschememanagement.plist
+++ b/Modules/Features/Explore/Explore.xcodeproj/xcuserdata/minjae.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -9,28 +9,28 @@
isShown
orderHint
- 14
+ 16
ExploreData.xcscheme_^#shared#^_
isShown
orderHint
- 15
+ 17
ExploreDomain.xcscheme_^#shared#^_
isShown
orderHint
- 16
+ 18
ExploreExample.xcscheme_^#shared#^_
isShown
orderHint
- 17
+ 19
diff --git a/Modules/Features/Home/Home.xcodeproj/project.pbxproj b/Modules/Features/Home/Home.xcodeproj/project.pbxproj
index 0983f714..bdebf1dd 100644
--- a/Modules/Features/Home/Home.xcodeproj/project.pbxproj
+++ b/Modules/Features/Home/Home.xcodeproj/project.pbxproj
@@ -23,10 +23,12 @@
1E62878C0C7B5C3F9ED0AB99 /* HomeDomain.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7E7CDF63113C2F46BE8A71B0 /* HomeDomain.framework */; };
1E7E45098752C3B4C517EF1A /* MockFetchHomeNewslettersUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5334BF9E23A4C0D601A88700 /* MockFetchHomeNewslettersUseCase.swift */; };
22CCBAB1A599A71D9B5F775B /* HomeArticle.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F9D57C7C3F6677D7BA035EB /* HomeArticle.swift */; };
+ 25632853C21928B783200A6A /* Alamofire_Alamofire.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 64B42078E0A87CEE27F32CF2 /* Alamofire_Alamofire.bundle */; };
261CEAC9556FF74D8C655436 /* Moya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45A37D9EB117BE8E26CCEAF /* Moya.framework */; };
269DAC6E999F4D87706612D6 /* Home.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9290645AFD421A6E8E0A3C77 /* Home.framework */; };
296BBBFAE6A19D780B60F09F /* MockFetchHomeHighlightCountsUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = FE5D92798C2C2687A8EC0852 /* MockFetchHomeHighlightCountsUseCase.swift */; };
2B8F29F0ED90A533AB1AEC24 /* HomeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CADBDBCE22FDE304B4127596 /* HomeTests.swift */; };
+ 2ECBD5048EFF4DB5DF891E1E /* DesignSystem_DesignSystem.bundle in Resources */ = {isa = PBXBuildFile; fileRef = A393F8EFC0690F199B785B09 /* DesignSystem_DesignSystem.bundle */; };
30D2AC437EAEB059AF6636D7 /* DesignSystem.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8C3EBAC2F650C65DE1069CB5 /* DesignSystem.framework */; };
34BF87846D5FD728A6D2685E /* DatabaseKit.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = AEAB33304E14B478149B9571 /* DatabaseKit.framework */; };
368747EF3CFA31EDD1D3DA44 /* MockLoadReadArticleIdsUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4D739686E84362857C0CCFD5 /* MockLoadReadArticleIdsUseCase.swift */; };
@@ -35,6 +37,7 @@
3CE34D0B41EB1D188B43C40B /* HighlightCountRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 99BE0540C0D9101967B30B88 /* HighlightCountRepository.swift */; };
3DE07EC4C5A5F7F5E0FB5DF5 /* Moya.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = E45A37D9EB117BE8E26CCEAF /* Moya.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
3DE6F333B7FB683C1E5E5025 /* HomeArticleRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = F073CBC0ECE36A2D30D69D1F /* HomeArticleRepository.swift */; };
+ 3F63BD4E0C5F97AB63D99AFF /* Shared.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 5D35F66BCBA8EB427B5DE027 /* Shared.framework */; };
45F47826A26195919CD537A9 /* HomeData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4690E81D73D861BE25E27C63 /* HomeData.swift */; };
468EE7C2A17CEB07A48DA21F /* HomeInterface.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = FD41FB3E0EEA6290D73279DC /* HomeInterface.framework */; };
49123A0C78DE39E4C17EF7D7 /* DecorateArticlesUseCaseImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35613C429EA041D0B77F54B7 /* DecorateArticlesUseCaseImpl.swift */; };
@@ -44,7 +47,6 @@
508E2389B68D5FB2D0824D4A /* HomeNewsletterAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21D83C7A0A54DF67941C009B /* HomeNewsletterAPI.swift */; };
547F394565001BA1D23C0A7E /* RefreshHomeArticlesUseCaseImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC3295E7AF8FD2DAD41E6490 /* RefreshHomeArticlesUseCaseImpl.swift */; };
56746DB4C018F47A3E75FE13 /* HighlightCountRepositoryImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5A1A0FDB37378365582383FA /* HighlightCountRepositoryImpl.swift */; };
- 588D25E2E77205E3EF774C37 /* DesignSystem.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 8C3EBAC2F650C65DE1069CB5 /* DesignSystem.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
58A3F6A90D1AB2E122FB415A /* FetchMonthArticlesUseCaseImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2C27E30652D5F73686FD4353 /* FetchMonthArticlesUseCaseImpl.swift */; };
5958A795220236D936B094E6 /* PopupView.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B81F80C2FEAA1107F2AE9F09 /* PopupView.framework */; };
5BC163E8AAE46124A7EEE0DC /* HomeMain.swift in Sources */ = {isa = PBXBuildFile; fileRef = CF03E4A61F76015E77430AF5 /* HomeMain.swift */; };
@@ -54,6 +56,7 @@
641594D3A073EA80DB5E176E /* HomeDomain.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 7E7CDF63113C2F46BE8A71B0 /* HomeDomain.framework */; };
65566DD060259C10F5144675 /* Kingfisher.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EDB4C3569E3D5CCC18BE7FD7 /* Kingfisher.framework */; };
67611AF5B54B257C073CC1C7 /* SaveReadArticleIdsUseCaseImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8EA930739B49D4617C017495 /* SaveReadArticleIdsUseCaseImpl.swift */; };
+ 69BB4BC16D9D12EB4A93D7FB /* DesignSystem_DesignSystem.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = A393F8EFC0690F199B785B09 /* DesignSystem_DesignSystem.bundle */; };
6AC90B31C866C0162BF72964 /* FetchHomeNewslettersUseCaseImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = D74C49D5F0BE0EAD712EC97F /* FetchHomeNewslettersUseCaseImpl.swift */; };
6AF94EE489A31CAB497CC765 /* Shared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5D35F66BCBA8EB427B5DE027 /* Shared.framework */; };
6C158EC00C3B9956038A27BD /* DecorateArticlesUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0271616E5AD36378C969B8C1 /* DecorateArticlesUseCase.swift */; };
@@ -61,6 +64,7 @@
79ED22B68E7D3A2900BE5FDC /* FoundationKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 04AE699792985C546477918C /* FoundationKit.framework */; };
7A474E19149BC0324CA36909 /* DatabaseKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AEAB33304E14B478149B9571 /* DatabaseKit.framework */; };
7B2159DD0AE47DB3CDC00C51 /* HomeInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FD41FB3E0EEA6290D73279DC /* HomeInterface.framework */; };
+ 7F1749E8E21F3F81E13A5F02 /* DesignSystem_DesignSystem.bundle in Resources */ = {isa = PBXBuildFile; fileRef = A393F8EFC0690F199B785B09 /* DesignSystem_DesignSystem.bundle */; };
832F5D657EE9511AC7DFC1AD /* MergeDayArticleSummaryUseCaseImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = B8D1954B3703B1B17DBF59CF /* MergeDayArticleSummaryUseCaseImpl.swift */; };
84F4A42C18D61D66E82A0895 /* ExtractArticleDaysUseCaseTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F2EEE595AA21F5D1615EC72 /* ExtractArticleDaysUseCaseTests.swift */; };
85F59319531E6997AA4537A2 /* NetworkKit.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = D149E26863DC2280CAD0A26A /* NetworkKit.framework */; };
@@ -89,17 +93,19 @@
C279A57619B644F716EFC768 /* DesignSystem.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 8C3EBAC2F650C65DE1069CB5 /* DesignSystem.framework */; };
C4FD9A6455255BF6D470039B /* MockFetchMonthArticlesUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 403D445062511989EB5D5859 /* MockFetchMonthArticlesUseCase.swift */; };
C8DC844992B30693A7FEA61D /* Moya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E45A37D9EB117BE8E26CCEAF /* Moya.framework */; };
+ CAEDE3EF78324D11746C2B1E /* DesignSystem_DesignSystem.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = A393F8EFC0690F199B785B09 /* DesignSystem_DesignSystem.bundle */; };
D12E7BE78DF7D57850728578 /* ExtractArticleDaysUseCaseImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30ECF71ADE0B3362CF30069F /* ExtractArticleDaysUseCaseImpl.swift */; };
D22A62D9C2CD11BCFD1F27AF /* MockFetchTodayArticlesUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 18B147F8538F2F090A9A3957 /* MockFetchTodayArticlesUseCase.swift */; };
D4087F9283F2719065049F61 /* DatabaseKit.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = AEAB33304E14B478149B9571 /* DatabaseKit.framework */; };
D6BABF0A33009DD83E61B578 /* HomeData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 37935B9DA7BE7EBD9E6DD632 /* HomeData.framework */; };
D9D9BAD34448A277BC8FE8BA /* MockSaveReadArticleIdsUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14F01053817F2ABEB643810A /* MockSaveReadArticleIdsUseCase.swift */; };
DB35F207C7F50C6FF9DD31BB /* ExtractArticleDaysUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 59CEC279B35991FF12BC9856 /* ExtractArticleDaysUseCase.swift */; };
+ DDAD0FE540D6F9D7690072AB /* Alamofire_Alamofire.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 64B42078E0A87CEE27F32CF2 /* Alamofire_Alamofire.bundle */; };
DDE76B7216877C0F1932E837 /* HomeTesting.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0782543C21EE711EE550C2AA /* HomeTesting.framework */; };
DF8B9B3A9110E55D7DCD1F33 /* HomeArticles.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB200FEEBF56F1BFB5116FBE /* HomeArticles.swift */; };
E12B05BA3D98A1C4A80DCEA1 /* FetchHomeNewslettersUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 87652B4152AA8312B7A8C04A /* FetchHomeNewslettersUseCase.swift */; };
E383AB41A613F381C05B01FF /* ReadStatus.swift in Sources */ = {isa = PBXBuildFile; fileRef = D54728880638341BCCD4F900 /* ReadStatus.swift */; };
- E4415727F375CA05B79540D3 /* Alamofire.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 5B1A5FAB7ADFFA55459CCD3E /* Alamofire.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ E5C33DAB0820F43C0173ACF8 /* Alamofire_Alamofire.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 64B42078E0A87CEE27F32CF2 /* Alamofire_Alamofire.bundle */; };
E64CBE866CA7745A151893DE /* HomeArticleDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = A430E623D63FB6321CF778E8 /* HomeArticleDTO.swift */; };
E8293EF958828F6E454A2E37 /* NetworkKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D149E26863DC2280CAD0A26A /* NetworkKit.framework */; };
E83573CD9ACCDB5F6D5A4E62 /* ReadArticleStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = ED77EB24D60E4333278594E7 /* ReadArticleStore.swift */; };
@@ -113,6 +119,7 @@
FC677ACB765EBCE2CD302AE4 /* HomeExampleApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 812DBB1714096105DB2CC859 /* HomeExampleApp.swift */; };
FEA6F52F574DAE316B56ED98 /* HomeNewsletter+Sample.swift in Sources */ = {isa = PBXBuildFile; fileRef = 340C26E4EDD860280FD94F05 /* HomeNewsletter+Sample.swift */; };
FF14E6EE45E4990DB8B026DD /* NetworkKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D149E26863DC2280CAD0A26A /* NetworkKit.framework */; };
+ FF99CC3918E2F8453AFACA84 /* Alamofire_Alamofire.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 64B42078E0A87CEE27F32CF2 /* Alamofire_Alamofire.bundle */; };
FFC8FCCA16E79951DFD5AA8D /* HomeViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EAD2FE377459D687CCBCE3E0 /* HomeViewModel.swift */; };
/* End PBXBuildFile section */
@@ -236,6 +243,7 @@
files = (
95F99C807FD982C4E6125404 /* HomeDomain.framework in Dependencies */,
98D19B21F2097F841C0F2DDF /* HomeInterface.framework in Dependencies */,
+ 3F63BD4E0C5F97AB63D99AFF /* Shared.framework in Dependencies */,
);
name = Dependencies;
runOnlyForDeploymentPostprocessing = 1;
@@ -260,14 +268,23 @@
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
};
+ 72F4E209847032C394F96253 /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ 25632853C21928B783200A6A /* Alamofire_Alamofire.bundle in Dependencies */,
+ CAEDE3EF78324D11746C2B1E /* DesignSystem_DesignSystem.bundle in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
8E77B6070471420CCBA638D9 /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
- E4415727F375CA05B79540D3 /* Alamofire.framework in Embed Frameworks */,
- 588D25E2E77205E3EF774C37 /* DesignSystem.framework in Embed Frameworks */,
5CC2D77A673B6A9B791CC64A /* Kingfisher.framework in Embed Frameworks */,
3DE07EC4C5A5F7F5E0FB5DF5 /* Moya.framework in Embed Frameworks */,
8FD0FC35862FD44D5C85D445 /* PopupView.framework in Embed Frameworks */,
@@ -302,6 +319,17 @@
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
};
+ 9E23B10E1EBB1B064EF280D1 /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ DDAD0FE540D6F9D7690072AB /* Alamofire_Alamofire.bundle in Dependencies */,
+ 69BB4BC16D9D12EB4A93D7FB /* DesignSystem_DesignSystem.bundle in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
AB6F9991EFFF8EB658ECFA57 /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
@@ -347,10 +375,10 @@
5334BF9E23A4C0D601A88700 /* MockFetchHomeNewslettersUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockFetchHomeNewslettersUseCase.swift; sourceTree = ""; };
59CEC279B35991FF12BC9856 /* ExtractArticleDaysUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtractArticleDaysUseCase.swift; sourceTree = ""; };
5A1A0FDB37378365582383FA /* HighlightCountRepositoryImpl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HighlightCountRepositoryImpl.swift; sourceTree = ""; };
- 5B1A5FAB7ADFFA55459CCD3E /* Alamofire.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Alamofire.framework; sourceTree = BUILT_PRODUCTS_DIR; };
5D35F66BCBA8EB427B5DE027 /* Shared.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Shared.framework; sourceTree = BUILT_PRODUCTS_DIR; };
5F888AB37F684670D6487433 /* HomeData-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "HomeData-Info.plist"; sourceTree = ""; };
61EC700930D1096A1F12C0D7 /* Home-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Home-Info.plist"; sourceTree = ""; };
+ 64B42078E0A87CEE27F32CF2 /* Alamofire_Alamofire.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Alamofire_Alamofire.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
6F2EEE595AA21F5D1615EC72 /* ExtractArticleDaysUseCaseTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtractArticleDaysUseCaseTests.swift; sourceTree = ""; };
6F9D57C7C3F6677D7BA035EB /* HomeArticle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeArticle.swift; sourceTree = ""; };
769838F5159DD381C709E560 /* HomeArticle+Sample.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "HomeArticle+Sample.swift"; sourceTree = ""; };
@@ -367,6 +395,7 @@
9879BE437F14BB2EB41CC295 /* HomeBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeBuilder.swift; sourceTree = ""; };
99BE0540C0D9101967B30B88 /* HighlightCountRepository.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HighlightCountRepository.swift; sourceTree = ""; };
9A449CFDCA59CB8A8B2144B9 /* FetchDayArticlesUseCaseImpl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FetchDayArticlesUseCaseImpl.swift; sourceTree = ""; };
+ A393F8EFC0690F199B785B09 /* DesignSystem_DesignSystem.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DesignSystem_DesignSystem.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
A42B7A6C3FBA6B39ACF0EB0D /* MockFetchDayArticlesUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockFetchDayArticlesUseCase.swift; sourceTree = ""; };
A430E623D63FB6321CF778E8 /* HomeArticleDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeArticleDTO.swift; sourceTree = ""; };
A4F549A46AF7A1574E4E5924 /* RefreshHomeArticlesUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RefreshHomeArticlesUseCase.swift; sourceTree = ""; };
@@ -520,8 +549,9 @@
156072FA40260C0FBAAE35F3 /* Products */ = {
isa = PBXGroup;
children = (
- 5B1A5FAB7ADFFA55459CCD3E /* Alamofire.framework */,
+ 64B42078E0A87CEE27F32CF2 /* Alamofire_Alamofire.bundle */,
AEAB33304E14B478149B9571 /* DatabaseKit.framework */,
+ A393F8EFC0690F199B785B09 /* DesignSystem_DesignSystem.bundle */,
8C3EBAC2F650C65DE1069CB5 /* DesignSystem.framework */,
04AE699792985C546477918C /* FoundationKit.framework */,
9290645AFD421A6E8E0A3C77 /* Home.framework */,
@@ -859,6 +889,7 @@
A3E9A846F2389D47B0821045 /* Resources */,
23A28F306D3F7D64A552EE00 /* Frameworks */,
8E77B6070471420CCBA638D9 /* Embed Frameworks */,
+ 9E23B10E1EBB1B064EF280D1 /* Dependencies */,
);
buildRules = (
);
@@ -902,6 +933,7 @@
95C7AAA080E708276A8F09A7 /* Resources */,
D2D1CD11E151DABAE249ECD8 /* Frameworks */,
724F10C18B84459D2E88EF10 /* Embed Frameworks */,
+ 72F4E209847032C394F96253 /* Dependencies */,
);
buildRules = (
);
@@ -993,6 +1025,8 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
+ FF99CC3918E2F8453AFACA84 /* Alamofire_Alamofire.bundle in Resources */,
+ 7F1749E8E21F3F81E13A5F02 /* DesignSystem_DesignSystem.bundle in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1007,6 +1041,8 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
+ E5C33DAB0820F43C0173ACF8 /* Alamofire_Alamofire.bundle in Resources */,
+ 2ECBD5048EFF4DB5DF891E1E /* DesignSystem_DesignSystem.bundle in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1558,6 +1594,10 @@
"$(inherited)",
"@executable_path/Frameworks",
);
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-L$(DT_TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)",
+ );
PRODUCT_BUNDLE_IDENTIFIER = com.newdok.home.example;
PRODUCT_NAME = HomeExample;
SDKROOT = iphoneos;
@@ -1623,6 +1663,10 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-L$(DT_TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)",
+ );
PRODUCT_BUNDLE_IDENTIFIER = com.newdok.home.tests;
PRODUCT_NAME = HomeTests;
SDKROOT = iphoneos;
@@ -1651,6 +1695,10 @@
"$(inherited)",
"@executable_path/Frameworks",
);
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-L$(DT_TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)",
+ );
PRODUCT_BUNDLE_IDENTIFIER = com.newdok.home.example;
PRODUCT_NAME = HomeExample;
SDKROOT = iphoneos;
@@ -1675,6 +1723,10 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-L$(DT_TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)",
+ );
PRODUCT_BUNDLE_IDENTIFIER = com.newdok.home.tests;
PRODUCT_NAME = HomeTests;
SDKROOT = iphoneos;
diff --git a/Modules/Features/Home/Home.xcodeproj/xcuserdata/minjae.xcuserdatad/xcschemes/xcschememanagement.plist b/Modules/Features/Home/Home.xcodeproj/xcuserdata/minjae.xcuserdatad/xcschemes/xcschememanagement.plist
index eb18644c..997ee908 100644
--- a/Modules/Features/Home/Home.xcodeproj/xcuserdata/minjae.xcuserdatad/xcschemes/xcschememanagement.plist
+++ b/Modules/Features/Home/Home.xcodeproj/xcuserdata/minjae.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -9,28 +9,28 @@
isShown
orderHint
- 20
+ 22
HomeData.xcscheme_^#shared#^_
isShown
orderHint
- 21
+ 23
HomeDomain.xcscheme_^#shared#^_
isShown
orderHint
- 22
+ 24
HomeExample.xcscheme_^#shared#^_
isShown
orderHint
- 23
+ 25
diff --git a/Modules/Features/Launch/Launch.xcodeproj/project.pbxproj b/Modules/Features/Launch/Launch.xcodeproj/project.pbxproj
index 6657bc20..256a9135 100644
--- a/Modules/Features/Launch/Launch.xcodeproj/project.pbxproj
+++ b/Modules/Features/Launch/Launch.xcodeproj/project.pbxproj
@@ -10,13 +10,16 @@
0B55C607E32BA0CA157B3BDA /* DesignSystem.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9229787BA766DFA18583ABFA /* DesignSystem.framework */; };
113F0CBB242B95E70E2B695B /* PopupView.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AA5E611CA9D5AA49AF6715E1 /* PopupView.framework */; };
1AEFE7FA6BB5863FD0BA5386 /* LaunchMain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A44DF136146F6B9A83C6AB1 /* LaunchMain.swift */; };
+ 20F3FEBE364914EB1EF8A480 /* DesignSystem_DesignSystem.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 33C3A825E35B81636156DB43 /* DesignSystem_DesignSystem.bundle */; };
43DAFA287C241F9A81F3F9A6 /* Shared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = FAD73AE618B7002C6F84BF4C /* Shared.framework */; };
45B48283F14B7CAE2E5F4216 /* Kingfisher.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4C483202D74E2B6F40348B08 /* Kingfisher.framework */; };
4A5EC27A4FD3253280EBFD1D /* Shared.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = FAD73AE618B7002C6F84BF4C /* Shared.framework */; };
+ 91E7FC6828BFD26C633D7876 /* DesignSystem_DesignSystem.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 33C3A825E35B81636156DB43 /* DesignSystem_DesignSystem.bundle */; };
988A639C908D85348FA3C893 /* SplashView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AB4BC8E5564382493B0CEDB /* SplashView.swift */; };
9B8DE9786A8471253B1F77E3 /* DesignSystem.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 9229787BA766DFA18583ABFA /* DesignSystem.framework */; };
A7AB08F321F5FB1D2A837467 /* Launch.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CAE9D80105EE847E612B7E64 /* Launch.framework */; };
B1F79015784E7B2762AE008B /* LaunchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0C397ED87CA36DDB17BA0A60 /* LaunchTests.swift */; };
+ EBB92F90542ED84308AE68A6 /* Shared.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = FAD73AE618B7002C6F84BF4C /* Shared.framework */; };
F4A2FC493ADCD4CAE25B78CF /* LaunchTesting.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BB364B90EFC14BFABA85950 /* LaunchTesting.swift */; };
F7B0B86E17DD269FA98EB7CA /* LaunchTesting.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D5554D8163780EA3FBF884CE /* LaunchTesting.framework */; };
/* End PBXBuildFile section */
@@ -39,6 +42,26 @@
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
+ 10A449D84915DD62332B904F /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ 91E7FC6828BFD26C633D7876 /* DesignSystem_DesignSystem.bundle in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ 31E08F68DC5A80FAE63BA5AD /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ EBB92F90542ED84308AE68A6 /* Shared.framework in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
5080B47EE8ECE75CBC8C2A75 /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
@@ -85,6 +108,7 @@
/* Begin PBXFileReference section */
0AB4BC8E5564382493B0CEDB /* SplashView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SplashView.swift; sourceTree = ""; };
0C397ED87CA36DDB17BA0A60 /* LaunchTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LaunchTests.swift; sourceTree = ""; };
+ 33C3A825E35B81636156DB43 /* DesignSystem_DesignSystem.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DesignSystem_DesignSystem.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
45D9FF020D2DC8F6DABC4415 /* LaunchTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "LaunchTests-Info.plist"; sourceTree = ""; };
4C483202D74E2B6F40348B08 /* Kingfisher.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Kingfisher.framework; sourceTree = BUILT_PRODUCTS_DIR; };
5BB364B90EFC14BFABA85950 /* LaunchTesting.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LaunchTesting.swift; sourceTree = ""; };
@@ -201,6 +225,7 @@
DAD3AD821D47FA47C1C68E93 /* Products */ = {
isa = PBXGroup;
children = (
+ 33C3A825E35B81636156DB43 /* DesignSystem_DesignSystem.bundle */,
9229787BA766DFA18583ABFA /* DesignSystem.framework */,
4C483202D74E2B6F40348B08 /* Kingfisher.framework */,
CAE9D80105EE847E612B7E64 /* Launch.framework */,
@@ -233,6 +258,7 @@
EAA8360EA3C8B818BB84073F /* Resources */,
680A82AE1D6229AD99D80095 /* Frameworks */,
8018432BFC560EB6A47324C9 /* Embed Frameworks */,
+ 31E08F68DC5A80FAE63BA5AD /* Dependencies */,
);
buildRules = (
);
@@ -274,6 +300,7 @@
312535B7C3FB5E1BFCFEABA3 /* Resources */,
95086E17C1046738BE921DC9 /* Frameworks */,
5080B47EE8ECE75CBC8C2A75 /* Embed Frameworks */,
+ 10A449D84915DD62332B904F /* Dependencies */,
);
buildRules = (
);
@@ -324,6 +351,7 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
+ 20F3FEBE364914EB1EF8A480 /* DesignSystem_DesignSystem.bundle in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -398,6 +426,10 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-L$(DT_TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)",
+ );
PRODUCT_BUNDLE_IDENTIFIER = com.newdok.launch.tests;
PRODUCT_NAME = LaunchTests;
SDKROOT = iphoneos;
@@ -559,6 +591,10 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-L$(DT_TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)",
+ );
PRODUCT_BUNDLE_IDENTIFIER = com.newdok.launch.tests;
PRODUCT_NAME = LaunchTests;
SDKROOT = iphoneos;
diff --git a/Modules/Features/Launch/Launch.xcodeproj/xcuserdata/minjae.xcuserdatad/xcschemes/xcschememanagement.plist b/Modules/Features/Launch/Launch.xcodeproj/xcuserdata/minjae.xcuserdatad/xcschemes/xcschememanagement.plist
index c8203c22..ed2f0ac1 100644
--- a/Modules/Features/Launch/Launch.xcodeproj/xcuserdata/minjae.xcuserdatad/xcschemes/xcschememanagement.plist
+++ b/Modules/Features/Launch/Launch.xcodeproj/xcuserdata/minjae.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -9,7 +9,7 @@
isShown
orderHint
- 24
+ 26
diff --git a/Modules/Features/MyPage/Mypage.xcodeproj/project.pbxproj b/Modules/Features/MyPage/Mypage.xcodeproj/project.pbxproj
index c329ebac..fe0097b7 100644
--- a/Modules/Features/MyPage/Mypage.xcodeproj/project.pbxproj
+++ b/Modules/Features/MyPage/Mypage.xcodeproj/project.pbxproj
@@ -29,6 +29,7 @@
19935A663C405AB22BC11A90 /* MypageProfileSection.swift in Sources */ = {isa = PBXBuildFile; fileRef = E11BF00A81D205AE7C88AD86 /* MypageProfileSection.swift */; };
1B2616837CF776230638671F /* UpdateMypageIndustryUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 07B7BEC13FBA38B3C41C987C /* UpdateMypageIndustryUseCase.swift */; };
1ED582B601FFE9A15EBDFEAB /* CheckPhoneErrorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = C67CA1301A9D268781520C44 /* CheckPhoneErrorView.swift */; };
+ 20015500438B2BF74ADF1E65 /* Alamofire_Alamofire.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 016E05AA5462B5742B38EE2F /* Alamofire_Alamofire.bundle */; };
2028E1C4001175401C38828D /* PopupView.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AC9681D4DFFD4DDB3C3849F8 /* PopupView.framework */; };
21A188D0711A098C96B00BA1 /* MockFetchMypageSubscriptionCountUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 68E20EDF12F7BB2BCCD3A6E0 /* MockFetchMypageSubscriptionCountUseCase.swift */; };
239769415CD1F59CF82D9BE1 /* UpdateMypagePhoneNumberUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78D3B8B6EE19F0EB5305F954 /* UpdateMypagePhoneNumberUseCase.swift */; };
@@ -37,7 +38,6 @@
26310133009BC5878EE98201 /* DesignSystem.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = F22BB87ADE60B2913D547027 /* DesignSystem.framework */; };
28438088E730C49EA0EB4C5C /* FoundationKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E5560256FA7A1E81BD9D273D /* FoundationKit.framework */; };
2888735C5BAF70C0D6B0109D /* FetchMypageProfileUseCaseImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 72AA4E9FF7DDC66639D13020 /* FetchMypageProfileUseCaseImpl.swift */; };
- 29755FFF0D1C0E7337AE7750 /* Alamofire.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 0C68A206BF4ED627C6FD6913 /* Alamofire.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
2B7AD17B6B8B29942DD794ED /* PasswordRecoveryNewPasswordView.swift in Sources */ = {isa = PBXBuildFile; fileRef = BB74B2505ABC6888CD7570BA /* PasswordRecoveryNewPasswordView.swift */; };
2C7FAE614E80018B9A6C7093 /* MypageSMSResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6F26CCFE679A08F925F2DED /* MypageSMSResponse.swift */; };
2E09A3943D712C889AB620F2 /* MypageInterface.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = F3F1D4AE93F33C120F2D700D /* MypageInterface.framework */; };
@@ -58,6 +58,7 @@
45B0C198530E0D39619FC7BE /* MockUpdateMypageNicknameUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CF17808A49514A2EAFDAC31 /* MockUpdateMypageNicknameUseCase.swift */; };
463EFE736E5179473F855EF1 /* MypageSimpleUserDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = A706BC74BF163D2A4F5BA500 /* MypageSimpleUserDTO.swift */; };
4DAA542956FCB27188ACB180 /* MockFetchMypageProfileUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = DAAD47F935B16B390CB7174B /* MockFetchMypageProfileUseCase.swift */; };
+ 4EFFD1002113E3F7EDE4839C /* Alamofire_Alamofire.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 016E05AA5462B5742B38EE2F /* Alamofire_Alamofire.bundle */; };
4F4A7C58471FD3E476DC51A9 /* MypageInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = A191B750E183477ADF4BAD45 /* MypageInterface.swift */; };
564B61C6A1F0847B1DAFF2E2 /* WithdrawView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1A8CA8BD41F6C960FE921370 /* WithdrawView.swift */; };
56E877CF4D70242607EDE666 /* MypageAuthSMSUseCaseImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1FCEFD92A1B7C753EFD92E41 /* MypageAuthSMSUseCaseImpl.swift */; };
@@ -71,17 +72,20 @@
61A99A787139724DC5113271 /* MypageWithdrawUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = B669A3864F90EBB9C3D4E6BA /* MypageWithdrawUseCase.swift */; };
61E40C93CDBEC0CAB13E652C /* FetchMypageSubscriptionCountUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = E19C49B9723AC6D72A76460D /* FetchMypageSubscriptionCountUseCase.swift */; };
62A23C3C44FBA3E5FAF01A2D /* MypageData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6ABBA906E340EC2BED3094C2 /* MypageData.framework */; };
+ 6425B27665B9D4C1FC44F5B8 /* DesignSystem_DesignSystem.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 457F5AE227F7EE7039B169C3 /* DesignSystem_DesignSystem.bundle */; };
64ACE20AAD8E457F506F6C0A /* PhoneNumberRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0864AA3AB533EA7B497F5F42 /* PhoneNumberRequest.swift */; };
65FD8FA9561F446C685D5869 /* UpdateMypageIndustryUseCaseImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 277AE28C44A8605B9F62E650 /* UpdateMypageIndustryUseCaseImpl.swift */; };
6676B749B932DA5CEC2E4FC7 /* MypageWithdrawUseCaseImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 58EC02453D9378A9E882667F /* MypageWithdrawUseCaseImpl.swift */; };
66FED88CC9623B40E9018056 /* MypageStatsRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 96C71387C911BEF715D45ED4 /* MypageStatsRepository.swift */; };
673279633359C697B138609A /* Shared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A19D7843FEFE29BD0819145C /* Shared.framework */; };
+ 6BD347A2BB85A7E487BA69AD /* Alamofire_Alamofire.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 016E05AA5462B5742B38EE2F /* Alamofire_Alamofire.bundle */; };
6F49967DE5266732372552CE /* NicknameRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 60212C4A9A518D22D0675607 /* NicknameRequest.swift */; };
6F8000862DD13AEF535E051B /* PasswordRecoveryIdInputView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5AA4B94929B9963BC4D21A20 /* PasswordRecoveryIdInputView.swift */; };
6F952B605A3F6F9FAD334A18 /* Kingfisher.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 09180759E35FAC99B7E89CD5 /* Kingfisher.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
7019BB754A571C304FE31EB5 /* PopupView.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AC9681D4DFFD4DDB3C3849F8 /* PopupView.framework */; };
730123643E382D9C907B7F67 /* MockFetchReceivedArticleCountUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = F96604BD68CE1F8AD27036CD /* MockFetchReceivedArticleCountUseCase.swift */; };
7390DD8F969606B6A77B2C13 /* Shared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A19D7843FEFE29BD0819145C /* Shared.framework */; };
+ 73C1C3881BEB27ACA8A98BAD /* DesignSystem_DesignSystem.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 457F5AE227F7EE7039B169C3 /* DesignSystem_DesignSystem.bundle */; };
773AA4470A9CDC5CC8CC6725 /* EditAlertView.swift in Sources */ = {isa = PBXBuildFile; fileRef = A009F18AE1816F468D79E100 /* EditAlertView.swift */; };
77FEFFBC6B10590447194F86 /* CheckMypagePhoneNumberUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6AF371A295252C79E14F27F3 /* CheckMypagePhoneNumberUseCase.swift */; };
796D479ECF58F63D1D06DCA2 /* PasswordUpdateViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = C192D2736D8CD6720A80CC7B /* PasswordUpdateViewModel.swift */; };
@@ -109,11 +113,11 @@
9C201EC0DAAEC226B4EE442F /* MypageMenuRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 934C22124CDFC346342A95C3 /* MypageMenuRow.swift */; };
9D3AB07A6C6B100950358F7A /* MypageData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6ABBA906E340EC2BED3094C2 /* MypageData.framework */; };
9D82B3CCEBABF8D7C4472530 /* MypageNewsletterAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00ADC4E6680A49B2835E0613 /* MypageNewsletterAPI.swift */; };
- 9E22CABCDB73D10FFB7CF7CB /* DesignSystem.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = F22BB87ADE60B2913D547027 /* DesignSystem.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
A4217A60C159A12FE76ABFE8 /* PasswordRecoveryPagerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D19AA7B747A81D71CA1EAB3 /* PasswordRecoveryPagerView.swift */; };
A4242A1D182943C95A652B09 /* Kingfisher.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 09180759E35FAC99B7E89CD5 /* Kingfisher.framework */; };
A4A87FF738D7D3FACD49C84C /* MypageData.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 6ABBA906E340EC2BED3094C2 /* MypageData.framework */; };
AA7440FF2D87122AC0C57C5C /* MockCheckMypagePhoneNumberUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5B948AE7636FC23F71C71E6E /* MockCheckMypagePhoneNumberUseCase.swift */; };
+ AB77FDBC9BFB70EABB9E90DB /* DesignSystem_DesignSystem.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 457F5AE227F7EE7039B169C3 /* DesignSystem_DesignSystem.bundle */; };
ACEFDA1D477291E9B8603C9B /* MypageArticlesCountDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9793B42A6B978BBF835B69A3 /* MypageArticlesCountDTO.swift */; };
AEBDF2B4E51B3AF98B6138D6 /* MypageUserDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4087D8AA34FB12797F2AEA90 /* MypageUserDTO.swift */; };
B656958EBB2857C9E41E63CD /* MypageBase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 95FC5124811C98A13DC4817D /* MypageBase.swift */; };
@@ -121,6 +125,7 @@
BD5499769F4EBE9706C2BF1E /* RecoveryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8C4A9B55BFB0E1A40566064 /* RecoveryView.swift */; };
BF2AE740E3A427A571DC4062 /* RecoveryViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EF11E470578D33ABA7047737 /* RecoveryViewModel.swift */; };
C06F5EC21D529D37540FF9CC /* MypageTesting.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EE5C77BF7D74BC2D6FA8CFC7 /* MypageTesting.framework */; };
+ C0FCFB7C0BBF90177410C410 /* Alamofire_Alamofire.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 016E05AA5462B5742B38EE2F /* Alamofire_Alamofire.bundle */; };
C3630ED16D5074B6F2233758 /* FoundationKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E5560256FA7A1E81BD9D273D /* FoundationKit.framework */; };
C96DE8049E3D958DCE9AB7C4 /* FindIdPagerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6B4AFE1CED393D16552571B /* FindIdPagerView.swift */; };
C9FF796F2AA621AE1D66A5DE /* MypageExampleApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = E7D59C19C10FE12F704316D3 /* MypageExampleApp.swift */; };
@@ -143,6 +148,7 @@
E53CFA17DB251E18A51C8B33 /* Shared.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = A19D7843FEFE29BD0819145C /* Shared.framework */; };
E6D1E60D6FC1D14380165736 /* MypageDomain.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = EBD899A674C4500DB831BB6A /* MypageDomain.framework */; };
E7E4E6781091400A8673B6D0 /* DesignSystem.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F22BB87ADE60B2913D547027 /* DesignSystem.framework */; };
+ E83BEF1ADB06A3FE6AF0BFA2 /* Shared.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = A19D7843FEFE29BD0819145C /* Shared.framework */; };
E954F6CCCF253E1A3D7A7BC2 /* MypageAuthSMSUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2BC6F734D19F24C06A9D0A06 /* MypageAuthSMSUseCase.swift */; };
ED2944B1EE07AD35BC8D9B0A /* AccountManagementView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 435A5C982C020CECF6823250 /* AccountManagementView.swift */; };
F09691BFAB22A01F310F8230 /* MypageInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F3F1D4AE93F33C120F2D700D /* MypageInterface.framework */; };
@@ -151,6 +157,7 @@
F7B316BE3528AF02ADA6BE26 /* MypageArticleAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB28F715ACFA56FEC8BEB075 /* MypageArticleAPI.swift */; };
F92448F94E2E371EE28ED903 /* FetchReceivedArticleCountUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = C15DB3E0D5901EEC8177079D /* FetchReceivedArticleCountUseCase.swift */; };
F9BB0F13EC85B6040261A1EE /* UpdateMypageInterestsUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = D1A1A3380F7E1997F6692FB3 /* UpdateMypageInterestsUseCase.swift */; };
+ FBCFDAB59D1034A0E1336366 /* DesignSystem_DesignSystem.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 457F5AE227F7EE7039B169C3 /* DesignSystem_DesignSystem.bundle */; };
FD2C381A3E05CF2B36FB61EE /* MypageNicknameResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61FA720977B70D1021A11DD2 /* MypageNicknameResponse.swift */; };
FE5425117241183C96A40601 /* MypageProfileError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49A64BCEE1B1F6EA6016D3ED /* MypageProfileError.swift */; };
FF9DE05FB3879F6756D356F3 /* FoundationKit.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = E5560256FA7A1E81BD9D273D /* FoundationKit.framework */; };
@@ -254,8 +261,6 @@
dstPath = "";
dstSubfolderSpec = 10;
files = (
- 29755FFF0D1C0E7337AE7750 /* Alamofire.framework in Embed Frameworks */,
- 9E22CABCDB73D10FFB7CF7CB /* DesignSystem.framework in Embed Frameworks */,
6F952B605A3F6F9FAD334A18 /* Kingfisher.framework in Embed Frameworks */,
173507B404A2246EDE9820C4 /* Moya.framework in Embed Frameworks */,
4309992BBB532C2C4975F91A /* PopupView.framework in Embed Frameworks */,
@@ -293,6 +298,17 @@
name = Dependencies;
runOnlyForDeploymentPostprocessing = 1;
};
+ 6E92E01C99FEA3A7EBEC8578 /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ 6BD347A2BB85A7E487BA69AD /* Alamofire_Alamofire.bundle in Dependencies */,
+ AB77FDBC9BFB70EABB9E90DB /* DesignSystem_DesignSystem.bundle in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
738D1A7E8E42B0AF48466AC9 /* Dependencies */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 8;
@@ -304,6 +320,17 @@
name = Dependencies;
runOnlyForDeploymentPostprocessing = 1;
};
+ 7E085CBD1B1AF405AAF08F4B /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ 20015500438B2BF74ADF1E65 /* Alamofire_Alamofire.bundle in Dependencies */,
+ 73C1C3881BEB27ACA8A98BAD /* DesignSystem_DesignSystem.bundle in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
B0E02DDD8BAAA436E95D843A /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
@@ -347,6 +374,7 @@
files = (
0A3699F877328C471254A373 /* MypageDomain.framework in Dependencies */,
10F52C5CD1F56BDD23C40095 /* MypageInterface.framework in Dependencies */,
+ E83BEF1ADB06A3FE6AF0BFA2 /* Shared.framework in Dependencies */,
);
name = Dependencies;
runOnlyForDeploymentPostprocessing = 1;
@@ -366,13 +394,13 @@
/* Begin PBXFileReference section */
00ADC4E6680A49B2835E0613 /* MypageNewsletterAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MypageNewsletterAPI.swift; sourceTree = ""; };
00B196FB966DFE35C9E08FDC /* MypageData-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "MypageData-Info.plist"; sourceTree = ""; };
+ 016E05AA5462B5742B38EE2F /* Alamofire_Alamofire.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Alamofire_Alamofire.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
01BFC2AEFC548A0615E91552 /* MypageUserAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MypageUserAPI.swift; sourceTree = ""; };
05E42E9F8C3622168A7668BD /* ResetMypagePasswordUseCaseImpl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ResetMypagePasswordUseCaseImpl.swift; sourceTree = ""; };
07B7BEC13FBA38B3C41C987C /* UpdateMypageIndustryUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UpdateMypageIndustryUseCase.swift; sourceTree = ""; };
0864AA3AB533EA7B497F5F42 /* PhoneNumberRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhoneNumberRequest.swift; sourceTree = ""; };
09180759E35FAC99B7E89CD5 /* Kingfisher.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Kingfisher.framework; sourceTree = BUILT_PRODUCTS_DIR; };
0C00F0658E4F123B52DD6F08 /* UpdateMypagePhoneNumberUseCaseImpl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UpdateMypagePhoneNumberUseCaseImpl.swift; sourceTree = ""; };
- 0C68A206BF4ED627C6FD6913 /* Alamofire.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Alamofire.framework; sourceTree = BUILT_PRODUCTS_DIR; };
0CC1AC7077C6B1C0A295174A /* UpdateMypagePasswordUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UpdateMypagePasswordUseCase.swift; sourceTree = ""; };
1319F664323C85E6471B77BF /* Mypage-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Mypage-Info.plist"; sourceTree = ""; };
17886E6B7AEAB04E72C50AF7 /* PhoneUpdateView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PhoneUpdateView.swift; sourceTree = ""; };
@@ -392,6 +420,7 @@
3D0A03142C1620014E65140B /* CheckMypageIDDupUseCaseImpl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CheckMypageIDDupUseCaseImpl.swift; sourceTree = ""; };
4087D8AA34FB12797F2AEA90 /* MypageUserDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MypageUserDTO.swift; sourceTree = ""; };
435A5C982C020CECF6823250 /* AccountManagementView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountManagementView.swift; sourceTree = ""; };
+ 457F5AE227F7EE7039B169C3 /* DesignSystem_DesignSystem.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DesignSystem_DesignSystem.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
46D5FE2366E88552B9AF5EF5 /* CheckMypagePhoneNumberUseCaseImpl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CheckMypagePhoneNumberUseCaseImpl.swift; sourceTree = ""; };
49A64BCEE1B1F6EA6016D3ED /* MypageProfileError.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MypageProfileError.swift; sourceTree = ""; };
49BDC64B5E330B1D9882B8FB /* MockMypageWithdrawUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockMypageWithdrawUseCase.swift; sourceTree = ""; };
@@ -734,7 +763,8 @@
66C40A27705DCBB89FAF70F8 /* Products */ = {
isa = PBXGroup;
children = (
- 0C68A206BF4ED627C6FD6913 /* Alamofire.framework */,
+ 016E05AA5462B5742B38EE2F /* Alamofire_Alamofire.bundle */,
+ 457F5AE227F7EE7039B169C3 /* DesignSystem_DesignSystem.bundle */,
F22BB87ADE60B2913D547027 /* DesignSystem.framework */,
E5560256FA7A1E81BD9D273D /* FoundationKit.framework */,
09180759E35FAC99B7E89CD5 /* Kingfisher.framework */,
@@ -1013,6 +1043,7 @@
3635D559ED43F856B224D518 /* Resources */,
FF152E317F8015C395A95F74 /* Frameworks */,
1747DA9151D1AC8CC5FCCC94 /* Embed Frameworks */,
+ 6E92E01C99FEA3A7EBEC8578 /* Dependencies */,
);
buildRules = (
);
@@ -1146,6 +1177,7 @@
6B2333B20EFC57C8B21D464C /* Resources */,
2EC9A9CD77126097DD5F8F1B /* Frameworks */,
E74125313A6BC39A42EE4641 /* Embed Frameworks */,
+ 7E085CBD1B1AF405AAF08F4B /* Dependencies */,
);
buildRules = (
);
@@ -1214,6 +1246,8 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
+ C0FCFB7C0BBF90177410C410 /* Alamofire_Alamofire.bundle in Resources */,
+ 6425B27665B9D4C1FC44F5B8 /* DesignSystem_DesignSystem.bundle in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1228,6 +1262,8 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
+ 4EFFD1002113E3F7EDE4839C /* Alamofire_Alamofire.bundle in Resources */,
+ FBCFDAB59D1034A0E1336366 /* DesignSystem_DesignSystem.bundle in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1486,6 +1522,10 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-L$(DT_TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)",
+ );
PRODUCT_BUNDLE_IDENTIFIER = com.newdok.mypage.tests;
PRODUCT_NAME = MypageTests;
SDKROOT = iphoneos;
@@ -1573,6 +1613,10 @@
"$(inherited)",
"@executable_path/Frameworks",
);
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-L$(DT_TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)",
+ );
PRODUCT_BUNDLE_IDENTIFIER = com.newdok.mypage.example;
PRODUCT_NAME = MypageExample;
SDKROOT = iphoneos;
@@ -1637,6 +1681,10 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-L$(DT_TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)",
+ );
PRODUCT_BUNDLE_IDENTIFIER = com.newdok.mypage.tests;
PRODUCT_NAME = MypageTests;
SDKROOT = iphoneos;
@@ -1903,6 +1951,10 @@
"$(inherited)",
"@executable_path/Frameworks",
);
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-L$(DT_TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)",
+ );
PRODUCT_BUNDLE_IDENTIFIER = com.newdok.mypage.example;
PRODUCT_NAME = MypageExample;
SDKROOT = iphoneos;
diff --git a/Modules/Features/MyPage/Mypage.xcodeproj/xcuserdata/minjae.xcuserdatad/xcschemes/xcschememanagement.plist b/Modules/Features/MyPage/Mypage.xcodeproj/xcuserdata/minjae.xcuserdatad/xcschemes/xcschememanagement.plist
index d135002c..2e0c5ec7 100644
--- a/Modules/Features/MyPage/Mypage.xcodeproj/xcuserdata/minjae.xcuserdatad/xcschemes/xcschememanagement.plist
+++ b/Modules/Features/MyPage/Mypage.xcodeproj/xcuserdata/minjae.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -9,28 +9,28 @@
isShown
orderHint
- 25
+ 27
MypageData.xcscheme_^#shared#^_
isShown
orderHint
- 26
+ 28
MypageDomain.xcscheme_^#shared#^_
isShown
orderHint
- 27
+ 29
MypageExample.xcscheme_^#shared#^_
isShown
orderHint
- 28
+ 30
diff --git a/Modules/Features/Search/Search.xcodeproj/project.pbxproj b/Modules/Features/Search/Search.xcodeproj/project.pbxproj
index 05586def..7007c90f 100644
--- a/Modules/Features/Search/Search.xcodeproj/project.pbxproj
+++ b/Modules/Features/Search/Search.xcodeproj/project.pbxproj
@@ -8,7 +8,6 @@
/* Begin PBXBuildFile section */
015EA02C07E45A4739DE697E /* FetchPopularKeywordsUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3CCBFAF98AEAA3473A573FDC /* FetchPopularKeywordsUseCase.swift */; };
- 023D9AC7244E888BFA91ABEF /* Alamofire.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 689C0AA30BC17A2D6BA3F9CB /* Alamofire.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
099AA2BC3A9B9B32EEF2B4A8 /* SearchInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8E111FAC845F96C56366564E /* SearchInterface.swift */; };
0C1B9A4814809B68A971AE15 /* Moya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6935497B8DBBBC4FEF7F371B /* Moya.framework */; };
0CA24716D9F70C942AD25477 /* NewsLetterEmptyView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30E42EF45439133ED9D52822 /* NewsLetterEmptyView.swift */; };
@@ -23,22 +22,26 @@
1BAF6D90BE5749101E700080 /* PopupView.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 1F073E43BB17A8E85C5AA8A0 /* PopupView.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
1C52231AD0F31D01F81FF2EB /* Kingfisher.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 469D051C099D125ABFA94EBD /* Kingfisher.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
20D4BCFA115ABCEB63772C1A /* SearchDomain.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 138503897C437D2E43301F23 /* SearchDomain.framework */; };
+ 239DA214A8D5F8EF08B96619 /* DesignSystem_DesignSystem.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 0EE2D0AEC979E4057EF7FA5A /* DesignSystem_DesignSystem.bundle */; };
23F862B7360E02A200F2EB0E /* NetworkKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 09C6456DA96EB978D6D9D462 /* NetworkKit.framework */; };
+ 26843B9D0FF89160D2D21A43 /* Alamofire_Alamofire.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = CCEB0430E005F10DFFE17636 /* Alamofire_Alamofire.bundle */; };
28E36A746E3E061EF9D29291 /* MockSearchNewslettersUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = D6C9E8ECB6B925827AD7015D /* MockSearchNewslettersUseCase.swift */; };
2C0B7FFC91ABE89401F525AD /* MockFetchPopularKeywordsUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = CD06DB1B6FB5A4F669B5F023 /* MockFetchPopularKeywordsUseCase.swift */; };
2E50C5AF6A3FC0BDC11908E4 /* NoArticleView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9A1C453C66B2CD564B97D5DA /* NoArticleView.swift */; };
+ 3187165DDAAF64EC2D98DB4D /* DesignSystem_DesignSystem.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 0EE2D0AEC979E4057EF7FA5A /* DesignSystem_DesignSystem.bundle */; };
3808DDFAFF30FAB52B19E229 /* Shared.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 125BD6F6F900FE0F16E9AFC8 /* Shared.framework */; };
413E3265B6666248C89E2464 /* SearchedNewsletterDTO.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5DD66C7F3ECD7E20BC58F449 /* SearchedNewsletterDTO.swift */; };
495766BA2FA2D9B062332AFD /* SearchedNewsletter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 29151EC654CBDC98F89C56D3 /* SearchedNewsletter.swift */; };
4E8760D7F7E6A004FA3AAA06 /* SearchMain.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7814D8BA01A03012E40C5B3 /* SearchMain.swift */; };
4EF44496ECB05C8E29BD3E70 /* SearchNewslettersUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D466383C24C28E9ED01A076 /* SearchNewslettersUseCase.swift */; };
+ 5E07E5A979024DA17E38ABC2 /* Alamofire_Alamofire.bundle in Resources */ = {isa = PBXBuildFile; fileRef = CCEB0430E005F10DFFE17636 /* Alamofire_Alamofire.bundle */; };
6DAE677C5B47001C1B9D09AD /* SearchNewsletterRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1069F9F5D96811C34A580412 /* SearchNewsletterRow.swift */; };
6EC3658701C5DDB5B88F65AA /* Shared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 125BD6F6F900FE0F16E9AFC8 /* Shared.framework */; };
7E0A78327C137B933BDCF6D4 /* SearchTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D97017FB6FE85C21EEC1D8B /* SearchTests.swift */; };
8181B085CE18A6CEE3A66505 /* SearchedNewsletter+Sample.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30F1434D944C3A3F69A716BC /* SearchedNewsletter+Sample.swift */; };
- 81F68122D4E48D1D4D023370 /* DesignSystem.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 26CD22AD121507433FA773EF /* DesignSystem.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
85D3904421F267B473EED884 /* SearchData.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 701D52A197B8E7BDBA756946 /* SearchData.framework */; };
88D874BEEA4169CD598264B3 /* SearchBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0547A521CAE2E81914EFEFDC /* SearchBuilder.swift */; };
+ 8A4429053A94EE4A35BBB3F6 /* Alamofire_Alamofire.bundle in Resources */ = {isa = PBXBuildFile; fileRef = CCEB0430E005F10DFFE17636 /* Alamofire_Alamofire.bundle */; };
8FD1A10CBD16030CA54E0E40 /* Kingfisher.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 469D051C099D125ABFA94EBD /* Kingfisher.framework */; };
92B199229BC659A599B0B054 /* SearchInterface.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = D355E681C0F08758849D9345 /* SearchInterface.framework */; };
93CFB175583BCC8DBEBE90CB /* SearchData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 701D52A197B8E7BDBA756946 /* SearchData.framework */; };
@@ -46,8 +49,10 @@
9B30F210F68970DF5127C523 /* SearchDomain.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 138503897C437D2E43301F23 /* SearchDomain.framework */; };
9EC2625822DA13904C8A29EB /* SearchTesting.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 838EBFAB897D38EC2B391886 /* SearchTesting.framework */; };
A829B59B25970B6991E2848B /* FetchPopularKeywordsUseCaseImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 473B77528DB0E33CEF09E0D4 /* FetchPopularKeywordsUseCaseImpl.swift */; };
+ ABCAA05899B035B10B2F3EF9 /* DesignSystem_DesignSystem.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 0EE2D0AEC979E4057EF7FA5A /* DesignSystem_DesignSystem.bundle */; };
AC04590E07695AE7A806FAD9 /* Search.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DCEA3ABCBA70F49C90FFC61F /* Search.framework */; };
AF288D379585E1C1DFE44FA2 /* SearchInterface.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = D355E681C0F08758849D9345 /* SearchInterface.framework */; };
+ B69BA5C7B4F7607CBCE8E36B /* Alamofire_Alamofire.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = CCEB0430E005F10DFFE17636 /* Alamofire_Alamofire.bundle */; };
B8DD111AE35E4AB671E37148 /* SearchData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 701D52A197B8E7BDBA756946 /* SearchData.framework */; };
BC43CDC0F9DB0F87AA35DE74 /* NetworkKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 09C6456DA96EB978D6D9D462 /* NetworkKit.framework */; };
BC799AAB44F46FD582E0D5A7 /* Moya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6935497B8DBBBC4FEF7F371B /* Moya.framework */; };
@@ -58,6 +63,7 @@
CB176EEB1B83EF220AE01544 /* SearchRepositoryImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4CAC92F658154DD34F5330B9 /* SearchRepositoryImpl.swift */; };
CBE2E26CBE8FAE616C8A7223 /* SearchDomain.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 138503897C437D2E43301F23 /* SearchDomain.framework */; };
CDB2896D69AF6E8F45D49F86 /* Moya.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 6935497B8DBBBC4FEF7F371B /* Moya.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ CE8C647F9935EFA6235BBBBB /* DesignSystem_DesignSystem.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 0EE2D0AEC979E4057EF7FA5A /* DesignSystem_DesignSystem.bundle */; };
CEAA9FCA98F56C5C184D94B9 /* SearchAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = E53596DC37AD0977FC3430D7 /* SearchAPI.swift */; };
DD6795FF69CD93B520886A1B /* PopularKeyword.swift in Sources */ = {isa = PBXBuildFile; fileRef = B3A2671DE7FC229A2D15ADA9 /* PopularKeyword.swift */; };
E325186C0C85C706AB387F29 /* NetworkKit.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 09C6456DA96EB978D6D9D462 /* NetworkKit.framework */; };
@@ -67,6 +73,7 @@
F7A5889A58EEC388434CCCB3 /* DesignSystem.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 26CD22AD121507433FA773EF /* DesignSystem.framework */; };
F87AF19EBB604A1197E6B440 /* Shared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 125BD6F6F900FE0F16E9AFC8 /* Shared.framework */; };
F9E0049177AC2A640098B3A7 /* SearchInterface.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D355E681C0F08758849D9345 /* SearchInterface.framework */; };
+ FA9C7FB9753FF7AB4039671E /* Shared.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 125BD6F6F900FE0F16E9AFC8 /* Shared.framework */; };
FCAE4D5E0C78C551D60B1157 /* DesignSystem.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 26CD22AD121507433FA773EF /* DesignSystem.framework */; };
FE71144B1C50E1D95991A604 /* SearchViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D2ACA18D21B051155077DA3 /* SearchViewModel.swift */; };
/* End PBXBuildFile section */
@@ -152,6 +159,17 @@
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
+ 0FD283A6D7CA26DA1D2B6937 /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ B69BA5C7B4F7607CBCE8E36B /* Alamofire_Alamofire.bundle in Dependencies */,
+ 3187165DDAAF64EC2D98DB4D /* DesignSystem_DesignSystem.bundle in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
1FDBE93BA4CF4056B2A750B5 /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
@@ -179,8 +197,6 @@
dstPath = "";
dstSubfolderSpec = 10;
files = (
- 023D9AC7244E888BFA91ABEF /* Alamofire.framework in Embed Frameworks */,
- 81F68122D4E48D1D4D023370 /* DesignSystem.framework in Embed Frameworks */,
1C52231AD0F31D01F81FF2EB /* Kingfisher.framework in Embed Frameworks */,
CDB2896D69AF6E8F45D49F86 /* Moya.framework in Embed Frameworks */,
1BAF6D90BE5749101E700080 /* PopupView.framework in Embed Frameworks */,
@@ -195,6 +211,18 @@
files = (
CBE2E26CBE8FAE616C8A7223 /* SearchDomain.framework in Dependencies */,
92B199229BC659A599B0B054 /* SearchInterface.framework in Dependencies */,
+ FA9C7FB9753FF7AB4039671E /* Shared.framework in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ 4BFB3AA0E67BFD2A2369A555 /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ 26843B9D0FF89160D2D21A43 /* Alamofire_Alamofire.bundle in Dependencies */,
+ CE8C647F9935EFA6235BBBBB /* DesignSystem_DesignSystem.bundle in Dependencies */,
);
name = Dependencies;
runOnlyForDeploymentPostprocessing = 1;
@@ -269,6 +297,7 @@
/* Begin PBXFileReference section */
0547A521CAE2E81914EFEFDC /* SearchBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchBuilder.swift; sourceTree = ""; };
09C6456DA96EB978D6D9D462 /* NetworkKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = NetworkKit.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 0EE2D0AEC979E4057EF7FA5A /* DesignSystem_DesignSystem.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DesignSystem_DesignSystem.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
1069F9F5D96811C34A580412 /* SearchNewsletterRow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchNewsletterRow.swift; sourceTree = ""; };
12466D213C1D03705923D06D /* SearchExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = SearchExample.app; sourceTree = BUILT_PRODUCTS_DIR; };
125BD6F6F900FE0F16E9AFC8 /* Shared.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Shared.framework; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -291,7 +320,6 @@
502AA82AD7833704FDFEB017 /* SearchExampleApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchExampleApp.swift; sourceTree = ""; };
5DD66C7F3ECD7E20BC58F449 /* SearchedNewsletterDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchedNewsletterDTO.swift; sourceTree = ""; };
642E610A17539092C8C4A08F /* SearchDIContainer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchDIContainer.swift; sourceTree = ""; };
- 689C0AA30BC17A2D6BA3F9CB /* Alamofire.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Alamofire.framework; sourceTree = BUILT_PRODUCTS_DIR; };
6935497B8DBBBC4FEF7F371B /* Moya.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Moya.framework; sourceTree = BUILT_PRODUCTS_DIR; };
6D2ACA18D21B051155077DA3 /* SearchViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchViewModel.swift; sourceTree = ""; };
701D52A197B8E7BDBA756946 /* SearchData.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SearchData.framework; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -302,6 +330,7 @@
9AEAA516F8E566FF78FD382B /* PopularKeywordDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PopularKeywordDTO.swift; sourceTree = ""; };
B3A2671DE7FC229A2D15ADA9 /* PopularKeyword.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PopularKeyword.swift; sourceTree = ""; };
B4C293EA1BEB83670D260B13 /* SearchExample-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "SearchExample-Info.plist"; sourceTree = ""; };
+ CCEB0430E005F10DFFE17636 /* Alamofire_Alamofire.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Alamofire_Alamofire.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
CD06DB1B6FB5A4F669B5F023 /* MockFetchPopularKeywordsUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockFetchPopularKeywordsUseCase.swift; sourceTree = ""; };
D355E681C0F08758849D9345 /* SearchInterface.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SearchInterface.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D532402CD48F0D3BAE7ACD48 /* SearchInterface-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "SearchInterface-Info.plist"; sourceTree = ""; };
@@ -583,7 +612,8 @@
BEF3F41E9B860D2AF6E4FE8E /* Products */ = {
isa = PBXGroup;
children = (
- 689C0AA30BC17A2D6BA3F9CB /* Alamofire.framework */,
+ CCEB0430E005F10DFFE17636 /* Alamofire_Alamofire.bundle */,
+ 0EE2D0AEC979E4057EF7FA5A /* DesignSystem_DesignSystem.bundle */,
26CD22AD121507433FA773EF /* DesignSystem.framework */,
469D051C099D125ABFA94EBD /* Kingfisher.framework */,
6935497B8DBBBC4FEF7F371B /* Moya.framework */,
@@ -689,6 +719,7 @@
560638D67118197BA55FDA87 /* Resources */,
F271BCF26737FA01F42D78D9 /* Frameworks */,
32006D16C41FDFB2FE09C415 /* Embed Frameworks */,
+ 4BFB3AA0E67BFD2A2369A555 /* Dependencies */,
);
buildRules = (
);
@@ -735,6 +766,7 @@
BFE4DF0124DF27EC3591F41A /* Resources */,
4764E98A0E48BBD1C0A40DE5 /* Frameworks */,
9D9977A71E7C7D1C574D5FE5 /* Embed Frameworks */,
+ 0FD283A6D7CA26DA1D2B6937 /* Dependencies */,
);
buildRules = (
);
@@ -869,6 +901,8 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
+ 5E07E5A979024DA17E38ABC2 /* Alamofire_Alamofire.bundle in Resources */,
+ ABCAA05899B035B10B2F3EF9 /* DesignSystem_DesignSystem.bundle in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -897,6 +931,8 @@
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
+ 8A4429053A94EE4A35BBB3F6 /* Alamofire_Alamofire.bundle in Resources */,
+ 239DA214A8D5F8EF08B96619 /* DesignSystem_DesignSystem.bundle in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -1100,6 +1136,10 @@
"$(inherited)",
"@executable_path/Frameworks",
);
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-L$(DT_TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)",
+ );
PRODUCT_BUNDLE_IDENTIFIER = com.newdok.search.example;
PRODUCT_NAME = SearchExample;
SDKROOT = iphoneos;
@@ -1128,6 +1168,10 @@
"$(inherited)",
"@executable_path/Frameworks",
);
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-L$(DT_TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)",
+ );
PRODUCT_BUNDLE_IDENTIFIER = com.newdok.search.example;
PRODUCT_NAME = SearchExample;
SDKROOT = iphoneos;
@@ -1251,6 +1295,10 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-L$(DT_TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)",
+ );
PRODUCT_BUNDLE_IDENTIFIER = com.newdok.search.tests;
PRODUCT_NAME = SearchTests;
SDKROOT = iphoneos;
@@ -1638,6 +1686,10 @@
"@executable_path/Frameworks",
"@loader_path/Frameworks",
);
+ OTHER_LDFLAGS = (
+ "$(inherited)",
+ "-L$(DT_TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)",
+ );
PRODUCT_BUNDLE_IDENTIFIER = com.newdok.search.tests;
PRODUCT_NAME = SearchTests;
SDKROOT = iphoneos;
diff --git a/Modules/Features/Search/Search.xcodeproj/xcuserdata/minjae.xcuserdatad/xcschemes/xcschememanagement.plist b/Modules/Features/Search/Search.xcodeproj/xcuserdata/minjae.xcuserdatad/xcschemes/xcschememanagement.plist
index 54e10007..c48dbd89 100644
--- a/Modules/Features/Search/Search.xcodeproj/xcuserdata/minjae.xcuserdatad/xcschemes/xcschememanagement.plist
+++ b/Modules/Features/Search/Search.xcodeproj/xcuserdata/minjae.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -9,28 +9,28 @@
isShown
orderHint
- 32
+ 34
SearchData.xcscheme_^#shared#^_
isShown
orderHint
- 33
+ 35
SearchDomain.xcscheme_^#shared#^_
isShown
orderHint
- 34
+ 36
SearchExample.xcscheme_^#shared#^_
isShown
orderHint
- 35
+ 37
diff --git a/Modules/Features/Subscribe/Subscribe.xcodeproj/project.pbxproj b/Modules/Features/Subscribe/Subscribe.xcodeproj/project.pbxproj
index b947ee3f..ffb40047 100644
--- a/Modules/Features/Subscribe/Subscribe.xcodeproj/project.pbxproj
+++ b/Modules/Features/Subscribe/Subscribe.xcodeproj/project.pbxproj
@@ -13,6 +13,8 @@
18C097FEE30E087906590A11 /* SubscribeDomain.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = C4490CBDF56FA86E240C6B38 /* SubscribeDomain.framework */; };
1D808CDF8AF5B904FC97DB9A /* SubscribeInterface.swift in Sources */ = {isa = PBXBuildFile; fileRef = A41979B86D33DCE3C96AF5E6 /* SubscribeInterface.swift */; };
25854157DCA8CBE5626D4678 /* Moya.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 4B92346DC382D5960E6BFCD0 /* Moya.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ 2876F661347187156292E9DF /* DesignSystem_DesignSystem.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 88725C861E43B9844D9D4D87 /* DesignSystem_DesignSystem.bundle */; };
+ 28955AE1A98B7A1F05BABCB6 /* DesignSystem_DesignSystem.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 88725C861E43B9844D9D4D87 /* DesignSystem_DesignSystem.bundle */; };
2A2CC7861E654128BCF341C1 /* Shared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 818348BBF6B997119C6F5E6A /* Shared.framework */; };
2C9F2B1D40235C64AF4842E2 /* Subscribe.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5595DBABF800B949A8877D83 /* Subscribe.framework */; };
3110F4E21938AE7A242D84BF /* SubscribeNewsletter+Sample.swift in Sources */ = {isa = PBXBuildFile; fileRef = A534C6A232AC46225249EA00 /* SubscribeNewsletter+Sample.swift */; };
@@ -26,6 +28,7 @@
4ACCBD0A2EAA7E518EF2FB3C /* MockResumeSubscriptionUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = AF719FE89E8FDC35CB2F20CC /* MockResumeSubscriptionUseCase.swift */; };
4DE577C3AE91C2A7FE749119 /* SubscribeNewsletterAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDA341D080AD88E95DC1EFBD /* SubscribeNewsletterAPI.swift */; };
58D5C2CFA60155CD19084E6E /* FetchPausedSubscriptionUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2D4AEFBB8D9678A0A33642D7 /* FetchPausedSubscriptionUseCase.swift */; };
+ 5DD195D73E348A1AF31C3698 /* Alamofire_Alamofire.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 597FEA69136238C9DCCDE9B0 /* Alamofire_Alamofire.bundle */; };
5F9D05B7F1E2203A0BDEA43F /* SubscribeInterface.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 32659030D723322E066C81FA /* SubscribeInterface.framework */; };
646AFF2CA9E115D116B5636B /* SubscribeTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 255AADBF446AC4625B5B10B7 /* SubscribeTests.swift */; };
6577BDC6B8C05F2868DFB096 /* FetchSubscriptionCountUseCaseImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6941CB8A17245A73A120BA0D /* FetchSubscriptionCountUseCaseImpl.swift */; };
@@ -47,7 +50,6 @@
989A43B3ADEEFACF867ECBC5 /* SubscriptionRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB2B45BE2400769168823DB3 /* SubscriptionRequest.swift */; };
9ED4023D5406DC0E465583D7 /* MockFetchPausedSubscriptionUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = BF924BB2C781BBA6D2E123D0 /* MockFetchPausedSubscriptionUseCase.swift */; };
A0179DBE853A8A7F3174C5DC /* Kingfisher.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 77C44007B0D39A42AB4ACE21 /* Kingfisher.framework */; };
- A18295DA317249F7144A9E1B /* Alamofire.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = A71898F4F86DD408E9654E98 /* Alamofire.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
A1EDAD31829A35641A2646A7 /* DesignSystem.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AC1A311498193AE6DF677F49 /* DesignSystem.framework */; };
A8D3077CAB611B4EAF820E6B /* PauseSubscriptionUseCaseImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 550ED7054D9A6D9D260531A9 /* PauseSubscriptionUseCaseImpl.swift */; };
AC2E314D9F7BB541918AE29C /* SubscribeData.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = DF5FF2A79CAAD6E1707060E8 /* SubscribeData.framework */; };
@@ -57,8 +59,10 @@
BC5D9A3AB6139B6790305DC5 /* SubscribeExampleApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 67523DDB4CDDB4A9B5775D1D /* SubscribeExampleApp.swift */; };
C4D403ADB487A63B26DEBCBD /* SubscribeView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B7D112BBF7502924041ED21 /* SubscribeView.swift */; };
C80E01B0867DE460720744E0 /* MockPauseSubscriptionUseCase.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52C6C8C86219782C79D3BD07 /* MockPauseSubscriptionUseCase.swift */; };
+ C9FFFA2C52AF78ABDECF998B /* Alamofire_Alamofire.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 597FEA69136238C9DCCDE9B0 /* Alamofire_Alamofire.bundle */; };
CB0B7570D2E7DCF3D9385631 /* Moya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B92346DC382D5960E6BFCD0 /* Moya.framework */; };
CBCED34E905FF64C06915E3A /* Moya.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B92346DC382D5960E6BFCD0 /* Moya.framework */; };
+ CBD1E4831C5CA195DD24BC84 /* Alamofire_Alamofire.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 597FEA69136238C9DCCDE9B0 /* Alamofire_Alamofire.bundle */; };
D4AB4A546B907E1C6A744C01 /* SubscribeDomain.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C4490CBDF56FA86E240C6B38 /* SubscribeDomain.framework */; };
D863D5A1D86640B66ADDE802 /* SubscribeData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = DF5FF2A79CAAD6E1707060E8 /* SubscribeData.framework */; };
DB5C9D560E785B286AAA4E2E /* SubscribeRow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 518873D08881857BF9308510 /* SubscribeRow.swift */; };
@@ -71,11 +75,14 @@
EA6088EE736EA710C61A29C6 /* SubscribeViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 210E740423E2557577E07549 /* SubscribeViewModel.swift */; };
EA6395FFFF6759BD38A8252A /* SubscribeNewsletterRepositoryImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5478AD7CFD21E8DFD1DAAB8A /* SubscribeNewsletterRepositoryImpl.swift */; };
ECB3A6D8A5EE4F0D5BDA3B5A /* SubscribeMain.swift in Sources */ = {isa = PBXBuildFile; fileRef = 601DDD48F11BCA082BCDC946 /* SubscribeMain.swift */; };
- F19F0F05C353E24561393294 /* DesignSystem.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = AC1A311498193AE6DF677F49 /* DesignSystem.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
+ ED87ACF2C48CBCD9FA816100 /* DesignSystem_DesignSystem.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 88725C861E43B9844D9D4D87 /* DesignSystem_DesignSystem.bundle */; };
+ EDB26E33DE561926E9D1C2A4 /* DesignSystem_DesignSystem.bundle in Dependencies */ = {isa = PBXBuildFile; fileRef = 88725C861E43B9844D9D4D87 /* DesignSystem_DesignSystem.bundle */; };
+ F14B81EA5BFF0F05FF2156FE /* Alamofire_Alamofire.bundle in Resources */ = {isa = PBXBuildFile; fileRef = 597FEA69136238C9DCCDE9B0 /* Alamofire_Alamofire.bundle */; };
F34D9DBEC1E48FCAFAEF3336 /* SubscribeNewsletterRepository.swift in Sources */ = {isa = PBXBuildFile; fileRef = 80AC022782541B311A1C6B99 /* SubscribeNewsletterRepository.swift */; };
F3CB6A79FD601706C034F708 /* SegmentPickerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 27BE4372D9C9BB0DAF5A3985 /* SegmentPickerView.swift */; };
F9E18925131A335A18BDAC8C /* SubscribeError.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28774BD95118989809A32F82 /* SubscribeError.swift */; };
FAE8DCC1FABFF0F0FE9BE8BB /* ResumeSubscriptionUseCaseImpl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AB58445B89F114633E08BD2 /* ResumeSubscriptionUseCaseImpl.swift */; };
+ FD946B80E197F38EE50F199A /* Shared.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = 818348BBF6B997119C6F5E6A /* Shared.framework */; };
FDB9C9A8EA11ED7D892A2B48 /* DesignSystem.framework in Dependencies */ = {isa = PBXBuildFile; fileRef = AC1A311498193AE6DF677F49 /* DesignSystem.framework */; };
FE5D7DB06470DBA2B3DD9C6F /* Shared.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 818348BBF6B997119C6F5E6A /* Shared.framework */; };
/* End PBXBuildFile section */
@@ -171,14 +178,34 @@
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
};
+ 17724452884607EE74BED1FD /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ 5DD195D73E348A1AF31C3698 /* Alamofire_Alamofire.bundle in Dependencies */,
+ ED87ACF2C48CBCD9FA816100 /* DesignSystem_DesignSystem.bundle in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ 2085267526EB0E32B527F413 /* Dependencies */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstSubfolderSpec = 16;
+ files = (
+ C9FFFA2C52AF78ABDECF998B /* Alamofire_Alamofire.bundle in Dependencies */,
+ EDB26E33DE561926E9D1C2A4 /* DesignSystem_DesignSystem.bundle in Dependencies */,
+ );
+ name = Dependencies;
+ runOnlyForDeploymentPostprocessing = 1;
+ };
374F2BB2E1D2FA7F1C9C4CDB /* Embed Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
- A18295DA317249F7144A9E1B /* Alamofire.framework in Embed Frameworks */,
- F19F0F05C353E24561393294 /* DesignSystem.framework in Embed Frameworks */,
47153128BB9B7F991DDC15C3 /* Kingfisher.framework in Embed Frameworks */,
25854157DCA8CBE5626D4678 /* Moya.framework in Embed Frameworks */,
41148B83A433BA12D1036EE1 /* PopupView.framework in Embed Frameworks */,
@@ -257,6 +284,7 @@
buildActionMask = 8;
dstSubfolderSpec = 16;
files = (
+ FD946B80E197F38EE50F199A /* Shared.framework in Dependencies */,
834BB2CBE006EA0013B984F5 /* SubscribeDomain.framework in Dependencies */,
760849803B870DD2D9E68B91 /* SubscribeInterface.framework in Dependencies */,
);
@@ -296,6 +324,7 @@
5478AD7CFD21E8DFD1DAAB8A /* SubscribeNewsletterRepositoryImpl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubscribeNewsletterRepositoryImpl.swift; sourceTree = ""; };
550ED7054D9A6D9D260531A9 /* PauseSubscriptionUseCaseImpl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PauseSubscriptionUseCaseImpl.swift; sourceTree = ""; };
5595DBABF800B949A8877D83 /* Subscribe.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Subscribe.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 597FEA69136238C9DCCDE9B0 /* Alamofire_Alamofire.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Alamofire_Alamofire.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
601DDD48F11BCA082BCDC946 /* SubscribeMain.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubscribeMain.swift; sourceTree = ""; };
67523DDB4CDDB4A9B5775D1D /* SubscribeExampleApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubscribeExampleApp.swift; sourceTree = ""; };
6941CB8A17245A73A120BA0D /* FetchSubscriptionCountUseCaseImpl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FetchSubscriptionCountUseCaseImpl.swift; sourceTree = ""; };
@@ -306,6 +335,7 @@
80C0B3B0D19108DC3253B219 /* SubscribeInterface-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "SubscribeInterface-Info.plist"; sourceTree = ""; };
818348BBF6B997119C6F5E6A /* Shared.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Shared.framework; sourceTree = BUILT_PRODUCTS_DIR; };
8630490A9341AB3457AEA349 /* FetchActiveSubscriptionUseCaseImpl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FetchActiveSubscriptionUseCaseImpl.swift; sourceTree = ""; };
+ 88725C861E43B9844D9D4D87 /* DesignSystem_DesignSystem.bundle */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = DesignSystem_DesignSystem.bundle; sourceTree = BUILT_PRODUCTS_DIR; };
8D51B34F0FB31FC07BA7A661 /* ResumeSubscriptionUseCase.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ResumeSubscriptionUseCase.swift; sourceTree = ""; };
902DD38A5009735AFD6ABECD /* SubscribeNewsletterDTO.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubscribeNewsletterDTO.swift; sourceTree = ""; };
905D13D71D11FFC0A126A1AD /* SubscribeExample-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "SubscribeExample-Info.plist"; sourceTree = ""; };
@@ -315,7 +345,6 @@
A41979B86D33DCE3C96AF5E6 /* SubscribeInterface.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SubscribeInterface.swift; sourceTree = ""; };
A534C6A232AC46225249EA00 /* SubscribeNewsletter+Sample.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "SubscribeNewsletter+Sample.swift"; sourceTree = "