diff --git a/.github/workflows/smeemDev.yml b/.github/workflows/smeemDev.yml index 7dc17b20..1e24181d 100644 --- a/.github/workflows/smeemDev.yml +++ b/.github/workflows/smeemDev.yml @@ -26,4 +26,4 @@ jobs: - name: Create Debug.xcconfig run: echo "${{ secrets.DEBUG_CONFIG }}" > ./Smeem-iOS/Debug.xcconfig - name: Build - run: xcodebuild build -project Smeem-iOS/Smeem-iOS.xcodeproj -scheme Smeem-Dev -destination 'platform=iOS Simulator,name=iPhone 14 Pro,OS=17.2' + run: xcodebuild build -project Smeem-iOS/Smeem-iOS.xcodeproj -scheme Smeem-Dev -destination 'platform=iOS Simulator,name=iPhone 15,OS=17.2' diff --git a/Smeem-iOS/Smeem-iOS.xcodeproj/project.pbxproj b/Smeem-iOS/Smeem-iOS.xcodeproj/project.pbxproj index 92880679..30440067 100644 --- a/Smeem-iOS/Smeem-iOS.xcodeproj/project.pbxproj +++ b/Smeem-iOS/Smeem-iOS.xcodeproj/project.pbxproj @@ -19,15 +19,10 @@ 37144C582B890923008565C4 /* DiaryModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37144C572B890923008565C4 /* DiaryModel.swift */; }; 371C69D32BE112AD000D745D /* BottomSheetPresentable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 371C69D22BE112AD000D745D /* BottomSheetPresentable.swift */; }; 371C69D52BE11926000D745D /* BadgeBottomSheetViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 371C69D42BE11926000D745D /* BadgeBottomSheetViewController.swift */; }; - 371E94162A87B83D0098280F /* NextButtonDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 371E94152A87B83D0098280F /* NextButtonDelegate.swift */; }; - 371E94192A87DA960098280F /* EditHowGoalViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 371E94182A87DA960098280F /* EditHowGoalViewController.swift */; }; 3728B8D32A2CFED300EF4CF8 /* ForeignDiaryViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3728B8D22A2CFED300EF4CF8 /* ForeignDiaryViewController.swift */; }; 3728B8D52A2CFF2C00EF4CF8 /* StepOneKoreanDiaryViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3728B8D42A2CFF2C00EF4CF8 /* StepOneKoreanDiaryViewController.swift */; }; 3728B8D72A2CFF3A00EF4CF8 /* StepTwoKoreanDiaryViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3728B8D62A2CFF3A00EF4CF8 /* StepTwoKoreanDiaryViewController.swift */; }; - 373A7F552C3D78CC00CF554C /* CustomBannerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 373A7F542C3D78CC00CF554C /* CustomBannerView.swift */; }; 373D29932CBFE17B00A559A3 /* View+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 373D29922CBFE17B00A559A3 /* View+.swift */; }; - 373D29962CC2A84E00A559A3 /* SwiftUINavigationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 373D29952CC2A84E00A559A3 /* SwiftUINavigationView.swift */; }; - 373D29982CC7A53C00A559A3 /* CustomSegmentedControl.swift in Sources */ = {isa = PBXBuildFile; fileRef = 373D29972CC7A53C00A559A3 /* CustomSegmentedControl.swift */; }; 373E38592A2F889500DF96F0 /* DiaryDetailRandomSubjectView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 373E38582A2F889500DF96F0 /* DiaryDetailRandomSubjectView.swift */; }; 374F828C2AC327A200C128B9 /* SmeemTextViewHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 374F828B2AC327A200C128B9 /* SmeemTextViewHandler.swift */; }; 374F828E2AC5DFFE00C128B9 /* DiaryBottomView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 374F828D2AC5DFFE00C128B9 /* DiaryBottomView.swift */; }; @@ -62,11 +57,7 @@ 37A574DB29FF9FFF00312453 /* Pretendard-Medium.otf in Resources */ = {isa = PBXBuildFile; fileRef = 37A574D729FF9FFF00312453 /* Pretendard-Medium.otf */; }; 37A574DC29FF9FFF00312453 /* Pretendard-Bold.otf in Resources */ = {isa = PBXBuildFile; fileRef = 37A574D829FF9FFF00312453 /* Pretendard-Bold.otf */; }; 37A574E02A00CDCD00312453 /* SeparationLine.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37A574DF2A00CDCD00312453 /* SeparationLine.swift */; }; - 37A574E62A02178D00312453 /* SmeemToastView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37A574E52A02178D00312453 /* SmeemToastView.swift */; }; 37A574E82A02424F00312453 /* RandomTopicView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37A574E72A02424F00312453 /* RandomTopicView.swift */; }; - 37ADCC022B0289AD00E474AA /* Observable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37ADCC012B0289AD00E474AA /* Observable.swift */; }; - 37B360AA2AC2A4680006C8ED /* SmeemTextView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37B360A92AC2A4680006C8ED /* SmeemTextView.swift */; }; - 37BB09BB2CBF8BA800A3B28A /* CoachingCompletedView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37BB09BA2CBF8BA800A3B28A /* CoachingCompletedView.swift */; }; 37BCADF22BC3FFBF006EF960 /* DetailDiaryViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37BCADF12BC3FFBF006EF960 /* DetailDiaryViewModel.swift */; }; 37BDC9872C4FEA940075F68A /* SendFeedbackView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37BDC9862C4FEA940075F68A /* SendFeedbackView.swift */; }; 37DCA6572A47574300FF8F90 /* RandomTopicAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37DCA6562A47574300FF8F90 /* RandomTopicAPI.swift */; }; @@ -80,7 +71,6 @@ 37DCA6702A484D3700FF8F90 /* PostDiaryRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37DCA66F2A484D3700FF8F90 /* PostDiaryRequest.swift */; }; 37DCA6722A484D5000FF8F90 /* PostDiaryService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37DCA6712A484D5000FF8F90 /* PostDiaryService.swift */; }; 37DCA6742A484D5900FF8F90 /* PostDiaryAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37DCA6732A484D5900FF8F90 /* PostDiaryAPI.swift */; }; - 37EB69E62A4B3BC400075E4E /* DataBindProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37EB69E52A4B3BC400075E4E /* DataBindProtocol.swift */; }; 4A004D4F2B4ED760003C8936 /* TrainingGoalResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A004D4E2B4ED760003C8936 /* TrainingGoalResponse.swift */; }; 4A004D512B4ED783003C8936 /* TrainingWayResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A004D502B4ED783003C8936 /* TrainingWayResponse.swift */; }; 4A004D542B4EE26E003C8936 /* AuthService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A004D532B4EE26E003C8936 /* AuthService.swift */; }; @@ -89,7 +79,6 @@ 4A004D5B2B4EE29A003C8936 /* PushTestService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A004D5A2B4EE29A003C8936 /* PushTestService.swift */; }; 4A004D5E2B4EE2B4003C8936 /* MyPageService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A004D5D2B4EE2B4003C8936 /* MyPageService.swift */; }; 4A004D602B4EE2BD003C8936 /* MyPageAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A004D5F2B4EE2BD003C8936 /* MyPageAPI.swift */; }; - 4A01235F2AAA2C1500E09646 /* SmeemLoadingView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A01235E2AAA2C1500E09646 /* SmeemLoadingView.swift */; }; 4A07F8A82B7B3E5E004185F2 /* SignupBottomSheetViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A07F8A72B7B3E5E004185F2 /* SignupBottomSheetViewController.swift */; }; 4A07F8AC2B7B3E7F004185F2 /* SignupViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A07F8AB2B7B3E7F004185F2 /* SignupViewModel.swift */; }; 4A07F8AF2B7B58B7004185F2 /* AuthModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A07F8AE2B7B58B7004185F2 /* AuthModel.swift */; }; @@ -98,13 +87,11 @@ 4A0EA4552A014027006CCE52 /* GeneralResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A0EA4542A014027006CCE52 /* GeneralResponse.swift */; }; 4A0EA4572A01403E006CCE52 /* MoyaLoggingPlugin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A0EA4562A01403E006CCE52 /* MoyaLoggingPlugin.swift */; }; 4A0EA4592A014103006CCE52 /* URLConstant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A0EA4582A014103006CCE52 /* URLConstant.swift */; }; - 4A0EA4642A014710006CCE52 /* SmeemButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A0EA4632A014710006CCE52 /* SmeemButton.swift */; }; 4A0EE5FA2B89E00100158899 /* UserNicknameViewModelTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A0EE5F92B89E00100158899 /* UserNicknameViewModelTest.swift */; }; 4A0EE6012B92138900158899 /* OnboardingServiceMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A0EE6002B92138900158899 /* OnboardingServiceMock.swift */; }; 4A0EE6042B9301E900158899 /* OnboardingServiceProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A0EE6032B9301E900158899 /* OnboardingServiceProtocol.swift */; }; 4A10A3A82AB8AA5800C145E9 /* System.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A10A3A72AB8AA5800C145E9 /* System.swift */; }; 4A1882FA2A8BBD0D0088F590 /* SmeemStartViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AD923E62A0650B600FF5E27 /* SmeemStartViewController.swift */; }; - 4A1F2AE72CD4A1740055587F /* CoachingComparisonView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A1F2AE62CD4A15B0055587F /* CoachingComparisonView.swift */; }; 4A2AEE702C3D78E70000CBCB /* ResignSummaryViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A2AEE6F2C3D78E70000CBCB /* ResignSummaryViewModel.swift */; }; 4A3373F52A45BF6600EFE6C4 /* OnboardingEndPoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A3373F42A45BF6600EFE6C4 /* OnboardingEndPoint.swift */; }; 4A3373F82A461ABC00EFE6C4 /* OnboardingService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A3373F72A461ABC00EFE6C4 /* OnboardingService.swift */; }; @@ -112,13 +99,9 @@ 4A3F2E972A0ABBAA00F6AC60 /* AlarmCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A3F2E962A0ABBAA00F6AC60 /* AlarmCollectionViewCell.swift */; }; 4A3F2E9C2A0B4C7100F6AC60 /* AlarmCollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A3F2E9B2A0B4C7100F6AC60 /* AlarmCollectionView.swift */; }; 4A3F2EA02A0C18B600F6AC60 /* DatePickerFooterView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A3F2E9F2A0C18B600F6AC60 /* DatePickerFooterView.swift */; }; - 4A4050EC2CE8C54400E84EDE /* CoachingExplanationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A4050EB2CE8C54400E84EDE /* CoachingExplanationView.swift */; }; 4A454A832B6666FF0079D48D /* TrainingGoalViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A454A822B6666FF0079D48D /* TrainingGoalViewModel.swift */; }; 4A454A852B6667180079D48D /* ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A454A842B6667180079D48D /* ViewModel.swift */; }; - 4A454A882B691F850079D48D /* EditGoalViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A454A872B691F850079D48D /* EditGoalViewController.swift */; }; 4A4FEB012B721956001BBDF3 /* Combine+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A4FEB002B721956001BBDF3 /* Combine+.swift */; }; - 4A4FEB092B728144001BBDF3 /* TrainingWayViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A4FEB082B728144001BBDF3 /* TrainingWayViewModel.swift */; }; - 4A4FEB0C2B7289E7001BBDF3 /* TrainingWayAppData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A4FEB0B2B7289E7001BBDF3 /* TrainingWayAppData.swift */; }; 4A59EBA02B9367C2004D9823 /* BadgePopupViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A59EB9F2B9367C2004D9823 /* BadgePopupViewModel.swift */; }; 4A64752E2CEDE03E00EE2210 /* TrainingCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A64752D2CEDE03E00EE2210 /* TrainingCollectionViewCell.swift */; }; 4A6527952CEBB25F000191C3 /* LottieUI in Frameworks */ = {isa = PBXBuildFile; productRef = 4A6527942CEBB25F000191C3 /* LottieUI */; }; @@ -141,7 +124,6 @@ 4A9731DF2BAAC7F300DEC0C8 /* SplashServiceMock.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A9731DE2BAAC7F300DEC0C8 /* SplashServiceMock.swift */; }; 4A9E10E42A43468600295D07 /* BaseTargetType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A9E10E32A43468600295D07 /* BaseTargetType.swift */; }; 4A9FAB452A4C3D1200C40D5A /* BadgeListViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A9FAB3E2A4C3D1200C40D5A /* BadgeListViewController.swift */; }; - 4A9FAB462A4C3D1200C40D5A /* BadgeNetworkModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A9FAB402A4C3D1200C40D5A /* BadgeNetworkModel.swift */; }; 4A9FAB472A4C3D1200C40D5A /* BadgeListTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A9FAB422A4C3D1200C40D5A /* BadgeListTableViewCell.swift */; }; 4A9FAB482A4C3D1200C40D5A /* BadgeHeaderView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A9FAB432A4C3D1200C40D5A /* BadgeHeaderView.swift */; }; 4A9FAB492A4C3D1200C40D5A /* DetailBadgeCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A9FAB442A4C3D1200C40D5A /* DetailBadgeCollectionViewCell.swift */; }; @@ -154,6 +136,7 @@ 4AA942D52A276C7900A552A0 /* KakaoSDKAuth in Frameworks */ = {isa = PBXBuildFile; productRef = 4AA942D42A276C7900A552A0 /* KakaoSDKAuth */; }; 4AA942D72A276C7900A552A0 /* KakaoSDKCommon in Frameworks */ = {isa = PBXBuildFile; productRef = 4AA942D62A276C7900A552A0 /* KakaoSDKCommon */; }; 4AA942D92A276C7900A552A0 /* KakaoSDKUser in Frameworks */ = {isa = PBXBuildFile; productRef = 4AA942D82A276C7900A552A0 /* KakaoSDKUser */; }; + 4AB349462CF203250047C484 /* Store.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AB349402CF203250047C484 /* Store.swift */; }; 4AB7C9192B75F9B500845733 /* GesturePublisher+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AB7C9182B75F9B500845733 /* GesturePublisher+.swift */; }; 4AB7C91B2B7624CC00845733 /* ServiceAcceptAppData.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AB7C91A2B7624CC00845733 /* ServiceAcceptAppData.swift */; }; 4AB7C9262B78914100845733 /* SplashViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AB7C9252B78914100845733 /* SplashViewModel.swift */; }; @@ -183,11 +166,7 @@ 4AC00ECC2AD1C143009230DA /* UICollectionView+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AC00ECB2AD1C143009230DA /* UICollectionView+.swift */; }; 4AC00ED72AD2E6E0009230DA /* TrainingStepView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AC00ED62AD2E6E0009230DA /* TrainingStepView.swift */; }; 4AC00EE62AD432F2009230DA /* BaseCollectionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AC00EE52AD432F2009230DA /* BaseCollectionView.swift */; }; - 4AC00EEB2AD4527A009230DA /* TrainingWayViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AC00EEA2AD4527A009230DA /* TrainingWayViewController.swift */; }; 4AC00EF02AD52F4C009230DA /* TrainingAlarmViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AC00EEF2AD52F4C009230DA /* TrainingAlarmViewController.swift */; }; - 4AC00EF32AD56C4C009230DA /* SmeemTextButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AC00EF22AD56C4C009230DA /* SmeemTextButton.swift */; }; - 4AC00EF52AD57202009230DA /* TrainingAlarmDataSendProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AC00EF42AD57202009230DA /* TrainingAlarmDataSendProtocol.swift */; }; - 4AC00EF72AD59C73009230DA /* AuthDataSendProtocol.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AC00EF62AD59C73009230DA /* AuthDataSendProtocol.swift */; }; 4AC047252A8FCAE100EBDC0E /* AuthManagementViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AC047242A8FCAE100EBDC0E /* AuthManagementViewController.swift */; }; 4AC1D6832B4ED38200D39A98 /* OnboardingModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AC1D6822B4ED38200D39A98 /* OnboardingModel.swift */; }; 4AC4B82D2A2F9FE200E147AA /* UserDefaultsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AC4B82C2A2F9FE200E147AA /* UserDefaultsManager.swift */; }; @@ -221,8 +200,6 @@ 4AE35E9E2A7FE8CE00465FD5 /* UICollectionViewCell+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AE35E9D2A7FE8CE00465FD5 /* UICollectionViewCell+.swift */; }; 4AEB82952A4CB4F200C1114B /* BadgePopupViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AEB82942A4CB4F100C1114B /* BadgePopupViewController.swift */; }; 4AF050EB2CEA300F0055BC3F /* MoyaProvier+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AF050EA2CEA300F0055BC3F /* MoyaProvier+.swift */; }; - 4AF050FB2CEA60F80055BC3F /* smeemLoading.json in Resources */ = {isa = PBXBuildFile; fileRef = 4AF050FA2CEA60F80055BC3F /* smeemLoading.json */; }; - 4AF58CE92A4820AA00305248 /* AuthNetworkModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AF58CE82A4820AA00305248 /* AuthNetworkModel.swift */; }; 4AF78D9B2B84A1DC0098E1FA /* OnboardingServiceTest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AF78D9A2B84A1DC0098E1FA /* OnboardingServiceTest.swift */; }; 4AF78D9E2B84AB6A0098E1FA /* MockProvider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AF78D9D2B84AB6A0098E1FA /* MockProvider.swift */; }; 4AF7C22F2BFB797600E8C6CD /* LockBadgeCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AF7C22E2BFB797600E8C6CD /* LockBadgeCollectionViewCell.swift */; }; @@ -233,12 +210,9 @@ 6F294A432A26179700856CC8 /* ServiceAcceptViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A8275D22A1513120083A4AB /* ServiceAcceptViewController.swift */; }; 6F294A442A26179900856CC8 /* ServiceAcceptCollectionViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4A8275D42A1519550083A4AB /* ServiceAcceptCollectionViewCell.swift */; }; 6F294A452A2617B000856CC8 /* UITextField+.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AD04B382A190020004B7A58 /* UITextField+.swift */; }; - 6F294A462A2617D500856CC8 /* TrainingWayView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4AEFD4C92A1392DF00DAB2BD /* TrainingWayView.swift */; }; 6F294A482A27818200856CC8 /* HomeViewFloatingViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F294A472A27818200856CC8 /* HomeViewFloatingViewController.swift */; }; 6F31802F2A24D1DB00089870 /* CalendarCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F31802E2A24D1DB00089870 /* CalendarCell.swift */; }; 6F62668C2A04EA3B000365CD /* HomeViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6F62668B2A04EA3B000365CD /* HomeViewController.swift */; }; - 6FBC856B2A4B1F9200A43F98 /* MyPageViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FBC856A2A4B1F9200A43F98 /* MyPageViewController.swift */; }; - 6FBC85742A4B603A00A43F98 /* MyPageNetworkModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FBC85732A4B603A00A43F98 /* MyPageNetworkModel.swift */; }; 6FE1298A2A4982DA005536C4 /* HomeAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FE129892A4982DA005536C4 /* HomeAPI.swift */; }; 6FE1298C2A498338005536C4 /* HomeService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FE1298B2A498338005536C4 /* HomeService.swift */; }; 6FE1298E2A4986CA005536C4 /* HomeDiaryResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6FE1298D2A4986CA005536C4 /* HomeDiaryResponse.swift */; }; @@ -270,15 +244,10 @@ 37144C572B890923008565C4 /* DiaryModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiaryModel.swift; sourceTree = ""; }; 371C69D22BE112AD000D745D /* BottomSheetPresentable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BottomSheetPresentable.swift; sourceTree = ""; }; 371C69D42BE11926000D745D /* BadgeBottomSheetViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BadgeBottomSheetViewController.swift; sourceTree = ""; }; - 371E94152A87B83D0098280F /* NextButtonDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NextButtonDelegate.swift; sourceTree = ""; }; - 371E94182A87DA960098280F /* EditHowGoalViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditHowGoalViewController.swift; sourceTree = ""; }; 3728B8D22A2CFED300EF4CF8 /* ForeignDiaryViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ForeignDiaryViewController.swift; sourceTree = ""; }; 3728B8D42A2CFF2C00EF4CF8 /* StepOneKoreanDiaryViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StepOneKoreanDiaryViewController.swift; sourceTree = ""; }; 3728B8D62A2CFF3A00EF4CF8 /* StepTwoKoreanDiaryViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StepTwoKoreanDiaryViewController.swift; sourceTree = ""; }; - 373A7F542C3D78CC00CF554C /* CustomBannerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomBannerView.swift; sourceTree = ""; }; 373D29922CBFE17B00A559A3 /* View+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "View+.swift"; sourceTree = ""; }; - 373D29952CC2A84E00A559A3 /* SwiftUINavigationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftUINavigationView.swift; sourceTree = ""; }; - 373D29972CC7A53C00A559A3 /* CustomSegmentedControl.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CustomSegmentedControl.swift; sourceTree = ""; }; 373E38582A2F889500DF96F0 /* DiaryDetailRandomSubjectView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DiaryDetailRandomSubjectView.swift; sourceTree = ""; }; 37499E3C2BD0C3A100BA6FAF /* SharedDiaryDataService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SharedDiaryDataService.swift; sourceTree = ""; }; 374F828B2AC327A200C128B9 /* SmeemTextViewHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SmeemTextViewHandler.swift; sourceTree = ""; }; @@ -309,11 +278,7 @@ 37A574D729FF9FFF00312453 /* Pretendard-Medium.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Pretendard-Medium.otf"; sourceTree = ""; }; 37A574D829FF9FFF00312453 /* Pretendard-Bold.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Pretendard-Bold.otf"; sourceTree = ""; }; 37A574DF2A00CDCD00312453 /* SeparationLine.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SeparationLine.swift; sourceTree = ""; }; - 37A574E52A02178D00312453 /* SmeemToastView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SmeemToastView.swift; sourceTree = ""; }; 37A574E72A02424F00312453 /* RandomTopicView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RandomTopicView.swift; sourceTree = ""; }; - 37ADCC012B0289AD00E474AA /* Observable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Observable.swift; sourceTree = ""; }; - 37B360A92AC2A4680006C8ED /* SmeemTextView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SmeemTextView.swift; sourceTree = ""; }; - 37BB09BA2CBF8BA800A3B28A /* CoachingCompletedView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoachingCompletedView.swift; sourceTree = ""; }; 37BCADF12BC3FFBF006EF960 /* DetailDiaryViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DetailDiaryViewModel.swift; sourceTree = ""; }; 37BDC9862C4FEA940075F68A /* SendFeedbackView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SendFeedbackView.swift; sourceTree = ""; }; 37DCA6562A47574300FF8F90 /* RandomTopicAPI.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = RandomTopicAPI.swift; sourceTree = ""; }; @@ -327,7 +292,6 @@ 37DCA66F2A484D3700FF8F90 /* PostDiaryRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostDiaryRequest.swift; sourceTree = ""; }; 37DCA6712A484D5000FF8F90 /* PostDiaryService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostDiaryService.swift; sourceTree = ""; }; 37DCA6732A484D5900FF8F90 /* PostDiaryAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PostDiaryAPI.swift; sourceTree = ""; }; - 37EB69E52A4B3BC400075E4E /* DataBindProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DataBindProtocol.swift; sourceTree = ""; }; 4A004D4E2B4ED760003C8936 /* TrainingGoalResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrainingGoalResponse.swift; sourceTree = ""; }; 4A004D502B4ED783003C8936 /* TrainingWayResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrainingWayResponse.swift; sourceTree = ""; }; 4A004D532B4EE26E003C8936 /* AuthService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthService.swift; sourceTree = ""; }; @@ -336,7 +300,6 @@ 4A004D5A2B4EE29A003C8936 /* PushTestService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PushTestService.swift; sourceTree = ""; }; 4A004D5D2B4EE2B4003C8936 /* MyPageService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyPageService.swift; sourceTree = ""; }; 4A004D5F2B4EE2BD003C8936 /* MyPageAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyPageAPI.swift; sourceTree = ""; }; - 4A01235E2AAA2C1500E09646 /* SmeemLoadingView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SmeemLoadingView.swift; sourceTree = ""; }; 4A07F8A72B7B3E5E004185F2 /* SignupBottomSheetViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignupBottomSheetViewController.swift; sourceTree = ""; }; 4A07F8AB2B7B3E7F004185F2 /* SignupViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SignupViewModel.swift; sourceTree = ""; }; 4A07F8AE2B7B58B7004185F2 /* AuthModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthModel.swift; sourceTree = ""; }; @@ -346,13 +309,11 @@ 4A0EA4542A014027006CCE52 /* GeneralResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GeneralResponse.swift; sourceTree = ""; }; 4A0EA4562A01403E006CCE52 /* MoyaLoggingPlugin.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MoyaLoggingPlugin.swift; sourceTree = ""; }; 4A0EA4582A014103006CCE52 /* URLConstant.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = URLConstant.swift; sourceTree = ""; }; - 4A0EA4632A014710006CCE52 /* SmeemButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SmeemButton.swift; sourceTree = ""; }; 4A0EE5F92B89E00100158899 /* UserNicknameViewModelTest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserNicknameViewModelTest.swift; sourceTree = ""; }; 4A0EE6002B92138900158899 /* OnboardingServiceMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingServiceMock.swift; sourceTree = ""; }; 4A0EE6032B9301E900158899 /* OnboardingServiceProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingServiceProtocol.swift; sourceTree = ""; }; 4A10A3A72AB8AA5800C145E9 /* System.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = System.swift; sourceTree = ""; }; 4A13B7582A13D37000F4FB1E /* UserNickNameViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserNickNameViewController.swift; sourceTree = ""; }; - 4A1F2AE62CD4A15B0055587F /* CoachingComparisonView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoachingComparisonView.swift; sourceTree = ""; }; 4A23621B2AFA8682005E4C58 /* Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; 4A23621C2AFA868D005E4C58 /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; 4A2AEE6F2C3D78E70000CBCB /* ResignSummaryViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ResignSummaryViewModel.swift; sourceTree = ""; }; @@ -362,14 +323,10 @@ 4A3F2E962A0ABBAA00F6AC60 /* AlarmCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlarmCollectionViewCell.swift; sourceTree = ""; }; 4A3F2E9B2A0B4C7100F6AC60 /* AlarmCollectionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlarmCollectionView.swift; sourceTree = ""; }; 4A3F2E9F2A0C18B600F6AC60 /* DatePickerFooterView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DatePickerFooterView.swift; sourceTree = ""; }; - 4A4050EB2CE8C54400E84EDE /* CoachingExplanationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CoachingExplanationView.swift; sourceTree = ""; }; 4A454A822B6666FF0079D48D /* TrainingGoalViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrainingGoalViewModel.swift; sourceTree = ""; }; 4A454A842B6667180079D48D /* ViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewModel.swift; sourceTree = ""; }; - 4A454A872B691F850079D48D /* EditGoalViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditGoalViewController.swift; sourceTree = ""; }; 4A4E21EE29D9B02500BF8747 /* Smeem-iOS.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "Smeem-iOS.entitlements"; sourceTree = ""; }; 4A4FEB002B721956001BBDF3 /* Combine+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "Combine+.swift"; sourceTree = ""; }; - 4A4FEB082B728144001BBDF3 /* TrainingWayViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrainingWayViewModel.swift; sourceTree = ""; }; - 4A4FEB0B2B7289E7001BBDF3 /* TrainingWayAppData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrainingWayAppData.swift; sourceTree = ""; }; 4A59EB9F2B9367C2004D9823 /* BadgePopupViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BadgePopupViewModel.swift; sourceTree = ""; }; 4A64752D2CEDE03E00EE2210 /* TrainingCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrainingCollectionViewCell.swift; sourceTree = ""; }; 4A6630352A51B0AD00D19CC9 /* EditDiaryViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditDiaryViewController.swift; sourceTree = ""; }; @@ -395,13 +352,13 @@ 4A9731DE2BAAC7F300DEC0C8 /* SplashServiceMock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SplashServiceMock.swift; sourceTree = ""; }; 4A9E10E32A43468600295D07 /* BaseTargetType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseTargetType.swift; sourceTree = ""; }; 4A9FAB3E2A4C3D1200C40D5A /* BadgeListViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BadgeListViewController.swift; sourceTree = ""; }; - 4A9FAB402A4C3D1200C40D5A /* BadgeNetworkModel.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BadgeNetworkModel.swift; sourceTree = ""; }; 4A9FAB422A4C3D1200C40D5A /* BadgeListTableViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BadgeListTableViewCell.swift; sourceTree = ""; }; 4A9FAB432A4C3D1200C40D5A /* BadgeHeaderView.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = BadgeHeaderView.swift; sourceTree = ""; }; 4A9FAB442A4C3D1200C40D5A /* DetailBadgeCollectionViewCell.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DetailBadgeCollectionViewCell.swift; sourceTree = ""; }; 4AA1EEE92A5870690017FF97 /* Urbanist-SemiBold.otf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "Urbanist-SemiBold.otf"; sourceTree = ""; }; 4AA5E4B32BF2355300F308C8 /* MySummaryViewModel2.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MySummaryViewModel2.swift; sourceTree = ""; }; 4AA6FEE82C3ABDB500E588E9 /* ResignSummaryViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ResignSummaryViewController.swift; sourceTree = ""; }; + 4AB349402CF203250047C484 /* Store.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Store.swift; sourceTree = ""; }; 4AB7C9182B75F9B500845733 /* GesturePublisher+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "GesturePublisher+.swift"; sourceTree = ""; }; 4AB7C91A2B7624CC00845733 /* ServiceAcceptAppData.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServiceAcceptAppData.swift; sourceTree = ""; }; 4AB7C9252B78914100845733 /* SplashViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SplashViewModel.swift; sourceTree = ""; }; @@ -433,11 +390,7 @@ 4AC00ECB2AD1C143009230DA /* UICollectionView+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UICollectionView+.swift"; sourceTree = ""; }; 4AC00ED62AD2E6E0009230DA /* TrainingStepView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrainingStepView.swift; sourceTree = ""; }; 4AC00EE52AD432F2009230DA /* BaseCollectionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseCollectionView.swift; sourceTree = ""; }; - 4AC00EEA2AD4527A009230DA /* TrainingWayViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrainingWayViewController.swift; sourceTree = ""; }; 4AC00EEF2AD52F4C009230DA /* TrainingAlarmViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrainingAlarmViewController.swift; sourceTree = ""; }; - 4AC00EF22AD56C4C009230DA /* SmeemTextButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SmeemTextButton.swift; sourceTree = ""; }; - 4AC00EF42AD57202009230DA /* TrainingAlarmDataSendProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrainingAlarmDataSendProtocol.swift; sourceTree = ""; }; - 4AC00EF62AD59C73009230DA /* AuthDataSendProtocol.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthDataSendProtocol.swift; sourceTree = ""; }; 4AC047242A8FCAE100EBDC0E /* AuthManagementViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthManagementViewController.swift; sourceTree = ""; }; 4AC1D6822B4ED38200D39A98 /* OnboardingModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnboardingModel.swift; sourceTree = ""; }; 4AC4B82C2A2F9FE200E147AA /* UserDefaultsManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserDefaultsManager.swift; sourceTree = ""; }; @@ -472,11 +425,8 @@ 4ADCA2D52A9272E9002904EB /* EditAlarmViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditAlarmViewController.swift; sourceTree = ""; }; 4AE35E9D2A7FE8CE00465FD5 /* UICollectionViewCell+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UICollectionViewCell+.swift"; sourceTree = ""; }; 4AEB82942A4CB4F100C1114B /* BadgePopupViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BadgePopupViewController.swift; sourceTree = ""; }; - 4AEFD4C92A1392DF00DAB2BD /* TrainingWayView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrainingWayView.swift; sourceTree = ""; }; 4AF050EA2CEA300F0055BC3F /* MoyaProvier+.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MoyaProvier+.swift"; sourceTree = ""; }; - 4AF050FA2CEA60F80055BC3F /* smeemLoading.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = smeemLoading.json; sourceTree = ""; }; 4AF507742A10CD4D007C62B1 /* TrainingGoalViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TrainingGoalViewController.swift; sourceTree = ""; }; - 4AF58CE82A4820AA00305248 /* AuthNetworkModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthNetworkModel.swift; sourceTree = ""; }; 4AF78D9A2B84A1DC0098E1FA /* OnboardingServiceTest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = OnboardingServiceTest.swift; sourceTree = ""; }; 4AF78D9D2B84AB6A0098E1FA /* MockProvider.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MockProvider.swift; sourceTree = ""; }; 4AF7C22E2BFB797600E8C6CD /* LockBadgeCollectionViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LockBadgeCollectionViewCell.swift; sourceTree = ""; }; @@ -485,8 +435,6 @@ 6F294A472A27818200856CC8 /* HomeViewFloatingViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeViewFloatingViewController.swift; sourceTree = ""; }; 6F31802E2A24D1DB00089870 /* CalendarCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalendarCell.swift; sourceTree = ""; }; 6F62668B2A04EA3B000365CD /* HomeViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeViewController.swift; sourceTree = ""; }; - 6FBC856A2A4B1F9200A43F98 /* MyPageViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyPageViewController.swift; sourceTree = ""; }; - 6FBC85732A4B603A00A43F98 /* MyPageNetworkModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MyPageNetworkModel.swift; sourceTree = ""; }; 6FE129892A4982DA005536C4 /* HomeAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeAPI.swift; sourceTree = ""; }; 6FE1298B2A498338005536C4 /* HomeService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeService.swift; sourceTree = ""; }; 6FE1298D2A4986CA005536C4 /* HomeDiaryResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeDiaryResponse.swift; sourceTree = ""; }; @@ -495,6 +443,14 @@ /* End PBXFileReference section */ /* Begin PBXFileSystemSynchronizedRootGroup section */ + 4AB3494D2CF229D10047C484 /* UIViewConponent */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = UIViewConponent; sourceTree = ""; }; + 4AB3494E2CF22A070047C484 /* Global */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = Global; sourceTree = ""; }; + 4AB3494F2CF22A250047C484 /* Button */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = Button; sourceTree = ""; }; + 4AB349502CF22A2E0047C484 /* TextView */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = TextView; sourceTree = ""; }; + 4AB349512CF22A3F0047C484 /* Json */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = Json; sourceTree = ""; }; + 4AB349522CF22AD30047C484 /* Auth */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = Auth; sourceTree = ""; }; + 4AB349532CF22AD90047C484 /* Badge */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = Badge; sourceTree = ""; }; + 4AB349562CF22BFF0047C484 /* EditUser */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = EditUser; sourceTree = ""; }; 4AF050CE2CE9DE010055BC3F /* Coaching */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = Coaching; sourceTree = ""; }; 4AF050D72CEA01E20055BC3F /* DiaryComplete */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = DiaryComplete; sourceTree = ""; }; 4AF050D82CEA01EA0055BC3F /* Coaching */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = Coaching; sourceTree = ""; }; @@ -536,7 +492,6 @@ children = ( 374F828B2AC327A200C128B9 /* SmeemTextViewHandler.swift */, 371107D92AC99099007A4AC2 /* KeyboardFollowingLayoutHandler.swift */, - 37ADCC012B0289AD00E474AA /* Observable.swift */, ); path = Utilities; sourceTree = ""; @@ -572,14 +527,6 @@ path = Model; sourceTree = ""; }; - 371E94172A87DA6E0098280F /* EditGoal */ = { - isa = PBXGroup; - children = ( - 4A454A872B691F850079D48D /* EditGoalViewController.swift */, - ); - path = EditGoal; - sourceTree = ""; - }; 373D29912CBFE16B00A559A3 /* SwiftUI */ = { isa = PBXGroup; children = ( @@ -650,7 +597,7 @@ 4AE4B5172A06BF4A00D45F87 /* AuthBottomSheet */, 6F62668A2A04E889000365CD /* Home */, 4AD04B3E2A19217B004B7A58 /* Correction */, - A3D7ECB82A26566F009857D6 /* MyPage */, + A3D7ECB82A26566F009857D6 /* EditUser */, 4AEB82962A4CB4F900C1114B /* BadgePopup */, ); path = Presentation; @@ -681,18 +628,9 @@ 37A574B729FE208A00312453 /* UIComponents */ = { isa = PBXGroup; children = ( - 4A81C2952ACDAB0A0056E815 /* HowLearning */, - 4A81C2942ACDAAF80056E815 /* PlanGoal */, + 4AB3494D2CF229D10047C484 /* UIViewConponent */, 371107DB2ACAB4E3007A4AC2 /* Base */, 4A1EE9552A4DFB86007BFEF3 /* SmeemComponent */, - 4A1EE9532A4DFB42007BFEF3 /* Diary */, - 4A3F2E952A0ABB9C00F6AC60 /* Alarm */, - 373A7F542C3D78CC00CF554C /* CustomBannerView.swift */, - 37BB09BA2CBF8BA800A3B28A /* CoachingCompletedView.swift */, - 373D29952CC2A84E00A559A3 /* SwiftUINavigationView.swift */, - 373D29972CC7A53C00A559A3 /* CustomSegmentedControl.swift */, - 4A4050EB2CE8C54400E84EDE /* CoachingExplanationView.swift */, - 4A1F2AE62CD4A15B0055587F /* CoachingComparisonView.swift */, ); path = UIComponents; sourceTree = ""; @@ -709,7 +647,7 @@ 37A574B929FE209F00312453 /* Resources */ = { isa = PBXGroup; children = ( - 4AF050FA2CEA60F80055BC3F /* smeemLoading.json */, + 4AB349512CF22A3F0047C484 /* Json */, 37A574C629FF6EC000312453 /* Fonts */, 4A8FFA5829C9E1FE00FB76C0 /* Assets.xcassets */, ); @@ -846,8 +784,7 @@ 37EB69E42A4B3B6B00075E4E /* Protocols */ = { isa = PBXGroup; children = ( - 4AC00EFE2AD6DC44009230DA /* DataSend */, - 371E94152A87B83D0098280F /* NextButtonDelegate.swift */, + 4AB349402CF203250047C484 /* Store.swift */, 4A454A842B6667180079D48D /* ViewModel.swift */, ); path = Protocols; @@ -979,10 +916,10 @@ 4A0EA45C2A014126006CCE52 /* NetworkDataModel */ = { isa = PBXGroup; children = ( + 4AB349562CF22BFF0047C484 /* EditUser */, + 4AB349532CF22AD90047C484 /* Badge */, + 4AB349522CF22AD30047C484 /* Auth */, 4ABCBCC82BDD3E33003138A8 /* MySummary */, - 4AF58CE82A4820AA00305248 /* AuthNetworkModel.swift */, - 4A9FAB402A4C3D1200C40D5A /* BadgeNetworkModel.swift */, - 6FBC85732A4B603A00A43F98 /* MyPageNetworkModel.swift */, 4AF9E3EF2AC4143500104768 /* Home */, 4A6630372A51E03B00D19CC9 /* PatchDiary */, 378E461D2B551A5C00D2A473 /* DeepL */, @@ -1044,12 +981,13 @@ 4A1EE9552A4DFB86007BFEF3 /* SmeemComponent */ = { isa = PBXGroup; children = ( - 4A01235E2AAA2C1500E09646 /* SmeemLoadingView.swift */, + 4AB349502CF22A2E0047C484 /* TextView */, + 4AB3494F2CF22A250047C484 /* Button */, + 4AB3494E2CF22A070047C484 /* Global */, + 4A3F2E952A0ABB9C00F6AC60 /* Alarm */, 379789012AAB9B1900C61EF4 /* NavigationBar */, - 4A0EA4632A014710006CCE52 /* SmeemButton.swift */, - 37A574E52A02178D00312453 /* SmeemToastView.swift */, - 37B360A92AC2A4680006C8ED /* SmeemTextView.swift */, - 4AC00EF22AD56C4C009230DA /* SmeemTextButton.swift */, + 4A1EE9532A4DFB42007BFEF3 /* Diary */, + 4A81C2942ACDAAF80056E815 /* PlanGoal */, ); path = SmeemComponent; sourceTree = ""; @@ -1083,38 +1021,6 @@ path = ViewModel; sourceTree = ""; }; - 4A4FEAFE2B710B1A001BBDF3 /* EditWay */ = { - isa = PBXGroup; - children = ( - 371E94182A87DA960098280F /* EditHowGoalViewController.swift */, - ); - path = EditWay; - sourceTree = ""; - }; - 4A4FEB062B728104001BBDF3 /* ViewModel */ = { - isa = PBXGroup; - children = ( - 4A4FEB082B728144001BBDF3 /* TrainingWayViewModel.swift */, - ); - path = ViewModel; - sourceTree = ""; - }; - 4A4FEB072B728108001BBDF3 /* VC */ = { - isa = PBXGroup; - children = ( - 4AC00EEA2AD4527A009230DA /* TrainingWayViewController.swift */, - ); - path = VC; - sourceTree = ""; - }; - 4A4FEB0A2B7289E0001BBDF3 /* Model */ = { - isa = PBXGroup; - children = ( - 4A4FEB0B2B7289E7001BBDF3 /* TrainingWayAppData.swift */, - ); - path = Model; - sourceTree = ""; - }; 4A59EB9D2B9367AD004D9823 /* VC */ = { isa = PBXGroup; children = ( @@ -1148,14 +1054,6 @@ path = PlanGoal; sourceTree = ""; }; - 4A81C2952ACDAB0A0056E815 /* HowLearning */ = { - isa = PBXGroup; - children = ( - 4AEFD4C92A1392DF00DAB2BD /* TrainingWayView.swift */, - ); - path = HowLearning; - sourceTree = ""; - }; 4A8275D12A15129B0083A4AB /* Service */ = { isa = PBXGroup; children = ( @@ -1259,14 +1157,6 @@ path = EditNickname; sourceTree = ""; }; - 4A9FAB4B2A4C3D4A00C40D5A /* MyPage */ = { - isa = PBXGroup; - children = ( - 6FBC856A2A4B1F9200A43F98 /* MyPageViewController.swift */, - ); - path = MyPage; - sourceTree = ""; - }; 4AA5E4B52BF24CEB00F308C8 /* BadgeBottomSheet */ = { isa = PBXGroup; children = ( @@ -1481,7 +1371,6 @@ 4AC1D6812B4ED37700D39A98 /* Model */, 4AEFD4C22A136E5F00DAB2BD /* Goal */, 4ABCBCE32BE25D77003138A8 /* Plan */, - 4AEFD4C32A136E6F00DAB2BD /* Way */, 4AEFD4C62A13907D00DAB2BD /* Alarm */, 4AC00EFA2AD6D82B009230DA /* View */, ); @@ -1496,16 +1385,6 @@ path = View; sourceTree = ""; }; - 4AC00EFE2AD6DC44009230DA /* DataSend */ = { - isa = PBXGroup; - children = ( - 37EB69E52A4B3BC400075E4E /* DataBindProtocol.swift */, - 4AC00EF62AD59C73009230DA /* AuthDataSendProtocol.swift */, - 4AC00EF42AD57202009230DA /* TrainingAlarmDataSendProtocol.swift */, - ); - path = DataSend; - sourceTree = ""; - }; 4AC047232A8FCA9700EBDC0E /* AuthManagement */ = { isa = PBXGroup; children = ( @@ -1744,16 +1623,6 @@ path = Goal; sourceTree = ""; }; - 4AEFD4C32A136E6F00DAB2BD /* Way */ = { - isa = PBXGroup; - children = ( - 4A4FEB072B728108001BBDF3 /* VC */, - 4A4FEB062B728104001BBDF3 /* ViewModel */, - 4A4FEB0A2B7289E0001BBDF3 /* Model */, - ); - path = Way; - sourceTree = ""; - }; 4AEFD4C62A13907D00DAB2BD /* Alarm */ = { isa = PBXGroup; children = ( @@ -1809,17 +1678,14 @@ path = Home; sourceTree = ""; }; - A3D7ECB82A26566F009857D6 /* MyPage */ = { + A3D7ECB82A26566F009857D6 /* EditUser */ = { isa = PBXGroup; children = ( - 4A9FAB4B2A4C3D4A00C40D5A /* MyPage */, 4A9FAB4A2A4C3D3D00C40D5A /* EditNickname */, 4ADCA2D42A9272D6002904EB /* EditAlarm */, - 371E94172A87DA6E0098280F /* EditGoal */, - 4A4FEAFE2B710B1A001BBDF3 /* EditWay */, 4A9FAB3C2A4C3D1200C40D5A /* BadgeList */, ); - path = MyPage; + path = EditUser; sourceTree = ""; }; /* End PBXGroup section */ @@ -1856,6 +1722,14 @@ dependencies = ( ); fileSystemSynchronizedGroups = ( + 4AB3494D2CF229D10047C484 /* UIViewConponent */, + 4AB3494E2CF22A070047C484 /* Global */, + 4AB3494F2CF22A250047C484 /* Button */, + 4AB349502CF22A2E0047C484 /* TextView */, + 4AB349512CF22A3F0047C484 /* Json */, + 4AB349522CF22AD30047C484 /* Auth */, + 4AB349532CF22AD90047C484 /* Badge */, + 4AB349562CF22BFF0047C484 /* EditUser */, 4AF050CE2CE9DE010055BC3F /* Coaching */, 4AF050D72CEA01E20055BC3F /* DiaryComplete */, 4AF050D82CEA01EA0055BC3F /* Coaching */, @@ -1951,7 +1825,6 @@ 37A574D929FF9FFF00312453 /* Pretendard-SemiBold.otf in Resources */, 37A574DA29FF9FFF00312453 /* Pretendard-Regular.otf in Resources */, 4A8FFA5929C9E1FE00FB76C0 /* Assets.xcassets in Resources */, - 4AF050FB2CEA60F80055BC3F /* smeemLoading.json in Resources */, 37A574DC29FF9FFF00312453 /* Pretendard-Bold.otf in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -1980,7 +1853,6 @@ 4AA6FEE92C3ABDB500E588E9 /* ResignSummaryViewController.swift in Sources */, 371107E32ACABDB3007A4AC2 /* DiaryView.swift in Sources */, 4AC00ED72AD2E6E0009230DA /* TrainingStepView.swift in Sources */, - 371E94162A87B83D0098280F /* NextButtonDelegate.swift in Sources */, 4AC00EE62AD432F2009230DA /* BaseCollectionView.swift in Sources */, 4AC00EF02AD52F4C009230DA /* TrainingAlarmViewController.swift in Sources */, 4A004D562B4EE277003C8936 /* AuthEndPoint.swift in Sources */, @@ -1989,7 +1861,6 @@ 4ABCBCE72BE25E51003138A8 /* TrainingPlanResponse.swift in Sources */, 4AC705832BE8BA60003C5310 /* MyBadgeCollectionViewDatasource.swift in Sources */, 4A9FAB472A4C3D1200C40D5A /* BadgeListTableViewCell.swift in Sources */, - 4A454A882B691F850079D48D /* EditGoalViewController.swift in Sources */, 373E38592A2F889500DF96F0 /* DiaryDetailRandomSubjectView.swift in Sources */, 4AC705AE2BECF0D4003C5310 /* EditPlanViewModel.swift in Sources */, 4AF7C22F2BFB797600E8C6CD /* LockBadgeCollectionViewCell.swift in Sources */, @@ -1997,9 +1868,9 @@ 4ABCBCCE2BDE95D0003138A8 /* MyPlanResponse.swift in Sources */, 4A9731D92BAAB70500DEC0C8 /* UpdateResponse.swift in Sources */, 4ABCBCEC2BE261B0003138A8 /* TrainingCollectionViewDatasource.swift in Sources */, + 4AB349462CF203250047C484 /* Store.swift in Sources */, 37A271642AA6078C001FFC38 /* SmeemNavigationBar.swift in Sources */, 4A6630392A51E04600D19CC9 /* PatchDiaryRequest.swift in Sources */, - 4AF58CE92A4820AA00305248 /* AuthNetworkModel.swift in Sources */, 378E461F2B551A6F00D2A473 /* DeepLResponse.swift in Sources */, 3761116C2A278D0E0095EC5A /* String+.swift in Sources */, 37BDC9872C4FEA940075F68A /* SendFeedbackView.swift in Sources */, @@ -2014,8 +1885,6 @@ 371107DF2ACAB709007A4AC2 /* BaseViewController.swift in Sources */, 4AC7058B2BEA0BE2003C5310 /* SettingViewController.swift in Sources */, 371C69D52BE11926000D745D /* BadgeBottomSheetViewController.swift in Sources */, - 6FBC856B2A4B1F9200A43F98 /* MyPageViewController.swift in Sources */, - 6FBC85742A4B603A00A43F98 /* MyPageNetworkModel.swift in Sources */, 6F294A482A27818200856CC8 /* HomeViewFloatingViewController.swift in Sources */, 37A574C529FF6EA800312453 /* FontLiterals.swift in Sources */, 4ABCBCC22BD90481003138A8 /* MyBadgeCollectionViewCell.swift in Sources */, @@ -2024,33 +1893,26 @@ 4AB7C92B2B78A8D900845733 /* SmeemStartViewModel.swift in Sources */, 4A004D5B2B4EE29A003C8936 /* PushTestService.swift in Sources */, 379789052AAC706800C61EF4 /* SmeemNavigationFactory.swift in Sources */, - 4AC00EF32AD56C4C009230DA /* SmeemTextButton.swift in Sources */, 37DCA65D2A475B5100FF8F90 /* RandomTopicResponse.swift in Sources */, 4ABCBCCC2BDE8E44003138A8 /* MySummaryService.swift in Sources */, 371107DA2AC99099007A4AC2 /* KeyboardFollowingLayoutHandler.swift in Sources */, 4A9FAB452A4C3D1200C40D5A /* BadgeListViewController.swift in Sources */, 4ABCBCE52BE25D82003138A8 /* TrainingPlanViewController.swift in Sources */, 4AB7C9192B75F9B500845733 /* GesturePublisher+.swift in Sources */, - 6F294A462A2617D500856CC8 /* TrainingWayView.swift in Sources */, 37A574CC29FF990E00312453 /* UIViewController+.swift in Sources */, - 373D29982CC7A53C00A559A3 /* CustomSegmentedControl.swift in Sources */, 4ABCBCEA2BE26079003138A8 /* TrainingPlanViewModel.swift in Sources */, 4A9E10E42A43468600295D07 /* BaseTargetType.swift in Sources */, - 4A4FEB092B728144001BBDF3 /* TrainingWayViewModel.swift in Sources */, 37A574C329FF6E9C00312453 /* Constant.swift in Sources */, 4AC1D6832B4ED38200D39A98 /* OnboardingModel.swift in Sources */, - 4AC00EEB2AD4527A009230DA /* TrainingWayViewController.swift in Sources */, 4AC705932BEA1E52003C5310 /* LanguageContainerView.swift in Sources */, 4A004D602B4EE2BD003C8936 /* MyPageAPI.swift in Sources */, 4AE35E9E2A7FE8CE00465FD5 /* UICollectionViewCell+.swift in Sources */, 4A10A3A82AB8AA5800C145E9 /* System.swift in Sources */, 4AC705A02BEA2AAA003C5310 /* SettingServiceProtocol.swift in Sources */, 4A3F2EA02A0C18B600F6AC60 /* DatePickerFooterView.swift in Sources */, - 37B360AA2AC2A4680006C8ED /* SmeemTextView.swift in Sources */, 6FE1298C2A498338005536C4 /* HomeService.swift in Sources */, 4AD04B3D2A190E9A004B7A58 /* UITextView+.swift in Sources */, 4ABCBCC72BDD3983003138A8 /* MySummaryServiceProtocol.swift in Sources */, - 4A1F2AE72CD4A1740055587F /* CoachingComparisonView.swift in Sources */, 6F31802F2A24D1DB00089870 /* CalendarCell.swift in Sources */, 6FE1298A2A4982DA005536C4 /* HomeAPI.swift in Sources */, 374F828E2AC5DFFE00C128B9 /* DiaryBottomView.swift in Sources */, @@ -2062,7 +1924,6 @@ 4ABCBCD22BDFB037003138A8 /* TotalMySummaryResponse.swift in Sources */, 37DCA6672A480A7300FF8F90 /* DetailDiaryEndPoint.swift in Sources */, A3D7ECB72A26566A009857D6 /* EditNicknameViewController.swift in Sources */, - 371E94192A87DA960098280F /* EditHowGoalViewController.swift in Sources */, 6FE129902A49A5A6005536C4 /* Date+.swift in Sources */, 6F62668C2A04EA3B000365CD /* HomeViewController.swift in Sources */, 4AD04B3B2A1905BB004B7A58 /* DiaryScrollerView.swift in Sources */, @@ -2098,7 +1959,6 @@ 4ADCA2D62A9272E9002904EB /* EditAlarmViewController.swift in Sources */, 4A004D592B4EE28D003C8936 /* PushTestAPI.swift in Sources */, 6F294A432A26179700856CC8 /* ServiceAcceptViewController.swift in Sources */, - 4AC00EF52AD57202009230DA /* TrainingAlarmDataSendProtocol.swift in Sources */, 4AD04B402A1921AE004B7A58 /* CorrectionViewController.swift in Sources */, 4A1882FA2A8BBD0D0088F590 /* SmeemStartViewController.swift in Sources */, 4AC7058F2BEA1E40003C5310 /* NicknameContainerView.swift in Sources */, @@ -2112,18 +1972,15 @@ 4AFD7C292B600FED00FE7EFF /* NetworkManager.swift in Sources */, 37DCA6652A48052200FF8F90 /* DetailDiaryResponse.swift in Sources */, 4ABCBCD82BE2230F003138A8 /* MyPlanCollectionViewDataSource.swift in Sources */, - 37BB09BB2CBF8BA800A3B28A /* CoachingCompletedView.swift in Sources */, 4AC4B82D2A2F9FE200E147AA /* UserDefaultsManager.swift in Sources */, 37A574E02A00CDCD00312453 /* SeparationLine.swift in Sources */, 4ABCBCDC2BE2484B003138A8 /* MyPlanAppData.swift in Sources */, 3728B8D72A2CFF3A00EF4CF8 /* StepTwoKoreanDiaryViewController.swift in Sources */, 4A07F8A82B7B3E5E004185F2 /* SignupBottomSheetViewController.swift in Sources */, - 373A7F552C3D78CC00CF554C /* CustomBannerView.swift in Sources */, 4ABCBCC52BDD3375003138A8 /* MySummaryEndPoint.swift in Sources */, 4A454A832B6666FF0079D48D /* TrainingGoalViewModel.swift in Sources */, 37DCA66E2A484D3100FF8F90 /* PostDiaryResponse.swift in Sources */, 4A0EA4552A014027006CCE52 /* GeneralResponse.swift in Sources */, - 4AC00EF72AD59C73009230DA /* AuthDataSendProtocol.swift in Sources */, 378B20EE2BA0A01600604935 /* ForeignDiaryViewModel.swift in Sources */, 4A9FAB482A4C3D1200C40D5A /* BadgeHeaderView.swift in Sources */, 4AC00ECC2AD1C143009230DA /* UICollectionView+.swift in Sources */, @@ -2141,50 +1998,41 @@ 4AB7C9322B78B45300845733 /* LoginViewModel.swift in Sources */, 37A574CA29FF980F00312453 /* UIStackView+.swift in Sources */, 6F294A422A26178C00856CC8 /* UserNickNameViewController.swift in Sources */, - 4A4050EC2CE8C54400E84EDE /* CoachingExplanationView.swift in Sources */, 4AC047252A8FCAE100EBDC0E /* AuthManagementViewController.swift in Sources */, 374FAF812A2CACCF00237A1A /* DiaryViewController.swift in Sources */, 37DCA65A2A47598700FF8F90 /* RandomTopicService.swift in Sources */, 4AB7C9262B78914100845733 /* SplashViewModel.swift in Sources */, 4AF7C2312BFB7A4F00E8C6CD /* MyPlanDeactiveCollectionViewCell.swift in Sources */, - 4A01235F2AAA2C1500E09646 /* SmeemLoadingView.swift in Sources */, 4A59EBA02B9367C2004D9823 /* BadgePopupViewModel.swift in Sources */, 4A004D542B4EE26E003C8936 /* AuthService.swift in Sources */, 4A81C2972ACDAB2C0056E815 /* TrainingGoalsCollectionView.swift in Sources */, 371107E52ACBEA69007A4AC2 /* DiaryViewFactory.swift in Sources */, 6F294A442A26179900856CC8 /* ServiceAcceptCollectionViewCell.swift in Sources */, - 4A9FAB462A4C3D1200C40D5A /* BadgeNetworkModel.swift in Sources */, 378E461C2B5516F200D2A473 /* DeepLService.swift in Sources */, 4A004D4F2B4ED760003C8936 /* TrainingGoalResponse.swift in Sources */, 4AC705A42BEA2C99003C5310 /* SettingResponse.swift in Sources */, 4A86D65E2C5910FF002C0617 /* ResignRequest.swift in Sources */, 4ABCBCD62BDFC6BD003138A8 /* MySmeemCollectionViewDataSource.swift in Sources */, 4A0EE6042B9301E900158899 /* OnboardingServiceProtocol.swift in Sources */, - 37A574E62A02178D00312453 /* SmeemToastView.swift in Sources */, 4AC707BB2B74DE3E00B1D791 /* ServiceAcceptCollectionView.swift in Sources */, 4A4FEB012B721956001BBDF3 /* Combine+.swift in Sources */, 37BCADF22BC3FFBF006EF960 /* DetailDiaryViewModel.swift in Sources */, 374F828C2AC327A200C128B9 /* SmeemTextViewHandler.swift in Sources */, 4A2AEE702C3D78E70000CBCB /* ResignSummaryViewModel.swift in Sources */, 4A8FFA5229C9E1FD00FB76C0 /* SceneDelegate.swift in Sources */, - 37ADCC022B0289AD00E474AA /* Observable.swift in Sources */, 3797891C2AAE11D400C61EF4 /* NavigationBarConfigurationBuilder.swift in Sources */, 4A3373F82A461ABC00EFE6C4 /* OnboardingService.swift in Sources */, 4A9731D72BAAB6E100DEC0C8 /* SplashServiceProtocol.swift in Sources */, - 373D29962CC2A84E00A559A3 /* SwiftUINavigationView.swift in Sources */, 4AA5E4B42BF2355300F308C8 /* MySummaryViewModel2.swift in Sources */, 37A574E82A02424F00312453 /* RandomTopicView.swift in Sources */, 4ABCBCCA2BDD3E3D003138A8 /* MySummaryResponse.swift in Sources */, 4AC7059D2BEA2A8E003C5310 /* SettingEndPoint.swift in Sources */, - 4A4FEB0C2B7289E7001BBDF3 /* TrainingWayAppData.swift in Sources */, - 4A0EA4642A014710006CCE52 /* SmeemButton.swift in Sources */, 371107DD2ACAB571007A4AC2 /* BaseView.swift in Sources */, 371C69D32BE112AD000D745D /* BottomSheetPresentable.swift in Sources */, 4AC707B02B73CFFA00B1D791 /* AlarmDefaultModel.swift in Sources */, 4AC705912BEA1E49003C5310 /* PlanContainerView.swift in Sources */, 4AC705A92BECE064003C5310 /* EditPlanViewController.swift in Sources */, 378E461A2B5516E200D2A473 /* DeepLAPI.swift in Sources */, - 37EB69E62A4B3BC400075E4E /* DataBindProtocol.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -2406,7 +2254,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 2.0.4; + MARKETING_VERSION = 2.0.3; PRODUCT_BUNDLE_IDENTIFIER = "Team.Smeem-dev"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -2444,7 +2292,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 2.0.4; + MARKETING_VERSION = 2.0.3; PRODUCT_BUNDLE_IDENTIFIER = "Team.Smeem-iOS"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = smeem_release; diff --git a/Smeem-iOS/Smeem-iOS/Global/Protocols/DataSend/AuthDataSendProtocol.swift b/Smeem-iOS/Smeem-iOS/Global/Protocols/DataSend/AuthDataSendProtocol.swift deleted file mode 100644 index 7219c878..00000000 --- a/Smeem-iOS/Smeem-iOS/Global/Protocols/DataSend/AuthDataSendProtocol.swift +++ /dev/null @@ -1,12 +0,0 @@ -// -// AuthDataSendProtocol.swift -// Smeem-iOS -// -// Created by 황찬미 on 2023/10/10. -// - -import Foundation - -protocol AuthDataSendProtocol { - func sendTrainingAlarm() -} diff --git a/Smeem-iOS/Smeem-iOS/Global/Protocols/DataSend/DataBindProtocol.swift b/Smeem-iOS/Smeem-iOS/Global/Protocols/DataSend/DataBindProtocol.swift deleted file mode 100644 index a9fc7926..00000000 --- a/Smeem-iOS/Smeem-iOS/Global/Protocols/DataSend/DataBindProtocol.swift +++ /dev/null @@ -1,12 +0,0 @@ -// -// DataBindProtocol.swift -// Smeem-iOS -// -// Created by Joon Baek on 2023/06/28. -// - -import Foundation - -protocol DataBindProtocol: AnyObject { - func dataBind(topicID: Int?, inputText: String) -} diff --git a/Smeem-iOS/Smeem-iOS/Global/Protocols/DataSend/TrainingAlarmDataSendProtocol.swift b/Smeem-iOS/Smeem-iOS/Global/Protocols/DataSend/TrainingAlarmDataSendProtocol.swift deleted file mode 100644 index 16ad8bab..00000000 --- a/Smeem-iOS/Smeem-iOS/Global/Protocols/DataSend/TrainingAlarmDataSendProtocol.swift +++ /dev/null @@ -1,13 +0,0 @@ -// -// TrainingAlarmDataSendProtocol.swift -// Smeem-iOS -// -// Created by 황찬미 on 2023/10/10. -// - -import Foundation - -protocol TrainingAlarmDataSendProtocol { - func sendTrainingDay(day: String, buttonState: SmeemButtonType) - func sendTrainingTime(hour: Int, minute: Int) -} diff --git a/Smeem-iOS/Smeem-iOS/Global/Protocols/NextButtonDelegate.swift b/Smeem-iOS/Smeem-iOS/Global/Protocols/NextButtonDelegate.swift deleted file mode 100644 index 1437417c..00000000 --- a/Smeem-iOS/Smeem-iOS/Global/Protocols/NextButtonDelegate.swift +++ /dev/null @@ -1,15 +0,0 @@ -// -// NextButtonDelegate.swift -// Smeem-iOS -// -// Created by Joon Baek on 2023/08/12. -// - -import Foundation - -protocol NextButtonDelegate: AnyObject { - func nextButtonDidTap() - - //TODO: 네비게이션 바 추상화 후 NavbarProtocol으로 이동 - func backButtonDidTap() -} diff --git a/Smeem-iOS/Smeem-iOS/Presentation/DiaryComplete/Store.swift b/Smeem-iOS/Smeem-iOS/Global/Protocols/Store.swift similarity index 100% rename from Smeem-iOS/Smeem-iOS/Presentation/DiaryComplete/Store.swift rename to Smeem-iOS/Smeem-iOS/Global/Protocols/Store.swift diff --git a/Smeem-iOS/Smeem-iOS/Global/Resources/smeemLoading.json b/Smeem-iOS/Smeem-iOS/Global/Resources/Json/smeemLoading.json similarity index 100% rename from Smeem-iOS/Smeem-iOS/Global/Resources/smeemLoading.json rename to Smeem-iOS/Smeem-iOS/Global/Resources/Json/smeemLoading.json diff --git a/Smeem-iOS/Smeem-iOS/Global/UIComponents/HowLearning/TrainingWayView.swift b/Smeem-iOS/Smeem-iOS/Global/UIComponents/HowLearning/TrainingWayView.swift deleted file mode 100644 index 6f2bf5f0..00000000 --- a/Smeem-iOS/Smeem-iOS/Global/UIComponents/HowLearning/TrainingWayView.swift +++ /dev/null @@ -1,255 +0,0 @@ -// -// HowLearningView.swift -// Smeem-iOS -// -// Created by 황찬미 on 2023/05/16. -// - -/** - 1. 사용할 VC에서 호출 -private let howLearningView: HowLearningView = { - let view = HowLearningView() - return view - }() - - 2. 자신이 사용할 UI에 맞는 ButtonType 설정 후 사용 (ButtonType은 logo, edit 두 개) - private let howLearningView: HowLearningView = { - let view = HowLearningView() - view.buttonType = .edit - return view - }() - - 3. view 자체의 넓이와 높이값 줄 필요 없이 VC에서는 레이아웃만 잡아 주면 됨 - ex) 예시임 - howLearningView.snp.makeConstraints { - $0.top.equalTo(learningLabelStackView.snp.bottom).offset(28) - $0.centerX.equalToSuperview() - } - */ - -enum EditButtonType { - case none - case isShown -} - -import UIKit - -final class TrainingWayView: UIView { - - // MARK: - Property - - // MARK: - UI Property - - private let pointBackgroudView: UIView = { - let view = UIView() - view.backgroundColor = .point - return view - }() - - private let smeemLogo: UIImageView = { - let imageView = UIImageView() - imageView.image = Constant.Image.logoWhiteSmeem - return imageView - }() - - private let editButton: UIButton = { - let button = UIButton() - button.setImage(Constant.Image.icnEditForward, for: .normal) - return button - }() - - private let myGoalLabel: UILabel = { - let label = UILabel() - label.text = "나의 목표는" - label.font = .b3 - label.textColor = .smeemWhite - return label - }() - - private let selectedMyGoalLabel: UILabel = { - let label = UILabel() - label.text = "외국어 업무 문서 읽고 작성하기" - label.font = .h3 - label.textColor = .smeemWhite - return label - }() - - private let grayLayerView: UIView = { - let view = UIView() - view.backgroundColor = .blue - return view - }() - - private let learningHowLabel: UILabel = { - let label = UILabel() - label.text = "학습 방법" - label.font = .s2 - label.textColor = .smeemBlack - return label - }() - - private let firstSelectedLearningHowLabel: UILabel = { - let label = UILabel() - label.text = "주 3회 이상 일기 작성히기" - label.font = .b4 - label.textColor = .gray600 - return label - }() - - private let secondSelectedLearningHowLabel: UILabel = { - let label = UILabel() - label.text = "편지글 형태의 일기 작성하기" - label.font = .b4 - label.textColor = .gray600 - return label - }() - - private let deatilGoalLabel: UILabel = { - let label = UILabel() - label.text = "세부 목표" - label.font = .s2 - label.textColor = .smeemBlack - return label - }() - - private let firstDetailLabel: UILabel = { - let label = UILabel() - label.text = "사전 보지 않고 일기 작성하기" - label.font = .b4 - label.textColor = .gray600 - return label - }() - - private let secondDetailLabel: UILabel = { - let label = UILabel() - label.text = "TOEIC 단어책 뭐뭐하기" - label.font = .b4 - label.textColor = .gray600 - return label - }() - - // MARK: - Life Cycle - - init(type: EditButtonType) { - super.init(frame: .zero) - - showButtonType(type: type) - setUI() - setLayout() - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - // MARK: - Custom Method - - private func showButtonType(type: EditButtonType) { - switch type { - case .none: - editButton.isHidden = true - case .isShown: - editButton.isHidden = false - editButton.isUserInteractionEnabled = false - } - } - - func setModel(model: TrainingWayAppData) { - selectedMyGoalLabel.text = model.wayTitle - firstSelectedLearningHowLabel.text = model.wayOne - secondSelectedLearningHowLabel.text = model.wayTwo - firstDetailLabel.text = model.detailWayOne - secondDetailLabel.text = model.detailWayTwo - } - - func setData(planName: String, planWayOne: String, planWayTwo: String, detailPlanOne: String, detailPlanTwo: String) { - selectedMyGoalLabel.text = planName - firstSelectedLearningHowLabel.text = planWayOne - secondSelectedLearningHowLabel.text = planWayTwo - firstDetailLabel.text = detailPlanOne - secondDetailLabel.text = detailPlanTwo - } - - // MARK: - Layout - - private func setUI() { - makeRoundCorner(cornerRadius: 10) - layer.borderWidth = 1.5 - layer.borderColor = UIColor.gray100.cgColor - } - - private func setLayout() { - let leadingTrailingInset: CGFloat = 24 - let howLearningViewWidth = Constant.Screen.width - (leadingTrailingInset*2) - let howLearningViewHeight = convertByHeightRatio(370) - let pointBackgroundViewHeight = 129 - - addSubviews(pointBackgroudView, learningHowLabel, firstSelectedLearningHowLabel, secondSelectedLearningHowLabel, - deatilGoalLabel, firstDetailLabel, secondDetailLabel) - pointBackgroudView.addSubviews(smeemLogo, editButton, myGoalLabel, selectedMyGoalLabel) - - self.snp.makeConstraints { - $0.width.equalTo(howLearningViewWidth) - $0.height.equalTo(howLearningViewHeight) - } - - pointBackgroudView.snp.makeConstraints { - $0.leading.trailing.top.equalToSuperview() - $0.width.equalTo(howLearningViewWidth) - $0.height.equalTo(pointBackgroundViewHeight) - } - - smeemLogo.snp.makeConstraints { - $0.leading.equalToSuperview().inset(20) - $0.top.equalToSuperview().inset(22) - $0.width.equalTo(33) - $0.height.equalTo(20) - } - - editButton.snp.makeConstraints { - $0.bottom.equalToSuperview().inset(8) - $0.trailing.equalToSuperview().inset(4) - $0.width.height.equalTo(40) - } - - myGoalLabel.snp.makeConstraints { - $0.leading.equalToSuperview().inset(20) - $0.top.equalTo(smeemLogo.snp.bottom).offset(23) - } - - selectedMyGoalLabel.snp.makeConstraints { - $0.leading.equalToSuperview().inset(20) - $0.top.equalTo(myGoalLabel.snp.bottom).offset(2) - } - - learningHowLabel.snp.makeConstraints { - $0.leading.equalToSuperview().inset(20) - $0.top.equalTo(pointBackgroudView.snp.bottom).offset(24) - } - - firstSelectedLearningHowLabel.snp.makeConstraints { - $0.leading.equalToSuperview().inset(20) - $0.top.equalTo(learningHowLabel.snp.bottom).offset(12) - } - - secondSelectedLearningHowLabel.snp.makeConstraints { - $0.leading.equalToSuperview().inset(20) - $0.top.equalTo(firstSelectedLearningHowLabel.snp.bottom).offset(6) - } - - deatilGoalLabel.snp.makeConstraints { - $0.leading.equalToSuperview().inset(20) - $0.top.equalTo(secondSelectedLearningHowLabel.snp.bottom).offset(39) - } - - firstDetailLabel.snp.makeConstraints { - $0.leading.equalToSuperview().inset(20) - $0.top.equalTo(deatilGoalLabel.snp.bottom).offset(12) - } - - secondDetailLabel.snp.makeConstraints { - $0.leading.equalToSuperview().inset(20) - $0.top.equalTo(firstDetailLabel.snp.bottom).offset(6) - } - } -} diff --git a/Smeem-iOS/Smeem-iOS/Global/UIComponents/Alarm/AlarmCollectionView.swift b/Smeem-iOS/Smeem-iOS/Global/UIComponents/SmeemComponent/Alarm/AlarmCollectionView.swift similarity index 100% rename from Smeem-iOS/Smeem-iOS/Global/UIComponents/Alarm/AlarmCollectionView.swift rename to Smeem-iOS/Smeem-iOS/Global/UIComponents/SmeemComponent/Alarm/AlarmCollectionView.swift diff --git a/Smeem-iOS/Smeem-iOS/Global/UIComponents/Alarm/AlarmCollectionViewCell.swift b/Smeem-iOS/Smeem-iOS/Global/UIComponents/SmeemComponent/Alarm/AlarmCollectionViewCell.swift similarity index 100% rename from Smeem-iOS/Smeem-iOS/Global/UIComponents/Alarm/AlarmCollectionViewCell.swift rename to Smeem-iOS/Smeem-iOS/Global/UIComponents/SmeemComponent/Alarm/AlarmCollectionViewCell.swift diff --git a/Smeem-iOS/Smeem-iOS/Global/UIComponents/Alarm/AlarmDefaultModel.swift b/Smeem-iOS/Smeem-iOS/Global/UIComponents/SmeemComponent/Alarm/AlarmDefaultModel.swift similarity index 100% rename from Smeem-iOS/Smeem-iOS/Global/UIComponents/Alarm/AlarmDefaultModel.swift rename to Smeem-iOS/Smeem-iOS/Global/UIComponents/SmeemComponent/Alarm/AlarmDefaultModel.swift diff --git a/Smeem-iOS/Smeem-iOS/Global/UIComponents/Alarm/DatePickerFooterView.swift b/Smeem-iOS/Smeem-iOS/Global/UIComponents/SmeemComponent/Alarm/DatePickerFooterView.swift similarity index 100% rename from Smeem-iOS/Smeem-iOS/Global/UIComponents/Alarm/DatePickerFooterView.swift rename to Smeem-iOS/Smeem-iOS/Global/UIComponents/SmeemComponent/Alarm/DatePickerFooterView.swift diff --git a/Smeem-iOS/Smeem-iOS/Global/UIComponents/SmeemComponent/SmeemButton.swift b/Smeem-iOS/Smeem-iOS/Global/UIComponents/SmeemComponent/Button/SmeemButton.swift similarity index 100% rename from Smeem-iOS/Smeem-iOS/Global/UIComponents/SmeemComponent/SmeemButton.swift rename to Smeem-iOS/Smeem-iOS/Global/UIComponents/SmeemComponent/Button/SmeemButton.swift diff --git a/Smeem-iOS/Smeem-iOS/Global/UIComponents/SmeemComponent/SmeemTextButton.swift b/Smeem-iOS/Smeem-iOS/Global/UIComponents/SmeemComponent/Button/SmeemTextButton.swift similarity index 100% rename from Smeem-iOS/Smeem-iOS/Global/UIComponents/SmeemComponent/SmeemTextButton.swift rename to Smeem-iOS/Smeem-iOS/Global/UIComponents/SmeemComponent/Button/SmeemTextButton.swift diff --git a/Smeem-iOS/Smeem-iOS/Global/UIComponents/Diary/DiaryBottomView.swift b/Smeem-iOS/Smeem-iOS/Global/UIComponents/SmeemComponent/Diary/DiaryBottomView.swift similarity index 100% rename from Smeem-iOS/Smeem-iOS/Global/UIComponents/Diary/DiaryBottomView.swift rename to Smeem-iOS/Smeem-iOS/Global/UIComponents/SmeemComponent/Diary/DiaryBottomView.swift diff --git a/Smeem-iOS/Smeem-iOS/Global/UIComponents/Diary/DiaryDetailRandomSubjectView.swift b/Smeem-iOS/Smeem-iOS/Global/UIComponents/SmeemComponent/Diary/DiaryDetailRandomSubjectView.swift similarity index 100% rename from Smeem-iOS/Smeem-iOS/Global/UIComponents/Diary/DiaryDetailRandomSubjectView.swift rename to Smeem-iOS/Smeem-iOS/Global/UIComponents/SmeemComponent/Diary/DiaryDetailRandomSubjectView.swift diff --git a/Smeem-iOS/Smeem-iOS/Global/UIComponents/Diary/DiaryScrollerView.swift b/Smeem-iOS/Smeem-iOS/Global/UIComponents/SmeemComponent/Diary/DiaryScrollerView.swift similarity index 100% rename from Smeem-iOS/Smeem-iOS/Global/UIComponents/Diary/DiaryScrollerView.swift rename to Smeem-iOS/Smeem-iOS/Global/UIComponents/SmeemComponent/Diary/DiaryScrollerView.swift diff --git a/Smeem-iOS/Smeem-iOS/Global/UIComponents/Diary/RandomTopicView.swift b/Smeem-iOS/Smeem-iOS/Global/UIComponents/SmeemComponent/Diary/RandomTopicView.swift similarity index 100% rename from Smeem-iOS/Smeem-iOS/Global/UIComponents/Diary/RandomTopicView.swift rename to Smeem-iOS/Smeem-iOS/Global/UIComponents/SmeemComponent/Diary/RandomTopicView.swift diff --git a/Smeem-iOS/Smeem-iOS/Global/UIComponents/Diary/SeparationLine.swift b/Smeem-iOS/Smeem-iOS/Global/UIComponents/SmeemComponent/Diary/SeparationLine.swift similarity index 100% rename from Smeem-iOS/Smeem-iOS/Global/UIComponents/Diary/SeparationLine.swift rename to Smeem-iOS/Smeem-iOS/Global/UIComponents/SmeemComponent/Diary/SeparationLine.swift diff --git a/Smeem-iOS/Smeem-iOS/Global/UIComponents/CustomBannerView.swift b/Smeem-iOS/Smeem-iOS/Global/UIComponents/SmeemComponent/Global/CustomBannerView.swift similarity index 100% rename from Smeem-iOS/Smeem-iOS/Global/UIComponents/CustomBannerView.swift rename to Smeem-iOS/Smeem-iOS/Global/UIComponents/SmeemComponent/Global/CustomBannerView.swift diff --git a/Smeem-iOS/Smeem-iOS/Global/UIComponents/SmeemComponent/SmeemLoadingView.swift b/Smeem-iOS/Smeem-iOS/Global/UIComponents/SmeemComponent/Global/SmeemLoadingView.swift similarity index 100% rename from Smeem-iOS/Smeem-iOS/Global/UIComponents/SmeemComponent/SmeemLoadingView.swift rename to Smeem-iOS/Smeem-iOS/Global/UIComponents/SmeemComponent/Global/SmeemLoadingView.swift diff --git a/Smeem-iOS/Smeem-iOS/Global/UIComponents/SmeemComponent/SmeemToastView.swift b/Smeem-iOS/Smeem-iOS/Global/UIComponents/SmeemComponent/Global/SmeemToastView.swift similarity index 100% rename from Smeem-iOS/Smeem-iOS/Global/UIComponents/SmeemComponent/SmeemToastView.swift rename to Smeem-iOS/Smeem-iOS/Global/UIComponents/SmeemComponent/Global/SmeemToastView.swift diff --git a/Smeem-iOS/Smeem-iOS/Global/UIComponents/PlanGoal/TrainingCollectionViewCell.swift b/Smeem-iOS/Smeem-iOS/Global/UIComponents/SmeemComponent/PlanGoal/TrainingCollectionViewCell.swift similarity index 100% rename from Smeem-iOS/Smeem-iOS/Global/UIComponents/PlanGoal/TrainingCollectionViewCell.swift rename to Smeem-iOS/Smeem-iOS/Global/UIComponents/SmeemComponent/PlanGoal/TrainingCollectionViewCell.swift diff --git a/Smeem-iOS/Smeem-iOS/Global/UIComponents/PlanGoal/TrainingGoalsCollectionView.swift b/Smeem-iOS/Smeem-iOS/Global/UIComponents/SmeemComponent/PlanGoal/TrainingGoalsCollectionView.swift similarity index 100% rename from Smeem-iOS/Smeem-iOS/Global/UIComponents/PlanGoal/TrainingGoalsCollectionView.swift rename to Smeem-iOS/Smeem-iOS/Global/UIComponents/SmeemComponent/PlanGoal/TrainingGoalsCollectionView.swift diff --git a/Smeem-iOS/Smeem-iOS/Global/UIComponents/SmeemComponent/SmeemTextView.swift b/Smeem-iOS/Smeem-iOS/Global/UIComponents/SmeemComponent/TextView/SmeemTextView.swift similarity index 100% rename from Smeem-iOS/Smeem-iOS/Global/UIComponents/SmeemComponent/SmeemTextView.swift rename to Smeem-iOS/Smeem-iOS/Global/UIComponents/SmeemComponent/TextView/SmeemTextView.swift diff --git a/Smeem-iOS/Smeem-iOS/Global/UIComponents/CoachingComparisonView.swift b/Smeem-iOS/Smeem-iOS/Global/UIComponents/UIViewConponent/CoachingComparisonView.swift similarity index 100% rename from Smeem-iOS/Smeem-iOS/Global/UIComponents/CoachingComparisonView.swift rename to Smeem-iOS/Smeem-iOS/Global/UIComponents/UIViewConponent/CoachingComparisonView.swift diff --git a/Smeem-iOS/Smeem-iOS/Global/UIComponents/CoachingCompletedView.swift b/Smeem-iOS/Smeem-iOS/Global/UIComponents/UIViewConponent/CoachingCompletedView.swift similarity index 100% rename from Smeem-iOS/Smeem-iOS/Global/UIComponents/CoachingCompletedView.swift rename to Smeem-iOS/Smeem-iOS/Global/UIComponents/UIViewConponent/CoachingCompletedView.swift diff --git a/Smeem-iOS/Smeem-iOS/Global/UIComponents/CoachingExplanationView.swift b/Smeem-iOS/Smeem-iOS/Global/UIComponents/UIViewConponent/CoachingExplanationView.swift similarity index 100% rename from Smeem-iOS/Smeem-iOS/Global/UIComponents/CoachingExplanationView.swift rename to Smeem-iOS/Smeem-iOS/Global/UIComponents/UIViewConponent/CoachingExplanationView.swift diff --git a/Smeem-iOS/Smeem-iOS/Global/UIComponents/CustomSegmentedControl.swift b/Smeem-iOS/Smeem-iOS/Global/UIComponents/UIViewConponent/CustomSegmentedControl.swift similarity index 100% rename from Smeem-iOS/Smeem-iOS/Global/UIComponents/CustomSegmentedControl.swift rename to Smeem-iOS/Smeem-iOS/Global/UIComponents/UIViewConponent/CustomSegmentedControl.swift diff --git a/Smeem-iOS/Smeem-iOS/Global/UIComponents/SwiftUINavigationView.swift b/Smeem-iOS/Smeem-iOS/Global/UIComponents/UIViewConponent/SwiftUINavigationView.swift similarity index 100% rename from Smeem-iOS/Smeem-iOS/Global/UIComponents/SwiftUINavigationView.swift rename to Smeem-iOS/Smeem-iOS/Global/UIComponents/UIViewConponent/SwiftUINavigationView.swift diff --git a/Smeem-iOS/Smeem-iOS/Global/Utilities/Observable.swift b/Smeem-iOS/Smeem-iOS/Global/Utilities/Observable.swift deleted file mode 100644 index eb42a646..00000000 --- a/Smeem-iOS/Smeem-iOS/Global/Utilities/Observable.swift +++ /dev/null @@ -1,33 +0,0 @@ -// -// Observable.swift -// Smeem-iOS -// -// Created by Joon Baek on 2023/11/14. -// - -class Observable { - //1-1. 값 담을 value - var value: T { - //2. didSet 생성 - didSet { - //4. 값이 변경 될 때마다 listener 에 담겨있는 행동 수행 - self.listener?(value) - } - } - - //3. 값이 변경 될 때마다 수행될 행동을 담고 있는 클로저 변수 생성 - var listener: ((T) -> Void)? - - //1-2. init 생성 - init(_ value: T) { - self.value = value - } - - //5. 구독을 통해 파라미터로 넘어온 '특정 행동'을 수행하고, 나중에 didSet 에서도 실행할 수 있도록 클로저 변수에 담기 - func bind(listener: @escaping (T) -> Void) { - listener(value) - self.listener = listener - } -} - -// TODO: 익스텐션에서 value, listner 핸들링 diff --git a/Smeem-iOS/Smeem-iOS/Network/API/MyPage/MyPageAPI.swift b/Smeem-iOS/Smeem-iOS/Network/API/MyPage/MyPageAPI.swift index b5a3f047..8e8b818e 100644 --- a/Smeem-iOS/Smeem-iOS/Network/API/MyPage/MyPageAPI.swift +++ b/Smeem-iOS/Smeem-iOS/Network/API/MyPage/MyPageAPI.swift @@ -12,26 +12,6 @@ final class MyPageAPI { static let shared = MyPageAPI() private let myPageProvider = MoyaProvider(plugins: [MoyaLoggingPlugin()]) - func myPageInfo(completion: @escaping (Result) -> ()) { - myPageProvider.request(.myPageInfo) { result in - switch result { - case .success(let response): - do { - try NetworkManager.statusCodeErrorHandling(statusCode: response.statusCode) - guard let data = try? response.map(GeneralResponse.self).data else { - throw SmeemError.clientError - } - completion(.success(data)) - } catch { - guard let error = error as? SmeemError else { return } - completion(.failure(error)) - } - case .failure(_): - completion(.failure(.userError)) - } - } - } - func changeMyNickName(request: EditNicknameRequest, completion: @escaping (Result) -> ()) { myPageProvider.request(.editNickname(param: request)) { result in diff --git a/Smeem-iOS/Smeem-iOS/Network/NetworkDataModel/AuthNetworkModel.swift b/Smeem-iOS/Smeem-iOS/Network/NetworkDataModel/Auth/AuthNetworkModel.swift similarity index 100% rename from Smeem-iOS/Smeem-iOS/Network/NetworkDataModel/AuthNetworkModel.swift rename to Smeem-iOS/Smeem-iOS/Network/NetworkDataModel/Auth/AuthNetworkModel.swift diff --git a/Smeem-iOS/Smeem-iOS/Network/NetworkDataModel/BadgeNetworkModel.swift b/Smeem-iOS/Smeem-iOS/Network/NetworkDataModel/Badge/BadgeNetworkModel.swift similarity index 100% rename from Smeem-iOS/Smeem-iOS/Network/NetworkDataModel/BadgeNetworkModel.swift rename to Smeem-iOS/Smeem-iOS/Network/NetworkDataModel/Badge/BadgeNetworkModel.swift diff --git a/Smeem-iOS/Smeem-iOS/Network/NetworkDataModel/EditUser/EditUserRequest.swift b/Smeem-iOS/Smeem-iOS/Network/NetworkDataModel/EditUser/EditUserRequest.swift new file mode 100644 index 00000000..3de27ea9 --- /dev/null +++ b/Smeem-iOS/Smeem-iOS/Network/NetworkDataModel/EditUser/EditUserRequest.swift @@ -0,0 +1,26 @@ +// +// MyPageNetworkModel.swift +// Smeem-iOS +// +// Created by 임주민 on 2023/06/28. +// + +import Foundation + +// MARK: - My Page Edit + +struct EditNicknameRequest: Codable { + let username: String +} + +struct EditAlarmTime: Codable { + let trainingTime: TrainingTime +} + +struct EditPushRequest: Codable { + let hasAlarm: Bool +} + +struct EditGoalRequest: Codable { + let target: String +} diff --git a/Smeem-iOS/Smeem-iOS/Network/NetworkDataModel/MyPageNetworkModel.swift b/Smeem-iOS/Smeem-iOS/Network/NetworkDataModel/MyPageNetworkModel.swift deleted file mode 100644 index 874a570d..00000000 --- a/Smeem-iOS/Smeem-iOS/Network/NetworkDataModel/MyPageNetworkModel.swift +++ /dev/null @@ -1,42 +0,0 @@ -// -// MyPageNetworkModel.swift -// Smeem-iOS -// -// Created by 임주민 on 2023/06/28. -// - -import Foundation - -// MARK: - My Page - -struct MyPageResponse: Codable { - let username, target, title, way, detail: String - let targetLang: String - var hasPushAlarm: Bool - let trainingTime: TrainingTime - let badge: Badge -} - -extension MyPageResponse { - static let empty = MyPageResponse(username: "", target: "", title: "", way: "", detail: "", targetLang: "", hasPushAlarm: false, - trainingTime: TrainingTime(day: "", hour: 0, minute: 0), - badge: Badge(id: 0, name: "", type: "", imageUrl: "")) -} - -// MARK: - My Page Edit - -struct EditNicknameRequest: Codable { - let username: String -} - -struct EditAlarmTime: Codable { - let trainingTime: TrainingTime -} - -struct EditPushRequest: Codable { - let hasAlarm: Bool -} - -struct EditGoalRequest: Codable { - let target: String -} diff --git a/Smeem-iOS/Smeem-iOS/Presentation/MyPage/BadgeList/VC/BadgeListViewController.swift b/Smeem-iOS/Smeem-iOS/Presentation/EditUser/BadgeList/VC/BadgeListViewController.swift similarity index 100% rename from Smeem-iOS/Smeem-iOS/Presentation/MyPage/BadgeList/VC/BadgeListViewController.swift rename to Smeem-iOS/Smeem-iOS/Presentation/EditUser/BadgeList/VC/BadgeListViewController.swift diff --git a/Smeem-iOS/Smeem-iOS/Presentation/MyPage/BadgeList/View/BadgeHeaderView.swift b/Smeem-iOS/Smeem-iOS/Presentation/EditUser/BadgeList/View/BadgeHeaderView.swift similarity index 100% rename from Smeem-iOS/Smeem-iOS/Presentation/MyPage/BadgeList/View/BadgeHeaderView.swift rename to Smeem-iOS/Smeem-iOS/Presentation/EditUser/BadgeList/View/BadgeHeaderView.swift diff --git a/Smeem-iOS/Smeem-iOS/Presentation/MyPage/BadgeList/View/BadgeListTableViewCell.swift b/Smeem-iOS/Smeem-iOS/Presentation/EditUser/BadgeList/View/BadgeListTableViewCell.swift similarity index 100% rename from Smeem-iOS/Smeem-iOS/Presentation/MyPage/BadgeList/View/BadgeListTableViewCell.swift rename to Smeem-iOS/Smeem-iOS/Presentation/EditUser/BadgeList/View/BadgeListTableViewCell.swift diff --git a/Smeem-iOS/Smeem-iOS/Presentation/MyPage/BadgeList/View/DetailBadgeCollectionViewCell.swift b/Smeem-iOS/Smeem-iOS/Presentation/EditUser/BadgeList/View/DetailBadgeCollectionViewCell.swift similarity index 100% rename from Smeem-iOS/Smeem-iOS/Presentation/MyPage/BadgeList/View/DetailBadgeCollectionViewCell.swift rename to Smeem-iOS/Smeem-iOS/Presentation/EditUser/BadgeList/View/DetailBadgeCollectionViewCell.swift diff --git a/Smeem-iOS/Smeem-iOS/Presentation/MyPage/EditAlarm/EditAlarmViewController.swift b/Smeem-iOS/Smeem-iOS/Presentation/EditUser/EditAlarm/EditAlarmViewController.swift similarity index 100% rename from Smeem-iOS/Smeem-iOS/Presentation/MyPage/EditAlarm/EditAlarmViewController.swift rename to Smeem-iOS/Smeem-iOS/Presentation/EditUser/EditAlarm/EditAlarmViewController.swift diff --git a/Smeem-iOS/Smeem-iOS/Presentation/MyPage/EditNickname/EditNicknameViewController.swift b/Smeem-iOS/Smeem-iOS/Presentation/EditUser/EditNickname/EditNicknameViewController.swift similarity index 100% rename from Smeem-iOS/Smeem-iOS/Presentation/MyPage/EditNickname/EditNicknameViewController.swift rename to Smeem-iOS/Smeem-iOS/Presentation/EditUser/EditNickname/EditNicknameViewController.swift diff --git a/Smeem-iOS/Smeem-iOS/Presentation/MyPage/EditGoal/EditGoalViewController.swift b/Smeem-iOS/Smeem-iOS/Presentation/MyPage/EditGoal/EditGoalViewController.swift deleted file mode 100644 index d98fafb5..00000000 --- a/Smeem-iOS/Smeem-iOS/Presentation/MyPage/EditGoal/EditGoalViewController.swift +++ /dev/null @@ -1,133 +0,0 @@ -// -// EditGoalViewController.swift -// Smeem-iOS -// -// Created by 황찬미 on 2024/01/30. -// - -import UIKit - -final class EditGoalViewController: BaseViewController { - - private let provider = OnboardingService() - - private var targetIndex = -1 - private var tempTarget = "" - - private let navigationBarView = UIView() - - private lazy var backButton: UIButton = { - let button = UIButton() - button.setImage(Constant.Image.icnBack, for: .normal) - button.addTarget(self, action: #selector(backButtonDidTap), for: .touchUpInside) - return button - }() - - private let titleLabel: UILabel = { - let label = UILabel() - label.text = "트레이닝 목표 변경" - label.font = .s2 - label.textColor = .smeemBlack - return label - }() - - private lazy var trainingGoalCollectionView = TrainingGoalsCollectionView(planGoalType: .myPage(targetIndex: targetIndex)) - - private lazy var nextButton: SmeemButton = { - let button = SmeemButton(buttonType: .enabled, text: "다음") - button.addTarget(self, action: #selector(nextButtonTapped), for: .touchUpInside) - return button - }() - - init(targetIndex: Int, tempTarget: String) { - super.init(nibName: nil, bundle: nil) - self.targetIndex = targetIndex - self.tempTarget = tempTarget - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - override func viewDidLoad() { - super.viewDidLoad() - - setLayout() - planListGetAPI() - setDelegate() - } - - private func setDelegate() { - trainingGoalCollectionView.trainingDelegate = self - } - - @objc func nextButtonTapped() { - let editHowGoalVC = EditHowGoalViewController() - editHowGoalVC.tempTarget = tempTarget - self.navigationController?.pushViewController(editHowGoalVC, animated: true) - } - - @objc func backButtonDidTap(_ sender: UIButton) { - self.navigationController?.popViewController(animated: true) - } - - private func setLayout() { - view.addSubviews(navigationBarView, trainingGoalCollectionView, nextButton) - navigationBarView.addSubviews(backButton, titleLabel) - - navigationBarView.snp.makeConstraints { - $0.top.equalTo(view.safeAreaLayoutGuide) - $0.leading.trailing.equalToSuperview() - $0.height.equalTo(convertByHeightRatio(66)) - } - - backButton.snp.makeConstraints { - $0.leading.equalToSuperview().inset(10) - $0.centerY.equalToSuperview() - $0.width.height.equalTo(55) - } - - titleLabel.snp.makeConstraints { - $0.centerX.centerY.equalToSuperview() - } - - trainingGoalCollectionView.snp.makeConstraints { - $0.top.equalTo(navigationBarView.snp.bottom).offset(17) - $0.leading.trailing.equalToSuperview() - $0.bottom.equalTo(nextButton.snp.bottom).offset(80) - } - - nextButton.snp.makeConstraints { - $0.leading.trailing.equalToSuperview().inset(18) - $0.bottom.equalToSuperview().inset(50) - $0.height.equalTo(convertByHeightRatio(60)) - } - } -} - -extension EditGoalViewController: TrainingDataSendDelegate { - func sendTargetData(targetString: String, buttonType: SmeemButtonType) { - self.nextButton.changeButtonType(buttonType: buttonType) - self.tempTarget = targetString - } -} - -// MARK: - Network - -extension EditGoalViewController { - func planListGetAPI() { - SmeemLoadingView.showLoading() - self.provider.trainingGoalGetAPI() { response in - - switch response { - case .success(let response): - self.trainingGoalCollectionView.planGoalArray = response - self.trainingGoalCollectionView.reloadData() - case .failure(let error): - self.showToast(toastType: .smeemErrorToast(message: error)) - } - - SmeemLoadingView.hideLoading() - } - } -} diff --git a/Smeem-iOS/Smeem-iOS/Presentation/MyPage/EditWay/EditHowGoalViewController.swift b/Smeem-iOS/Smeem-iOS/Presentation/MyPage/EditWay/EditHowGoalViewController.swift deleted file mode 100644 index af702cac..00000000 --- a/Smeem-iOS/Smeem-iOS/Presentation/MyPage/EditWay/EditHowGoalViewController.swift +++ /dev/null @@ -1,162 +0,0 @@ -// -// EditGoalViewController.swift -// Smeem-iOS -// -// Created by Joon Baek on 2023/08/13. -// - -import UIKit - -final class EditHowGoalViewController: BaseViewController { - - private let provider = OnboardingService() - - var tempTarget = String() - var planName = String() - var planWay = String() - var planDetailWay = "" { - didSet { - configurePlanData() - } - } - - private let navigationBarView = UIView() - - private lazy var backButton: UIButton = { - let button = UIButton() - button.setImage(Constant.Image.icnBack, for: .normal) - button.addTarget(self, action: #selector(backButtonDidTap), for: .touchUpInside) - return button - }() - - private let titleLabel: UILabel = { - let label = UILabel() - label.text = "트레이닝 목표 변경" - label.font = .s2 - label.textColor = .smeemBlack - return label - }() - - private let howLearningView: TrainingWayView = { - let view = TrainingWayView(type: .none) - return view - }() - - private lazy var nextButton: SmeemButton = { - let button = SmeemButton(buttonType: .enabled, text: "완료") - button.addTarget(self, action: #selector(nextButtonDidTap), for: .touchUpInside) - return button - }() - - override func viewDidLoad() { - super.viewDidLoad() - - setLayout() - } - - override func viewWillAppear(_ animated: Bool) { - detailPlanListGetAPI(tempTarget: tempTarget) - } - - private func configurePlanData() { - let planNameList = planWay.components(separatedBy: " 이상 ") - let planWayOne = planNameList[0] + " 이상" - let planWayTwo = planNameList[1] - let detailPlan = planDetailWay.split(separator: "\n").map{String($0)} - - howLearningView.setData(planName: planName, planWayOne: planWayOne, planWayTwo: planWayTwo, detailPlanOne: detailPlan[0], detailPlanTwo: detailPlan[1]) - } - -} - -extension EditHowGoalViewController { - - // MARK: - @objc - - @objc func backButtonDidTap(_ sender: UIButton) { - self.navigationController?.popViewController(animated: true) - } - - @objc func nextButtonDidTap() { - patchGoalAPI(target: tempTarget) - } - - // MARK: - Layout - - private func setLayout() { - view.addSubviews(navigationBarView, howLearningView, nextButton) - navigationBarView.addSubviews(backButton, titleLabel) - - navigationBarView.snp.makeConstraints { - $0.top.equalTo(view.safeAreaLayoutGuide) - $0.leading.trailing.equalToSuperview() - $0.height.equalTo(convertByHeightRatio(66)) - } - - backButton.snp.makeConstraints { - $0.leading.equalToSuperview().inset(10) - $0.centerY.equalToSuperview() - $0.width.height.equalTo(55) - } - - titleLabel.snp.makeConstraints { - $0.centerX.centerY.equalToSuperview() - } - - howLearningView.snp.makeConstraints { - $0.top.equalTo(navigationBarView.snp.bottom).offset(14) - $0.leading.trailing.equalToSuperview().inset(24) - } - - nextButton.snp.makeConstraints { - $0.leading.trailing.equalToSuperview().inset(18) - $0.bottom.equalToSuperview().inset(50) - $0.height.equalTo(convertByHeightRatio(60)) - } - } -} - -extension EditHowGoalViewController { - func patchGoalAPI(target: String) { - SmeemLoadingView.showLoading() - - MyPageAPI.shared.changeGoal(param: EditGoalRequest(target: target)) { result in - - switch result { - case .success(_): - NotificationCenter.default.post(name: NSNotification.Name("goalData"), object: true) - - if let navigationController = self.navigationController { - let viewControllers = navigationController.viewControllers - if viewControllers.count >= 2 { - let viewControllerToPopTo = viewControllers[viewControllers.count - 3] // 해당 인덱스에 있는 뷰 컨트롤러로 돌아가려면 -3로 설정합니다. - navigationController.popToViewController(viewControllerToPopTo, animated: true) - } - } - case .failure(let error): - self.showToast(toastType: .smeemErrorToast(message: error)) - } - - SmeemLoadingView.hideLoading() - } - } - - func detailPlanListGetAPI(tempTarget: String) { - SmeemLoadingView.showLoading() - - self.provider.trainingWayGetAPI(param: tempTarget) { result in - switch result { - case .success(let response): - self.planName = response.title - self.planWay = response.way - self.planDetailWay = response.detail - self.configurePlanData() - - case .failure(let error): - self.showToast(toastType: .smeemErrorToast(message: error)) - } - - SmeemLoadingView.hideLoading() - } - } -} diff --git a/Smeem-iOS/Smeem-iOS/Presentation/MyPage/MyPage/MyPageViewController.swift b/Smeem-iOS/Smeem-iOS/Presentation/MyPage/MyPage/MyPageViewController.swift deleted file mode 100644 index d966cd5b..00000000 --- a/Smeem-iOS/Smeem-iOS/Presentation/MyPage/MyPage/MyPageViewController.swift +++ /dev/null @@ -1,533 +0,0 @@ -// -// MyPageViewController.swift -// Smeem-iOS -// -// Created by 임주민 on 2023/06/27. -// - -import UIKit - -import SnapKit - -final class MyPageViewController: BaseViewController { - - // MARK: - Property - - private var userInfo = MyPageResponse(username: "", target: "", title: "", way: "", detail: "", targetLang: "", hasPushAlarm: true, trainingTime: TrainingTime(day: "", hour: 0, minute: 0), badge: Badge(id: 0, name: "", type: "", imageUrl: "")) - var myPageSelectedIndexPath = ["MON": IndexPath(item: 0, section: 0), "TUE":IndexPath(item: 1, section: 0), "WED":IndexPath(item: 2, section: 0), "THU":IndexPath(item: 3, section: 0), "FRI":IndexPath(item: 4, section: 0), "SAT":IndexPath(item: 5, section: 0), "SUN":IndexPath(item: 6, section: 0)] - var indexPathArray: [IndexPath] = [] - var hasAlarm = Bool() - - var onTargetRecived: ((_ target: String) -> Void)? - - let goalTextToIndex: [String: (Int, String)] = [ - "자기계발": (0, "DEVELOP"), - "취미로 즐기기": (1, "HOBBY"), - "현지 언어 체득": (2, "APPLY"), - "유창한 비즈니스 영어": (3, "BUSINESS"), - "어학 시험 고득점": (4, "EXAM"), - "아직 모르겠어요": (5, "NONE") - ] - - var toastMessageFlag = false { - didSet { - DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { - self.loadToastMessage() - } - } - } - - // MARK: - UI Property - - private let headerContainerView = UIView() - private let contentView = UIView() - - private let scrollView: UIScrollView = { - let scrollView = UIScrollView() - scrollView.backgroundColor = .white - scrollView.showsVerticalScrollIndicator = false - return scrollView - }() - - private lazy var backButton: UIButton = { - let button = UIButton() - button.setImage(Constant.Image.icnBack, for: .normal) - button.addTarget(self, action: #selector(backButtonDidTap(_:)), for: .touchUpInside) - return button - }() - - private let titleLabel: UILabel = { - let label = UILabel() - label.text = "마이페이지" - label.font = .s2 - label.textColor = .smeemBlack - return label - }() - - private lazy var moreButton: UIButton = { - let button = UIButton() - button.setImage(Constant.Image.icnMoreMono, for: .normal) - button.addTarget(self, action: #selector(moreButtonDidTap(_:)), for: .touchUpInside) - return button - }() - - private lazy var nickNameLabel: UILabel = { - let nickNameLabel = UILabel() - nickNameLabel.font = .h3 - nickNameLabel.textColor = .smeemBlack - return nickNameLabel - }() - - private lazy var editButton: UIButton = { - let editButton = UIButton() - editButton.setImage(Constant.Image.icnPencil, for: .normal) - editButton.addTarget(self, action: #selector(editButtonDidTap(_:)), for: .touchUpInside) - return editButton - }() - - private let howLearningView: TrainingWayView = { - let view = TrainingWayView(type: .isShown) - return view - }() - - private let badgeLabel: UILabel = { - let badgeLabel = UILabel() - badgeLabel.text = "내 배지" - badgeLabel.font = .s1 - badgeLabel.textColor = .smeemBlack - return badgeLabel - }() - - private lazy var badgeContainer: UIView = { - let badgeContainer = UIView() - badgeContainer.backgroundColor = .clear - badgeContainer.layer.borderWidth = 1.5 - badgeContainer.layer.borderColor = UIColor.gray100.cgColor - badgeContainer.makeRoundCorner(cornerRadius: 6) - badgeContainer.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(badgeImageDidTap))) - badgeContainer.isUserInteractionEnabled = true - return badgeContainer - }() - - private lazy var badgeImage: UIImageView = { - let image = UIImageView() - return image - }() - - private let badgeMoreButton: UIImageView = { - let image = UIImageView() - image.image = Constant.Image.icnForward - return image - }() - - private let badgeNameLabel: UILabel = { - let badgeNameLabel = UILabel() - badgeNameLabel.text = "웰컴 배지" - badgeNameLabel.font = .b1 - badgeNameLabel.textColor = .smeemBlack - return badgeNameLabel - }() - - private let badgeSummaryLabel: UILabel = { - let badgeSummaryLabel = UILabel() - badgeSummaryLabel.font = .b4 - badgeSummaryLabel.textColor = .gray600 - return badgeSummaryLabel - }() - - private let languageLabel: UILabel = { - let languageLabel = UILabel() - languageLabel.text = "학습 언어" - languageLabel.font = .s1 - languageLabel.textColor = .smeemBlack - return languageLabel - }() - - private let languageContainer: UIView = { - let languageContainer = UIView() - languageContainer.backgroundColor = .clear - languageContainer.layer.borderWidth = 1.5 - languageContainer.layer.borderColor = UIColor.gray100.cgColor - languageContainer.makeRoundCorner(cornerRadius: 6) - return languageContainer - }() - - private let languageLabelEnglish: UILabel = { - let languageLabel = UILabel() - languageLabel.text = "English" - languageLabel.font = .b4 - languageLabel.textColor = .smeemBlack - return languageLabel - }() - - private let languageCheckButton: UIButton = { - let button = UIButton() - button.setImage(Constant.Image.icnCheck, for: .normal) - return button - }() - - private let alarmLabel: UILabel = { - let alarmLabel = UILabel() - alarmLabel.text = "학습 알림" - alarmLabel.font = .s1 - alarmLabel.textColor = .smeemBlack - return alarmLabel - }() - - private let alarmContainer: UIView = { - let alarmContainer = UIView() - alarmContainer.backgroundColor = .clear - alarmContainer.layer.borderWidth = 1.5 - alarmContainer.layer.borderColor = UIColor.gray100.cgColor - alarmContainer.makeRoundCorner(cornerRadius: 6) - return alarmContainer - }() - - private let alarmPushLabel: UILabel = { - let pushLabel = UILabel() - pushLabel.text = "트레이닝 푸시알림" - pushLabel.font = .b4 - pushLabel.textColor = .smeemBlack - return pushLabel - }() - - private lazy var alarmPushToggleButton: UISwitch = { - let button = UISwitch() - button.onTintColor = .point - button.addTarget(self, action: #selector(pushButtonDidTap), for: .touchUpInside) - return button - }() - - private lazy var alarmCollectionView: AlarmCollectionView = { - let collectionView = AlarmCollectionView() - collectionView.isUserInteractionEnabled = false - return collectionView - }() - - private lazy var alarmEditButton: UIView = { - let view = UIView() - view.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(alarmEditButtonDidTap))) - return view - }() - - var keyboardHeight: CGFloat = 0.0 - - // MARK: - Life Cycle - - override func viewDidLoad() { - super.viewDidLoad() - - setLayout() - setupHowLearningViewTapGestureRecognizer() - - AmplitudeManager.shared.track(event: AmplitudeConstant.myPage.mypage_view.event) - } - - override func viewWillAppear(_ animated: Bool) { - super.viewWillAppear(animated) - - myPageInfoAPI() - } - - // MARK: - @objc - - @objc func backButtonDidTap(_ sender: UIButton) { - self.navigationController?.popViewController(animated: true) - } - - @objc func moreButtonDidTap(_ sender: UIButton) { - let authManagetmentVC = AuthManagementViewController() - self.navigationController?.pushViewController(authManagetmentVC, animated: true) - } - - @objc func editButtonDidTap(_ sender: UIButton) { - let editVC = EditNicknameViewController() - editVC.nickName = userInfo.username - self.navigationController?.pushViewController(editVC, animated: true) - } - - @objc func pushButtonDidTap(_ sender: UIButton) { - hasAlarm = !hasAlarm - editPushPatchAPI(pushData: EditPushRequest(hasAlarm: hasAlarm)) - } - - @objc func badgeImageDidTap() { - let badgeListVC = BadgeListViewController() - self.navigationController?.pushViewController(badgeListVC, animated: true) - } - - @objc func howLearningViewTapped() { - let goalVC = EditGoalViewController(targetIndex: goalTextToIndex[userInfo.title]!.0, - tempTarget: goalTextToIndex[userInfo.title]!.1) - - NotificationCenter.default.addObserver(self, - selector: #selector(goalDataReceived), - name: NSNotification.Name("goalData"), - object: nil) - - self.navigationController?.pushViewController(goalVC, animated: true) - } - - @objc func alarmEditButtonDidTap() { - let alarmEditVC = EditAlarmViewController() - alarmEditVC.dayIndexPathArray = indexPathArray - alarmEditVC.trainigDayData = userInfo.trainingTime.day - alarmEditVC.trainingTimeData = (userInfo.trainingTime.hour, userInfo.trainingTime.minute) - alarmEditVC.trainigDayData = userInfo.trainingTime.day - self.navigationController?.pushViewController(alarmEditVC, animated: true) - } - - @objc func goalDataReceived() { - toastMessageFlag = true - } - - // MARK: - Custom Method - - private func setData() { - let planNameList = userInfo.way.components(separatedBy: " 이상 ") - let planWayOne = planNameList[0] + " 이상" - let planWayTwo = planNameList[1] - let detailPlan = userInfo.detail.split(separator: "\n").map{String($0)} - - howLearningView.setData(planName: userInfo.title, planWayOne: planWayOne, planWayTwo: planWayTwo, detailPlanOne: detailPlan[0], detailPlanTwo: detailPlan[1]) - nickNameLabel.text = userInfo.username - let url = URL(string: userInfo.badge.imageUrl) - badgeImage.kf.setImage(with: url) - badgeNameLabel.text = (userInfo.badge.name) - badgeSummaryLabel.text = "축하해요! \(userInfo.badge.name)를 획득했어요!" - - // 알람 값 저장 - self.hasAlarm = userInfo.hasPushAlarm - - alarmCollectionView.hasAlarm = userInfo.hasPushAlarm - - if !userInfo.hasPushAlarm { - alarmPushToggleButton.isOn = false - alarmPushToggleButton.tintColor = .lightGray - } else { - alarmPushToggleButton.isOn = true - alarmPushToggleButton.onTintColor = .point - } - // 마이페이지 알람 cell 바꾸는 로직 - let dayArray = userInfo.trainingTime.day.split(separator: ",") - - // 요일 배열 한번 비워 주는 과정 필요 - indexPathArray.removeAll() - for i in 0.. Int? { - return goalTextToIndex[goalText]?.0 - } - - private func loadToastMessage() { - showToast(toastType: .smeemToast(bodyType: .changed)) - } - - // MARK: - Layout - - private func setLayout() { - setBackgroundColor() - - view.addSubviews(headerContainerView, scrollView) - headerContainerView.addSubviews(backButton, titleLabel, moreButton) - scrollView.addSubview(contentView) - contentView.addSubviews(nickNameLabel, editButton, howLearningView, badgeLabel, badgeContainer, languageLabel, languageContainer, alarmLabel, alarmContainer, alarmCollectionView, alarmEditButton) - badgeContainer.addSubviews(badgeImage, badgeNameLabel, badgeSummaryLabel, badgeMoreButton) - languageContainer.addSubviews(languageLabelEnglish, languageCheckButton) - alarmContainer.addSubviews(alarmPushLabel, alarmPushToggleButton) - - headerContainerView.snp.makeConstraints { - $0.top.leading.trailing.equalTo(view.safeAreaLayoutGuide) - $0.height.equalTo(convertByHeightRatio(66)) - } - - backButton.snp.makeConstraints { - $0.centerY.equalToSuperview() - $0.leading.equalToSuperview().offset(10) - $0.width.height.equalTo(55) - } - - titleLabel.snp.makeConstraints{ - $0.center.equalToSuperview() - } - - moreButton.snp.makeConstraints { - $0.centerY.equalToSuperview() - $0.trailing.equalToSuperview().offset(-10) - $0.width.height.equalTo(55) - } - - scrollView.snp.makeConstraints { - $0.top.equalTo(headerContainerView.snp.bottom) - $0.leading.trailing.bottom.equalToSuperview() - } - - contentView.snp.makeConstraints { - $0.top.leading.trailing.bottom.equalToSuperview() - $0.width.equalTo(scrollView.frameLayoutGuide) - } - - nickNameLabel.snp.makeConstraints { - $0.top.equalToSuperview().offset(convertByHeightRatio(30)) - $0.leading.equalToSuperview().offset(convertByWidthRatio(38)) - } - - editButton.snp.makeConstraints { - $0.centerY.equalTo(nickNameLabel.snp.centerY) - $0.leading.equalTo(nickNameLabel.snp.trailing).offset(-15) - $0.width.height.equalTo(55) - } - - howLearningView.snp.makeConstraints { - $0.top.equalTo(nickNameLabel.snp.bottom).offset(convertByHeightRatio(16)) - $0.leading.equalToSuperview().inset(convertByWidthRatio(24)) - $0.centerX.equalToSuperview() - } - - badgeLabel.snp.makeConstraints { - $0.top.equalTo(howLearningView.snp.bottom).offset(convertByHeightRatio(52)) - $0.leading.equalToSuperview().inset(convertByWidthRatio(24)) - } - - badgeContainer.snp.makeConstraints { - $0.top.equalTo(badgeLabel.snp.bottom).offset(convertByHeightRatio(14)) - $0.leading.trailing.equalTo(howLearningView) - $0.height.equalTo(convertByHeightRatio(244)) - } - - badgeMoreButton.snp.makeConstraints { - $0.top.equalToSuperview().inset(6) - $0.trailing.equalToSuperview().inset(4) - $0.height.width.equalTo(40) - } - - badgeImage.snp.makeConstraints { - $0.top.equalToSuperview().offset(convertByHeightRatio(40)) - $0.centerX.equalToSuperview() - $0.width.height.equalTo(convertByWidthRatio(100)) - } - - badgeNameLabel.snp.makeConstraints { - $0.top.equalToSuperview().offset(convertByHeightRatio(162)) - $0.centerX.equalToSuperview() - } - - badgeSummaryLabel.snp.makeConstraints { - $0.top.equalTo(badgeNameLabel.snp.bottom).offset(convertByHeightRatio(8)) - $0.centerX.equalToSuperview() - } - - languageLabel.snp.makeConstraints { - $0.top.equalTo(badgeContainer.snp.bottom).offset(convertByHeightRatio(52)) - $0.leading.equalToSuperview().inset(convertByWidthRatio(24)) - } - - languageContainer.snp.makeConstraints { - $0.top.equalTo(languageLabel.snp.bottom).offset(convertByHeightRatio(14)) - $0.leading.trailing.equalTo(howLearningView) - $0.height.equalTo(convertByHeightRatio(54)) - } - - languageLabelEnglish.snp.makeConstraints { - $0.centerY.equalToSuperview() - $0.leading.equalToSuperview().offset(convertByWidthRatio(20)) - } - - languageCheckButton.snp.makeConstraints { - $0.centerY.equalToSuperview() - $0.trailing.equalToSuperview().offset(-convertByWidthRatio(13)) - $0.width.height.equalTo(convertByWidthRatio(40)) - } - - alarmLabel.snp.makeConstraints { - $0.top.equalTo(languageContainer.snp.bottom).offset(convertByHeightRatio(52)) - $0.leading.equalToSuperview().inset(convertByWidthRatio(24)) - } - - alarmContainer.snp.makeConstraints { - $0.top.equalTo(alarmLabel.snp.bottom).offset(convertByHeightRatio(14)) - $0.leading.trailing.equalTo(howLearningView) - $0.height.equalTo(convertByHeightRatio(54)) - } - - alarmPushLabel.snp.makeConstraints { - $0.centerY.equalToSuperview() - $0.leading.equalToSuperview().offset(convertByWidthRatio(20)) - } - - alarmPushToggleButton.snp.makeConstraints { - $0.centerY.equalToSuperview() - $0.trailing.equalTo(alarmContainer.snp.trailing).offset(-28) - $0.width.equalTo(convertByWidthRatio(36)) - } - - alarmCollectionView.snp.makeConstraints { - $0.top.equalTo(alarmContainer.snp.bottom).offset(convertByHeightRatio(10)) - $0.leading.trailing.equalToSuperview().inset(23) - $0.bottom.equalToSuperview().offset(-convertByHeightRatio(80)) - $0.height.equalTo(convertByHeightRatio(133)) - } - - alarmEditButton.snp.makeConstraints { - $0.edges.equalTo(alarmCollectionView) - $0.width.height.equalTo(alarmCollectionView) - } - } -} - -// MARK: - Extension : Network - -extension MyPageViewController { - private func myPageInfoAPI() { - SmeemLoadingView.showLoading() - - MyPageAPI.shared.myPageInfo() { result in - - switch result { - case .success(let response): - self.userInfo = response - self.setData() - case .failure(let error): - self.showToast(toastType: .smeemErrorToast(message: error)) - } - - SmeemLoadingView.hideLoading() - } - } - - private func editPushPatchAPI(pushData: EditPushRequest) { - SmeemLoadingView.showLoading() - - MyPageAPI.shared.editPushAPI(param: pushData) { result in - - switch result { - case .success(_): - self.alarmCollectionView.hasAlarm = pushData.hasAlarm - self.alarmCollectionView.selectedIndexPath = self.indexPathArray - - if !pushData.hasAlarm { - self.alarmPushToggleButton.isOn = false - self.alarmPushToggleButton.tintColor = .lightGray - } else { - self.alarmPushToggleButton.isOn = true - self.alarmPushToggleButton.onTintColor = .point - } - case .failure(let error): - self.showToast(toastType: .smeemErrorToast(message: error)) - } - - SmeemLoadingView.hideLoading() - } - } -} diff --git a/Smeem-iOS/Smeem-iOS/Presentation/Onboarding/Training/Way/Model/TrainingWayAppData.swift b/Smeem-iOS/Smeem-iOS/Presentation/Onboarding/Training/Way/Model/TrainingWayAppData.swift deleted file mode 100644 index 9efe2af0..00000000 --- a/Smeem-iOS/Smeem-iOS/Presentation/Onboarding/Training/Way/Model/TrainingWayAppData.swift +++ /dev/null @@ -1,16 +0,0 @@ -// -// TrainingWayAppData.swift -// Smeem-iOS -// -// Created by 황찬미 on 2024/02/07. -// - -import Foundation - -struct TrainingWayAppData { - let wayTitle: String - let wayOne: String - let wayTwo: String - let detailWayOne: String - let detailWayTwo: String -} diff --git a/Smeem-iOS/Smeem-iOS/Presentation/Onboarding/Training/Way/VC/TrainingWayViewController.swift b/Smeem-iOS/Smeem-iOS/Presentation/Onboarding/Training/Way/VC/TrainingWayViewController.swift deleted file mode 100644 index 3db04749..00000000 --- a/Smeem-iOS/Smeem-iOS/Presentation/Onboarding/Training/Way/VC/TrainingWayViewController.swift +++ /dev/null @@ -1,188 +0,0 @@ -// -// TrainingWayViewController.swift -// Smeem-iOS -// -// Created by 황찬미 on 2023/05/16. -// - -import UIKit -import Combine - -final class TrainingWayViewController: BaseViewController { - - private let viewModel = TrainingWayViewModel() - - // MARK: Publisher - - private let viewWillAppearSubject = PassthroughSubject() - private let nextButtonTapped = PassthroughSubject() - private var cancelBag = Set() - - // MARK: UI Properties - - private let nowStepOneLabel: UILabel = { - let label = UILabel() - label.text = "2" - label.font = .s1 - label.setTextWithLineHeight(lineHeight: 21) - label.textColor = .point - return label - }() - - private let divisionLabel: UILabel = { - let label = UILabel() - label.text = "/" - label.font = .c3 - label.textColor = .black - return label - }() - - private let totalStepLabel: UILabel = { - let label = UILabel() - label.text = "3" - label.font = .c3 - label.textColor = .black - return label - }() - - private let titleLearningLabel: UILabel = { - let label = UILabel() - label.text = "추천 트레이닝 방법" - label.font = .h2 - label.textColor = .black - return label - }() - - private let detailLearningLabel: UILabel = { - let label = UILabel() - label.text = "스밈과 함께한다면 분명 목표를 이룰 거예요!" - label.font = .b4 - label.textColor = .black - return label - }() - - private let learningLabelStackView: UIStackView = { - let stackView = UIStackView() - stackView.alignment = .leading - stackView.axis = .vertical - stackView.distribution = .fillProportionally - stackView.spacing = 6 - return stackView - }() - - private let howLearningView: TrainingWayView = { - let view = TrainingWayView(type: .none) - return view - }() - - private lazy var nextButton: SmeemButton = { - let button = SmeemButton(buttonType: .enabled, text: "다음") - return button - }() - - // MARK: - Life Cycle - - init(target: String) { - super.init(nibName: nil, bundle: nil) - - viewModel.target = target - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - override func viewDidLoad() { - super.viewDidLoad() - - setLayout() - bind() - } - - override func viewWillAppear(_ animated: Bool) { - viewWillAppearSubject.send(()) - } - - // MARK: - Methods - - private func bind() { - nextButton.tapPublisher - .sink { [weak self] _ in - self?.nextButtonTapped.send(()) - } - .store(in: &cancelBag) - - let input = TrainingWayViewModel.Input(viewWillAppearSubject: viewWillAppearSubject, - nextButtonTapped: nextButtonTapped) - let output = viewModel.transform(input: input) - - output.viewWillAppearResult - .receive(on: DispatchQueue.main) - .sink { [weak self] appData in - self?.howLearningView.setModel(model: appData) - } - .store(in: &cancelBag) - - output.nextButtonResult - .receive(on: DispatchQueue.main) - .sink { [weak self] target in -// let alarmVC = TrainingAlarmViewController(target: target) -// self?.navigationController?.pushViewController(alarmVC, animated: true) - } - .store(in: &cancelBag) - - output.errorResult - .receive(on: DispatchQueue.main) - .sink { [weak self] error in - self?.showToast(toastType: .smeemErrorToast(message: error)) - } - .store(in: &cancelBag) - - output.loadingViewResult - .receive(on: DispatchQueue.main) - .sink { isShown in - isShown ? SmeemLoadingView.showLoading() : SmeemLoadingView.hideLoading() - } - .store(in: &cancelBag) - } -} - -// MARK: - Layout - -extension TrainingWayViewController { - private func setLayout() { - view.addSubviews(nowStepOneLabel, divisionLabel, totalStepLabel, learningLabelStackView, howLearningView, nextButton) - learningLabelStackView.addArrangedSubviews(titleLearningLabel, detailLearningLabel) - - nowStepOneLabel.snp.makeConstraints { - $0.leading.equalToSuperview().inset(26) - $0.top.equalTo(view.safeAreaLayoutGuide).inset(36) - } - - divisionLabel.snp.makeConstraints { - $0.leading.equalTo(nowStepOneLabel.snp.trailing).offset(2) - $0.top.equalTo(view.safeAreaLayoutGuide).inset(40) - } - - totalStepLabel.snp.makeConstraints { - $0.leading.equalTo(divisionLabel.snp.trailing).offset(1) - $0.top.equalTo(divisionLabel.snp.top) - } - - learningLabelStackView.snp.makeConstraints { - $0.leading.equalToSuperview().inset(26) - $0.top.equalTo(totalStepLabel.snp.bottom).offset(19) - } - - howLearningView.snp.makeConstraints { - $0.top.equalTo(learningLabelStackView.snp.bottom).offset(28) - $0.leading.trailing.equalToSuperview().inset(24) - } - - nextButton.snp.makeConstraints { - $0.leading.trailing.equalToSuperview().inset(18) - $0.bottom.equalToSuperview().inset(50) - $0.height.equalTo(convertByHeightRatio(60)) - } - } -} diff --git a/Smeem-iOS/Smeem-iOS/Presentation/Onboarding/Training/Way/ViewModel/TrainingWayViewModel.swift b/Smeem-iOS/Smeem-iOS/Presentation/Onboarding/Training/Way/ViewModel/TrainingWayViewModel.swift deleted file mode 100644 index dc140603..00000000 --- a/Smeem-iOS/Smeem-iOS/Presentation/Onboarding/Training/Way/ViewModel/TrainingWayViewModel.swift +++ /dev/null @@ -1,85 +0,0 @@ -// -// TrainingWayViewModel.swift -// Smeem-iOS -// -// Created by 황찬미 on 2024/02/07. -// - -import Foundation -import Combine - -final class TrainingWayViewModel: ViewModel { - - struct Input { - let viewWillAppearSubject: PassthroughSubject - let nextButtonTapped: PassthroughSubject - } - - struct Output { - let viewWillAppearResult: AnyPublisher - let nextButtonResult: AnyPublisher - let errorResult: AnyPublisher - let loadingViewResult: AnyPublisher - } - - private let errorSubject = PassthroughSubject() - private let loadingViewSubject = PassthroughSubject() - private let provider = OnboardingService() - - var target = "" - - func transform(input: Input) -> Output { - let viewWillAppearResult = input.viewWillAppearSubject - .handleEvents(receiveSubscription: { _ in - self.loadingViewSubject.send(true) - }) - .flatMap { _ -> AnyPublisher in - return Future { promise in - self.provider.trainingWayGetAPI(param: self.target) { result in - switch result { - case .success(let response): - let appData = self.configureWayData(training: response) - promise(.success(appData)) - case .failure(let error): - self.errorSubject.send(error) - } - } - } - .handleEvents(receiveCompletion: { _ in - self.loadingViewSubject.send(false) - }) - .eraseToAnyPublisher() - } - .eraseToAnyPublisher() - - let nextButtonResult = input.nextButtonTapped - .map { _ in - return self.target - } - .eraseToAnyPublisher() - - let errorResult = errorSubject.eraseToAnyPublisher() - let loadingViewResult = loadingViewSubject.eraseToAnyPublisher() - - return Output(viewWillAppearResult: viewWillAppearResult, - nextButtonResult: nextButtonResult, - errorResult: errorResult, - loadingViewResult: loadingViewResult) - } - - private func configureWayData(training: TrainingWayResponse) -> TrainingWayAppData { - let wayTitle = training.title - let wayArray = training.way.components(separatedBy: " 이상 ") - let wayOne = wayArray[0] + " 이상" - let wayTwo = wayArray[1] - let detailWay = training.detail.split(separator: "\n").map{String($0)} - let detailWayOne = detailWay[0] - let detailWayTwo = detailWay[1] - - return TrainingWayAppData(wayTitle: wayTitle, - wayOne: wayOne, - wayTwo: wayTwo, - detailWayOne: detailWayOne, - detailWayTwo: detailWayTwo) - } -}