├── .github
├── ISSUE_TEMPLATE
│ ├── bug-template.md
│ └── feature-template.md
└── PULL_REQUEST_TEMPLATE.md
├── .gitignore
├── LICENSE
├── README.md
└── Weekand
├── .swiftlint.yml
├── Podfile
├── Podfile.lock
├── Supporting Files
├── PretendardVariable.ttf
└── Preview.swift
├── Weekand.xcodeproj
├── project.pbxproj
├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
└── xcshareddata
│ └── xcschemes
│ └── Weekand.xcscheme
├── Weekand.xcworkspace
├── contents.xcworkspacedata
└── xcshareddata
│ └── IDEWorkspaceChecks.plist
└── Weekand
├── API.swift
├── Application
├── AppDelegate.swift
└── SceneDelegate.swift
├── Base
└── Base.lproj
│ └── LaunchScreen.storyboard
├── Data
└── UserDataStorage.swift
├── Domain
├── Alarm.swift
├── CompleteStatus.swift
├── Entities
│ ├── Category.swift
│ ├── Color.swift
│ ├── EmojiGiver.swift
│ ├── FollwingUser.swift
│ ├── ScheduleMain.swift
│ ├── ScheduleSummary.swift
│ ├── SignUpModel.swift
│ ├── UserSummary.swift
│ └── UserSummaryTemp.swift
├── Enum
│ ├── CategoryOpenType.swift
│ ├── Emoji.swift
│ ├── ScheduleRepeatType.swift
│ ├── ScheduleSort.swift
│ ├── Status.swift
│ └── UserSort.swift
├── FollowInformationType.swift
├── ImageExtensionType.swift
├── KeyChain
│ ├── KeyChainAccount.swift
│ ├── KeyChainError.swift
│ └── KeyChainManager.swift
├── ProfileSetting.swift
├── ProfileUseCase.swift
├── ScheduleDetail.swift
├── ScheduleDetailUseCase.swift
├── ScheduleInputModel.swift
├── ScheduleRule.swift
├── ScheduleUpdateModel.swift
├── ScheduleWeek.swift
├── StickerSummary.swift
├── TokenManager.swift
├── UseCase
│ ├── Main
│ │ ├── CategoryUseCase.swift
│ │ ├── MainUseCase.swift
│ │ ├── ScheduleEditUseCase.swift
│ │ └── SearchUseCase.swift
│ └── Sign
│ │ ├── SignInUseCase.swift
│ │ └── SignUpUseCase.swift
├── UserDetail.swift
└── UserUpdate.swift
├── Networking
├── Apollo
│ ├── Interceptor
│ │ ├── RefreshTokenInterceptor.swift
│ │ ├── RequestLoggingInterceptor.swift
│ │ ├── TokenAddingInterceptor.swift
│ │ └── ResponseLoggingInterceptor.swift
│ ├── Network.swift
│ ├── NetworkInterceptorProvider.swift
│ ├── RxApolloClient.swift
│ └── Timestamp.swift
├── Error
│ ├── CategoryError.swift
│ ├── NetworkError.swift
│ ├── ScheduleEditError.swift
│ ├── SignInError.swift
│ └── SignUpError.swift
├── ImageUploader.swift
├── Query
│ ├── CompleteSchedule.graphql
│ ├── CreateCategory.graphql
│ ├── CreateFollowee.graphql
│ ├── CreateImageUrl.graphql
│ ├── CreateSchedule.graphql
│ ├── CreateSticker.graphql
│ ├── DeleteFollowee.graphql
│ ├── DeleteFollower.graphql
│ ├── DeleteSchedule.graphql
│ ├── DeleteScheduleFromDate.graphql
│ ├── DeleteUser.graphql
│ ├── Followees.graphql
│ ├── Followers.graphql
│ ├── IncompleteSchedule.graphql
│ ├── Login.graphql
│ ├── Logout.graphql
│ ├── MyStickerAdded.graphql
│ ├── Notification.graphql
│ ├── Reissue.graphql
│ ├── ScehduleRule.graphql
│ ├── Schedule.graphql
│ ├── ScheduleCategories.graphql
│ ├── SearchSchedules.graphql
│ ├── SearchUsers.graphql
│ ├── SendContact.graphql
│ ├── SignUp.graphql
│ ├── SkipSchedule.graphql
│ ├── StickerSummary.graphql
│ ├── UpdateCategory.graphql
│ ├── UpdatePassword.graphql
│ ├── UpdateSchedule.graphql
│ ├── UpdateUserDetail.graphql
│ ├── UserDetail.graphql
│ ├── UserSummary.graphql
│ ├── checkDuplicateNickname.graphql
│ ├── deleteCategory.graphql
│ ├── issueTempPassword.graphql
│ ├── scheduleList.graphql
│ ├── sendAuthKey.graphql
│ └── vaildAuthKey.graphql
├── RefreshTokenInterceptor.swift
├── RequestLoggingInterceptor.swift
├── Timestamp.swift
├── TokenAddingInterceptor.swift
└── ResponseLoggingInterceptor.swift
├── Presentation
├── Common
│ ├── Coordinator
│ │ ├── AlertPopupCoordinator.swift
│ │ ├── AppCoordinator.swift
│ │ ├── Coordinator.swift
│ │ ├── CoordinatorDidFinishDelegate.swift
│ │ ├── CoordinatorType.swift
│ │ └── SimplePopupCoordinator.swift
│ ├── View
│ │ ├── WArrowButton.swift
│ │ ├── WBottmButton.swift
│ │ ├── WButtonTextField.swift
│ │ ├── WCalendarView.swift
│ │ ├── WCheckBox.swift
│ │ ├── WDefaultButton.swift
│ │ ├── WEmptyView.swift
│ │ ├── WFilledGrayButton.swift
│ │ ├── WFilterButtton.swift
│ │ ├── WMultiLineTextLabel.swift
│ │ ├── WSortButton.swift
│ │ ├── WSquareImageView.swift
│ │ ├── WTagToggleButton.swift
│ │ ├── WTextButton.swift
│ │ ├── WTextField.swift
│ │ ├── WTextFieldStackView.swift
│ │ ├── WTextLabel.swift
│ │ ├── WTextView.swift
│ │ ├── WTitleLabel.swift
│ │ ├── WToastLabel.swift
│ │ └── WTypeToggleButton.swift
│ ├── ViewController
│ │ ├── AlertPopupViewController.swift
│ │ ├── BaseNavigationController.swift
│ │ ├── BaseViewController.swift
│ │ ├── BottomSheetViewController.swift
│ │ ├── PopupViewController.swift
│ │ └── SimplePopupViewController.swift
│ └── ViewModel
│ │ ├── AlertPopupViewModel.swift
│ │ ├── SimplePopupViewModel.swift
│ │ └── ViewModelType.swift
├── MainScene
│ ├── Category
│ │ ├── Coordinator
│ │ │ ├── CategoryAddCoordinator.swift
│ │ │ ├── CategoryCoordinator.swift
│ │ │ ├── CategoryEditCoordinatorType.swift
│ │ │ └── CategoryModifyCoordinator.swift
│ │ ├── View
│ │ │ ├── CategoryDataSource.swift
│ │ │ ├── CategoryDetailViewController.swift
│ │ │ ├── CategoryEditViewController.swift
│ │ │ ├── CategoryListViewController.swift
│ │ │ ├── ColorSheetViewController.swift
│ │ │ ├── ScheduleDataSource.swift
│ │ │ └── SubView
│ │ │ │ ├── CategoryDetailHeaderView.swift
│ │ │ │ ├── CategoryDetailTableViewCell.swift
│ │ │ │ ├── CategoryDetailToolBar.swift
│ │ │ │ ├── CategoryListHeaderView.swift
│ │ │ │ ├── CategoryListTableViewCell.swift
│ │ │ │ ├── ColorStackView.swift
│ │ │ │ ├── ColorsCollectionViewCell.swift
│ │ │ │ ├── DateTimeLabel.swift
│ │ │ │ ├── FilterTableViewCell.swift
│ │ │ │ ├── OpenTypeCollectionViewCell.swift
│ │ │ │ └── OpenTypeStackView.swift
│ │ └── ViewModel
│ │ │ ├── CategoryAddViewModel.swift
│ │ │ ├── CategoryDetailViewModel.swift
│ │ │ ├── CategoryEditViewModelType.swift
│ │ │ ├── CategoryListViewModel.swift
│ │ │ ├── CategoryModifyViewModel.swift
│ │ │ └── ColorSheetViewModel.swift
│ ├── Common
│ │ └── View
│ │ │ ├── SortDropDownCell.swift
│ │ │ ├── SortDropDownCell.xib
│ │ │ ├── WCategoryTitleLabel.swift
│ │ │ ├── WEmojiView.swift
│ │ │ ├── WIconLabel.swift
│ │ │ └── WStatusTimeLabel.swift
│ ├── Main
│ │ ├── Coordinator
│ │ │ └── MainCoordinator.swift
│ │ ├── View
│ │ │ ├── AlarmViewController.swift
│ │ │ ├── MainScheduleDataSource.swift
│ │ │ ├── MainViewController.swift
│ │ │ ├── Sheet
│ │ │ │ ├── EmojiSheet
│ │ │ │ │ ├── EmojiSheetViewController.swift
│ │ │ │ │ ├── EmojiTabViewController.swift
│ │ │ │ │ └── EmojiTableViewController.swift
│ │ │ │ ├── MonthlyCalendarSheet.swift
│ │ │ │ └── StickerAddSheet.swift
│ │ │ └── SubView
│ │ │ │ ├── AlarmTableViewCell.swift
│ │ │ │ ├── MainView
│ │ │ │ ├── MainCalendarView.swift
│ │ │ │ ├── MainCollectionViewCell.swift
│ │ │ │ ├── MainProfileView.swift
│ │ │ │ ├── MainTableViewCell.swift
│ │ │ │ └── MainViewHeader.swift
│ │ │ │ └── Sheet
│ │ │ │ ├── EmojiTableViewCell.swift
│ │ │ │ └── StickerCollectionViewCell.swift
│ │ └── ViewModel
│ │ │ ├── AlarmViewModel.swift
│ │ │ ├── MainViewModel.swift
│ │ │ └── Sheet
│ │ │ ├── EmojiTableViewModel.swift
│ │ │ ├── MonthlyCalendarSheetViewModel.swift
│ │ │ └── StickerAddSheetViewModel.swift
│ ├── ScheduleDetail
│ │ ├── Coordinator
│ │ │ └── ScheduleDetailCoordinator.swift
│ │ ├── View
│ │ │ ├── ScheduleDetailViewController.swift
│ │ │ └── Views
│ │ │ │ ├── CompleteCollectionViewCell.swift
│ │ │ │ ├── ScheduleCategoryStackView.swift
│ │ │ │ ├── ScheduleCompleteToolBar.swift
│ │ │ │ └── ScheduleInformationStackView.swift
│ │ └── ViewModel
│ │ │ └── ScheduleDetailViewModel.swift
│ ├── ScheduleEdit
│ │ ├── Coordinator
│ │ │ ├── ScheduleAddCoordinator.swift
│ │ │ ├── ScheduleEditCoordinatorType.swift
│ │ │ └── ScheduleModifyCoordinator.swift
│ │ ├── View
│ │ │ ├── CategoryListSheetViewController.swift
│ │ │ ├── DefaultRepeatViewController.swift
│ │ │ ├── RepeatSheetViewController.swift
│ │ │ ├── RepeatTabViewController.swift
│ │ │ ├── ScheduleEditViewController.swift
│ │ │ ├── Views
│ │ │ │ ├── AddInformationContainerView.swift
│ │ │ │ ├── CategorySheetTableViewCell.swift
│ │ │ │ ├── CategoryStackView.swift
│ │ │ │ ├── DateStackView.swift
│ │ │ │ ├── MemoStackView.swift
│ │ │ │ ├── RepeatRadioStackView.swift
│ │ │ │ ├── RepeatStackView.swift
│ │ │ │ ├── RepeatTableViewCell.swift
│ │ │ │ ├── TimeStackView.swift
│ │ │ │ └── WeekCollectionViewCell.swift
│ │ │ └── WeekRepeatViewController.swift
│ │ └── ViewModel
│ │ │ ├── CategoryListSheetViewModel.swift
│ │ │ ├── DefaultRepeatViewModel.swift
│ │ │ ├── ScheduleAddViewModel.swift
│ │ │ ├── ScheduleEditViewModelType.swift
│ │ │ ├── ScheduleModifyViewModel.swift
│ │ │ └── WeekRepeatViewModel.swift
│ └── Search
│ │ ├── Coordinator
│ │ └── UserSearchCoordinator.swift
│ │ ├── View
│ │ ├── InformationSheetController.swift
│ │ ├── SubView
│ │ │ ├── SearchHeaderView.swift
│ │ │ └── UserTableViewCell.swift
│ │ └── UserSearchViewController.swift
│ │ └── ViewModel
│ │ ├── InformationSheetViewModel.swift
│ │ └── UserSearchViewModel.swift
├── ProfileScene
│ ├── AccountSetting
│ │ ├── View
│ │ │ ├── ContactCompleteViewController.swift
│ │ │ ├── ContactViewController.swift
│ │ │ ├── PasswordChangeViewController.swift
│ │ │ └── ResignWarningPopupViewController.swift
│ │ └── ViewModel
│ │ │ ├── ContactViewModel.swift
│ │ │ ├── PasswordChangeViewModel.swift
│ │ │ └── WarningPopupViewModel.swift
│ ├── Follow
│ │ ├── View
│ │ │ ├── FollowViewController.swift
│ │ │ └── SubView
│ │ │ │ └── FollowTableViewCell.swift
│ │ └── ViewModel
│ │ │ └── FollowViewModel.swift
│ ├── Profile
│ │ ├── Coordinator
│ │ │ ├── ProfileCoordinator.swift
│ │ │ └── ResignWarningPopupCoordinator.swift
│ │ ├── View
│ │ │ ├── ProfileViewController.swift
│ │ │ └── SubView
│ │ │ │ ├── ProfileDetailBlockView.swift
│ │ │ │ ├── ProfileDetailCollectionCell.swift
│ │ │ │ ├── ProfileDetailCollectionStackView.swift
│ │ │ │ ├── ProfileDetailHelperView.swift
│ │ │ │ ├── ProfileDetailInteractoinBlockView.swift
│ │ │ │ ├── ProfileDetailJobInterestView.swift
│ │ │ │ └── ProfileDetailView.swift
│ │ └── ViewModel
│ │ │ └── ProfileViewModel.swift
│ └── ProfileEdit
│ │ ├── View
│ │ ├── ProfileEditViewController.swift
│ │ ├── SelectionSheetViewController.swift
│ │ └── SubView
│ │ │ ├── ProfileEditFieldView.swift
│ │ │ └── ProfileEditSelectionView.swift
│ │ └── ViewModel
│ │ ├── ProfileEditViewModel.swift
│ │ └── SelectionSheetViewModel.swift
├── SignScene
│ ├── SignIn
│ │ ├── Coordinator
│ │ │ ├── PasswordFindCoordinator.swift
│ │ │ └── SignInCoordinator.swift
│ │ ├── View
│ │ │ ├── PasswordFindViewController.swift
│ │ │ └── SignInViewController.swift
│ │ └── ViewModel
│ │ │ ├── PasswordFindViewModel.swift
│ │ │ └── SignInViewModel.swift
│ ├── SignUp
│ │ ├── Coordinator
│ │ │ └── SignUpCoordinator.swift
│ │ ├── View
│ │ │ ├── SignUpAddInfomationViewController.swift
│ │ │ ├── SignUpTermsViewController.swift
│ │ │ ├── SignUpViewController.swift
│ │ │ └── SubView
│ │ │ │ ├── BasePaddingLabel.swift
│ │ │ │ ├── InformationCollectionViewCell.swift
│ │ │ │ ├── InformationGroupStackView.swift
│ │ │ │ └── InputGroupStackView.swift
│ │ └── ViewModel
│ │ │ ├── SignUpAddInformationViewModel.swift
│ │ │ ├── SignUpTermsViewModel.swift
│ │ │ └── SignUpViewModel.swift
│ └── Welcome
│ │ ├── Coordinator
│ │ └── WelcomeCoordinator.swift
│ │ ├── View
│ │ └── WelcomeViewController.swift
│ │ └── ViewModel
│ │ └── WelcomeViewModel.swift
└── Utils
│ ├── APIModelExtensions
│ ├── RepeatType+extension.swift
│ ├── ScheduleCategoryOpenType+extension.swift
│ ├── ScheduleStatus+extension.swift
│ └── Week+extension.swift
│ ├── DesignSystem
│ ├── ColorSet.swift
│ ├── CommonShape.swift
│ ├── EmptySceneType.swift
│ ├── Font.swift
│ └── Inset.swift
│ ├── Extensions
│ ├── DateExtension.swift
│ ├── FSCalendar+RxExtension.swift
│ ├── NSMutableAttributedString+extension.swift
│ ├── String+trimWhiteSpace.swift
│ ├── UIButton+setImageInset.swift
│ ├── UIColor+hex.swift
│ ├── UIScrollView+scrollToTop.swift
│ └── UIVIewController+modality.swift
│ └── Manager
│ ├── ImageCacheManager.swift
│ ├── WDateFormatter.swift
│ └── WRepeatTextManager.swift
└── Resources
├── Assets.xcassets
├── AccentColor.colorset
│ └── Contents.json
├── AppIcon.appiconset
│ ├── 1024.png
│ ├── 120-1.png
│ ├── 120.png
│ ├── 152.png
│ ├── 167.png
│ ├── 180.png
│ ├── 20.png
│ ├── 29.png
│ ├── 40-1.png
│ ├── 40-2.png
│ ├── 40.png
│ ├── 58-1.png
│ ├── 58.png
│ ├── 60.png
│ ├── 76.png
│ ├── 80-1.png
│ ├── 80.png
│ ├── 87.png
│ └── Contents.json
├── ContactBanner.imageset
│ ├── ContactIcon.png
│ ├── ContactIcon@2x.png
│ ├── ContactIcon@3x.png
│ └── Contents.json
├── Contents.json
├── Logo.imageset
│ ├── Contents.json
│ ├── logo.png
│ ├── logo@2x.png
│ └── logo@3x.png
├── SplashImage.imageset
│ ├── Contents.json
│ ├── iPhone 8.png
│ ├── iPhone 8@2x.png
│ └── iPhone 8@3x.png
├── Symbols
│ ├── Arrows
│ │ ├── Contents.json
│ │ ├── arrow.down.imageset
│ │ │ ├── Contents.json
│ │ │ ├── arrow.down.png
│ │ │ ├── arrow.down2x.png
│ │ │ └── arrow.down3x.png
│ │ ├── arrow.left.imageset
│ │ │ ├── Contents.json
│ │ │ ├── arrow.left.png
│ │ │ ├── arrow.left2x.png
│ │ │ └── arrow.left3x.png
│ │ ├── arrow.right.imageset
│ │ │ ├── Contents.json
│ │ │ ├── arrow.right.png
│ │ │ ├── arrow.right2x.png
│ │ │ └── arrow.right3x.png
│ │ ├── back.imageset
│ │ │ ├── Contents.json
│ │ │ ├── back1x.png
│ │ │ ├── back2x.png
│ │ │ └── back3x.png
│ │ ├── chevron.down.imageset
│ │ │ ├── Contents.json
│ │ │ ├── chevron_down.png
│ │ │ ├── chevron_down@2x.png
│ │ │ └── chevron_down@3x.png
│ │ ├── chevron.right.imageset
│ │ │ ├── Contents.json
│ │ │ ├── chevron_right.png
│ │ │ ├── chevron_right@2x.png
│ │ │ └── chevron_right@3x.png
│ │ └── chevron.up.imageset
│ │ │ ├── Contents.json
│ │ │ ├── chevron_up.png
│ │ │ ├── chevron_up@2x.png
│ │ │ └── chevron_up@3x.png
│ ├── Button
│ │ ├── Contents.json
│ │ ├── category.update.imageset
│ │ │ ├── Contents.json
│ │ │ ├── updateCategory.png
│ │ │ ├── updateCategory2x.png
│ │ │ └── updateCategory3x.png
│ │ ├── close.imageset
│ │ │ ├── Contents.json
│ │ │ ├── closeTest.png
│ │ │ ├── closeTest2x.png
│ │ │ └── closeTest3x.png
│ │ ├── edit.imageset
│ │ │ ├── Contents.json
│ │ │ ├── Vector.png
│ │ │ ├── Vector@2x.png
│ │ │ └── Vector@3x.png
│ │ ├── folder.plus.imageset
│ │ │ ├── Contents.json
│ │ │ ├── addCategory1x.png
│ │ │ ├── addCategory2x.png
│ │ │ └── addCategory3x.png
│ │ ├── plus.circle.fill.imageset
│ │ │ ├── Contents.json
│ │ │ ├── plus.circle.fill.png
│ │ │ ├── plus.circle.fill2x.png
│ │ │ └── plus.circle.fill3x.png
│ │ ├── plus.imageset
│ │ │ ├── Contents.json
│ │ │ ├── plus.png
│ │ │ ├── plus@2x.png
│ │ │ └── plus@3x.png
│ │ └── setting.imageset
│ │ │ ├── Contents.json
│ │ │ ├── setting.png
│ │ │ ├── setting@2x.png
│ │ │ └── setting@3x.png
│ ├── Contents.json
│ ├── Emoji
│ │ ├── CongratsEmoji.imageset
│ │ │ ├── Contents.json
│ │ │ ├── emoji_congrats.png
│ │ │ ├── emoji_congrats@2x.png
│ │ │ └── emoji_congrats@3x.png
│ │ ├── Contents.json
│ │ ├── CoolEmoji.imageset
│ │ │ ├── Contents.json
│ │ │ ├── emoji_cool.png
│ │ │ ├── emoji_cool@2x.png
│ │ │ └── emoji_cool@3x.png
│ │ ├── GoodEmoji.imageset
│ │ │ ├── Contents.json
│ │ │ ├── emoji_good.png
│ │ │ ├── emoji_good@2x.png
│ │ │ └── emoji_good@3x.png
│ │ ├── SmileEmoji.imageset
│ │ │ ├── Contents.json
│ │ │ ├── emoji_smile.png
│ │ │ ├── emoji_smile@2x.png
│ │ │ └── emoji_smile@3x.png
│ │ └── sticker.button.imageset
│ │ │ ├── Contents.json
│ │ │ ├── sticker_button.png
│ │ │ ├── sticker_button@2x.png
│ │ │ └── sticker_button@3x.png
│ ├── EmptyViewEmoji
│ │ ├── Contents.json
│ │ ├── alarmEmoji.empty.imageset
│ │ │ ├── Contents.json
│ │ │ ├── alarmEmoji.empty.png
│ │ │ ├── alarmEmoji.empty2x.png
│ │ │ └── alarmEmoji.empty3x.png
│ │ ├── followersEmoji.empty.imageset
│ │ │ ├── Contents.json
│ │ │ ├── followersEmoji.empty.png
│ │ │ ├── followersEmoji.empty2x.png
│ │ │ └── followersEmoji.empty3x.png
│ │ ├── followingEmoji.empty.imageset
│ │ │ ├── Contents.json
│ │ │ ├── followingEmoji.empty.png
│ │ │ ├── followingEmoji.empty2x.png
│ │ │ └── followingEmoji.empty3x.png
│ │ ├── scheduleEmoji.empty.imageset
│ │ │ ├── Contents.json
│ │ │ ├── emptyEmoji.schedule.png
│ │ │ ├── emptyEmoji.schedule2x.png
│ │ │ └── emptyEmoji.schedule3x.png
│ │ └── searchEmoji.empty.imageset
│ │ │ ├── Contents.json
│ │ │ ├── userEmoji.empty.png
│ │ │ ├── userEmoji.empty2x.png
│ │ │ └── userEmoji.empty3x.png
│ ├── Information
│ │ ├── Contents.json
│ │ ├── alarm.imageset
│ │ │ ├── Contents.json
│ │ │ ├── alarm.png
│ │ │ ├── alarm@2x.png
│ │ │ └── alarm@3x.png
│ │ ├── box.filled.imageset
│ │ │ ├── Contents.json
│ │ │ ├── rectangle.png
│ │ │ ├── rectangle@2x.png
│ │ │ └── rectangle@3x.png
│ │ ├── calendar.imageset
│ │ │ ├── Contents.json
│ │ │ ├── calendar.png
│ │ │ ├── calendar2x.png
│ │ │ └── calendar3x.png
│ │ ├── date.end.imageset
│ │ │ ├── Contents.json
│ │ │ ├── date_end.png
│ │ │ ├── date_end@2x.png
│ │ │ └── date_end@3x.png
│ │ ├── date.start.imageset
│ │ │ ├── Contents.json
│ │ │ ├── date_start.png
│ │ │ ├── date_start@2x.png
│ │ │ └── date_start@3x.png
│ │ ├── default.person.imageset
│ │ │ ├── Contents.json
│ │ │ ├── Frame 1548.png
│ │ │ ├── Frame 1548@2x.png
│ │ │ └── Frame 1548@3x.png
│ │ ├── search.imageset
│ │ │ ├── Contents.json
│ │ │ ├── search.png
│ │ │ ├── search@2x.png
│ │ │ └── search@3x.png
│ │ ├── time.imageset
│ │ │ ├── Contents.json
│ │ │ ├── time.png
│ │ │ ├── time2x.png
│ │ │ └── time3x.png
│ │ ├── visibility.disabled.imageset
│ │ │ ├── Contents.json
│ │ │ ├── visibility_disabled.png
│ │ │ ├── visibility_disabled@2x.png
│ │ │ └── visibility_disabled@3x.png
│ │ └── visibility.imageset
│ │ │ ├── Contents.json
│ │ │ ├── visibility.png
│ │ │ ├── visibility@2x.png
│ │ │ └── visibility@3x.png
│ ├── State
│ │ ├── Contents.json
│ │ ├── state.completed.imageset
│ │ │ ├── Contents.json
│ │ │ ├── work_completed.png
│ │ │ ├── work_completed@2x.png
│ │ │ └── work_completed@3x.png
│ │ ├── state.hold.imageset
│ │ │ ├── Contents.json
│ │ │ ├── work_beforecheck.png
│ │ │ ├── work_beforecheck@2x.png
│ │ │ └── work_beforecheck@3x.png
│ │ ├── state.incomplete.imageset
│ │ │ ├── Contents.json
│ │ │ ├── work_uncompleted.png
│ │ │ ├── work_uncompleted@2x.png
│ │ │ └── work_uncompleted@3x.png
│ │ ├── state.proceeding.imageset
│ │ │ ├── Contents.json
│ │ │ ├── work_ongoing.png
│ │ │ ├── work_ongoing@2x.png
│ │ │ └── work_ongoing@3x.png
│ │ └── state.upcomming.imageset
│ │ │ ├── Contents.json
│ │ │ ├── work_prearranged.png
│ │ │ ├── work_prearranged@2x.png
│ │ │ └── work_prearranged@3x.png
│ └── User Input
│ │ ├── Contents.json
│ │ ├── checkmark.fill.imageset
│ │ ├── CheckBox.png
│ │ ├── CheckBox2x.png
│ │ ├── CheckBox3x.png
│ │ └── Contents.json
│ │ ├── radio.disabled.imageset
│ │ ├── Contents.json
│ │ ├── radio_disabled.png
│ │ ├── radio_disabled@2x.png
│ │ └── radio_disabled@3x.png
│ │ └── radio.enabled.imageset
│ │ ├── Contents.json
│ │ ├── radio_enabled.png
│ │ ├── radio_enabled2x.png
│ │ └── radio_enabled3x.png
└── emptyImage.imageset
│ ├── Bounding box.png
│ ├── Bounding box@2x.png
│ ├── Bounding box@3x.png
│ └── Contents.json
├── Constants.swift
└── Info.plist
/.github/ISSUE_TEMPLATE/bug-template.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug template
3 | about: Create a report to help us improve
4 | title: ''
5 | labels: bug
6 | assignees: ''
7 |
8 | ---
9 |
10 | ## 버그 설명
11 |
12 | ## 현재 동작
13 |
14 | ## 기대 동작
15 |
16 | ## 해당 버그를 발생시키는 방법
17 |
18 | ---
19 |
20 | ### 참고 문헌:
21 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature-template.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature template
3 | about: Suggest an idea for this project
4 | title: ''
5 | labels: feature
6 | assignees: ''
7 |
8 | ---
9 |
10 | ## 기능 설명
11 |
12 | ## 현재 동작
13 |
14 | ## 기대 동작
15 |
16 | ---
17 |
18 | ### 참고 문헌:
19 |
--------------------------------------------------------------------------------
/.github/PULL_REQUEST_TEMPLATE.md:
--------------------------------------------------------------------------------
1 |
15 |
16 | ## ✏️ 어떠한 기능이 추가되었나요
17 | - [ ] 구현 완료한 기능 설명
18 | - [ ] 구현할 계획 기능 설명
19 |
20 | ## ❗ 새롭게 알게된 점
21 |
22 |
23 | ## ❓ 고민중인 부분
24 |
25 | ---
26 |
27 | ### 📖 참고문헌
28 |
29 |
--------------------------------------------------------------------------------
/Weekand/.swiftlint.yml:
--------------------------------------------------------------------------------
1 | identifier_name:
2 | min_length:
3 | warning: 0
4 | max_length:
5 | warning: 40
6 | error: 50
7 |
8 | disabled_rules:
9 | - trailing_whitespace
10 | - line_length
11 | - vertical_whitespace
12 | - unused_optional_binding
13 | - identifier_name
14 | - function_body_length
15 | - file_length
16 | - function_parameter_count
17 | - unused_closure_parameter
18 | - implicit_getter
19 |
20 | excluded:
21 | - Pods
22 | - Weekand/API.swift
23 | - Weekand/AppDelegate.swift
24 | - Weekand/SceneDelegate.swift
25 |
26 | included:
27 | - Weekand
28 |
--------------------------------------------------------------------------------
/Weekand/Podfile:
--------------------------------------------------------------------------------
1 | # Uncomment the next line to define a global platform for your project
2 | # platform :ios, '14.0'
3 |
4 | target 'Weekand' do
5 | # Comment the next line if you don't want to use dynamic frameworks
6 | use_frameworks!
7 |
8 | # Pods for Weekand
9 |
10 | # Rx
11 | pod 'RxSwift'
12 | pod 'RxCocoa'
13 | pod 'RxGesture'
14 | pod 'AlignedCollectionViewFlowLayout'
15 |
16 | # UIKit
17 | pod 'SnapKit'
18 | pod 'Then'
19 |
20 | # Cooperation
21 | pod 'SwiftLint'
22 |
23 | # Apollo
24 | pod 'Apollo'
25 |
26 | # Custom VUI
27 | pod 'DropDown', '2.3.13'
28 | pod 'FSCalendar'
29 | pod 'Tabman'
30 |
31 | end
32 |
--------------------------------------------------------------------------------
/Weekand/Supporting Files/PretendardVariable.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Supporting Files/PretendardVariable.ttf
--------------------------------------------------------------------------------
/Weekand/Weekand.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Weekand/Weekand.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Weekand/Weekand.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/Weekand/Weekand.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Data/UserDataStorage.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UserDataStorage.swift
3 | // Weekand
4 | //
5 | // Created by Daegeon Choi on 2022/07/04.
6 | //
7 |
8 | import Foundation
9 |
10 | /// 로그인한 유저 정보를 저장하는 싱글톤 객체
11 | final class UserDataStorage {
12 |
13 | static let shared = UserDataStorage()
14 |
15 | var userID: String?
16 |
17 | init() {
18 |
19 | }
20 | }
21 |
22 | extension UserDataStorage {
23 | func setUserID(id: String) {
24 | UserDataStorage.shared.userID = id
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Domain/Alarm.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Alarm.swift
3 | // Weekand
4 | //
5 | // Created by Daegeon Choi on 2022/07/29.
6 | //
7 |
8 | import Foundation
9 |
10 | struct Alarm: Hashable {
11 | static func == (lhs: Alarm, rhs: Alarm) -> Bool {
12 | lhs.uuid == rhs.uuid
13 | }
14 |
15 | func hash(into hasher: inout Hasher) {
16 | hasher.combine(uuid)
17 | }
18 |
19 | let uuid = UUID()
20 | let id: String
21 | let message: String
22 | let type: String
23 | }
24 |
25 | extension Alarm {
26 | init (model: NotificationQuery.Data.Notification.Notification) {
27 |
28 | self.id = model.id
29 | self.message = model.message
30 | self.type = model.type.rawValue
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Domain/CompleteStatus.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CompleteStatus.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/08/01.
6 | //
7 |
8 | import Foundation
9 |
10 | enum CompleteStatus {
11 | case complete, incomplete
12 |
13 | var description: String {
14 | switch self {
15 | case .complete:
16 | return "완료"
17 | case .incomplete:
18 | return "미완료"
19 | }
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Domain/Entities/Category.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Category.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/06/12.
6 | //
7 |
8 | import Foundation
9 |
10 | struct Category: Hashable {
11 |
12 | static func == (lhs: Category, rhs: Category) -> Bool {
13 | lhs.identifier == rhs.identifier
14 | }
15 |
16 | func hash(into hasher: inout Hasher) {
17 | hasher.combine(identifier)
18 | }
19 |
20 | let identifier = UUID()
21 | let serverID: String
22 | let color: String
23 | let name: String
24 | let openType: CategoryOpenType
25 |
26 | init(serverID: String, color: String, name: String, openType: CategoryOpenType) {
27 |
28 | self.serverID = serverID
29 | self.color = color
30 | self.name = name
31 | self.openType = openType
32 | }
33 |
34 | init(model: ScehduleRuleQuery.Data.ScheduleRule.Category) {
35 |
36 | self.serverID = model.id
37 | self.color = model.color
38 | self.name = model.name
39 | self.openType = model.openType.toEntity()
40 | }
41 |
42 | init(model: ScheduleQuery.Data.Schedule.Category) {
43 |
44 | self.serverID = model.id
45 | self.color = model.color
46 | self.name = model.name
47 | self.openType = model.openType.toEntity()
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Domain/Entities/Color.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Color.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/06/26.
6 | //
7 |
8 | import Foundation
9 |
10 | struct Color: Hashable {
11 | static func == (lhs: Color, rhs: Color) -> Bool {
12 | lhs.id == rhs.id
13 | }
14 |
15 | func hash(into hasher: inout Hasher) {
16 | hasher.combine(id)
17 | }
18 |
19 | let id: Int
20 | let hexCode: String
21 | }
22 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Domain/Entities/EmojiGiver.swift:
--------------------------------------------------------------------------------
1 | //
2 | // EmojiGiver.swift
3 | // Weekand
4 | //
5 | // Created by Daegeon Choi on 2022/07/12.
6 | //
7 |
8 | import Foundation
9 |
10 | struct EmojiGiver: Hashable {
11 |
12 | static func == (lhs: EmojiGiver, rhs: EmojiGiver) -> Bool {
13 | lhs.id == rhs.id
14 | }
15 |
16 | func hash(into hasher: inout Hasher) {
17 | hasher.combine(id)
18 | }
19 |
20 | let id = UUID()
21 |
22 | let userId: String
23 | let name: String
24 | let imagePath: String
25 | let emoji: Emoji
26 | }
27 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Domain/Entities/ScheduleMain.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ScheduleList.swift
3 | // Weekand
4 | //
5 | // Created by Daegeon Choi on 2022/06/04.
6 | //
7 |
8 | import Foundation
9 |
10 | /// 메인 일정 리스트의 일정 정보
11 | struct ScheduleMain: Hashable {
12 |
13 | static func == (lhs: ScheduleMain, rhs: ScheduleMain) -> Bool {
14 | lhs.id == rhs.id
15 | }
16 |
17 | func hash(into hasher: inout Hasher) {
18 | hasher.combine(id)
19 | }
20 |
21 | let id = UUID()
22 |
23 | let scheduleId: String
24 | let color: String
25 | let status: Status
26 | let name: String
27 | let dateStart: Date
28 | let dateEnd: Date
29 | let stickerCount: Int
30 | let stickerNameList: [Emoji]
31 | let repeatType: ScheduleRepeatType
32 |
33 |
34 | }
35 |
36 | extension ScheduleMain {
37 | init(model: ScheduleListQuery.Data.Schedule.Schedule) {
38 |
39 | self.scheduleId = model.id
40 | self.color = model.category.color
41 | self.status = Status(rawValue: model.status.rawValue) ?? .upcoming
42 | self.name = model.name
43 | self.dateStart = model.dateTimeStart.toDate()
44 | self.dateEnd = model.dateTimeEnd.toDate()
45 | self.stickerCount = model.stickerCount
46 | self.stickerNameList = model.stickerNames.map { Emoji(rawValue: $0.rawValue) ?? .good }
47 | self.repeatType = model.repeatType.toEntity()
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Domain/Entities/SignUpModel.swift:
--------------------------------------------------------------------------------
1 | //
2 | // User.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/10.
6 | //
7 |
8 | import Foundation
9 |
10 | struct SignUpModel {
11 | var email: String?
12 | var password: String?
13 | var nickname: String?
14 | var jobs: [String]?
15 | var interests: [String]?
16 | var signUpAgreed: Bool?
17 | }
18 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Domain/Entities/UserSummary.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UserSummary.swift
3 | // Weekand
4 | //
5 | // Created by Daegeon Choi on 2022/06/23.
6 | //
7 |
8 | import Foundation
9 |
10 | /// 기본 유저 정보 (이름, 한줄평, 프로필 사진)
11 | struct UserSummary {
12 |
13 | static let defaultData = UserSummary(id: "", name: "", goal: "We can do, Weekand!", imagePath: "")
14 |
15 | let userId: String // 유저 id
16 | let name: String // 유저 이름
17 | let goal: String // 한줄 목표
18 | let imagePath: String // 프로필 사진
19 |
20 | init (id: String, name: String, goal: String, imagePath: String) {
21 | self.userId = id
22 | self.name = name
23 | self.goal = goal
24 | self.imagePath = imagePath
25 | }
26 |
27 | init (model: UserSummaryQuery.Data.User) {
28 | self.userId = model.id
29 | self.name = model.nickname
30 | self.goal = model.goal ?? ""
31 | self.imagePath = model.profileImageUrl
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Domain/Entities/UserSummaryTemp.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UserSummaryTemp.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/15.
6 | //
7 |
8 | import Foundation
9 |
10 | /// 기본 유저 정보 (이름, 한줄평, 프로필 사진)
11 | struct UserSummaryTemp: Hashable {
12 |
13 | static func == (lhs: UserSummaryTemp, rhs: UserSummaryTemp) -> Bool {
14 | lhs.id == rhs.id
15 | }
16 |
17 | func hash(into hasher: inout Hasher) {
18 | hasher.combine(id)
19 | }
20 |
21 | let id = UUID()
22 | let userSummaryId: String
23 | let name: String // 유저 이름
24 | let goal: String // 한줄 목표
25 | let imagePath: String // 프로필 사진
26 | }
27 |
28 | extension UserSummaryTemp {
29 |
30 | init (model: UserFolloweesQuery.Data.Followee.Followee) {
31 | self.userSummaryId = model.id
32 | self.name = model.nickname
33 | self.goal = model.goal ?? ""
34 | self.imagePath = model.profileImageUrl
35 | }
36 |
37 | init (model: UserFollowersQuery.Data.Follower.Follower) {
38 | self.userSummaryId = model.id
39 | self.name = model.nickname
40 | self.goal = model.goal ?? ""
41 | self.imagePath = model.profileImageUrl
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Domain/Enum/CategoryOpenType.swift:
--------------------------------------------------------------------------------
1 | //
2 | // OpenType.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/15.
6 | //
7 |
8 | import Foundation
9 |
10 | enum CategoryOpenType: String {
11 | case allOpen
12 | case followerOpen
13 | case closed
14 |
15 | var description: String {
16 | switch self {
17 | case .allOpen:
18 | return "전체 공개"
19 | case .followerOpen:
20 | return "친구 공개"
21 | case .closed:
22 | return "비공개"
23 | }
24 | }
25 | }
26 |
27 | extension CategoryOpenType {
28 | static var openTypeList: [CategoryOpenType] {
29 | return [.allOpen, .followerOpen, .closed]
30 | }
31 |
32 | var listIndex: Int {
33 | switch self {
34 | case .allOpen:
35 | return 0
36 | case .followerOpen:
37 | return 1
38 | case .closed:
39 | return 2
40 | }
41 | }
42 | }
43 |
44 | extension CategoryOpenType {
45 | func toModel() -> ScheduleCategoryOpenType {
46 | switch self {
47 | case .allOpen:
48 | return ScheduleCategoryOpenType.allOpen
49 | case .followerOpen:
50 | return ScheduleCategoryOpenType.followerOpen
51 | case .closed:
52 | return ScheduleCategoryOpenType.closed
53 | }
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Domain/Enum/Emoji.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Emoji.swift
3 | // Weekand
4 | //
5 | // Created by Daegeon Choi on 2022/07/07.
6 | //
7 |
8 | import Foundation
9 |
10 | /// 스티커 종류
11 | enum Emoji: String {
12 | case good = "GOOD" // 좋아요
13 | case awesome = "LIKE" // 대단해요
14 | case cool = "COOL" // 멋져요
15 | case support = "CHEER_UP" // 응원해요
16 |
17 | /// 스티커 이미지 이름
18 | var imageName: String {
19 | switch self {
20 | case .good: return "SmileEmoji"
21 | case .awesome: return "GoodEmoji"
22 | case .cool: return "CoolEmoji"
23 | case .support: return "CongratsEmoji"
24 | }
25 | }
26 |
27 | /// 스티커 이름
28 | var emojiName: String {
29 | switch self {
30 | case .good: return "좋아요"
31 | case .awesome: return "대단해요"
32 | case .cool: return "멋져요"
33 | case .support: return "응원해요"
34 | }
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Domain/Enum/ScheduleRepeatType.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ScheduleRepeatType.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/21.
6 | //
7 |
8 | import Foundation
9 |
10 | enum ScheduleRepeatType {
11 | case daily
12 | case weekly
13 | case monthly
14 | case yearly
15 | case once
16 |
17 | var description: String {
18 | switch self {
19 | case .daily:
20 | return "매일"
21 | case .weekly:
22 | return "매주"
23 | case .monthly:
24 | return "매월"
25 | case .yearly:
26 | return "매년"
27 | case .once:
28 | return ""
29 | }
30 | }
31 | }
32 |
33 | extension ScheduleRepeatType {
34 | func toModel() -> RepeatType {
35 | switch self {
36 | case .daily:
37 | return RepeatType.daily
38 | case .weekly:
39 | return RepeatType.weekly
40 | case .monthly:
41 | return RepeatType.monthly
42 | case .yearly:
43 | return RepeatType.yearly
44 | case .once:
45 | return RepeatType.once
46 | }
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Domain/Enum/ScheduleSort.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Filter.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/06/27.
6 | //
7 |
8 | import Foundation
9 |
10 | enum ScheduleSort: CaseIterable {
11 | case dateCreatedDESC
12 | case dateCreatedASC
13 | case nameCreatedASC
14 | case nameCreatedDESC
15 |
16 | var description: String {
17 | switch self {
18 | case .dateCreatedDESC:
19 | return "최신순"
20 | case .dateCreatedASC:
21 | return "오래된순"
22 | case .nameCreatedASC:
23 | return "오름차순"
24 | case .nameCreatedDESC:
25 | return "내림차순"
26 | }
27 | }
28 | }
29 |
30 | extension ScheduleSort {
31 | func toModel() -> ScheduleCategorySort {
32 | switch self {
33 | case .dateCreatedASC:
34 | return ScheduleCategorySort.dateCreatedAsc
35 | case .dateCreatedDESC:
36 | return ScheduleCategorySort.dateCreatedDesc
37 | case .nameCreatedASC:
38 | return ScheduleCategorySort.nameAsc
39 | case .nameCreatedDESC:
40 | return ScheduleCategorySort.nameDesc
41 | }
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Domain/Enum/Status.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Status.swift
3 | // Weekand
4 | //
5 | // Created by Daegeon Choi on 2022/07/15.
6 | //
7 |
8 | import Foundation
9 | import UIKit
10 |
11 | /// 일정 상태 정보
12 | enum Status: String {
13 | case upcoming = "NOT_YET"
14 | case completed = "COMPLETED"
15 | case incompleted = "INCOMPLETED"
16 | case undetermined = "UNDETERMINED"
17 |
18 | var icon: StatusIcon {
19 | switch self {
20 | case .upcoming: return .upcoming
21 | case .completed: return .completed
22 | case .incompleted: return .incompleted
23 | case .undetermined: return .undetermined
24 | }
25 | }
26 |
27 | }
28 |
29 | /// 일정상태 아이콘 정보
30 | enum StatusIcon: String {
31 |
32 | // TODO: Status 열거형 안으로 편입
33 | case upcoming = "state.upcomming"
34 | case proceeding = "state.proceeding"
35 | case completed = "state.completed"
36 | case incompleted = "state.incomplete"
37 | case undetermined = "state.hold"
38 |
39 | var tintColor: UIColor {
40 | switch self {
41 | case .upcoming: return .gray600
42 | case .proceeding: return .gray600
43 | case .completed: return .mainColor
44 | case .incompleted: return .gray600
45 | case .undetermined: return .gray300
46 | }
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Domain/Enum/UserSort.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UserSort.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/18.
6 | //
7 |
8 | import Foundation
9 |
10 | enum UserSort: CaseIterable {
11 | case followerCountDESC
12 | case dateCreatedDESC
13 | case nicknameASC
14 | case nicknameDESC
15 |
16 | var description: String {
17 | switch self {
18 | case .followerCountDESC:
19 | return "팔로워순"
20 | case .dateCreatedDESC:
21 | return "최신순"
22 | case .nicknameASC:
23 | return "오름차순"
24 | case .nicknameDESC:
25 | return "내림차순"
26 | }
27 | }
28 | }
29 |
30 | extension UserSort {
31 | func toModel() -> SearchUserSort {
32 | switch self {
33 | case .dateCreatedDESC:
34 | return SearchUserSort.dateCreatedDesc
35 | case .followerCountDESC:
36 | return SearchUserSort.followerCountDesc
37 | case .nicknameASC:
38 | return SearchUserSort.nicknameAsc
39 | case .nicknameDESC:
40 | return SearchUserSort.nicknameDesc
41 | }
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Domain/FollowInformationType.swift:
--------------------------------------------------------------------------------
1 | //
2 | // FollowInformationType.swift
3 | // Weekand
4 | //
5 | // Created by Daegeon Choi on 2022/07/31.
6 | //
7 |
8 | import Foundation
9 |
10 | enum FollowInformationType: String {
11 | case followee = "팔로잉"
12 | case follower = "팔로워"
13 |
14 | var descriptionSuffix: String {
15 | switch self {
16 | case .followee: return "님이 팔로우하는 친구들이에요"
17 | case .follower: return "님을 팔로우하는 친구들이에요"
18 | }
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Domain/ImageExtensionType.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ImageExtensionType.swift
3 | // Weekand
4 | //
5 | // Created by Daegeon Choi on 2022/07/29.
6 | //
7 |
8 | import Foundation
9 |
10 | /// 이미지 확장자
11 | enum ImageExtensionType: String {
12 | case jpeg = "JPEG"
13 | case png = "PNG"
14 | }
15 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Domain/KeyChain/KeyChainAccount.swift:
--------------------------------------------------------------------------------
1 | //
2 | // KeyChainAccount.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/24.
6 | //
7 |
8 | import Foundation
9 |
10 | enum KeyChainAccount {
11 | case accessToken
12 | case refreshToken
13 | case userId
14 | case password
15 |
16 | var description: String {
17 | return String(describing: self)
18 | }
19 |
20 | var keyChainClass: CFString {
21 | switch self {
22 | case .accessToken:
23 | return kSecClassGenericPassword
24 | case .refreshToken:
25 | return kSecClassGenericPassword
26 | case .userId:
27 | return kSecClassInternetPassword
28 | case .password:
29 | return kSecClassInternetPassword
30 | }
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Domain/KeyChain/KeyChainError.swift:
--------------------------------------------------------------------------------
1 | //
2 | // KeyChainError.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/24.
6 | //
7 |
8 | import Foundation
9 |
10 | enum KeyChainError: LocalizedError {
11 | case unhandledError(status: OSStatus)
12 | case itemNotFound
13 |
14 | var errorDescription: String? {
15 | switch self {
16 | case .unhandledError(let status):
17 | return "KeyChain unhandle Error: \(status)"
18 | case .itemNotFound:
19 | return "KeyChain item Not Found"
20 | }
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Domain/ProfileSetting.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ProfileSetting.swift
3 | // Weekand
4 | //
5 | // Created by Daegeon Choi on 2022/07/21.
6 | //
7 |
8 | import Foundation
9 |
10 | /// 내 프로필 화면 하단 설정
11 | enum ProfileSetting: String {
12 |
13 | case contact = "문의하기"
14 | case accessibility = "접근성"
15 | case password = "비밀번호 변경"
16 |
17 | case logout = "로그아웃"
18 | case signOut = "회원탈퇴"
19 |
20 | var isCritical: Bool {
21 | switch self {
22 | case .contact: return false
23 | case .accessibility: return false
24 | case .password: return false
25 |
26 | case .logout: return true
27 | case .signOut: return true
28 | }
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Domain/ScheduleDetail.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ScheduleDetail.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/28.
6 | //
7 |
8 | import Foundation
9 |
10 | /// 일정 상세 정보
11 | struct ScheduleDetail {
12 |
13 | let scheduleId: String
14 | let category: Category
15 | let name: String
16 | let dateStart: Date
17 | let dateEnd: Date
18 | let repeatType: ScheduleRepeatType
19 | let repeatSelectedValue: [ScheduleWeek]
20 | let repeatEnd: Date?
21 | let memo: String
22 | let dateSkip: [Date]?
23 | let status: Status
24 |
25 | init(model: ScheduleQuery.Data.Schedule) {
26 | self.scheduleId = model.id
27 | self.category = Category(model: model.category)
28 | self.name = model.name
29 | self.dateStart = model.dateTimeStart.toDate()
30 | self.dateEnd = model.dateTimeEnd.toDate()
31 | self.repeatType = model.repeatType.toEntity()
32 | self.repeatSelectedValue = model.repeatSelectedValue.map { $0.toEntity() }
33 | self.repeatEnd = model.repeatEnd?.toDate()
34 | self.memo = model.memo ?? ""
35 | self.dateSkip = model.dateSkip?.map { $0.toDate() }
36 | self.status = model.status.toEntity()
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Domain/ScheduleDetailUseCase.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ScheduleDetailUseCase.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/28.
6 | //
7 |
8 | import Foundation
9 | import RxSwift
10 |
11 | final class ScheduleDetailUseCase {
12 | func schedule(scheduleId: String, requestDate: Date) -> Single {
13 | NetWork.shared.fetch(query: ScheduleQuery(scheduleId: scheduleId, date: requestDate.toTimestamp()),
14 | cachePolicy: .fetchIgnoringCacheCompletely,
15 | queue: .main)
16 | .map { $0.schedule }
17 | .asSingle()
18 | }
19 |
20 | func completeSchedule(scheduleId: String, requestDate: Date) -> Single {
21 | NetWork.shared.perform(mutation: CompleteScheduleMutation(scheduleId: scheduleId, date: requestDate.toTimestamp()))
22 | .map { $0.completeSchedule }
23 | .asSingle()
24 | }
25 |
26 | func incompleteSchedule(scheduleId: String, requestDate: Date) -> Single {
27 | NetWork.shared.perform(mutation: IncompleteScheduleMutation(scheduleId: scheduleId, date: requestDate.toTimestamp()))
28 | .map { $0.incompleteSchedule }
29 | .asSingle()
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Domain/ScheduleInputModel.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ScheduleInputModel.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/22.
6 | //
7 |
8 | import Foundation
9 |
10 | struct ScheduleInputModel {
11 | let name: String
12 | let categoryId: String
13 | let dateStart: Date
14 | let dateEnd: Date
15 | let repeatType: ScheduleRepeatType
16 | let repeatSelectedValue: [ScheduleWeek]?
17 | let repeatEnd: Date?
18 | let memo: String?
19 | }
20 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Domain/ScheduleRule.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ScheduleDetail.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/26.
6 | //
7 |
8 | import Foundation
9 |
10 | /// 일정 상세 정보
11 | struct ScheduleRule {
12 |
13 | let scheduleId: String
14 | let category: Category
15 | let name: String
16 | let dateStart: Date
17 | let dateEnd: Date
18 | let repeatType: ScheduleRepeatType
19 | let repeatSelectedValue: [ScheduleWeek]
20 | let repeatEnd: Date?
21 | let memo: String
22 |
23 | init(model: ScehduleRuleQuery.Data.ScheduleRule) {
24 |
25 | self.scheduleId = model.id
26 | self.category = Category(model: model.category)
27 | self.name = model.name
28 | self.dateStart = model.dateTimeStart.toDate()
29 | self.dateEnd = model.dateTimeEnd.toDate()
30 | self.repeatType = model.repeatType.toEntity()
31 | self.repeatSelectedValue = model.repeatSelectedValue.map { $0.toEntity() }
32 | self.repeatEnd = model.repeatEnd?.toDate()
33 | self.memo = model.memo ?? ""
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Domain/ScheduleUpdateModel.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ScheduleUpdateModel.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/27.
6 | //
7 |
8 | import Foundation
9 |
10 | struct ScheduleUpdateModel {
11 | let scheduleId: String
12 | let requestDateTime: Date
13 | let name: String
14 | let categoryId: String
15 | let dateStart: Date
16 | let dateEnd: Date
17 | let repeatType: ScheduleRepeatType
18 | let repeatSelectedValue: [ScheduleWeek]?
19 | let repeatEnd: Date?
20 | let memo: String?
21 | }
22 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Domain/ScheduleWeek.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ScheduleWeek.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/22.
6 | //
7 |
8 | import Foundation
9 |
10 | enum ScheduleWeek: CaseIterable {
11 | case sunday, monday, tuesday, wednesday, thursday, friday, saturday
12 |
13 | var description: String {
14 | switch self {
15 | case .sunday:
16 | return "일"
17 | case .monday:
18 | return "월"
19 | case .tuesday:
20 | return "화"
21 | case .wednesday:
22 | return "수"
23 | case .thursday:
24 | return "목"
25 | case .friday:
26 | return "금"
27 | case .saturday:
28 | return "토"
29 | }
30 | }
31 | }
32 |
33 | extension ScheduleWeek {
34 | func toModel() -> Week {
35 | switch self {
36 | case .sunday:
37 | return Week.sunday
38 | case .monday:
39 | return Week.monday
40 | case .tuesday:
41 | return Week.tuesday
42 | case .wednesday:
43 | return Week.wednesday
44 | case .thursday:
45 | return Week.thursday
46 | case .friday:
47 | return Week.friday
48 | case .saturday:
49 | return Week.saturday
50 | }
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Domain/StickerSummary.swift:
--------------------------------------------------------------------------------
1 | //
2 | // StickerSummary.swift
3 | // Weekand
4 | //
5 | // Created by Daegeon Choi on 2022/07/28.
6 | //
7 |
8 | import Foundation
9 |
10 | /// 스티커 데이터 (전체)
11 | struct StickerSummary {
12 |
13 | let totalCount: Int
14 | let scheduleStickers: [Emoji: Int]
15 | let scheduleStickerUser: [EmojiGiver]
16 | }
17 |
18 | extension StickerSummary {
19 |
20 | init(model: StickerSummaryQuery.Data.ScheduleStickerSummary) {
21 | totalCount = model.totalCount
22 |
23 | var stickers: [Emoji: Int] = [:]
24 | model.scheduleStickers.forEach {
25 | guard let emoji = Emoji(rawValue: $0.name.rawValue) else { return }
26 | stickers[emoji] = $0.stickerCount
27 | }
28 | scheduleStickers = stickers
29 |
30 | scheduleStickerUser = model.scheduleStickerUsers.map {
31 |
32 | EmojiGiver(userId: $0.user.id, name: $0.user.nickname, imagePath: $0.user.profileImageUrl, emoji: Emoji(rawValue: $0.stickerName.rawValue) ?? Emoji.good)
33 | }
34 |
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Domain/UseCase/Main/SearchUseCase.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SearchUseCase.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/19.
6 | //
7 |
8 | import Foundation
9 | import RxSwift
10 |
11 | final class SearchUseCase {
12 | func SearchUsers(searchQuery: String, jobs: [String], interests: [String], sort: UserSort, page: Int, size: Int)
13 | -> Single {
14 | NetWork.shared.fetch(
15 | query: SearchUsersQuery(searchQuery: searchQuery, jobs: jobs, interests: interests, sort: sort.toModel(), page: page, size: size),
16 | cachePolicy: .fetchIgnoringCacheCompletely,
17 | queue: DispatchQueue.main)
18 | .map { $0.searchUsers }
19 | .asSingle()
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Domain/UseCase/Sign/SignInUseCase.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SignInUseCase.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/08.
6 | //
7 |
8 | import Foundation
9 | import RxSwift
10 |
11 | typealias Tokens = LoginQuery.Data.Login
12 |
13 | final class SignInUseCase {
14 |
15 | func login(email: String, password: String) -> Single {
16 | return NetWork.shared
17 | .fetch(query: LoginQuery(email: email, password: password), cachePolicy: .fetchIgnoringCacheCompletely, queue: DispatchQueue.main)
18 | .map {
19 | Tokens(refreshToken: $0.login.refreshToken, accessToken: $0.login.accessToken)
20 | }
21 | .asSingle()
22 | }
23 |
24 | func issueTempPassword(email: String) -> Single {
25 | return NetWork.shared
26 | .perform(mutation: IssueTempPasswordMutation(email: email))
27 | .map {
28 | $0.issueTempPassword
29 | }
30 | .asSingle()
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Domain/UserDetail.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UserDetail.swift
3 | // Weekand
4 | //
5 | // Created by Daegeon Choi on 2022/07/22.
6 | //
7 |
8 | import Foundation
9 |
10 | struct UserDetail {
11 |
12 | static let defaultData = UserDetail(userId: "", email: "", name: "", goal: "", imagePath: "", followee: 0, follower: 0, job: [], interest: [], followed: false)
13 |
14 | let userId: String // 유저 id
15 | let email: String // 유저 이메일
16 | let name: String // 유저 이름
17 | let goal: String // 한줄 목표
18 | let imagePath: String // 프로필 사진
19 | let followee: Int // 팔로워
20 | let follower: Int // 팔로잉
21 | let job: [String] // 직업
22 | let interest: [String] // 관심사
23 | let followed: Bool // 팔로우 여부
24 | }
25 |
26 | extension UserDetail {
27 |
28 | init (model: UserDetailQuery.Data.User) {
29 | userId = model.id
30 | email = model.email
31 | name = model.nickname
32 | goal = model.goal ?? ""
33 | imagePath = model.profileImageUrl
34 | followee = model.followeeCount
35 | follower = model.followerCount
36 | job = model.jobs
37 | interest = model.interests
38 | followed = model.followed
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Domain/UserUpdate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UserUpdate.swift
3 | // Weekand
4 | //
5 | // Created by Daegeon Choi on 2022/07/23.
6 | //
7 |
8 | import Foundation
9 |
10 | /// 유저 정보 업데이트에 사용
11 | struct UserUpdate {
12 |
13 | let name: String? // 유저 이름
14 | let goal: String? // 한줄 목표
15 | var imageFileName: String? // 프로필 사진
16 | let job: [String] // 직업
17 | let interest: [String] // 관심사
18 | }
19 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/Apollo/Interceptor/RefreshTokenInterceptor.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RefreshTokenInterceptor.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/24.
6 | //
7 |
8 | import Apollo
9 | import RxSwift
10 |
11 | class RefreshTokenInterceptor: ApolloInterceptor {
12 |
13 | func interceptAsync(chain: RequestChain, request: HTTPRequest, response: HTTPResponse?, completion: @escaping (Result, Error>) -> Void) where Operation: GraphQLOperation {
14 | if let response = response {
15 |
16 | if let error = response.parsedResponse?.errors?.first,
17 | error.description == NetworkError.expiredToken.errorDescription {
18 | TokenManager.shared.isExpired = true
19 | TokenManager.shared.reissue { result in
20 | switch result {
21 | case .success:
22 | chain.retry(request: request, completion: completion)
23 | case .failure(let error):
24 | chain.handleErrorAsync(error, request: request, response: response, completion: completion)
25 | }
26 | }
27 | } else {
28 | chain.proceedAsync(request: request,
29 | response: response,
30 | completion: completion)
31 | }
32 | }
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/Apollo/Interceptor/RequestLoggingInterceptor.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RequestLoggingInterceptor.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/29.
6 | //
7 |
8 | import Apollo
9 | import OSLog
10 |
11 | class RequestLoggingInterceptor: ApolloInterceptor {
12 |
13 | func interceptAsync(
14 | chain: RequestChain,
15 | request: HTTPRequest,
16 | response: HTTPResponse?,
17 | completion: @escaping (Result, Error>) -> Void) {
18 |
19 | let logger = Logger()
20 | logger.log(level: .debug, "Outgoing request: \(String(describing: request))")
21 |
22 | chain.proceedAsync(request: request,
23 | response: response,
24 | completion: completion)
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/Apollo/NetworkInterceptorProvider.swift:
--------------------------------------------------------------------------------
1 | //
2 | // NetworkInterceptorProvider.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/08.
6 | //
7 |
8 | import Foundation
9 | import Apollo
10 |
11 | class NetworkInterceptorProvider: InterceptorProvider {
12 |
13 | private let store: ApolloStore
14 | private let client: URLSessionClient
15 |
16 | init(store: ApolloStore,
17 | client: URLSessionClient) {
18 | self.store = store
19 | self.client = client
20 | }
21 |
22 | func interceptors(for operation: Operation) -> [ApolloInterceptor] {
23 | return [
24 | MaxRetryInterceptor(),
25 | CacheReadInterceptor(store: self.store),
26 | TokenAddingInterceptor(),
27 | RequestLoggingInterceptor(),
28 | NetworkFetchInterceptor(client: self.client),
29 | ResponseLoggingInterceptor(),
30 | ResponseCodeInterceptor(),
31 | JSONResponseParsingInterceptor(cacheKeyForObject: self.store.cacheKeyForObject),
32 | RefreshTokenInterceptor(),
33 | AutomaticPersistedQueryInterceptor(),
34 | CacheWriteInterceptor(store: self.store)
35 | ]
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/Apollo/Timestamp.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Timestamp.swift
3 | // Weekand
4 | //
5 | // Created by Daegeon Choi on 2022/07/20.
6 | //
7 |
8 | import Foundation
9 | import Apollo
10 |
11 | public typealias Timestamp = Int64
12 |
13 | extension Timestamp: JSONDecodable, JSONEncodable {
14 |
15 | public var jsonValue: JSONValue {
16 | return Int64(self)
17 | }
18 |
19 | public init(jsonValue value: JSONValue) throws {
20 |
21 | guard let timestamp = value as? Int64 else {
22 | throw JSONDecodingError.couldNotConvert(value: value, to: Date.self)
23 | }
24 |
25 | self = Int64(timestamp)
26 | }
27 |
28 | }
29 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/Error/CategoryError.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CategoryError.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/19.
6 | //
7 |
8 | import Foundation
9 |
10 | enum CategoryError {
11 | case duplicatedName
12 | case minimumCategoryCount
13 |
14 | var serverDescription: String? {
15 | switch self {
16 | case .minimumCategoryCount:
17 | return "최소 2개 이상의 카테고리가 존재할 시 삭제 가능합니다."
18 | case .duplicatedName:
19 | return "해당 카테고리명은 이미 사용중입니다."
20 | }
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/Error/NetworkError.swift:
--------------------------------------------------------------------------------
1 | //
2 | // NetworkError.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/23.
6 | //
7 |
8 | import Foundation
9 |
10 | enum NetworkError: LocalizedError {
11 | case expiredToken
12 |
13 | var errorDescription: String? {
14 | switch self {
15 | case .expiredToken:
16 | return "유효기간이 만료된 JWT입니다."
17 | }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/Error/ScheduleEditError.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ScheduleEditError.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/29.
6 | //
7 |
8 | import Foundation
9 |
10 | enum ScheduleEditError {
11 | case startEndTimeEqually
12 |
13 | var serverDescription: String? {
14 | switch self {
15 | case .startEndTimeEqually:
16 | return "시작 일시와 종료 일시를 확인해주세요."
17 | }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/Error/SignInError.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SignInError.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/26.
6 | //
7 |
8 | import Foundation
9 |
10 | enum SignInError {
11 | case notFoundUser
12 | case notMatchIdPassword
13 |
14 | var serverDescription: String {
15 | switch self {
16 | case .notFoundUser:
17 | return "존재하지 않는 유저입니다."
18 | case .notMatchIdPassword:
19 | return "이메일, 비밀번호가 일치하지 않습니다."
20 | }
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/Error/SignUpError.swift:
--------------------------------------------------------------------------------
1 | //
2 | // NetworkError.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/10.
6 | //
7 |
8 | import Foundation
9 |
10 | enum SignUpError: LocalizedError {
11 | case duplicatedError
12 |
13 | var errorDescription: String? {
14 | switch self {
15 | case .duplicatedError:
16 | return "이미 등록된 이메일입니다."
17 | }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/ImageUploader.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ImageUploader.swift
3 | // Weekand
4 | //
5 | // Created by Daegeon Choi on 2022/07/29.
6 | //
7 |
8 | import Foundation
9 | import UIKit
10 |
11 | final class ImageUploader {
12 |
13 | func uploadImage(image: UIImage, url: String, filename: String) {
14 |
15 | let url = URL(string: url)
16 | let session = URLSession.shared
17 |
18 | var urlRequest = URLRequest(url: url!)
19 | urlRequest.httpMethod = "PUT"
20 | urlRequest.setValue("image/png", forHTTPHeaderField: "Content-Type")
21 | urlRequest.httpBody = image.pngData()!
22 |
23 | let task = session.dataTask(with: urlRequest) { data, response, error in
24 |
25 | if error == nil {
26 | print("\(#function): success")
27 |
28 | } else {
29 | print("\(#function): \(String(describing: error))")
30 | }
31 | }
32 |
33 | task.resume()
34 |
35 |
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/Query/CompleteSchedule.graphql:
--------------------------------------------------------------------------------
1 | mutation CompleteSchedule($scheduleId: ID!, $date: Timestamp!) {
2 | completeSchedule(input: {
3 | scheduleId: $scheduleId,
4 | date: $date
5 | })
6 | }
7 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/Query/CreateCategory.graphql:
--------------------------------------------------------------------------------
1 | mutation CreateCategory($name: String!, $color: String!, $openType: ScheduleCategoryOpenType!) {
2 | createCategory(scheduleCategoryInput: {
3 | name: $name,
4 | color: $color,
5 | openType: $openType
6 | })
7 | }
8 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/Query/CreateFollowee.graphql:
--------------------------------------------------------------------------------
1 | mutation CreateFollowee($id: ID!) {
2 | createFollow(input: { targetUserId: $id })
3 | }
4 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/Query/CreateImageUrl.graphql:
--------------------------------------------------------------------------------
1 | mutation createImageUrl($type: UserProfileImageExtensionType!) {
2 | createUserProfileImageS3PresignedUrl(input: { extension: $type }) {
3 | url
4 | filename
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/Query/CreateSchedule.graphql:
--------------------------------------------------------------------------------
1 | mutation CreateSchedule($input: ScheduleInput!) {
2 | createSchedule(input: $input)
3 | }
4 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/Query/CreateSticker.graphql:
--------------------------------------------------------------------------------
1 | mutation CreateSticker($id: ID!, $sticker: ScheduleStickerName!, $date: Timestamp!) {
2 | createScheduleSticker(input: {
3 | scheduleId: $id,
4 | scheduleStickerName: $sticker,
5 | scheduleDate: $date
6 | })
7 | }
8 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/Query/DeleteFollowee.graphql:
--------------------------------------------------------------------------------
1 | mutation DeleteFollowee($id: ID!) {
2 | deleteFollowee(input: { targetUserId: $id })
3 | }
4 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/Query/DeleteFollower.graphql:
--------------------------------------------------------------------------------
1 | mutation DeleteFollower($id: ID!) {
2 | deleteFollower(input: { targetUserId: $id })
3 | }
4 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/Query/DeleteSchedule.graphql:
--------------------------------------------------------------------------------
1 | mutation DeleteSchedule($scheduleId: ID!) {
2 | deleteSchedule(input: {
3 | scheduleId: $scheduleId
4 | })
5 | }
6 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/Query/DeleteScheduleFromDate.graphql:
--------------------------------------------------------------------------------
1 | mutation DeleteScheduleFromDate($scheduleId: ID!, $date: Timestamp!) {
2 | deleteScheduleFromDate(input: {
3 | scheduleId: $scheduleId
4 | date: $date
5 | })
6 | }
7 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/Query/DeleteUser.graphql:
--------------------------------------------------------------------------------
1 | mutation DeleteUser {
2 | deleteUser
3 | }
4 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/Query/Followees.graphql:
--------------------------------------------------------------------------------
1 | query Followees($page: Int!, $size: Int!) {
2 | followees(page: $page, size: $size) {
3 | paginationInfo {
4 | hasNext
5 | }
6 | followees {
7 | id
8 | nickname
9 | profileImageUrl
10 | }
11 | }
12 | }
13 |
14 | query UserFollowees($id: ID, $page: Int!, $size: Int!) {
15 | followees(userId: $id, page: $page, size: $size) {
16 | paginationInfo {
17 | hasNext
18 | }
19 | followees {
20 | id
21 | nickname
22 | profileImageUrl
23 | goal
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/Query/Followers.graphql:
--------------------------------------------------------------------------------
1 | query Followers($page: Int!, $size: Int!) {
2 | followers(page: $page, size: $size) {
3 | paginationInfo {
4 | hasNext
5 | }
6 | followers {
7 | id
8 | nickname
9 | profileImageUrl
10 | }
11 | }
12 | }
13 |
14 | query UserFollowers($id: ID, $page: Int!, $size: Int!) {
15 | followers(userId: $id, page: $page, size: $size) {
16 | paginationInfo {
17 | hasNext
18 | }
19 | followers {
20 | id
21 | nickname
22 | profileImageUrl
23 | goal
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/Query/IncompleteSchedule.graphql:
--------------------------------------------------------------------------------
1 | mutation IncompleteSchedule($scheduleId: ID!, $date: Timestamp!) {
2 | incompleteSchedule(input: {
3 | scheduleId: $scheduleId,
4 | date: $date
5 | })
6 | }
7 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/Query/Login.graphql:
--------------------------------------------------------------------------------
1 | query Login($email: String!, $password: String!) {
2 | login(loginInput: {
3 | email: $email,
4 | password: $password
5 | }){
6 | refreshToken,
7 | accessToken
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/Query/Logout.graphql:
--------------------------------------------------------------------------------
1 | mutation Logout {
2 | logout
3 | }
4 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/Query/MyStickerAdded.graphql:
--------------------------------------------------------------------------------
1 | query MyStickerAdded($id: ID!, $date: Timestamp!) {
2 | scheduleStickerSummary(scheduleId: $id, selectedDate: $date) {
3 | myScheduleSticker {
4 | stickerName
5 | }
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/Query/Notification.graphql:
--------------------------------------------------------------------------------
1 | query Notification($page: Int!, $size: Int!) {
2 | notifications(page: $page, size: $size) {
3 | paginationInfo {
4 | hasNext
5 | }
6 | notifications {
7 | id
8 | message
9 | type
10 | }
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/Query/Reissue.graphql:
--------------------------------------------------------------------------------
1 | query Reissue {
2 | reissue {
3 | accessToken
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/Query/ScehduleRule.graphql:
--------------------------------------------------------------------------------
1 | query ScehduleRule($scheduleId: ID!) {
2 | scheduleRule(scheduleId: $scheduleId) {
3 | id
4 | name
5 | category {
6 | id
7 | name
8 | color
9 | openType
10 | }
11 | dateTimeStart
12 | dateTimeEnd
13 | repeatType
14 | repeatSelectedValue
15 | repeatEnd
16 | memo
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/Query/Schedule.graphql:
--------------------------------------------------------------------------------
1 | query Schedule($scheduleId: ID!, $date: Timestamp!) {
2 | schedule(scheduleId: $scheduleId, date: $date) {
3 | id
4 | name
5 | category {
6 | id
7 | name
8 | color
9 | openType
10 | }
11 | dateTimeStart
12 | dateTimeEnd
13 | repeatType
14 | repeatSelectedValue
15 | repeatEnd
16 | memo
17 | dateSkip
18 | status
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/Query/ScheduleCategories.graphql:
--------------------------------------------------------------------------------
1 | query ScheduleCategories($sort: ScheduleCategorySort!, $page: Int!, $size: Int!) {
2 | scheduleCategories(sort: $sort, page: $page, size: $size) {
3 | paginationInfo {
4 | hasNext
5 | }
6 | scheduleCategories {
7 | id
8 | name
9 | color
10 | openType
11 | }
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/Query/SearchSchedules.graphql:
--------------------------------------------------------------------------------
1 | query searchSchedules($sort: ScheduleCategorySort!, $page: Int!, $size: Int!, $searchQuery: String, $categoryId: ID!) {
2 | searchSchedules(sort: $sort, page: $page, size: $size, searchQuery: $searchQuery, categoryId: $categoryId) {
3 | paginationInfo{
4 | hasNext
5 | }
6 | schedules {
7 | id
8 | name
9 | category {
10 | id
11 | color
12 | }
13 | dateTimeStart
14 | dateTimeEnd
15 | repeatType
16 | repeatSelectedValue
17 | }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/Query/SearchUsers.graphql:
--------------------------------------------------------------------------------
1 | query SearchUsers($searchQuery: String, $jobs: [String!], $interests: [String!], $sort: SearchUserSort, $page: Int!, $size: Int!) {
2 | searchUsers(searchQuery: $searchQuery, jobs: $jobs, interests: $interests, sort: $sort, page: $page, size: $size) {
3 | paginationInfo {
4 | hasNext
5 | }
6 | users {
7 | id
8 | profileImageUrl
9 | nickname
10 | goal
11 | }
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/Query/SendContact.graphql:
--------------------------------------------------------------------------------
1 | mutation SendContact($message: String!) {
2 | inquiry(contents: $message)
3 | }
4 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/Query/SignUp.graphql:
--------------------------------------------------------------------------------
1 | mutation SignUp($signUpInput: SignUpInput!) {
2 | signUp(signUpInput: $signUpInput)
3 | }
4 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/Query/SkipSchedule.graphql:
--------------------------------------------------------------------------------
1 | mutation SkipSchedule($scheduleId: ID!, $date: Timestamp!) {
2 | skipSchedule(input: {
3 | scheduleId: $scheduleId
4 | date: $date
5 | })
6 | }
7 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/Query/StickerSummary.graphql:
--------------------------------------------------------------------------------
1 | query StickerSummary($id: ID!, $date: Timestamp!) {
2 | scheduleStickerSummary(scheduleId: $id, selectedDate: $date) {
3 | totalCount
4 | scheduleStickers {
5 | name
6 | stickerCount
7 | }
8 | scheduleStickerUsers {
9 | user {
10 | id
11 | nickname
12 | profileImageUrl
13 | }
14 | stickerName
15 | }
16 | myScheduleSticker {
17 | user {
18 | id
19 | nickname
20 | profileImageUrl
21 | }
22 | stickerName
23 | }
24 |
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/Query/UpdateCategory.graphql:
--------------------------------------------------------------------------------
1 | mutation UpdateCategory($categoryId: ID!, $scheduleCategoryInput: ScheduleCategoryInput!) {
2 | updateCategory(categoryId: $categoryId, scheduleCategoryInput: $scheduleCategoryInput) {
3 | name
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/Query/UpdatePassword.graphql:
--------------------------------------------------------------------------------
1 | mutation UpdatePassword($old: String!, $new: String!) {
2 | updatePassword(passwordInput: { oldPassword: $old, newPassword: $new })
3 | }
4 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/Query/UpdateSchedule.graphql:
--------------------------------------------------------------------------------
1 | mutation UpdateSchedule($input: UpdateScheduleInput!) {
2 | updateSchedule(input: $input)
3 | }
4 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/Query/UpdateUserDetail.graphql:
--------------------------------------------------------------------------------
1 | mutation UpdateUserDetail($imageName: String!, $nickname: String!, $goal: String!, $jobs: [String!]!, $interests: [String!]!) {
2 | updateUserProfile(input: {
3 | profileImageFilename: $imageName,
4 | nickname: $nickname,
5 | goal: $goal,
6 | jobs: $jobs,
7 | interests: $interests
8 | }) {
9 | id
10 | email
11 | nickname
12 | profileImageUrl
13 | goal
14 | followeeCount
15 | followerCount
16 | jobs
17 | interests
18 | followed
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/Query/UserDetail.graphql:
--------------------------------------------------------------------------------
1 | query UserDetail($id: ID) {
2 | user(id: $id) {
3 | id
4 | email
5 | nickname
6 | profileImageUrl
7 | goal
8 | followerCount
9 | followeeCount
10 | jobs
11 | interests
12 | followed
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/Query/UserSummary.graphql:
--------------------------------------------------------------------------------
1 | query UserSummary($id: ID) {
2 | user(id: $id) {
3 | id
4 | nickname
5 | profileImageUrl
6 | goal
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/Query/checkDuplicateNickname.graphql:
--------------------------------------------------------------------------------
1 | query checkDuplicateNickname($nickname: String!) {
2 | checkDuplicateNickname(nickname: $nickname)
3 | }
4 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/Query/deleteCategory.graphql:
--------------------------------------------------------------------------------
1 | mutation deleteCategory($categoryId: ID!) {
2 | deleteCategory(input: {
3 | scheduleCategoryId: $categoryId
4 | })
5 | }
6 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/Query/issueTempPassword.graphql:
--------------------------------------------------------------------------------
1 | mutation issueTempPassword($email: String!) {
2 | issueTempPassword(input: {
3 | email: $email
4 | })
5 | }
6 |
7 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/Query/scheduleList.graphql:
--------------------------------------------------------------------------------
1 | query ScheduleList($date: Timestamp!, $id: ID) {
2 | schedules(date: $date, userId: $id) {
3 | paginationInfo {
4 | hasNext
5 | }
6 | schedules {
7 | id
8 | name
9 | status
10 | category {
11 | color
12 | }
13 | dateTimeStart
14 | dateTimeEnd
15 | stickerCount
16 | stickerNames
17 | repeatType
18 | }
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/Query/sendAuthKey.graphql:
--------------------------------------------------------------------------------
1 | query sendAuthKey($email: String!) {
2 | sendAuthKey(email: $email)
3 | }
4 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/Query/vaildAuthKey.graphql:
--------------------------------------------------------------------------------
1 | query vaildAuthKey($authKey: String!, $email: String!) {
2 | validAuthKey(validAuthKeyInput: {
3 | authKey: $authKey,
4 | email: $email
5 | })
6 | }
7 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/RefreshTokenInterceptor.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RefreshTokenInterceptor.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/24.
6 | //
7 |
8 | import Apollo
9 | import RxSwift
10 |
11 | class RefreshTokenInterceptor: ApolloInterceptor {
12 |
13 | func interceptAsync(chain: RequestChain, request: HTTPRequest, response: HTTPResponse?, completion: @escaping (Result, Error>) -> Void) where Operation: GraphQLOperation {
14 | if let response = response {
15 |
16 | if let error = response.parsedResponse?.errors?.first,
17 | error.description == NetworkError.expiredToken.errorDescription {
18 | TokenManager.shared.isExpired = true
19 | TokenManager.shared.reissue { result in
20 | switch result {
21 | case .success:
22 | chain.retry(request: request, completion: completion)
23 | case .failure(let error):
24 | chain.handleErrorAsync(error, request: request, response: response, completion: completion)
25 | }
26 | }
27 | } else {
28 | chain.proceedAsync(request: request,
29 | response: response,
30 | completion: completion)
31 | }
32 | }
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/RequestLoggingInterceptor.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RequestLoggingInterceptor.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/29.
6 | //
7 |
8 | import Apollo
9 | import OSLog
10 |
11 | class RequestLoggingInterceptor: ApolloInterceptor {
12 |
13 | func interceptAsync(
14 | chain: RequestChain,
15 | request: HTTPRequest,
16 | response: HTTPResponse?,
17 | completion: @escaping (Result, Error>) -> Void) {
18 |
19 | let logger = Logger()
20 | logger.log(level: .debug, "Outgoing request: \(String(describing: request))")
21 |
22 | chain.proceedAsync(request: request,
23 | response: response,
24 | completion: completion)
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Networking/Timestamp.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Timestamp.swift
3 | // Weekand
4 | //
5 | // Created by Daegeon Choi on 2022/07/20.
6 | //
7 |
8 | import Foundation
9 | import Apollo
10 |
11 | public typealias Timestamp = Int64
12 |
13 | extension Timestamp: JSONDecodable, JSONEncodable {
14 |
15 | public var jsonValue: JSONValue {
16 | return Int64(self)
17 | }
18 |
19 | public init(jsonValue value: JSONValue) throws {
20 |
21 | guard let timestamp = value as? Int64 else {
22 | throw JSONDecodingError.couldNotConvert(value: value, to: Date.self)
23 | }
24 |
25 | self = Int64(timestamp)
26 | }
27 |
28 | }
29 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/Common/Coordinator/Coordinator.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Coordinator.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/05/31.
6 | //
7 |
8 | import Foundation
9 | import UIKit
10 |
11 | protocol Coordinator {
12 | var childCoordinators: [Coordinator] { get set }
13 | var navigationController: UINavigationController { get set }
14 | var type: CoordinatorType { get }
15 |
16 | func start()
17 | }
18 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/Common/Coordinator/CoordinatorDidFinishDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CoordinatorDidFinishDelegate.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/06/21.
6 | //
7 |
8 | import Foundation
9 |
10 | protocol CoordinatorDidFinishDelegate: AnyObject {
11 | func childDidFinish(_ child: Coordinator)
12 | }
13 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/Common/Coordinator/CoordinatorType.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CoordinatorType.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/06/03.
6 | //
7 |
8 | import Foundation
9 |
10 | enum CoordinatorType {
11 | // Common
12 | case app
13 | case simplePopup
14 | case warningPopup
15 | case alertPopup
16 |
17 | // Sign Scene
18 | case welcome
19 | case signIn
20 | case signUp
21 | case passwordFind
22 |
23 | // Main Scene
24 | case main
25 | case category
26 | case categoryAdd
27 | case categoryModify
28 | case scheduleAdd
29 | case scheduleModify
30 | case scheduleDetail
31 | case userSearch
32 | case profile
33 | }
34 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/Common/View/WArrowButton.swift:
--------------------------------------------------------------------------------
1 | //
2 | // WArrowButton.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/04.
6 | //
7 |
8 | import UIKit
9 |
10 | class WArrowButton: UIButton {
11 |
12 | override init(frame: CGRect) {
13 | super.init(frame: frame)
14 | setUpView()
15 | }
16 |
17 | required init?(coder aDecoder: NSCoder) {
18 | super.init(coder: aDecoder)
19 | setUpView()
20 | }
21 |
22 | func setUpView() {
23 | backgroundColor?.withAlphaComponent(0)
24 | let buttonImage = UIImage(named: "arrow.down")?.withTintColor(.gray700)
25 | setImage(buttonImage, for: .normal)
26 | }
27 |
28 | }
29 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/Common/View/WCheckBox.swift:
--------------------------------------------------------------------------------
1 | //
2 | // WCheckBox.swift
3 | // Weekand
4 | //
5 | // Created by Daegeon Choi on 2022/05/25.
6 | //
7 |
8 | import UIKit
9 |
10 | class WCheckBox: UIButton {
11 |
12 | let checkedImage = UIImage(named: "checkmark.fill")!.withTintColor(.mainColor)
13 | let uncheckedImage = UIImage(named: "checkmark.fill")!.withTintColor(.gray300)
14 |
15 | var isChecked: Bool = false {
16 | didSet {
17 | if isChecked == true {
18 | self.setImage(checkedImage, for: .normal)
19 | } else {
20 | self.setImage(uncheckedImage, for: .normal)
21 | }
22 | }
23 | }
24 |
25 | override init(frame: CGRect) {
26 | super.init(frame: frame)
27 |
28 | }
29 |
30 | required init?(coder aDecoder: NSCoder) {
31 | super.init(coder: aDecoder)
32 |
33 | }
34 |
35 | init(isChecked: Bool) {
36 | super.init(frame: CGRect.zero)
37 |
38 | setUpView(isChecked: isChecked)
39 | }
40 |
41 | convenience init() {
42 | self.init(isChecked: false)
43 | }
44 |
45 | private func setUpView(isChecked: Bool) {
46 | self.isChecked = isChecked
47 | }
48 |
49 | }
50 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/Common/View/WMultiLineTextLabel.swift:
--------------------------------------------------------------------------------
1 | //
2 | // WMultiLineTextLabel.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/25.
6 | //
7 |
8 | import UIKit
9 |
10 | class WMultiLineTextLabel: UILabel {
11 |
12 | override init(frame: CGRect) {
13 | super.init(frame: frame)
14 | setupView()
15 | }
16 |
17 | required init?(coder aDecoder: NSCoder) {
18 | super.init(coder: aDecoder)
19 | setupView()
20 | }
21 |
22 | func setupView() {
23 | font = WFont.body1()
24 | numberOfLines = 0
25 | }
26 |
27 | func setText(string: String) {
28 | let paragraphStyle = NSMutableParagraphStyle()
29 | paragraphStyle.lineHeightMultiple = 1.33
30 | let attrString = NSMutableAttributedString(string: string, attributes: [NSAttributedString.Key.paragraphStyle: paragraphStyle])
31 | attributedText = attrString
32 | }
33 |
34 | }
35 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/Common/View/WSquareImageView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // WSquareImageView.swift
3 | // Weekand
4 | //
5 | // Created by Daegeon Choi on 2022/05/31.
6 | //
7 |
8 | import UIKit
9 | import SnapKit
10 |
11 | class WSquareImageView: UIImageView {
12 |
13 | override init(frame: CGRect) {
14 | super.init(frame: frame)
15 | setupView()
16 | }
17 |
18 | required init?(coder aDecoder: NSCoder) {
19 | super.init(coder: aDecoder)
20 | setupView()
21 | }
22 |
23 |
24 | init() {
25 | super.init(frame: CGRect.zero)
26 | setupView()
27 | }
28 |
29 |
30 | private func setupView() {
31 |
32 | self.snp.makeConstraints { make in
33 | make.width.equalTo(self.snp.height)
34 | }
35 | }
36 |
37 | }
38 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/Common/View/WTextButton.swift:
--------------------------------------------------------------------------------
1 | //
2 | // WTextButton.swift
3 | // Weekand
4 | //
5 | // Created by Daegeon Choi on 2022/05/25.
6 | //
7 |
8 | import UIKit
9 |
10 | class WTextButton: UIButton {
11 |
12 | override init(frame: CGRect) {
13 | super.init(frame: frame)
14 |
15 | }
16 |
17 | required init?(coder aDecoder: NSCoder) {
18 | super.init(coder: aDecoder)
19 |
20 | }
21 |
22 | init(title: String) {
23 | super.init(frame: CGRect.zero)
24 |
25 | let titleString = NSAttributedString(string: title, attributes: [NSAttributedString.Key.foregroundColor: UIColor.darkGray!, NSAttributedString.Key.font: WFont.body2()])
26 | self.setAttributedTitle(titleString, for: .normal)
27 | }
28 |
29 |
30 | }
31 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/Common/View/WTextFieldStackView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // WTextFieldStackView.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/06/11.
6 | //
7 |
8 | import UIKit
9 |
10 | class WTextFieldStackView: UIStackView {
11 |
12 | lazy var namelabel = WTextLabel().then {
13 | $0.textColor = UIColor.gray800
14 | }
15 |
16 | let textField = WTextField()
17 |
18 | override init(frame: CGRect) {
19 | super.init(frame: frame)
20 | setupView()
21 | }
22 |
23 | required init(coder: NSCoder) {
24 | super.init(coder: coder)
25 | setupView()
26 | }
27 |
28 | private func setupView() {
29 | self.axis = .vertical
30 | self.distribution = .fill
31 | self.alignment = .fill
32 | self.spacing = 10
33 |
34 | [namelabel, textField].forEach { self.addArrangedSubview($0) }
35 | }
36 |
37 | init(fieldPlaceholder: String, nameText: String) {
38 | super.init(frame: CGRect.zero)
39 |
40 | self.namelabel.text = nameText
41 | self.textField.attributedPlaceholder = NSAttributedString(string: fieldPlaceholder, attributes: [NSAttributedString.Key.foregroundColor: UIColor.darkGray!])
42 | setupView()
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/Common/View/WTextLabel.swift:
--------------------------------------------------------------------------------
1 | //
2 | // WTextLabel.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/05/24.
6 | //
7 |
8 | import UIKit
9 |
10 | class WTextLabel: UILabel {
11 |
12 | override init(frame: CGRect) {
13 | super.init(frame: frame)
14 | setupView()
15 | }
16 |
17 | required init?(coder aDecoder: NSCoder) {
18 | super.init(coder: aDecoder)
19 | setupView()
20 | }
21 |
22 | func setupView() {
23 | font = WFont.body2()
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/Common/View/WTextView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // WTextView.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/05.
6 | //
7 |
8 | import UIKit
9 |
10 | class WTextView: UITextView {
11 |
12 | var placeHolder = ""
13 |
14 | override init(frame: CGRect, textContainer: NSTextContainer?) {
15 | super.init(frame: frame, textContainer: textContainer)
16 | setupView()
17 | }
18 |
19 | required init?(coder aDecoder: NSCoder) {
20 | super.init(coder: aDecoder)
21 | setupView()
22 | }
23 |
24 | private func setupView() {
25 | // Scroll
26 | self.isScrollEnabled = false
27 |
28 | // Shape
29 | self.layer.cornerRadius = defaultCornerRadius
30 | self.backgroundColor = .gray200
31 |
32 | // Main Text
33 | self.font = WFont.body1()
34 | self.textColor = .gray900
35 | self.textContainerInset = UIEdgeInsets(top: 14, left: 14, bottom: 14, right: 14)
36 | }
37 |
38 | func setPlaceHolder(_ text: String) {
39 | placeHolder = text
40 | self.text = text
41 | }
42 |
43 | }
44 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/Common/View/WTitleLabel.swift:
--------------------------------------------------------------------------------
1 | //
2 | // WTitleLabel.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/05/24.
6 | //
7 |
8 | import UIKit
9 |
10 | class WTitleLabel: UILabel {
11 |
12 | override init(frame: CGRect) {
13 | super.init(frame: frame)
14 | setupView()
15 | }
16 |
17 | required init?(coder aDecoder: NSCoder) {
18 | super.init(coder: aDecoder)
19 | setupView()
20 | }
21 |
22 | func setupView() {
23 | font = WFont.title()
24 | numberOfLines = 0
25 | }
26 |
27 | func setText(string: String) {
28 | let paragraphStyle = NSMutableParagraphStyle()
29 | paragraphStyle.lineHeightMultiple = 1.25
30 | let attrString = NSMutableAttributedString(string: string, attributes: [NSAttributedString.Key.paragraphStyle: paragraphStyle])
31 | attributedText = attrString
32 | }
33 |
34 | }
35 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/Common/View/WToastLabel.swift:
--------------------------------------------------------------------------------
1 | //
2 | // WToastMessage.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/08.
6 | //
7 |
8 | import UIKit
9 |
10 | class WToastLabel: UILabel {
11 |
12 | override init(frame: CGRect) {
13 | super.init(frame: frame)
14 | setupView()
15 | }
16 |
17 | required init?(coder aDecoder: NSCoder) {
18 | super.init(coder: aDecoder)
19 | setupView()
20 | }
21 |
22 | func setupView() {
23 | backgroundColor = UIColor.black.withAlphaComponent(0.5)
24 | textColor = UIColor.white
25 | textAlignment = .center
26 | alpha = 1.0
27 | layer.cornerRadius = 10
28 | clipsToBounds = true
29 | }
30 |
31 | func setMessage(text: String, font: UIFont, frame: CGRect) {
32 | self.font = font
33 | self.text = text
34 | self.frame = frame
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/Common/ViewController/BaseNavigationController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // BaseNavigationController.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/06/03.
6 | //
7 |
8 | import UIKit
9 |
10 | class BaseNavigationController: UINavigationController {
11 |
12 | override func viewDidLoad() {
13 | super.viewDidLoad()
14 |
15 | view.backgroundColor = .white
16 | setNavigationBarAppearance()
17 | }
18 |
19 | func setNavigationBarAppearance() {
20 | navigationBar.tintColor = .gray400
21 | navigationItem.backButtonDisplayMode = .minimal
22 |
23 | navigationBar.titleTextAttributes = [
24 | NSAttributedString.Key.foregroundColor: UIColor.gray700,
25 | NSAttributedString.Key.font: WFont.body1()
26 | ]
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/Common/ViewModel/AlertPopupViewModel.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AlertPopupViewModel.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/30.
6 | //
7 |
8 | import Foundation
9 | import RxSwift
10 |
11 | class AlertPopupViewModel: ViewModelType {
12 |
13 | weak var coordinator: AlertPopupCoordinator?
14 | private var disposeBag = DisposeBag()
15 | var completionHandler: () -> Void
16 |
17 | init(coordinator: AlertPopupCoordinator, completionHandler: @escaping () -> Void) {
18 | self.coordinator = coordinator
19 | self.completionHandler = completionHandler
20 | }
21 |
22 | struct Input {
23 | let confirmButtonDidTapEvent: Observable
24 | let cancelButtonDidTapEvent: Observable
25 | }
26 |
27 | struct Output { }
28 |
29 | @discardableResult
30 | func transform(input: Input) -> Output {
31 |
32 | input.confirmButtonDidTapEvent.subscribe(onNext: {
33 | self.completionHandler()
34 | self.coordinator?.dismiss()
35 | }).disposed(by: disposeBag)
36 |
37 | input.cancelButtonDidTapEvent.subscribe(onNext: {
38 | self.coordinator?.dismiss()
39 | }).disposed(by: disposeBag)
40 |
41 | return Output()
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/Common/ViewModel/SimplePopupViewModel.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SimplePopupViewModel.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/09.
6 | //
7 |
8 | import Foundation
9 | import RxSwift
10 | import RxCocoa
11 |
12 | class SimplePopupViewModel: ViewModelType {
13 |
14 | weak var coordinator: SimplePopupCoordinator?
15 | private var disposeBag = DisposeBag()
16 |
17 | init(coordinator: SimplePopupCoordinator) {
18 | self.coordinator = coordinator
19 | }
20 |
21 | struct Input {
22 | let confirmButtonDidTapEvent: Observable
23 | }
24 |
25 | struct Output { }
26 |
27 | @discardableResult
28 | func transform(input: Input) -> Output {
29 |
30 | input.confirmButtonDidTapEvent.subscribe(onNext: {
31 | self.coordinator?.dismiss()
32 | }).disposed(by: disposeBag)
33 |
34 | return Output()
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/Common/ViewModel/ViewModelType.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ViewModelType.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/06/01.
6 | //
7 |
8 | import Foundation
9 |
10 | protocol ViewModelType {
11 | associatedtype Input
12 | associatedtype Output
13 |
14 | @discardableResult
15 | func transform(input: Input) -> Output
16 | }
17 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/MainScene/Category/Coordinator/CategoryEditCoordinatorType.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CategoryEditCoordinatorType.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/15.
6 | //
7 |
8 | import Foundation
9 |
10 | protocol CategoryEditCoordinatorType: AnyObject, Coordinator { }
11 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/MainScene/Category/View/CategoryDataSource.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CategoryDataSource.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/29.
6 | //
7 |
8 | import UIKit
9 |
10 | class CategoryDataSource: UITableViewDiffableDataSource {
11 | override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
12 | return true
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/MainScene/Category/View/ScheduleDataSource.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ScheduleSummaryDataSource.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/29.
6 | //
7 |
8 | import UIKit
9 |
10 | class ScheduleSummaryDataSource: UITableViewDiffableDataSource {
11 | override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
12 | return true
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/MainScene/Category/View/SubView/ColorStackView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ColorStackView.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/06/11.
6 | //
7 |
8 | import UIKit
9 |
10 | class ColorStackView: UIStackView {
11 |
12 | lazy var namelabel = WTextLabel().then {
13 | $0.textColor = UIColor.gray800
14 | }
15 |
16 | lazy var colorView = UIButton().then {
17 | $0.layer.cornerRadius = 5
18 | }
19 |
20 | override init(frame: CGRect) {
21 | super.init(frame: frame)
22 | setupView()
23 | }
24 |
25 | required init(coder: NSCoder) {
26 | super.init(coder: coder)
27 | setupView()
28 | }
29 |
30 | private func setupView() {
31 | self.axis = .vertical
32 | self.distribution = .fill
33 | self.alignment = .leading
34 | self.spacing = 10
35 |
36 | [namelabel, colorView].forEach { self.addArrangedSubview($0) }
37 |
38 | colorView.snp.makeConstraints { make in
39 | make.width.height.equalTo(UIScreen.main.bounds.width * 0.09)
40 | }
41 | }
42 |
43 | init(nameText: String) {
44 | super.init(frame: CGRect.zero)
45 |
46 | self.namelabel.text = nameText
47 | setupView()
48 | }
49 |
50 | func setColor(_ color: UIColor) {
51 | colorView.backgroundColor = color
52 | }
53 |
54 | }
55 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/MainScene/Category/View/SubView/DateTimeLabel.swift:
--------------------------------------------------------------------------------
1 | //
2 | // DateLabel.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/26.
6 | //
7 |
8 | import UIKit
9 |
10 | class DateTimeLabel: WIconLabel {
11 |
12 | enum DateTime {
13 | case date
14 | case time
15 | }
16 |
17 | override init(frame: CGRect) {
18 | super.init(frame: frame)
19 | setupView()
20 | }
21 |
22 | required init?(coder aDecoder: NSCoder) {
23 | super.init(coder: aDecoder)
24 | setupView()
25 | }
26 |
27 | private func setupView() {
28 |
29 | self.label.font = WFont.body2()
30 | self.label.textColor = .gray400
31 | }
32 |
33 | init(type: DateTime, title: String) {
34 | super.init(frame: CGRect.zero)
35 |
36 | setupView()
37 | configureValue(type: type, title: title)
38 | }
39 |
40 | }
41 |
42 | extension DateTimeLabel {
43 |
44 | public func configureValue(type: DateTime, title: String) {
45 | switch type {
46 | case .date:
47 | self.icon.image = UIImage(named: "calendar")!
48 | case .time:
49 | self.icon.image = UIImage(named: "time")!
50 | }
51 | self.label.text = title
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/MainScene/Category/ViewModel/CategoryEditViewModelType.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CategoryEditViewModel.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/06/22.
6 | //
7 |
8 | import Foundation
9 |
10 | protocol CategoryEditViewModelType: AnyObject, ViewModelType { }
11 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/MainScene/Category/ViewModel/ColorSheetViewModel.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ColorBottomSheetViewModel.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/06/25.
6 | //
7 |
8 | import Foundation
9 | import RxSwift
10 | import RxCocoa
11 |
12 | class ColorSheetViewModel: ViewModelType {
13 |
14 | weak var coordinator: CategoryEditCoordinatorType?
15 | private var disposeBag = DisposeBag()
16 |
17 | init(coordinator: CategoryEditCoordinatorType) {
18 |
19 | self.coordinator = coordinator
20 | }
21 |
22 | struct Input {
23 | let didColorCellSelected: Observable
24 | let didTapConfirmButton: Observable
25 | }
26 |
27 | struct Output { }
28 |
29 | @discardableResult
30 | func transform(input: Input) -> Output {
31 |
32 | input.didTapConfirmButton
33 | .withLatestFrom(input.didColorCellSelected)
34 | .subscribe(onNext: { item in
35 | if let coordinator = self.coordinator as? CategoryAddCoordinator {
36 | coordinator.sendColorFromSheet(color: Constants.colors[item.section][item.item])
37 | } else if let coordinator = self.coordinator as? CategoryModifyCoordinator {
38 | coordinator.sendColorFromSheet(color: Constants.colors[item.section][item.item])
39 | }
40 |
41 | }).disposed(by: disposeBag)
42 |
43 | return Output()
44 | }
45 |
46 | }
47 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/MainScene/Common/View/SortDropDownCell.swift:
--------------------------------------------------------------------------------
1 | //
2 | // SortDropDownCell.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/07.
6 | //
7 |
8 | import UIKit
9 | import DropDown
10 |
11 | class SortDropDownCell: DropDownCell {
12 |
13 | override func awakeFromNib() {
14 | super.awakeFromNib()
15 |
16 | optionLabel.textColor = .gray700
17 | optionLabel.font = WFont.body1()
18 | }
19 |
20 | override func setSelected(_ selected: Bool, animated: Bool) {
21 | super.setSelected(selected, animated: animated)
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/MainScene/Common/View/WStatusTimeLabel.swift:
--------------------------------------------------------------------------------
1 | //
2 | // WStatusTimeLabel.swift
3 | // Weekand
4 | //
5 | // Created by Daegeon Choi on 2022/05/30.
6 | //
7 |
8 | import UIKit
9 |
10 | class WStatusTimeLabel: WIconLabel {
11 |
12 | override init(frame: CGRect) {
13 | super.init(frame: frame)
14 | setupView()
15 | }
16 |
17 | required init?(coder aDecoder: NSCoder) {
18 | super.init(coder: aDecoder)
19 | setupView()
20 | }
21 |
22 | private func setupView() {
23 |
24 | self.label.font = WFont.body2()
25 | self.label.textColor = .gray400
26 | self.stack.spacing = 0
27 |
28 | self.icon.snp.makeConstraints { make in
29 | make.height.equalTo(24)
30 | }
31 | }
32 |
33 | init(status: StatusIcon, title: String) {
34 | super.init(frame: CGRect.zero)
35 |
36 | setupView()
37 | configureValue(status: status, title: title)
38 | }
39 |
40 | }
41 |
42 | extension WStatusTimeLabel {
43 |
44 | public func configureValue(status: StatusIcon, title: String) {
45 |
46 | self.icon.image = UIImage(named: status.rawValue)!.withTintColor(status.tintColor)
47 | self.label.text = title
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/MainScene/Main/View/MainScheduleDataSource.swift:
--------------------------------------------------------------------------------
1 | //
2 | // MainScheduleDataSource.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/08/01.
6 | //
7 |
8 | import UIKit
9 |
10 | class MainScheduleDataSource: UITableViewDiffableDataSource {
11 | override func tableView(_ tableView: UITableView, canEditRowAt indexPath: IndexPath) -> Bool {
12 | return true
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/MainScene/Main/ViewModel/Sheet/EmojiTableViewModel.swift:
--------------------------------------------------------------------------------
1 | //
2 | // EmojiTableViewModel.swift
3 | // Weekand
4 | //
5 | // Created by Daegeon Choi on 2022/07/07.
6 | //
7 |
8 |
9 | import UIKit
10 | import RxSwift
11 | import RxRelay
12 |
13 | enum EmojiSection {
14 | case main
15 | }
16 |
17 | class EmojiTableViewModel {
18 |
19 | let targetEmoji: Emoji?
20 |
21 | let disposeBag = DisposeBag()
22 |
23 | var tableViewDataSource: UITableViewDiffableDataSource!
24 | var targetEmojiList: [EmojiGiver]
25 |
26 | init(emoji: Emoji?, list: [EmojiGiver]) {
27 | targetEmojiList = list
28 | targetEmoji = emoji
29 | }
30 |
31 | }
32 |
33 | // MARK: Diffable Data Source
34 | extension EmojiTableViewModel {
35 |
36 | func configureTableViewSnapshot(animatingDifferences: Bool = false) {
37 |
38 | var list = targetEmojiList
39 | if let emoji = self.targetEmoji {
40 | list = targetEmojiList.filter { $0.emoji == emoji }
41 | }
42 |
43 | var snapshot = NSDiffableDataSourceSnapshot()
44 | snapshot.appendSections([.main])
45 | snapshot.appendItems(list, toSection: .main)
46 | self.tableViewDataSource.apply(snapshot, animatingDifferences: animatingDifferences)
47 | }
48 |
49 | }
50 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/MainScene/Main/ViewModel/Sheet/MonthlyCalendarSheetViewModel.swift:
--------------------------------------------------------------------------------
1 | //
2 | // MonthlyCalendarSheetViewModel.swift
3 | // Weekand
4 | //
5 | // Created by Daegeon Choi on 2022/07/07.
6 | //
7 |
8 | import Foundation
9 | import RxSwift
10 |
11 | class MonthlyCalendarSheetViewModel {
12 |
13 | weak var coordinator: MainCoordinator?
14 | private var disposeBag = DisposeBag()
15 | var selectedDate: Date?
16 |
17 | init(coordinator: MainCoordinator) {
18 |
19 | self.coordinator = coordinator
20 | }
21 |
22 | struct Input {
23 | let didTapConfirmButton: Observable
24 | }
25 |
26 | struct Output { }
27 |
28 | func transform(input: Input) -> Output {
29 |
30 | input.didTapConfirmButton.subscribe(onNext: { _ in
31 |
32 | print("pass")
33 | self.coordinator?.sendDateFromMonthlyCalender(date: self.selectedDate)
34 |
35 | }).disposed(by: disposeBag)
36 |
37 |
38 | return Output()
39 | }
40 |
41 | }
42 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/MainScene/ScheduleDetail/View/Views/ScheduleInformationStackView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ScheduleInformationStackView.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/28.
6 | //
7 |
8 | import UIKit
9 |
10 | class ScheduleInformationStackView: UIStackView {
11 |
12 | lazy var titleLabel = WTextLabel().then {
13 | $0.textColor = UIColor.gray400
14 | $0.font = WFont.body2()
15 | }
16 |
17 | lazy var textLabel = WTextLabel().then {
18 | $0.textColor = UIColor.gray900
19 | $0.font = WFont.body1()
20 | $0.numberOfLines = 0
21 | }
22 |
23 | override init(frame: CGRect) {
24 | super.init(frame: frame)
25 | setupView()
26 | }
27 |
28 | required init(coder: NSCoder) {
29 | super.init(coder: coder)
30 | setupView()
31 | }
32 |
33 | private func setupView() {
34 | self.axis = .vertical
35 | self.distribution = .fill
36 | self.alignment = .fill
37 | self.spacing = 10
38 |
39 | [titleLabel, textLabel].forEach { self.addArrangedSubview($0) }
40 | }
41 |
42 | init(title: String) {
43 | super.init(frame: CGRect.zero)
44 |
45 | self.titleLabel.text = title
46 | setupView()
47 | }
48 |
49 | func configure(text: String) {
50 | self.textLabel.text = text
51 | }
52 |
53 | }
54 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/MainScene/ScheduleEdit/Coordinator/ScheduleEditCoordinatorType.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ScheduleCoordinatorType.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/27.
6 | //
7 |
8 | import Foundation
9 |
10 | protocol ScheduleEditCoordinatorType: AnyObject, Coordinator { }
11 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/MainScene/ScheduleEdit/View/RepeatSheetViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RepeatSheetViewController.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/19.
6 | //
7 |
8 | import UIKit
9 |
10 | class RepeatSheetViewController: UIViewController {
11 |
12 | let viewController = RepeatTabViewController()
13 |
14 | override func viewDidLoad() {
15 | super.viewDidLoad()
16 |
17 | setUpView()
18 | configureUI()
19 | }
20 |
21 | private func setUpView() {
22 | view.backgroundColor = .white
23 | }
24 |
25 | private func configureUI() {
26 |
27 | self.view.addSubview(viewController.view)
28 | viewController.view.clipsToBounds = true
29 | viewController.view.layer.cornerRadius = 27
30 | viewController.view.layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner]
31 |
32 | viewController.view.snp.makeConstraints { make in
33 | make.top.equalToSuperview().offset(20)
34 | make.leading.equalToSuperview().offset(24)
35 | make.trailing.equalToSuperview().offset(-24)
36 | make.bottom.equalToSuperview()
37 | }
38 | }
39 |
40 | }
41 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/MainScene/ScheduleEdit/View/Views/MemoStackView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // MemoStackView.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/05.
6 | //
7 |
8 | import UIKit
9 |
10 | class MemoStackView: UIStackView {
11 |
12 | lazy var namelabel = WTextLabel().then {
13 | $0.textColor = UIColor.gray800
14 | }
15 |
16 | let textView = WTextView()
17 |
18 | override init(frame: CGRect) {
19 | super.init(frame: frame)
20 | setupView()
21 | }
22 |
23 | required init(coder: NSCoder) {
24 | super.init(coder: coder)
25 | setupView()
26 | }
27 |
28 | private func setupView() {
29 | self.axis = .vertical
30 | self.distribution = .fill
31 | self.alignment = .fill
32 | self.spacing = 10
33 |
34 | [namelabel, textView].forEach { self.addArrangedSubview($0) }
35 |
36 | textView.snp.makeConstraints { make in
37 | make.leading.trailing.equalToSuperview()
38 | make.height.greaterThanOrEqualTo(150)
39 | }
40 | }
41 |
42 | init(nameText: String) {
43 | super.init(frame: CGRect.zero)
44 |
45 | self.namelabel.text = nameText
46 | setupView()
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/MainScene/ScheduleEdit/ViewModel/ScheduleEditViewModelType.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ScheduleViewModelType.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/27.
6 | //
7 |
8 | import Foundation
9 |
10 | protocol ScheduleEditViewModelType: AnyObject, ViewModelType { }
11 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/ProfileScene/Profile/Coordinator/ResignWarningPopupCoordinator.swift:
--------------------------------------------------------------------------------
1 | //
2 | // WarningPopupCoordinator.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/28.
6 | //
7 |
8 | import UIKit
9 |
10 | class ResignWarningPopupCoordinator: Coordinator {
11 | var navigationController: UINavigationController
12 | weak var finishDelegate: CoordinatorDidFinishDelegate?
13 | var childCoordinators: [Coordinator] = []
14 | var resignWarningPopupViewController: ResignWarningPopupViewController
15 | var profileUseCase: ProfileUseCase
16 | var type: CoordinatorType = .warningPopup
17 |
18 | required init(useCase: ProfileUseCase) {
19 | self.resignWarningPopupViewController = ResignWarningPopupViewController()
20 | self.navigationController = UINavigationController(rootViewController: resignWarningPopupViewController)
21 | self.navigationController.modalPresentationStyle = .overFullScreen
22 | self.navigationController.modalTransitionStyle = .crossDissolve
23 | self.profileUseCase = useCase
24 | }
25 |
26 | func start() {
27 | self.resignWarningPopupViewController.viewModel = WarningPopupViewModel(coordinator: self, useCase: profileUseCase)
28 | }
29 |
30 | func dismiss() {
31 | self.navigationController.dismiss(animated: true)
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/ProfileScene/Profile/View/SubView/ProfileDetailJobInterestView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ProfileDetailJobInterestView.swift
3 | // Weekand
4 | //
5 | // Created by Daegeon Choi on 2022/07/22.
6 | //
7 |
8 | import UIKit
9 |
10 | /// 직업 관심사 부분
11 | class ProfileDetailJobInterestView: UIStackView {
12 |
13 | var jobView = ProfileDetailCollectionStackView()
14 | var interestView = ProfileDetailCollectionStackView()
15 |
16 | init () {
17 | super.init(frame: .zero)
18 |
19 | setUpView()
20 | configureUI()
21 | }
22 |
23 | required init(coder: NSCoder) {
24 | fatalError("init(coder:) has not been implemented")
25 | }
26 |
27 | private func setUpView() {
28 | self.axis = .vertical
29 | self.spacing = 0
30 | self.distribution = .fill
31 |
32 | self.isLayoutMarginsRelativeArrangement = true
33 | self.layoutMargins = UIEdgeInsets(top: 8, left: 16, bottom: 8, right: 16)
34 |
35 | self.backgroundColor = .white
36 | self.layer.cornerRadius = 10
37 | }
38 |
39 | private func configureUI() {
40 | [jobView, interestView].forEach { self.addArrangedSubview($0) }
41 | }
42 |
43 | }
44 |
45 | extension ProfileDetailJobInterestView {
46 |
47 | func setData(jobs: [String], interests: [String]) {
48 | jobView.setData(title: "직업", content: jobs)
49 | interestView.setData(title: "관심사", content: interests)
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/SignScene/SignUp/View/SubView/BasePaddingLabel.swift:
--------------------------------------------------------------------------------
1 | //
2 | // BasePaddingLabel.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/10.
6 | //
7 |
8 | import UIKit
9 |
10 |
11 | class BasePaddingLabel: UILabel {
12 | private var padding = UIEdgeInsets(top: 8, left: 14, bottom: 8, right: 14)
13 |
14 | convenience init(padding: UIEdgeInsets) {
15 | self.init()
16 | self.padding = padding
17 | }
18 |
19 | override func drawText(in rect: CGRect) {
20 | super.drawText(in: rect.inset(by: padding))
21 | }
22 |
23 | override var intrinsicContentSize: CGSize {
24 | var contentSize = super.intrinsicContentSize
25 | contentSize.height += padding.top + padding.bottom
26 | contentSize.width += padding.left + padding.right
27 |
28 | return contentSize
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/SignScene/Welcome/ViewModel/WelcomeViewModel.swift:
--------------------------------------------------------------------------------
1 | //
2 | // WelcomeViewModel.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/06/01.
6 | //
7 |
8 | import Foundation
9 | import RxSwift
10 |
11 | class WelcomeViewModel: ViewModelType {
12 | weak var coordinator: WelcomeCoordinator?
13 | private let disposeBag = DisposeBag()
14 |
15 | init(coordinator: WelcomeCoordinator?) {
16 | self.coordinator = coordinator
17 | }
18 |
19 | struct Input {
20 | let didTapSignInButton: Observable
21 | let didTapSignUpButton: Observable
22 | }
23 |
24 | struct Output { }
25 |
26 | @discardableResult
27 | func transform(input: Input) -> Output {
28 | let output = Output()
29 |
30 | input.didTapSignInButton
31 | .subscribe(onNext: { [weak self] _ in
32 | self?.coordinator?.showSignInScene()
33 | })
34 | .disposed(by: disposeBag)
35 |
36 | input.didTapSignUpButton
37 | .subscribe(onNext: { [weak self] _ in
38 | self?.coordinator?.showSignUpScene()
39 | })
40 | .disposed(by: disposeBag)
41 |
42 | return output
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/Utils/APIModelExtensions/RepeatType+extension.swift:
--------------------------------------------------------------------------------
1 | //
2 | // RepeatType+extension.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/21.
6 | //
7 |
8 | import Foundation
9 |
10 | extension RepeatType {
11 | func toEntity() -> ScheduleRepeatType {
12 | switch self {
13 | case .daily:
14 | return ScheduleRepeatType.daily
15 | case .weekly:
16 | return ScheduleRepeatType.weekly
17 | case .monthly:
18 | return ScheduleRepeatType.monthly
19 | case .yearly:
20 | return ScheduleRepeatType.yearly
21 | case .once:
22 | return ScheduleRepeatType.once
23 | case .__unknown(let rawValue):
24 | return ScheduleRepeatType.once
25 | }
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/Utils/APIModelExtensions/ScheduleCategoryOpenType+extension.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Sche.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/15.
6 | //
7 |
8 | import Foundation
9 |
10 | extension ScheduleCategoryOpenType {
11 | func toEntity() -> CategoryOpenType {
12 | switch self {
13 | case .allOpen:
14 | return CategoryOpenType.allOpen
15 | case .followerOpen:
16 | return CategoryOpenType.followerOpen
17 | case .closed:
18 | return CategoryOpenType.closed
19 | case .__unknown(_):
20 | return CategoryOpenType.closed
21 | }
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/Utils/APIModelExtensions/ScheduleStatus+extension.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ScheduleStatus+extension.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/28.
6 | //
7 |
8 | import Foundation
9 |
10 | extension ScheduleStatus {
11 | func toEntity() -> Status {
12 | switch self {
13 | case .completed:
14 | return Status.completed
15 | case .incompleted:
16 | return Status.incompleted
17 | case .skip:
18 | return Status.incompleted
19 | case .undetermined:
20 | return Status.undetermined
21 | case .notYet:
22 | return Status.upcoming
23 | case .__unknown(let rawValue):
24 | return Status.completed
25 | }
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/Utils/APIModelExtensions/Week+extension.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Week+extension.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/28.
6 | //
7 |
8 | import Foundation
9 |
10 | extension Week {
11 | func toEntity() -> ScheduleWeek {
12 | switch self {
13 | case .monday:
14 | return ScheduleWeek.monday
15 | case .tuesday:
16 | return ScheduleWeek.tuesday
17 | case .wednesday:
18 | return ScheduleWeek.wednesday
19 | case .thursday:
20 | return ScheduleWeek.thursday
21 | case .friday:
22 | return ScheduleWeek.friday
23 | case .saturday:
24 | return ScheduleWeek.saturday
25 | case .sunday:
26 | return ScheduleWeek.sunday
27 | case .__unknown(let rawValue):
28 | return ScheduleWeek.monday
29 | }
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/Utils/DesignSystem/ColorSet.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Color.swift
3 | // Weekand
4 | //
5 | // Created by Daegeon Choi on 2022/05/20.
6 | //
7 |
8 | import UIKit
9 |
10 | extension UIColor {
11 | // MARK: Custom System Colors
12 | static let mainColor = UIColor(hex: "#5086FF") ?? .systemBlue
13 | static let subColor = UIColor(hex: "#EAF0FF")
14 | static let backgroundColor = UIColor.white
15 |
16 | static let accentColor = UIColor(hex: "#17191C")
17 | static let lightGray = UIColor(hex: "#ECEFF2")
18 | static let darkGray = UIColor(hex: "#AAAEB6")
19 |
20 | static let gray900 = UIColor(hex: "#17191C") ?? .black
21 | static let gray800 = UIColor(hex: "#32353A") ?? .black
22 | static let gray700 = UIColor(hex: "#515459") ?? .black
23 | static let gray600 = UIColor(hex: "#747880") ?? .systemGray6
24 | static let gray500 = UIColor(hex: "#8B929C") ?? .systemGray6
25 | static let gray400 = UIColor(hex: "#AAAEB6") ?? .systemGray
26 |
27 | static let gray300 = UIColor(hex: "#C9CED5") ?? .systemGray
28 | static let gray200 = UIColor(hex: "#ECEFF2") ?? .systemGray
29 | static let gray100 = UIColor(hex: "#F5F7F8") ?? .systemGray
30 | static let wred = UIColor(hex: "#FF7562") ?? .systemRed
31 | static let wblue = UIColor(hex: "#5086FF") ?? .systemBlue
32 |
33 | }
34 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/Utils/DesignSystem/CommonShape.swift:
--------------------------------------------------------------------------------
1 | //
2 | // CommonShape.swift
3 | // Weekand
4 | //
5 | // Created by Daegeon Choi on 2022/05/23.
6 | //
7 |
8 | import UIKit
9 |
10 | // View Spec
11 | let defaultFontSize: CGFloat = 13.5
12 | let defaultCornerRadius: CGFloat = 12
13 |
14 | // Constraint Spec
15 | let defaultSpacing: CGFloat = 30
16 | let defaultWidthDivider: CGFloat = 1.2
17 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/Utils/DesignSystem/EmptySceneType.swift:
--------------------------------------------------------------------------------
1 | //
2 | // EmptySceneType.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/26.
6 | //
7 |
8 | import Foundation
9 |
10 | enum EmptySceneType {
11 | case schedule
12 | case followerSchedule
13 | case search
14 | case follower
15 | case following
16 | case alarm
17 |
18 | var imageName: String {
19 | switch self {
20 | case .schedule:
21 | return "scheduleEmoji.empty"
22 | case .followerSchedule:
23 | return "scheduleEmoji.empty"
24 | case .search:
25 | return "searchEmoji.empty"
26 | case .follower:
27 | return "followersEmoji.empty"
28 | case .following:
29 | return "followingEmoji.empty"
30 | case .alarm:
31 | return "alarmEmoji.empty"
32 | }
33 | }
34 |
35 | var informText: String {
36 | switch self {
37 | case .schedule:
38 | return "일정을 만들어보세요!"
39 | case .followerSchedule:
40 | return "오늘 친구 일정이 없어요"
41 | case .search:
42 | return "찾으시는 검색 결과가 없어요"
43 | case .follower:
44 | return "나를 팔로우하는 친구가\n여기에 표시됩니다"
45 | case .following:
46 | return "친구를 팔로우해 보세요"
47 | case .alarm:
48 | return "아직 소식이 없어요"
49 | }
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/Utils/Extensions/DateExtension.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Date+timeStamp.swift
3 | // Weekand
4 | //
5 | // Created by Daegeon Choi on 2022/07/15.
6 | //
7 |
8 | import Foundation
9 |
10 | extension Date {
11 | /// Date 값을 Timestamp로 변환
12 | func toTimestamp() -> Int64 {
13 | return Int64(self.timeIntervalSince1970*1000)
14 | }
15 |
16 | /// Date 값을 "HH:mm" 으로 변환
17 | func getTimeString() -> String {
18 | let dateFormatter = DateFormatter()
19 | dateFormatter.dateFormat = "HH:mm"
20 |
21 | return dateFormatter.string(from: self)
22 | }
23 |
24 | /// Date 타입 두개를 "HH:mm - HH:mm"으로 변환
25 | static func getTimelineString(_ from: Date, _ to: Date) -> String {
26 | return "\(from.getTimeString()) - \(to.getTimeString())"
27 | }
28 |
29 | }
30 |
31 | extension Int64 {
32 | /// Timestamp값을 Date로 변환
33 | func toDate() -> Date {
34 | return Date(timeIntervalSince1970: TimeInterval(self/1000))
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/Utils/Extensions/FSCalendar+RxExtension.swift:
--------------------------------------------------------------------------------
1 | //
2 | // FSCalendar+extension.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/07.
6 | //
7 |
8 | import UIKit
9 | import RxSwift
10 | import FSCalendar
11 | import RxCocoa
12 |
13 | extension Reactive where Base: FSCalendar {
14 | var delegate: DelegateProxy {
15 | return RxFSCalendarDelegateProxy.proxy(for: self.base)
16 | }
17 |
18 | var didSelect: Observable {
19 | return delegate.methodInvoked(#selector(FSCalendarDelegate.calendar(_:didSelect:at:)))
20 | .map { parameter in
21 | return parameter[1] as? Date ?? Date()
22 | }
23 | }
24 | }
25 |
26 | class RxFSCalendarDelegateProxy: DelegateProxy, DelegateProxyType, FSCalendarDelegate {
27 | static func registerKnownImplementations() {
28 | self.register { (calendar) -> RxFSCalendarDelegateProxy in
29 | RxFSCalendarDelegateProxy(parentObject: calendar, delegateProxy: self)
30 | }
31 | }
32 |
33 | static func currentDelegate(for object: FSCalendar) -> FSCalendarDelegate? {
34 | return object.delegate
35 | }
36 |
37 | static func setCurrentDelegate(_ delegate: FSCalendarDelegate?, to object: FSCalendar) {
38 | object.delegate = delegate
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/Utils/Extensions/NSMutableAttributedString+extension.swift:
--------------------------------------------------------------------------------
1 | //
2 | // NSMutableAttributedString+extension.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/05/25.
6 | //
7 |
8 | import UIKit
9 |
10 | extension NSMutableAttributedString {
11 |
12 | func semiBold(_ value: String, font: UIFont, fontColor: UIColor) -> NSMutableAttributedString {
13 | let attributes: [NSAttributedString.Key: Any] = [
14 | .font: font,
15 | .foregroundColor: fontColor
16 | ]
17 |
18 | self.append(NSAttributedString(string: value, attributes: attributes))
19 | return self
20 | }
21 |
22 | func bold(_ value: String, font: UIFont, fontColor: UIColor) -> NSMutableAttributedString {
23 | let attributes: [NSAttributedString.Key: Any] = [
24 | .font: font,
25 | .foregroundColor: fontColor
26 | ]
27 |
28 | self.append(NSAttributedString(string: value, attributes: attributes))
29 | return self
30 | }
31 |
32 | @discardableResult
33 | func normal(_ value: String, font: UIFont, fontColor: UIColor) -> NSMutableAttributedString {
34 | let attributes: [NSAttributedString.Key: Any] = [
35 | .font: font,
36 | .foregroundColor: fontColor
37 | ]
38 |
39 | self.append(NSAttributedString(string: value, attributes: attributes))
40 | return self
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/Utils/Extensions/String+trimWhiteSpace.swift:
--------------------------------------------------------------------------------
1 | //
2 | // String+extension.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/15.
6 | //
7 |
8 | import Foundation
9 |
10 | extension String {
11 | var trimWhiteSpace: String {
12 | return self.trimmingCharacters(in: [" "])
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/Utils/Extensions/UIButton+setImageInset.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UIButton+setImageInset.swift
3 | // Weekand
4 | //
5 | // Created by Daegeon Choi on 2022/06/14.
6 | //
7 |
8 | import UIKit
9 |
10 | extension UIButton {
11 |
12 | func setImageInset(top: CGFloat, left: CGFloat, bottom: CGFloat, right: CGFloat) {
13 |
14 |
15 | if #available(iOS 15.0, *) {
16 | if self.configuration != nil {
17 | self.configuration?.contentInsets = NSDirectionalEdgeInsets(top: top, leading: left, bottom: bottom, trailing: right)
18 | } else {
19 | var configuration = UIButton.Configuration.filled()
20 | configuration.contentInsets = NSDirectionalEdgeInsets(top: top, leading: left, bottom: bottom, trailing: right)
21 | self.configuration = configuration
22 | }
23 |
24 | } else {
25 | self.imageEdgeInsets = UIEdgeInsets(top: top, left: left, bottom: bottom, right: right)
26 | }
27 |
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/Utils/Extensions/UIColor+hex.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Colors.swift
3 | // Weekand
4 | //
5 | // Created by Daegeon Choi on 2022/05/19.
6 | //
7 |
8 | import UIKit
9 |
10 | extension UIColor {
11 |
12 | // MARK: UIColor with Hex
13 | public convenience init?(hex: String) {
14 |
15 | var safeHex = hex
16 | if hex.count == 7 {
17 | safeHex += "FF"
18 | }
19 |
20 | let r, g, b, a: CGFloat
21 |
22 | if safeHex.hasPrefix("#") {
23 | let start = safeHex.index(safeHex.startIndex, offsetBy: 1)
24 | let hexColor = String(safeHex[start...])
25 |
26 | if hexColor.count == 8 {
27 | let scanner = Scanner(string: hexColor)
28 | var hexNumber: UInt64 = 0
29 |
30 | if scanner.scanHexInt64(&hexNumber) {
31 | r = CGFloat((hexNumber & 0xff000000) >> 24) / 255
32 | g = CGFloat((hexNumber & 0x00ff0000) >> 16) / 255
33 | b = CGFloat((hexNumber & 0x0000ff00) >> 8) / 255
34 | a = CGFloat(hexNumber & 0x000000ff) / 255
35 |
36 | self.init(red: r, green: g, blue: b, alpha: a)
37 | return
38 | }
39 | }
40 | }
41 |
42 | return nil
43 | }
44 | }
45 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/Utils/Extensions/UIScrollView+scrollToTop.swift:
--------------------------------------------------------------------------------
1 | //
2 | // UIScrollView+extension.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/15.
6 | //
7 |
8 | import UIKit
9 |
10 | extension UIScrollView {
11 | func scrollToTop() {
12 | let topOffset = CGPoint(x: 0, y: -contentInset.top)
13 | setContentOffset(topOffset, animated: false)
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/Utils/Manager/ImageCacheManager.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ImageCacheManager.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/08/01.
6 | //
7 |
8 | import UIKit
9 |
10 | class ImageCacheManager {
11 | private let cache = NSCache()
12 | static let shared = ImageCacheManager()
13 |
14 | private init() {}
15 |
16 | func loadCachedData(for key: String) -> UIImage? {
17 | let itemURL = NSString(string: key)
18 | return cache.object(forKey: itemURL)
19 | }
20 |
21 | func setCacheData(of image: UIImage, for key: String) {
22 | let itemURL = NSString(string: key)
23 | cache.setObject(image, forKey: itemURL)
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Presentation/Utils/Manager/WRepeatTextManager.swift:
--------------------------------------------------------------------------------
1 | //
2 | // WRepeatTextManager.swift
3 | // Weekand
4 | //
5 | // Created by 이호영 on 2022/07/27.
6 | //
7 |
8 | import Foundation
9 |
10 | struct WRepeatTextManager {
11 |
12 | static func combineTimeDate(repeatType: ScheduleRepeatType, repeatSelectedValue: [ScheduleWeek]?, repeatEndDate: Date?) -> String {
13 | var repeatText = ""
14 |
15 | if repeatType == .once {
16 | return repeatText
17 | }
18 |
19 | if let repeatSelectedValue = repeatSelectedValue {
20 | let repeatSelectedValueText = repeatSelectedValue.map { $0.description }.joined(separator: ",")
21 | if let date = repeatEndDate {
22 | let dateString = WDateFormatter.dateFormatter.string(from: date)
23 | repeatText = "\(dateString)까지 \(repeatType.description) \(repeatSelectedValueText)"
24 | } else {
25 | repeatText = "\(repeatType.description) \(repeatSelectedValueText)"
26 | }
27 | } else {
28 | if let date = repeatEndDate {
29 | let dateString = WDateFormatter.dateFormatter.string(from: date)
30 | repeatText = "\(dateString)까지 \(repeatType.description)"
31 | } else {
32 | repeatText = "\(repeatType.description)"
33 | }
34 | }
35 | return repeatText + " 반복"
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/AccentColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "idiom" : "universal"
5 | }
6 | ],
7 | "info" : {
8 | "author" : "xcode",
9 | "version" : 1
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/1024.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/1024.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/120-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/120-1.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/120.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/120.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/152.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/152.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/167.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/167.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/180.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/180.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/20.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/20.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/29.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/29.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/40-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/40-1.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/40-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/40-2.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/40.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/40.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/58-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/58-1.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/58.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/58.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/60.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/60.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/76.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/76.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/80-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/80-1.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/80.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/80.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/87.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/AppIcon.appiconset/87.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/ContactBanner.imageset/ContactIcon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/ContactBanner.imageset/ContactIcon.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/ContactBanner.imageset/ContactIcon@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/ContactBanner.imageset/ContactIcon@2x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/ContactBanner.imageset/ContactIcon@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/ContactBanner.imageset/ContactIcon@3x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/ContactBanner.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "ContactIcon.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "ContactIcon@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "ContactIcon@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Logo.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "logo.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "logo@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "logo@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Logo.imageset/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Logo.imageset/logo.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Logo.imageset/logo@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Logo.imageset/logo@2x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Logo.imageset/logo@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Logo.imageset/logo@3x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/SplashImage.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "iPhone 8.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "iPhone 8@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "iPhone 8@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/SplashImage.imageset/iPhone 8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/SplashImage.imageset/iPhone 8.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/SplashImage.imageset/iPhone 8@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/SplashImage.imageset/iPhone 8@2x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/SplashImage.imageset/iPhone 8@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/SplashImage.imageset/iPhone 8@3x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/arrow.down.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "arrow.down.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "arrow.down2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "arrow.down3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/arrow.down.imageset/arrow.down.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/arrow.down.imageset/arrow.down.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/arrow.down.imageset/arrow.down2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/arrow.down.imageset/arrow.down2x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/arrow.down.imageset/arrow.down3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/arrow.down.imageset/arrow.down3x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/arrow.left.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "arrow.left.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "arrow.left2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "arrow.left3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/arrow.left.imageset/arrow.left.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/arrow.left.imageset/arrow.left.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/arrow.left.imageset/arrow.left2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/arrow.left.imageset/arrow.left2x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/arrow.left.imageset/arrow.left3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/arrow.left.imageset/arrow.left3x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/arrow.right.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "arrow.right.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "arrow.right2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "arrow.right3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/arrow.right.imageset/arrow.right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/arrow.right.imageset/arrow.right.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/arrow.right.imageset/arrow.right2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/arrow.right.imageset/arrow.right2x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/arrow.right.imageset/arrow.right3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/arrow.right.imageset/arrow.right3x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/back.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "back1x.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "back2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "back3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/back.imageset/back1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/back.imageset/back1x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/back.imageset/back2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/back.imageset/back2x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/back.imageset/back3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/back.imageset/back3x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/chevron.down.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "chevron_down.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "chevron_down@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "chevron_down@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/chevron.down.imageset/chevron_down.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/chevron.down.imageset/chevron_down.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/chevron.down.imageset/chevron_down@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/chevron.down.imageset/chevron_down@2x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/chevron.down.imageset/chevron_down@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/chevron.down.imageset/chevron_down@3x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/chevron.right.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "chevron_right.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "chevron_right@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "chevron_right@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/chevron.right.imageset/chevron_right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/chevron.right.imageset/chevron_right.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/chevron.right.imageset/chevron_right@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/chevron.right.imageset/chevron_right@2x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/chevron.right.imageset/chevron_right@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/chevron.right.imageset/chevron_right@3x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/chevron.up.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "chevron_up.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "chevron_up@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "chevron_up@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/chevron.up.imageset/chevron_up.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/chevron.up.imageset/chevron_up.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/chevron.up.imageset/chevron_up@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/chevron.up.imageset/chevron_up@2x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/chevron.up.imageset/chevron_up@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Arrows/chevron.up.imageset/chevron_up@3x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/category.update.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "updateCategory.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "updateCategory2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "updateCategory3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/category.update.imageset/updateCategory.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/category.update.imageset/updateCategory.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/category.update.imageset/updateCategory2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/category.update.imageset/updateCategory2x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/category.update.imageset/updateCategory3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/category.update.imageset/updateCategory3x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/close.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "closeTest.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "closeTest2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "closeTest3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/close.imageset/closeTest.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/close.imageset/closeTest.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/close.imageset/closeTest2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/close.imageset/closeTest2x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/close.imageset/closeTest3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/close.imageset/closeTest3x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/edit.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "Vector.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "Vector@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "Vector@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/edit.imageset/Vector.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/edit.imageset/Vector.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/edit.imageset/Vector@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/edit.imageset/Vector@2x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/edit.imageset/Vector@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/edit.imageset/Vector@3x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/folder.plus.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "addCategory1x.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "addCategory2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "addCategory3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/folder.plus.imageset/addCategory1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/folder.plus.imageset/addCategory1x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/folder.plus.imageset/addCategory2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/folder.plus.imageset/addCategory2x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/folder.plus.imageset/addCategory3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/folder.plus.imageset/addCategory3x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/plus.circle.fill.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "plus.circle.fill.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "plus.circle.fill2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "plus.circle.fill3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/plus.circle.fill.imageset/plus.circle.fill.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/plus.circle.fill.imageset/plus.circle.fill.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/plus.circle.fill.imageset/plus.circle.fill2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/plus.circle.fill.imageset/plus.circle.fill2x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/plus.circle.fill.imageset/plus.circle.fill3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/plus.circle.fill.imageset/plus.circle.fill3x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/plus.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "plus.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "plus@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "plus@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/plus.imageset/plus.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/plus.imageset/plus.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/plus.imageset/plus@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/plus.imageset/plus@2x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/plus.imageset/plus@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/plus.imageset/plus@3x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/setting.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "setting.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "setting@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "setting@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/setting.imageset/setting.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/setting.imageset/setting.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/setting.imageset/setting@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/setting.imageset/setting@2x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/setting.imageset/setting@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Button/setting.imageset/setting@3x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/CongratsEmoji.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "emoji_congrats.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "emoji_congrats@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "emoji_congrats@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/CongratsEmoji.imageset/emoji_congrats.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/CongratsEmoji.imageset/emoji_congrats.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/CongratsEmoji.imageset/emoji_congrats@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/CongratsEmoji.imageset/emoji_congrats@2x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/CongratsEmoji.imageset/emoji_congrats@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/CongratsEmoji.imageset/emoji_congrats@3x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/CoolEmoji.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "emoji_cool.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "emoji_cool@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "emoji_cool@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/CoolEmoji.imageset/emoji_cool.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/CoolEmoji.imageset/emoji_cool.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/CoolEmoji.imageset/emoji_cool@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/CoolEmoji.imageset/emoji_cool@2x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/CoolEmoji.imageset/emoji_cool@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/CoolEmoji.imageset/emoji_cool@3x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/GoodEmoji.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "emoji_good.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "emoji_good@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "emoji_good@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/GoodEmoji.imageset/emoji_good.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/GoodEmoji.imageset/emoji_good.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/GoodEmoji.imageset/emoji_good@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/GoodEmoji.imageset/emoji_good@2x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/GoodEmoji.imageset/emoji_good@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/GoodEmoji.imageset/emoji_good@3x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/SmileEmoji.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "emoji_smile.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "emoji_smile@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "emoji_smile@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/SmileEmoji.imageset/emoji_smile.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/SmileEmoji.imageset/emoji_smile.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/SmileEmoji.imageset/emoji_smile@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/SmileEmoji.imageset/emoji_smile@2x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/SmileEmoji.imageset/emoji_smile@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/SmileEmoji.imageset/emoji_smile@3x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/sticker.button.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "sticker_button.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "sticker_button@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "sticker_button@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/sticker.button.imageset/sticker_button.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/sticker.button.imageset/sticker_button.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/sticker.button.imageset/sticker_button@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/sticker.button.imageset/sticker_button@2x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/sticker.button.imageset/sticker_button@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Emoji/sticker.button.imageset/sticker_button@3x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/alarmEmoji.empty.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "alarmEmoji.empty.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "alarmEmoji.empty2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "alarmEmoji.empty3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/alarmEmoji.empty.imageset/alarmEmoji.empty.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/alarmEmoji.empty.imageset/alarmEmoji.empty.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/alarmEmoji.empty.imageset/alarmEmoji.empty2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/alarmEmoji.empty.imageset/alarmEmoji.empty2x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/alarmEmoji.empty.imageset/alarmEmoji.empty3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/alarmEmoji.empty.imageset/alarmEmoji.empty3x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/followersEmoji.empty.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "followersEmoji.empty.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "followersEmoji.empty2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "followersEmoji.empty3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/followersEmoji.empty.imageset/followersEmoji.empty.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/followersEmoji.empty.imageset/followersEmoji.empty.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/followersEmoji.empty.imageset/followersEmoji.empty2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/followersEmoji.empty.imageset/followersEmoji.empty2x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/followersEmoji.empty.imageset/followersEmoji.empty3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/followersEmoji.empty.imageset/followersEmoji.empty3x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/followingEmoji.empty.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "followingEmoji.empty.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "followingEmoji.empty2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "followingEmoji.empty3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/followingEmoji.empty.imageset/followingEmoji.empty.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/followingEmoji.empty.imageset/followingEmoji.empty.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/followingEmoji.empty.imageset/followingEmoji.empty2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/followingEmoji.empty.imageset/followingEmoji.empty2x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/followingEmoji.empty.imageset/followingEmoji.empty3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/followingEmoji.empty.imageset/followingEmoji.empty3x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/scheduleEmoji.empty.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "emptyEmoji.schedule.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "emptyEmoji.schedule2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "emptyEmoji.schedule3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/scheduleEmoji.empty.imageset/emptyEmoji.schedule.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/scheduleEmoji.empty.imageset/emptyEmoji.schedule.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/scheduleEmoji.empty.imageset/emptyEmoji.schedule2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/scheduleEmoji.empty.imageset/emptyEmoji.schedule2x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/scheduleEmoji.empty.imageset/emptyEmoji.schedule3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/scheduleEmoji.empty.imageset/emptyEmoji.schedule3x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/searchEmoji.empty.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "userEmoji.empty.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "userEmoji.empty2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "userEmoji.empty3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/searchEmoji.empty.imageset/userEmoji.empty.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/searchEmoji.empty.imageset/userEmoji.empty.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/searchEmoji.empty.imageset/userEmoji.empty2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/searchEmoji.empty.imageset/userEmoji.empty2x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/searchEmoji.empty.imageset/userEmoji.empty3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/EmptyViewEmoji/searchEmoji.empty.imageset/userEmoji.empty3x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/alarm.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "alarm.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "alarm@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "alarm@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/alarm.imageset/alarm.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/alarm.imageset/alarm.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/alarm.imageset/alarm@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/alarm.imageset/alarm@2x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/alarm.imageset/alarm@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/alarm.imageset/alarm@3x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/box.filled.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "rectangle.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "rectangle@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "rectangle@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/box.filled.imageset/rectangle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/box.filled.imageset/rectangle.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/box.filled.imageset/rectangle@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/box.filled.imageset/rectangle@2x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/box.filled.imageset/rectangle@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/box.filled.imageset/rectangle@3x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/calendar.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "calendar.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "calendar2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "calendar3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/calendar.imageset/calendar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/calendar.imageset/calendar.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/calendar.imageset/calendar2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/calendar.imageset/calendar2x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/calendar.imageset/calendar3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/calendar.imageset/calendar3x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/date.end.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "date_end.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "date_end@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "date_end@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/date.end.imageset/date_end.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/date.end.imageset/date_end.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/date.end.imageset/date_end@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/date.end.imageset/date_end@2x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/date.end.imageset/date_end@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/date.end.imageset/date_end@3x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/date.start.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "date_start.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "date_start@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "date_start@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/date.start.imageset/date_start.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/date.start.imageset/date_start.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/date.start.imageset/date_start@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/date.start.imageset/date_start@2x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/date.start.imageset/date_start@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/date.start.imageset/date_start@3x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/default.person.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "Frame 1548.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "Frame 1548@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "Frame 1548@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/default.person.imageset/Frame 1548.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/default.person.imageset/Frame 1548.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/default.person.imageset/Frame 1548@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/default.person.imageset/Frame 1548@2x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/default.person.imageset/Frame 1548@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/default.person.imageset/Frame 1548@3x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/search.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "search.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "search@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "search@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/search.imageset/search.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/search.imageset/search.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/search.imageset/search@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/search.imageset/search@2x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/search.imageset/search@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/search.imageset/search@3x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/time.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "time.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "time2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "time3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/time.imageset/time.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/time.imageset/time.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/time.imageset/time2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/time.imageset/time2x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/time.imageset/time3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/time.imageset/time3x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/visibility.disabled.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "visibility_disabled.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "visibility_disabled@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "visibility_disabled@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/visibility.disabled.imageset/visibility_disabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/visibility.disabled.imageset/visibility_disabled.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/visibility.disabled.imageset/visibility_disabled@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/visibility.disabled.imageset/visibility_disabled@2x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/visibility.disabled.imageset/visibility_disabled@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/visibility.disabled.imageset/visibility_disabled@3x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/visibility.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "visibility.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "visibility@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "visibility@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/visibility.imageset/visibility.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/visibility.imageset/visibility.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/visibility.imageset/visibility@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/visibility.imageset/visibility@2x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/visibility.imageset/visibility@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/Information/visibility.imageset/visibility@3x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.completed.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "work_completed.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "work_completed@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "work_completed@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.completed.imageset/work_completed.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.completed.imageset/work_completed.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.completed.imageset/work_completed@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.completed.imageset/work_completed@2x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.completed.imageset/work_completed@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.completed.imageset/work_completed@3x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.hold.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "work_beforecheck.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "work_beforecheck@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "work_beforecheck@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.hold.imageset/work_beforecheck.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.hold.imageset/work_beforecheck.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.hold.imageset/work_beforecheck@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.hold.imageset/work_beforecheck@2x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.hold.imageset/work_beforecheck@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.hold.imageset/work_beforecheck@3x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.incomplete.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "work_uncompleted.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "work_uncompleted@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "work_uncompleted@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.incomplete.imageset/work_uncompleted.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.incomplete.imageset/work_uncompleted.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.incomplete.imageset/work_uncompleted@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.incomplete.imageset/work_uncompleted@2x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.incomplete.imageset/work_uncompleted@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.incomplete.imageset/work_uncompleted@3x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.proceeding.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "work_ongoing.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "work_ongoing@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "work_ongoing@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.proceeding.imageset/work_ongoing.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.proceeding.imageset/work_ongoing.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.proceeding.imageset/work_ongoing@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.proceeding.imageset/work_ongoing@2x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.proceeding.imageset/work_ongoing@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.proceeding.imageset/work_ongoing@3x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.upcomming.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "work_prearranged.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "work_prearranged@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "work_prearranged@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.upcomming.imageset/work_prearranged.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.upcomming.imageset/work_prearranged.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.upcomming.imageset/work_prearranged@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.upcomming.imageset/work_prearranged@2x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.upcomming.imageset/work_prearranged@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/State/state.upcomming.imageset/work_prearranged@3x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/User Input/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/User Input/checkmark.fill.imageset/CheckBox.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/User Input/checkmark.fill.imageset/CheckBox.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/User Input/checkmark.fill.imageset/CheckBox2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/User Input/checkmark.fill.imageset/CheckBox2x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/User Input/checkmark.fill.imageset/CheckBox3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/User Input/checkmark.fill.imageset/CheckBox3x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/User Input/checkmark.fill.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "CheckBox.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "CheckBox2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "CheckBox3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/User Input/radio.disabled.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "radio_disabled.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "radio_disabled@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "radio_disabled@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/User Input/radio.disabled.imageset/radio_disabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/User Input/radio.disabled.imageset/radio_disabled.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/User Input/radio.disabled.imageset/radio_disabled@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/User Input/radio.disabled.imageset/radio_disabled@2x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/User Input/radio.disabled.imageset/radio_disabled@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/User Input/radio.disabled.imageset/radio_disabled@3x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/User Input/radio.enabled.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "radio_enabled.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "radio_enabled2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "radio_enabled3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/User Input/radio.enabled.imageset/radio_enabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/User Input/radio.enabled.imageset/radio_enabled.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/User Input/radio.enabled.imageset/radio_enabled2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/User Input/radio.enabled.imageset/radio_enabled2x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/Symbols/User Input/radio.enabled.imageset/radio_enabled3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/Symbols/User Input/radio.enabled.imageset/radio_enabled3x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/emptyImage.imageset/Bounding box.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/emptyImage.imageset/Bounding box.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/emptyImage.imageset/Bounding box@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/emptyImage.imageset/Bounding box@2x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/emptyImage.imageset/Bounding box@3x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/YAPP-Github/20th-ALL-Rounder-Team-1-iOS/241fe17b33127c42e21cd305ce2b3b68365b0c13/Weekand/Weekand/Resources/Assets.xcassets/emptyImage.imageset/Bounding box@3x.png
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Assets.xcassets/emptyImage.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "Bounding box.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "filename" : "Bounding box@2x.png",
10 | "idiom" : "universal",
11 | "scale" : "2x"
12 | },
13 | {
14 | "filename" : "Bounding box@3x.png",
15 | "idiom" : "universal",
16 | "scale" : "3x"
17 | }
18 | ],
19 | "info" : {
20 | "author" : "xcode",
21 | "version" : 1
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Weekand/Weekand/Resources/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | NSPhotoLibraryUsageDescription
6 | 프로필 사진을 설정하려면 사진 접근 권한을 허용해주세요
7 | UIAppFonts
8 |
9 | PretendardVariable.ttf
10 |
11 | UIApplicationSceneManifest
12 |
13 | UIApplicationSupportsMultipleScenes
14 |
15 | UISceneConfigurations
16 |
17 | UIWindowSceneSessionRoleApplication
18 |
19 |
20 | UISceneConfigurationName
21 | Default Configuration
22 | UISceneDelegateClassName
23 | $(PRODUCT_MODULE_NAME).SceneDelegate
24 |
25 |
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------