├── .gitattributes ├── .github ├── ISSUE_TEMPLATE │ ├── README.md │ ├── bug_report.md │ ├── document_template.md │ └── feature_template.md ├── PULL_REQUEST_TEMPLATE.md ├── issue_template-1 │ └── README.md └── issue_template-2 │ └── README.md ├── .gitignore ├── GitSpace.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ ├── IDEWorkspaceChecks.plist │ │ └── swiftpm │ │ └── Package.resolved └── xcshareddata │ └── xcschemes │ ├── GitSpace copy.xcscheme │ └── GitSpace.xcscheme ├── GitSpace ├── GitSpaceApp.swift ├── InitialView.swift ├── Preview Content │ └── Preview Assets.xcassets │ │ └── Contents.json ├── Resources │ ├── App │ │ └── plist │ │ │ ├── GoogleService-Info.plist │ │ │ └── Info.plist │ ├── Assets.xcassets │ │ ├── AccentColor.colorset │ │ │ └── Contents.json │ │ ├── AppIcon.appiconset │ │ │ ├── 100.png │ │ │ ├── 102.png │ │ │ ├── 1024.png │ │ │ ├── 114.png │ │ │ ├── 120.png │ │ │ ├── 128.png │ │ │ ├── 144.png │ │ │ ├── 152.png │ │ │ ├── 16.png │ │ │ ├── 167.png │ │ │ ├── 172.png │ │ │ ├── 180.png │ │ │ ├── 196.png │ │ │ ├── 20.png │ │ │ ├── 216.png │ │ │ ├── 256.png │ │ │ ├── 29.png │ │ │ ├── 32.png │ │ │ ├── 40.png │ │ │ ├── 48.png │ │ │ ├── 50.png │ │ │ ├── 512.png │ │ │ ├── 55.png │ │ │ ├── 57.png │ │ │ ├── 58.png │ │ │ ├── 60.png │ │ │ ├── 64.png │ │ │ ├── 66.png │ │ │ ├── 72.png │ │ │ ├── 76.png │ │ │ ├── 80.png │ │ │ ├── 87.png │ │ │ ├── 88.png │ │ │ ├── 92.png │ │ │ └── Contents.json │ │ ├── Contents.json │ │ ├── CustomIcons │ │ │ ├── Contents.json │ │ │ ├── KnockIcon.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── knockIcon-dark.png │ │ │ │ ├── knockIcon-dark@2x.png │ │ │ │ ├── knockIcon-dark@3x.png │ │ │ │ ├── knockIcon-light.png │ │ │ │ ├── knockIcon-light@2x.png │ │ │ │ └── knockIcon-light@3x.png │ │ │ ├── KnockTabBarIcon.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── knock_icon_accentColor@1x.png │ │ │ │ ├── knock_icon_accentColor@2x.png │ │ │ │ ├── knock_icon_accentColor@3x.png │ │ │ │ ├── knock_icon_accentColor_dark@1x.png │ │ │ │ ├── knock_icon_accentColor_dark@2x.png │ │ │ │ └── knock_icon_accentColor_dark@3x.png │ │ │ └── RepositoryIcon.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── customRepo-dark.png │ │ │ │ ├── customRepo-dark@2x.png │ │ │ │ ├── customRepo-dark@3x.png │ │ │ │ ├── customRepo-light.png │ │ │ │ ├── customRepo-light@2x.png │ │ │ │ └── customRepo-light@3x.png │ │ ├── GSGrayColors │ │ │ ├── Contents.json │ │ │ ├── GSGray2.colorset │ │ │ │ └── Contents.json │ │ │ ├── GSGray3.colorset │ │ │ │ └── Contents.json │ │ │ └── GSgray1.colorset │ │ │ │ └── Contents.json │ │ ├── GSPurple.colorset │ │ │ └── Contents.json │ │ ├── GSRed.colorset │ │ │ └── Contents.json │ │ ├── GuideImage.imageset │ │ │ ├── Contents.json │ │ │ ├── GuideImage.png │ │ │ └── GuideImage_dark.png │ │ ├── MascotImages │ │ │ ├── Contents.json │ │ │ ├── EmptyView │ │ │ │ ├── Contents.json │ │ │ │ ├── GitSpace-Chat-Empty.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ ├── emptyView-chat-dark.png │ │ │ │ │ ├── emptyView-chat-dark@2x.png │ │ │ │ │ ├── emptyView-chat-dark@3x.png │ │ │ │ │ ├── emptyView-chat-light.png │ │ │ │ │ ├── emptyView-chat-light@2x.png │ │ │ │ │ └── emptyView-chat-light@3x.png │ │ │ │ ├── GitSpace-Knock-Empty.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ ├── emptyView-knock-dark.png │ │ │ │ │ ├── emptyView-knock-dark@2x.png │ │ │ │ │ ├── emptyView-knock-dark@3x.png │ │ │ │ │ ├── emptyView-knock-light.png │ │ │ │ │ ├── emptyView-knock-light@2x.png │ │ │ │ │ └── emptyView-knock-light@3x.png │ │ │ │ ├── GitSpace-ReadMe-Empty.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ ├── GitSpace-Readme-Empty-Dark.png │ │ │ │ │ ├── GitSpace-Readme-Empty-Dark@2x.png │ │ │ │ │ ├── GitSpace-Readme-Empty-Dark@3x.png │ │ │ │ │ ├── GitSpace-Readme-Empty.png │ │ │ │ │ ├── GitSpace-Readme-Empty@2x.png │ │ │ │ │ └── GitSpace-Readme-Empty@3x.png │ │ │ │ ├── GitSpace-Star-Empty.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ ├── emptyView-star-dark.png │ │ │ │ │ ├── emptyView-star-dark@2x.png │ │ │ │ │ ├── emptyView-star-dark@3x.png │ │ │ │ │ ├── emptyView-star-light.png │ │ │ │ │ ├── emptyView-star-light@2x.png │ │ │ │ │ └── emptyView-star-light@3x.png │ │ │ │ └── GitSpace-Tag-Empty.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ ├── emptyView-tag-dark.png │ │ │ │ │ ├── emptyView-tag-dark@2x.png │ │ │ │ │ ├── emptyView-tag-dark@3x.png │ │ │ │ │ ├── emptyView-tag-light.png │ │ │ │ │ ├── emptyView-tag-light@2x.png │ │ │ │ │ └── emptyView-tag-light@3x.png │ │ │ ├── GitSpace-ContributorListView.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── GitSpace-ContributorListView-DarkMode@1x.png │ │ │ │ ├── GitSpace-ContributorListView-DarkMode@2x.png │ │ │ │ ├── GitSpace-ContributorListView-DarkMode@3x.png │ │ │ │ ├── GitSpace-ContributorListView@1x.png │ │ │ │ ├── GitSpace-ContributorListView@2x.png │ │ │ │ └── GitSpace-ContributorListView@3x.png │ │ │ ├── GitSpace-Loading.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── loading-dark.png │ │ │ │ ├── loading-dark@2x.png │ │ │ │ ├── loading-dark@3x.png │ │ │ │ ├── loading-light.png │ │ │ │ ├── loading-light@2x.png │ │ │ │ └── loading-light@3x.png │ │ │ ├── GitSpace-Signin.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── GitSpace-Signin-DarkMode.png │ │ │ │ ├── GitSpace-Signin-DarkMode@2x.png │ │ │ │ ├── GitSpace-Signin-DarkMode@3x.png │ │ │ │ ├── GitSpace-Signin.png │ │ │ │ ├── GitSpace-Signin@2x.png │ │ │ │ └── GitSpace-Signin@3x.png │ │ │ ├── GuideView │ │ │ │ ├── Contents.json │ │ │ │ ├── GitSpace-Activity-Guide.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ ├── activity-guide-dark.png │ │ │ │ │ ├── activity-guide-dark@2x.png │ │ │ │ │ ├── activity-guide-dark@3x.png │ │ │ │ │ ├── activity-guidie-light.png │ │ │ │ │ ├── activity-guidie-light@2x.png │ │ │ │ │ └── activity-guidie-light@3x.png │ │ │ │ ├── GitSpace-Block.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ ├── GitSpace-Block-Dark.png │ │ │ │ │ ├── GitSpace-Block-Dark@2x.png │ │ │ │ │ ├── GitSpace-Block-Dark@3x.png │ │ │ │ │ ├── GitSpace-Block-Light.png │ │ │ │ │ ├── GitSpace-Block-Light@2x.png │ │ │ │ │ └── GitSpace-Block-Light@3x.png │ │ │ │ ├── GitSpace-Chat-Guide.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ ├── chat-guide-dark.png │ │ │ │ │ ├── chat-guide-dark@2x.png │ │ │ │ │ ├── chat-guide-dark@3x.png │ │ │ │ │ ├── chat-guide-light.png │ │ │ │ │ ├── chat-guide-light@2x.png │ │ │ │ │ └── chat-guide-light@3x.png │ │ │ │ ├── GitSpace-General-Guide.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ ├── guide-general-dark.png │ │ │ │ │ ├── guide-general-dark@2x.png │ │ │ │ │ ├── guide-general-dark@3x.png │ │ │ │ │ ├── guide-general-light.png │ │ │ │ │ ├── guide-general-light@2x.png │ │ │ │ │ └── guide-general-light@3x.png │ │ │ │ ├── GitSpace-Knock.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ ├── GitSpace-Knock-Dark.png │ │ │ │ │ ├── GitSpace-Knock-Dark@2x.png │ │ │ │ │ ├── GitSpace-Knock-Dark@3x.png │ │ │ │ │ ├── GitSpace-Knock-Light.png │ │ │ │ │ ├── GitSpace-Knock-Light@2x.png │ │ │ │ │ └── GitSpace-Knock-Light@3x.png │ │ │ │ ├── GitSpace-KnockHistoryView.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ ├── GitSpace-KnockHistoryView-DarkMode@1x.png │ │ │ │ │ ├── GitSpace-KnockHistoryView-DarkMode@2x.png │ │ │ │ │ ├── GitSpace-KnockHistoryView-DarkMode@3x.png │ │ │ │ │ ├── GitSpace-KnockHistoryView@1x.png │ │ │ │ │ ├── GitSpace-KnockHistoryView@2x.png │ │ │ │ │ └── GitSpace-KnockHistoryView@3x.png │ │ │ │ ├── GitSpace-Report.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ ├── GitSpace-Report-Dark.png │ │ │ │ │ ├── GitSpace-Report-Dark@2x.png │ │ │ │ │ ├── GitSpace-Report-Dark@3x.png │ │ │ │ │ ├── GitSpace-Report-Light.png │ │ │ │ │ ├── GitSpace-Report-Light@2x.png │ │ │ │ │ └── GitSpace-Report-Light@3x.png │ │ │ │ ├── GitSpace-Star.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ ├── GitSpace-Star-Dark.png │ │ │ │ │ ├── GitSpace-Star-Dark@2x.png │ │ │ │ │ ├── GitSpace-Star-Dark@3x.png │ │ │ │ │ ├── GitSpace-Star-Light.png │ │ │ │ │ ├── GitSpace-Star-Light@2x.png │ │ │ │ │ └── GitSpace-Star-Light@3x.png │ │ │ │ └── GitSpace-Tag-Guide.imageset │ │ │ │ │ ├── Contents.json │ │ │ │ │ ├── tag_star_dark.png │ │ │ │ │ ├── tag_star_dark@2x.png │ │ │ │ │ ├── tag_star_dark@3x.png │ │ │ │ │ ├── tag_star_light.png │ │ │ │ │ ├── tag_star_light@2x.png │ │ │ │ │ └── tag_star_light@3x.png │ │ │ └── storage │ │ │ │ ├── Contents.json │ │ │ │ └── GitSpace-MainKnockView.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── GitSpace-MainKnockView-DarkMode@1x.png │ │ │ │ ├── GitSpace-MainKnockView-DarkMode@2x.png │ │ │ │ ├── GitSpace-MainKnockView-DarkMode@3x.png │ │ │ │ ├── GitSpace-MainKnockView@1x.png │ │ │ │ ├── GitSpace-MainKnockView@2x.png │ │ │ │ └── GitSpace-MainKnockView@3x.png │ │ ├── ProfilePlaceholder.imageset │ │ │ ├── Contents.json │ │ │ └── ProfilePlaceholder.png │ │ ├── UnreadMessage │ │ │ ├── Contents.json │ │ │ ├── UnreadMessageCapsule.colorset │ │ │ │ └── Contents.json │ │ │ └── UnreadMessageText.colorset │ │ │ │ └── Contents.json │ │ └── avatarImage.imageset │ │ │ ├── Contents.json │ │ │ ├── avatarImage_darkMode.png │ │ │ └── avatarImage_lightMode.png │ ├── GitSpace.entitlements │ ├── LoadingDots.json │ └── LoadingDotsDark.json ├── Sources │ ├── Models │ │ ├── BlockedUsers.swift │ │ ├── Chat.swift │ │ ├── ImageCacheManager.swift │ │ ├── Knock.swift │ │ ├── Message.swift │ │ ├── PushNotification │ │ │ ├── PushNotificationManager.swift │ │ │ ├── PushNotificationMessageBody.swift │ │ │ └── PushNotificationProtocol.swift │ │ ├── Report.swift │ │ ├── Repository.swift │ │ ├── Tag.swift │ │ └── UserInfo.swift │ ├── Network │ │ ├── APIModels │ │ │ ├── AppInfo.swift │ │ │ ├── ContributorProfile.swift │ │ │ ├── Event.swift │ │ │ ├── FollowerResponse.swift │ │ │ ├── FollowingResponse.swift │ │ │ ├── GithubUser.swift │ │ │ ├── Owner.swift │ │ │ ├── RepositoryResponse.swift │ │ │ └── UserResponse.swift │ │ ├── Common │ │ │ ├── Endpoint.swift │ │ │ ├── GitHubAPIError.swift │ │ │ ├── HTTPClient.swift │ │ │ └── HTTPRequestMethod.swift │ │ ├── Endpoints │ │ │ └── GitHubAPIEndpoint.swift │ │ ├── Interface │ │ │ ├── Blockable.swift │ │ │ └── Reportable.swift │ │ └── Services │ │ │ ├── AppStoreUpdateChecker.swift │ │ │ └── GitHubService.swift │ ├── Router │ │ ├── ContentView.swift │ │ ├── GSTabBarRouter.swift │ │ └── KnockCommunicationRouter.swift │ ├── ViewModels │ │ ├── ChatViewModel.swift │ │ ├── ContributorViewModel.swift │ │ ├── CurrentUserProfileViewModel.swift │ │ ├── EventViewModel.swift │ │ ├── FollowerViewModel.swift │ │ ├── GitHubAuthManager.swift │ │ ├── KeyChainManager.swift │ │ ├── KnockHistory │ │ │ └── KnockViewManager.swift │ │ ├── MessageViewModel.swift │ │ ├── RepositoryDetailViewModel.swift │ │ ├── RepositoryViewModel.swift │ │ ├── TagViewModel.swift │ │ ├── TargetUserProfileViewModel.swift │ │ └── UserViewModel.swift │ └── Views │ │ ├── Auth │ │ ├── LoadingProgressView.swift │ │ ├── LottieView.swift │ │ └── SigninView.swift │ │ ├── Chat │ │ ├── ChatRoom │ │ │ ├── ChatRoomInfoView.swift │ │ │ ├── ChatRoomKnockSection.swift │ │ │ ├── ChatRoomView.swift │ │ │ └── MessageCell.swift │ │ ├── GithubProfileImage.swift │ │ └── MainChat │ │ │ ├── ChatListCell.swift │ │ │ ├── ChatListSection.swift │ │ │ ├── ChatListSkeletonCell.swift │ │ │ ├── ChatUserRecommendationSection.swift │ │ │ └── MainChatView.swift │ │ ├── Common │ │ ├── BlockView.swift │ │ ├── FailToLoadReadmeView.swift │ │ ├── KnockMessageMenu.swift │ │ ├── ReadmeLoadingView.swift │ │ ├── ReportView.swift │ │ ├── SuggestBlockView.swift │ │ └── TopperProfileView.swift │ │ ├── GuideCenter │ │ ├── GuideBlock │ │ │ ├── AfterBlockGuideView.swift │ │ │ ├── BlockGuideView.swift │ │ │ ├── BlockListGuideView.swift │ │ │ └── GuideBlockSection.swift │ │ ├── GuideCenterView.swift │ │ ├── GuideFunc │ │ │ ├── ActivityGuideView.swift │ │ │ ├── ChatGuideView.swift │ │ │ ├── GuideFuncSection.swift │ │ │ ├── KnockGuideView.swift │ │ │ ├── StarGuideView.swift │ │ │ └── TagGuideView.swift │ │ └── GuideReport │ │ │ ├── AfterReportGuideView.swift │ │ │ ├── GuideReportSection.swift │ │ │ ├── ReportGuideView.swift │ │ │ └── WhatToReportGuideView.swift │ │ ├── Home │ │ ├── ActivityFeedView.swift │ │ ├── ActivityView.swift │ │ ├── AddTagSheetView.swift │ │ ├── ContributorListCell.swift │ │ ├── ContributorListSkeletonCell.swift │ │ ├── ContributorListSkeletonView.swift │ │ ├── ContributorListView.swift │ │ ├── HomeCardSkeletonCell.swift │ │ ├── MainHomeView.swift │ │ ├── RepositoryCardView.swift │ │ ├── RepositoryDetailView.swift │ │ └── StarredView.swift │ │ ├── Knock │ │ ├── KnockBox │ │ │ └── ReceivedKnockView.swift │ │ ├── MainKnockBox │ │ │ ├── EachKnockCell.swift │ │ │ ├── KnockHistoryView.swift │ │ │ ├── MainKnockView.swift │ │ │ └── ReceivedKnockDetailView.swift │ │ └── SendKnock │ │ │ ├── AfterSendKnockSection.swift │ │ │ ├── BeforeSendKnockSection.swift │ │ │ ├── EditingKnockSection.swift │ │ │ ├── SendKnockTextEditSection.swift │ │ │ └── SendKnockView.swift │ │ ├── Notification │ │ ├── KnockNotificationCell.swift │ │ ├── NotificationView.swift │ │ └── SystemNotificationCell.swift │ │ ├── Profile │ │ ├── CurrentUserProfileView.swift │ │ ├── FollowingSkeletonView.swift │ │ ├── MainProfileView.swift │ │ ├── TargetUserFollowingListView.swift │ │ └── TargetUserProfileView.swift │ │ └── Settings │ │ ├── Account │ │ ├── BlockedUsersListCell.swift │ │ ├── BlockedUsersListSkeletonView.swift │ │ ├── BlockedUsersListView.swift │ │ └── SetAccountView.swift │ │ ├── AppSettings │ │ ├── SetAppearanceView.swift │ │ ├── SetKnockControlsView.swift │ │ ├── SetLanguageView.swift │ │ ├── SetNotificationsView.swift │ │ ├── SetTextMediaView.swift │ │ └── SetWorkingHoursView.swift │ │ ├── Legal │ │ ├── SetLicensesView.swift │ │ └── TermsOfServiceView.swift │ │ ├── SetMainView.swift │ │ └── SetPrivacySafetyView.swift ├── Utilities │ ├── Components │ │ ├── GSButton.swift │ │ ├── GSCanvas.swift │ │ ├── GSNavigationLink.swift │ │ ├── GSTabBarBackGround.swift │ │ ├── GSTabBarIcon.swift │ │ ├── GSText.swift │ │ ├── GSTextEditor.swift │ │ └── GSTextField.swift │ ├── Constant.swift │ ├── CustomHostingController.swift │ ├── DesignSystemStyleEnums.swift │ ├── Extensions │ │ ├── AppDelegate+Firebase.swift │ │ ├── Button+ColorScheme.swift │ │ ├── CGFloat+.swift │ │ ├── Color+.swift │ │ ├── Date+.swift │ │ ├── Date+DateDiff.swift │ │ ├── Image+.swift │ │ ├── Int+.swift │ │ ├── String+.swift │ │ ├── UIFont+.swift │ │ ├── UIScreen+.swift │ │ ├── URL+DeepLink.swift │ │ ├── View+.swift │ │ ├── View+DesignSystem.swift │ │ ├── View+TextEditorBackgroundColor.swift │ │ └── View+cornerRadius.swift │ ├── HalfSheetManager.swift │ ├── KeyboardHandler.swift │ ├── Keychain.swift │ ├── Modifiers │ │ ├── BlinkingSkeletonModifier.swift │ │ ├── ButtonLabelLayoutModifier.swift │ │ ├── ChatModifiers.swift │ │ ├── GSButtonStyleModifiers.swift │ │ ├── GSCanvasModifier.swift │ │ ├── GSTextEditorLayoutModifier.swift │ │ ├── GSTextFieldLayoutModifier.swift │ │ ├── LabelModifier.swift │ │ ├── PinnedViewHeaderModifier.swift │ │ ├── ShadowColorSchemeModifier.swift │ │ ├── TabBarBackgroundModifier.swift │ │ └── ViewDidLoadModifier.swift │ ├── Utility.swift │ └── ViewHighlightColorStyle.swift ├── en.lproj │ └── Localizable.strings └── ko.lproj │ └── Localizable.strings ├── License ├── README.md ├── SUMMARY.md └── docs ├── README.md ├── feedback ├── 230119_Feedback.md └── README.md ├── retrospect ├── README.md ├── first_sprint.md └── second_sprint.md └── tech ├── 230120_renderingMarkdown_jegyun.md ├── DesignSystem ├── DesignSystem.md └── README.md ├── FCM ├── 1.ApplyFirebaseCloudMessage.md └── 2.RealDeviceDataTransmit.md ├── FireStore_CollectionGroupQuery.md ├── Firebase OAuth Login(GitLab, Apple, GitHub).md ├── Firestore_Listener.md └── README.md /.gitattributes: -------------------------------------------------------------------------------- 1 | *.pbxproj binary merge=union 2 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/README.md: -------------------------------------------------------------------------------- 1 | # ISSUE\_TEMPLATE 2 | 3 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: "버그가 생긴 부분에 대한 이슈를 작성해주세요❗️ BugFix\U0001F6E0" 4 | title: "[BugFix]" 5 | labels: "bug\U0001F41B" 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Desktop (please complete the following information):** 27 | - OS: [e.g. iOS] 28 | - Browser [e.g. chrome, safari] 29 | - Version [e.g. 22] 30 | 31 | **Smartphone (please complete the following information):** 32 | - Device: [e.g. iPhone6] 33 | - OS: [e.g. iOS8.1] 34 | - Browser [e.g. stock browser, safari] 35 | - Version [e.g. 22] 36 | 37 | **Additional context** 38 | Add any other context about the problem here. 39 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/document_template.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Documents 3 | about: 문서 및 기술 관련 자료에 대한 이슈입니다. 4 | title: "[Docs]" 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | ### 📌 Documents 11 | 12 | 13 | 14 | --- 15 | 16 | ### 🛠️ Tasks 17 | 18 | 19 | 20 | 21 | 22 | * [ ] line 1 23 | * [ ] line 2 24 | 25 | 26 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_template.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: 구현할 기능들에 대한 작업(Task)를 적어주세요! 4 | title: "[Feat]" 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | ### 📝 작업 목적 11 | 12 | 13 | 14 | --- 15 | 16 | ### 🛠️ Tasks 17 | 18 | * [ ] line 1 19 | * [ ] line 2 20 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | ## 개요 및 관련 이슈 2 | - 메인 홈 뷰의 UI를 전체 구현했습니다.(예시) 3 | 4 | ## 작업 사항 5 | - 관리자용 대시보드 구현(예시) 6 | - 관리자용 권한 수정 버튼 추가(예시) 7 | 8 | ## 주요 로직(Optional) 9 | ```diff 10 | - print("변경 전") 11 | + print("변경 후") 12 | ``` 13 | -------------------------------------------------------------------------------- /.github/issue_template-1/README.md: -------------------------------------------------------------------------------- 1 | # ISSUE\_TEMPLATE 2 | 3 | -------------------------------------------------------------------------------- /.github/issue_template-2/README.md: -------------------------------------------------------------------------------- 1 | # ISSUE\_TEMPLATE 2 | 3 | -------------------------------------------------------------------------------- /GitSpace.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /GitSpace.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /GitSpace/GitSpaceApp.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GitSpaceApp.swift 3 | // GitSpace 4 | // 5 | // Created by 이승준 on 2023/01/17. 6 | // 7 | 8 | import SwiftUI 9 | 10 | @main 11 | struct GitSpaceApp: App { 12 | // register app delegate for Firebase setup 13 | @UIApplicationDelegateAdaptor(AppDelegate.self) var delegate 14 | 15 | var body: some Scene { 16 | let tabBarRouter = delegate.tabBarRouter 17 | let pushNotificationManager = delegate.pushNotificationManager 18 | 19 | WindowGroup { 20 | // !!!: - FCM Test를 진행할 때만 각주를 해제합니다. 21 | // PushNotificationTestView() 22 | 23 | InitialView(tabBarRouter: tabBarRouter) 24 | .environmentObject(ChatStore()) 25 | .environmentObject(UserStore()) 26 | .environmentObject(MessageStore()) 27 | .environmentObject(RepositoryViewModel(service: GitHubService())) 28 | .environmentObject(TagViewModel()) 29 | .environmentObject(GitHubAuthManager()) 30 | .environmentObject(KnockViewManager()) 31 | .environmentObject(FollowingViewModel(service: GitHubService())) 32 | .environmentObject(FollowerViewModel(service: GitHubService())) 33 | .environmentObject(tabBarRouter) 34 | .environmentObject(pushNotificationManager) 35 | .environmentObject(BlockedUsers()) 36 | .onAppear { 37 | UIApplication.shared.applicationIconBadgeNumber = 0 38 | } 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /GitSpace/Preview Content/Preview Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /GitSpace/Resources/App/plist/GoogleService-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CLIENT_ID 6 | 856592841917-a0uqb29mstng5oeqtj9cjkrhmdt95j5b.apps.googleusercontent.com 7 | REVERSED_CLIENT_ID 8 | com.googleusercontent.apps.856592841917-a0uqb29mstng5oeqtj9cjkrhmdt95j5b 9 | API_KEY 10 | AIzaSyCh4YcHMxZiHaiGwSJsbrzfi1KRRzYGAiA 11 | GCM_SENDER_ID 12 | 856592841917 13 | PLIST_VERSION 14 | 1 15 | BUNDLE_ID 16 | com.GitSpace.RBG 17 | PROJECT_ID 18 | gitspace-release 19 | STORAGE_BUCKET 20 | gitspace-release.appspot.com 21 | IS_ADS_ENABLED 22 | 23 | IS_ANALYTICS_ENABLED 24 | 25 | IS_APPINVITE_ENABLED 26 | 27 | IS_GCM_ENABLED 28 | 29 | IS_SIGNIN_ENABLED 30 | 31 | GOOGLE_APP_ID 32 | 1:856592841917:ios:85dd2f0b111addbd0ecbd4 33 | 34 | -------------------------------------------------------------------------------- /GitSpace/Resources/App/plist/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleURLTypes 6 | 7 | 8 | CFBundleTypeRole 9 | Editor 10 | CFBundleURLSchemes 11 | 12 | gitspace-ios 13 | 14 | 15 | 16 | CFBundleTypeRole 17 | Editor 18 | CFBundleURLSchemes 19 | 20 | com.googleusercontent.apps.856592841917-a0uqb29mstng5oeqtj9cjkrhmdt95j5b 21 | 22 | 23 | 24 | CFBundleTypeRole 25 | Editor 26 | CFBundleURLSchemes 27 | 28 | com.googleusercontent.apps.856592841917-a0uqb29mstng5oeqtj9cjkrhmdt95j5b 29 | 30 | 31 | 32 | FirebaseAppDelegateProxyEnabled 33 | 34 | NSAppTransportSecurity 35 | 36 | PUSH_NOTIFICATION_ENDPOINT 37 | $(PUSH_NOTIFICATION_ENDPOINT) 38 | SERVER_KEY 39 | $(SERVER_KEY) 40 | UIBackgroundModes 41 | 42 | fetch 43 | remote-notification 44 | 45 | VALSE_DEVICE_TOKEN 46 | $(VALSE_DEVICE_TOKEN) 47 | 48 | 49 | -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/AccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "0x7A", 9 | "green" : "0xB9", 10 | "red" : "0x2D" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | } 15 | ], 16 | "info" : { 17 | "author" : "xcode", 18 | "version" : 1 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/100.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/102.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/102.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/1024.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/114.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/120.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/128.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/144.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/152.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/16.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/167.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/167.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/172.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/172.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/180.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/196.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/196.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/20.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/216.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/216.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/256.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/29.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/32.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/40.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/48.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/50.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/512.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/55.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/55.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/57.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/58.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/60.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/64.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/66.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/66.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/72.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/76.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/80.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/87.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/88.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/88.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/92.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/AppIcon.appiconset/92.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/CustomIcons/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/CustomIcons/KnockIcon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "knockIcon-light.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "appearances" : [ 10 | { 11 | "appearance" : "luminosity", 12 | "value" : "dark" 13 | } 14 | ], 15 | "filename" : "knockIcon-dark.png", 16 | "idiom" : "universal", 17 | "scale" : "1x" 18 | }, 19 | { 20 | "filename" : "knockIcon-light@2x.png", 21 | "idiom" : "universal", 22 | "scale" : "2x" 23 | }, 24 | { 25 | "appearances" : [ 26 | { 27 | "appearance" : "luminosity", 28 | "value" : "dark" 29 | } 30 | ], 31 | "filename" : "knockIcon-dark@2x.png", 32 | "idiom" : "universal", 33 | "scale" : "2x" 34 | }, 35 | { 36 | "filename" : "knockIcon-light@3x.png", 37 | "idiom" : "universal", 38 | "scale" : "3x" 39 | }, 40 | { 41 | "appearances" : [ 42 | { 43 | "appearance" : "luminosity", 44 | "value" : "dark" 45 | } 46 | ], 47 | "filename" : "knockIcon-dark@3x.png", 48 | "idiom" : "universal", 49 | "scale" : "3x" 50 | } 51 | ], 52 | "info" : { 53 | "author" : "xcode", 54 | "version" : 1 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/CustomIcons/KnockIcon.imageset/knockIcon-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/CustomIcons/KnockIcon.imageset/knockIcon-dark.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/CustomIcons/KnockIcon.imageset/knockIcon-dark@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/CustomIcons/KnockIcon.imageset/knockIcon-dark@2x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/CustomIcons/KnockIcon.imageset/knockIcon-dark@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/CustomIcons/KnockIcon.imageset/knockIcon-dark@3x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/CustomIcons/KnockIcon.imageset/knockIcon-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/CustomIcons/KnockIcon.imageset/knockIcon-light.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/CustomIcons/KnockIcon.imageset/knockIcon-light@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/CustomIcons/KnockIcon.imageset/knockIcon-light@2x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/CustomIcons/KnockIcon.imageset/knockIcon-light@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/CustomIcons/KnockIcon.imageset/knockIcon-light@3x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/CustomIcons/KnockTabBarIcon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "knock_icon_accentColor@1x.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "appearances" : [ 10 | { 11 | "appearance" : "luminosity", 12 | "value" : "dark" 13 | } 14 | ], 15 | "filename" : "knock_icon_accentColor_dark@1x.png", 16 | "idiom" : "universal", 17 | "scale" : "1x" 18 | }, 19 | { 20 | "filename" : "knock_icon_accentColor@2x.png", 21 | "idiom" : "universal", 22 | "scale" : "2x" 23 | }, 24 | { 25 | "appearances" : [ 26 | { 27 | "appearance" : "luminosity", 28 | "value" : "dark" 29 | } 30 | ], 31 | "filename" : "knock_icon_accentColor_dark@2x.png", 32 | "idiom" : "universal", 33 | "scale" : "2x" 34 | }, 35 | { 36 | "filename" : "knock_icon_accentColor@3x.png", 37 | "idiom" : "universal", 38 | "scale" : "3x" 39 | }, 40 | { 41 | "appearances" : [ 42 | { 43 | "appearance" : "luminosity", 44 | "value" : "dark" 45 | } 46 | ], 47 | "filename" : "knock_icon_accentColor_dark@3x.png", 48 | "idiom" : "universal", 49 | "scale" : "3x" 50 | } 51 | ], 52 | "info" : { 53 | "author" : "xcode", 54 | "version" : 1 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/CustomIcons/KnockTabBarIcon.imageset/knock_icon_accentColor@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/CustomIcons/KnockTabBarIcon.imageset/knock_icon_accentColor@1x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/CustomIcons/KnockTabBarIcon.imageset/knock_icon_accentColor@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/CustomIcons/KnockTabBarIcon.imageset/knock_icon_accentColor@2x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/CustomIcons/KnockTabBarIcon.imageset/knock_icon_accentColor@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/CustomIcons/KnockTabBarIcon.imageset/knock_icon_accentColor@3x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/CustomIcons/KnockTabBarIcon.imageset/knock_icon_accentColor_dark@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/CustomIcons/KnockTabBarIcon.imageset/knock_icon_accentColor_dark@1x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/CustomIcons/KnockTabBarIcon.imageset/knock_icon_accentColor_dark@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/CustomIcons/KnockTabBarIcon.imageset/knock_icon_accentColor_dark@2x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/CustomIcons/KnockTabBarIcon.imageset/knock_icon_accentColor_dark@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/CustomIcons/KnockTabBarIcon.imageset/knock_icon_accentColor_dark@3x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/CustomIcons/RepositoryIcon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "customRepo-light.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "appearances" : [ 10 | { 11 | "appearance" : "luminosity", 12 | "value" : "dark" 13 | } 14 | ], 15 | "filename" : "customRepo-dark.png", 16 | "idiom" : "universal", 17 | "scale" : "1x" 18 | }, 19 | { 20 | "filename" : "customRepo-light@2x.png", 21 | "idiom" : "universal", 22 | "scale" : "2x" 23 | }, 24 | { 25 | "appearances" : [ 26 | { 27 | "appearance" : "luminosity", 28 | "value" : "dark" 29 | } 30 | ], 31 | "filename" : "customRepo-dark@2x.png", 32 | "idiom" : "universal", 33 | "scale" : "2x" 34 | }, 35 | { 36 | "filename" : "customRepo-light@3x.png", 37 | "idiom" : "universal", 38 | "scale" : "3x" 39 | }, 40 | { 41 | "appearances" : [ 42 | { 43 | "appearance" : "luminosity", 44 | "value" : "dark" 45 | } 46 | ], 47 | "filename" : "customRepo-dark@3x.png", 48 | "idiom" : "universal", 49 | "scale" : "3x" 50 | } 51 | ], 52 | "info" : { 53 | "author" : "xcode", 54 | "version" : 1 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/CustomIcons/RepositoryIcon.imageset/customRepo-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/CustomIcons/RepositoryIcon.imageset/customRepo-dark.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/CustomIcons/RepositoryIcon.imageset/customRepo-dark@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/CustomIcons/RepositoryIcon.imageset/customRepo-dark@2x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/CustomIcons/RepositoryIcon.imageset/customRepo-dark@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/CustomIcons/RepositoryIcon.imageset/customRepo-dark@3x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/CustomIcons/RepositoryIcon.imageset/customRepo-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/CustomIcons/RepositoryIcon.imageset/customRepo-light.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/CustomIcons/RepositoryIcon.imageset/customRepo-light@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/CustomIcons/RepositoryIcon.imageset/customRepo-light@2x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/CustomIcons/RepositoryIcon.imageset/customRepo-light@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/CustomIcons/RepositoryIcon.imageset/customRepo-light@3x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/GSGrayColors/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/GSGrayColors/GSGray2.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "0.706", 9 | "green" : "0.682", 10 | "red" : "0.659" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | }, 15 | { 16 | "appearances" : [ 17 | { 18 | "appearance" : "luminosity", 19 | "value" : "dark" 20 | } 21 | ], 22 | "color" : { 23 | "color-space" : "srgb", 24 | "components" : { 25 | "alpha" : "1.000", 26 | "blue" : "0.494", 27 | "green" : "0.451", 28 | "red" : "0.443" 29 | } 30 | }, 31 | "idiom" : "universal" 32 | } 33 | ], 34 | "info" : { 35 | "author" : "xcode", 36 | "version" : 1 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/GSGrayColors/GSGray3.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "0.953", 9 | "green" : "0.945", 10 | "red" : "0.933" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | }, 15 | { 16 | "appearances" : [ 17 | { 18 | "appearance" : "luminosity", 19 | "value" : "dark" 20 | } 21 | ], 22 | "color" : { 23 | "color-space" : "display-p3", 24 | "components" : { 25 | "alpha" : "1.000", 26 | "blue" : "0.184", 27 | "green" : "0.160", 28 | "red" : "0.153" 29 | } 30 | }, 31 | "idiom" : "universal" 32 | } 33 | ], 34 | "info" : { 35 | "author" : "xcode", 36 | "version" : 1 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/GSGrayColors/GSgray1.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "0x97", 9 | "green" : "0x8F", 10 | "red" : "0x8D" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | }, 15 | { 16 | "appearances" : [ 17 | { 18 | "appearance" : "luminosity", 19 | "value" : "dark" 20 | } 21 | ], 22 | "color" : { 23 | "color-space" : "srgb", 24 | "components" : { 25 | "alpha" : "1.000", 26 | "blue" : "0.494", 27 | "green" : "0.451", 28 | "red" : "0.443" 29 | } 30 | }, 31 | "idiom" : "universal" 32 | } 33 | ], 34 | "info" : { 35 | "author" : "xcode", 36 | "version" : 1 37 | }, 38 | "properties" : { 39 | "localizable" : true 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/GSPurple.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "0xFF", 9 | "green" : "0x64", 10 | "red" : "0xCD" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | }, 15 | { 16 | "appearances" : [ 17 | { 18 | "appearance" : "luminosity", 19 | "value" : "dark" 20 | } 21 | ], 22 | "color" : { 23 | "color-space" : "srgb", 24 | "components" : { 25 | "alpha" : "1.000", 26 | "blue" : "0xFF", 27 | "green" : "0x64", 28 | "red" : "0xCD" 29 | } 30 | }, 31 | "idiom" : "universal" 32 | } 33 | ], 34 | "info" : { 35 | "author" : "xcode", 36 | "version" : 1 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/GSRed.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "0x5D", 9 | "green" : "0x5A", 10 | "red" : "0xFF" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | }, 15 | { 16 | "appearances" : [ 17 | { 18 | "appearance" : "luminosity", 19 | "value" : "dark" 20 | } 21 | ], 22 | "color" : { 23 | "color-space" : "srgb", 24 | "components" : { 25 | "alpha" : "1.000", 26 | "blue" : "0x5D", 27 | "green" : "0x5A", 28 | "red" : "0xFF" 29 | } 30 | }, 31 | "idiom" : "universal" 32 | } 33 | ], 34 | "info" : { 35 | "author" : "xcode", 36 | "version" : 1 37 | }, 38 | "properties" : { 39 | "localizable" : true 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/GuideImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "GuideImage.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "appearances" : [ 10 | { 11 | "appearance" : "luminosity", 12 | "value" : "dark" 13 | } 14 | ], 15 | "filename" : "GuideImage_dark.png", 16 | "idiom" : "universal", 17 | "scale" : "1x" 18 | }, 19 | { 20 | "idiom" : "universal", 21 | "scale" : "2x" 22 | }, 23 | { 24 | "appearances" : [ 25 | { 26 | "appearance" : "luminosity", 27 | "value" : "dark" 28 | } 29 | ], 30 | "idiom" : "universal", 31 | "scale" : "2x" 32 | }, 33 | { 34 | "idiom" : "universal", 35 | "scale" : "3x" 36 | }, 37 | { 38 | "appearances" : [ 39 | { 40 | "appearance" : "luminosity", 41 | "value" : "dark" 42 | } 43 | ], 44 | "idiom" : "universal", 45 | "scale" : "3x" 46 | } 47 | ], 48 | "info" : { 49 | "author" : "xcode", 50 | "version" : 1 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/GuideImage.imageset/GuideImage.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/GuideImage.imageset/GuideImage.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/GuideImage.imageset/GuideImage_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/GuideImage.imageset/GuideImage_dark.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Chat-Empty.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "emptyView-chat-light.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "appearances" : [ 10 | { 11 | "appearance" : "luminosity", 12 | "value" : "dark" 13 | } 14 | ], 15 | "filename" : "emptyView-chat-dark.png", 16 | "idiom" : "universal", 17 | "scale" : "1x" 18 | }, 19 | { 20 | "filename" : "emptyView-chat-light@2x.png", 21 | "idiom" : "universal", 22 | "scale" : "2x" 23 | }, 24 | { 25 | "appearances" : [ 26 | { 27 | "appearance" : "luminosity", 28 | "value" : "dark" 29 | } 30 | ], 31 | "filename" : "emptyView-chat-dark@2x.png", 32 | "idiom" : "universal", 33 | "scale" : "2x" 34 | }, 35 | { 36 | "filename" : "emptyView-chat-light@3x.png", 37 | "idiom" : "universal", 38 | "scale" : "3x" 39 | }, 40 | { 41 | "appearances" : [ 42 | { 43 | "appearance" : "luminosity", 44 | "value" : "dark" 45 | } 46 | ], 47 | "filename" : "emptyView-chat-dark@3x.png", 48 | "idiom" : "universal", 49 | "scale" : "3x" 50 | } 51 | ], 52 | "info" : { 53 | "author" : "xcode", 54 | "version" : 1 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Chat-Empty.imageset/emptyView-chat-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Chat-Empty.imageset/emptyView-chat-dark.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Chat-Empty.imageset/emptyView-chat-dark@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Chat-Empty.imageset/emptyView-chat-dark@2x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Chat-Empty.imageset/emptyView-chat-dark@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Chat-Empty.imageset/emptyView-chat-dark@3x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Chat-Empty.imageset/emptyView-chat-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Chat-Empty.imageset/emptyView-chat-light.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Chat-Empty.imageset/emptyView-chat-light@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Chat-Empty.imageset/emptyView-chat-light@2x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Chat-Empty.imageset/emptyView-chat-light@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Chat-Empty.imageset/emptyView-chat-light@3x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Knock-Empty.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "emptyView-knock-light.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "appearances" : [ 10 | { 11 | "appearance" : "luminosity", 12 | "value" : "dark" 13 | } 14 | ], 15 | "filename" : "emptyView-knock-dark.png", 16 | "idiom" : "universal", 17 | "scale" : "1x" 18 | }, 19 | { 20 | "filename" : "emptyView-knock-light@2x.png", 21 | "idiom" : "universal", 22 | "scale" : "2x" 23 | }, 24 | { 25 | "appearances" : [ 26 | { 27 | "appearance" : "luminosity", 28 | "value" : "dark" 29 | } 30 | ], 31 | "filename" : "emptyView-knock-dark@2x.png", 32 | "idiom" : "universal", 33 | "scale" : "2x" 34 | }, 35 | { 36 | "filename" : "emptyView-knock-light@3x.png", 37 | "idiom" : "universal", 38 | "scale" : "3x" 39 | }, 40 | { 41 | "appearances" : [ 42 | { 43 | "appearance" : "luminosity", 44 | "value" : "dark" 45 | } 46 | ], 47 | "filename" : "emptyView-knock-dark@3x.png", 48 | "idiom" : "universal", 49 | "scale" : "3x" 50 | } 51 | ], 52 | "info" : { 53 | "author" : "xcode", 54 | "version" : 1 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Knock-Empty.imageset/emptyView-knock-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Knock-Empty.imageset/emptyView-knock-dark.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Knock-Empty.imageset/emptyView-knock-dark@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Knock-Empty.imageset/emptyView-knock-dark@2x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Knock-Empty.imageset/emptyView-knock-dark@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Knock-Empty.imageset/emptyView-knock-dark@3x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Knock-Empty.imageset/emptyView-knock-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Knock-Empty.imageset/emptyView-knock-light.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Knock-Empty.imageset/emptyView-knock-light@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Knock-Empty.imageset/emptyView-knock-light@2x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Knock-Empty.imageset/emptyView-knock-light@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Knock-Empty.imageset/emptyView-knock-light@3x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-ReadMe-Empty.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "GitSpace-Readme-Empty.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "appearances" : [ 10 | { 11 | "appearance" : "luminosity", 12 | "value" : "dark" 13 | } 14 | ], 15 | "filename" : "GitSpace-Readme-Empty-Dark.png", 16 | "idiom" : "universal", 17 | "scale" : "1x" 18 | }, 19 | { 20 | "filename" : "GitSpace-Readme-Empty@2x.png", 21 | "idiom" : "universal", 22 | "scale" : "2x" 23 | }, 24 | { 25 | "appearances" : [ 26 | { 27 | "appearance" : "luminosity", 28 | "value" : "dark" 29 | } 30 | ], 31 | "filename" : "GitSpace-Readme-Empty-Dark@2x.png", 32 | "idiom" : "universal", 33 | "scale" : "2x" 34 | }, 35 | { 36 | "filename" : "GitSpace-Readme-Empty@3x.png", 37 | "idiom" : "universal", 38 | "scale" : "3x" 39 | }, 40 | { 41 | "appearances" : [ 42 | { 43 | "appearance" : "luminosity", 44 | "value" : "dark" 45 | } 46 | ], 47 | "filename" : "GitSpace-Readme-Empty-Dark@3x.png", 48 | "idiom" : "universal", 49 | "scale" : "3x" 50 | } 51 | ], 52 | "info" : { 53 | "author" : "xcode", 54 | "version" : 1 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-ReadMe-Empty.imageset/GitSpace-Readme-Empty-Dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-ReadMe-Empty.imageset/GitSpace-Readme-Empty-Dark.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-ReadMe-Empty.imageset/GitSpace-Readme-Empty-Dark@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-ReadMe-Empty.imageset/GitSpace-Readme-Empty-Dark@2x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-ReadMe-Empty.imageset/GitSpace-Readme-Empty-Dark@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-ReadMe-Empty.imageset/GitSpace-Readme-Empty-Dark@3x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-ReadMe-Empty.imageset/GitSpace-Readme-Empty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-ReadMe-Empty.imageset/GitSpace-Readme-Empty.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-ReadMe-Empty.imageset/GitSpace-Readme-Empty@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-ReadMe-Empty.imageset/GitSpace-Readme-Empty@2x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-ReadMe-Empty.imageset/GitSpace-Readme-Empty@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-ReadMe-Empty.imageset/GitSpace-Readme-Empty@3x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Star-Empty.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "emptyView-star-light.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "appearances" : [ 10 | { 11 | "appearance" : "luminosity", 12 | "value" : "dark" 13 | } 14 | ], 15 | "filename" : "emptyView-star-dark.png", 16 | "idiom" : "universal", 17 | "scale" : "1x" 18 | }, 19 | { 20 | "filename" : "emptyView-star-light@2x.png", 21 | "idiom" : "universal", 22 | "scale" : "2x" 23 | }, 24 | { 25 | "appearances" : [ 26 | { 27 | "appearance" : "luminosity", 28 | "value" : "dark" 29 | } 30 | ], 31 | "filename" : "emptyView-star-dark@2x.png", 32 | "idiom" : "universal", 33 | "scale" : "2x" 34 | }, 35 | { 36 | "filename" : "emptyView-star-light@3x.png", 37 | "idiom" : "universal", 38 | "scale" : "3x" 39 | }, 40 | { 41 | "appearances" : [ 42 | { 43 | "appearance" : "luminosity", 44 | "value" : "dark" 45 | } 46 | ], 47 | "filename" : "emptyView-star-dark@3x.png", 48 | "idiom" : "universal", 49 | "scale" : "3x" 50 | } 51 | ], 52 | "info" : { 53 | "author" : "xcode", 54 | "version" : 1 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Star-Empty.imageset/emptyView-star-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Star-Empty.imageset/emptyView-star-dark.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Star-Empty.imageset/emptyView-star-dark@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Star-Empty.imageset/emptyView-star-dark@2x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Star-Empty.imageset/emptyView-star-dark@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Star-Empty.imageset/emptyView-star-dark@3x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Star-Empty.imageset/emptyView-star-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Star-Empty.imageset/emptyView-star-light.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Star-Empty.imageset/emptyView-star-light@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Star-Empty.imageset/emptyView-star-light@2x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Star-Empty.imageset/emptyView-star-light@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Star-Empty.imageset/emptyView-star-light@3x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Tag-Empty.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "emptyView-tag-light.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "appearances" : [ 10 | { 11 | "appearance" : "luminosity", 12 | "value" : "dark" 13 | } 14 | ], 15 | "filename" : "emptyView-tag-dark.png", 16 | "idiom" : "universal", 17 | "scale" : "1x" 18 | }, 19 | { 20 | "filename" : "emptyView-tag-light@2x.png", 21 | "idiom" : "universal", 22 | "scale" : "2x" 23 | }, 24 | { 25 | "appearances" : [ 26 | { 27 | "appearance" : "luminosity", 28 | "value" : "dark" 29 | } 30 | ], 31 | "filename" : "emptyView-tag-dark@2x.png", 32 | "idiom" : "universal", 33 | "scale" : "2x" 34 | }, 35 | { 36 | "filename" : "emptyView-tag-light@3x.png", 37 | "idiom" : "universal", 38 | "scale" : "3x" 39 | }, 40 | { 41 | "appearances" : [ 42 | { 43 | "appearance" : "luminosity", 44 | "value" : "dark" 45 | } 46 | ], 47 | "filename" : "emptyView-tag-dark@3x.png", 48 | "idiom" : "universal", 49 | "scale" : "3x" 50 | } 51 | ], 52 | "info" : { 53 | "author" : "xcode", 54 | "version" : 1 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Tag-Empty.imageset/emptyView-tag-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Tag-Empty.imageset/emptyView-tag-dark.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Tag-Empty.imageset/emptyView-tag-dark@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Tag-Empty.imageset/emptyView-tag-dark@2x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Tag-Empty.imageset/emptyView-tag-dark@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Tag-Empty.imageset/emptyView-tag-dark@3x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Tag-Empty.imageset/emptyView-tag-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Tag-Empty.imageset/emptyView-tag-light.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Tag-Empty.imageset/emptyView-tag-light@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Tag-Empty.imageset/emptyView-tag-light@2x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Tag-Empty.imageset/emptyView-tag-light@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/EmptyView/GitSpace-Tag-Empty.imageset/emptyView-tag-light@3x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GitSpace-ContributorListView.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "GitSpace-ContributorListView@1x.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "appearances" : [ 10 | { 11 | "appearance" : "luminosity", 12 | "value" : "dark" 13 | } 14 | ], 15 | "filename" : "GitSpace-ContributorListView-DarkMode@1x.png", 16 | "idiom" : "universal", 17 | "scale" : "1x" 18 | }, 19 | { 20 | "filename" : "GitSpace-ContributorListView@2x.png", 21 | "idiom" : "universal", 22 | "scale" : "2x" 23 | }, 24 | { 25 | "appearances" : [ 26 | { 27 | "appearance" : "luminosity", 28 | "value" : "dark" 29 | } 30 | ], 31 | "filename" : "GitSpace-ContributorListView-DarkMode@2x.png", 32 | "idiom" : "universal", 33 | "scale" : "2x" 34 | }, 35 | { 36 | "filename" : "GitSpace-ContributorListView@3x.png", 37 | "idiom" : "universal", 38 | "scale" : "3x" 39 | }, 40 | { 41 | "appearances" : [ 42 | { 43 | "appearance" : "luminosity", 44 | "value" : "dark" 45 | } 46 | ], 47 | "filename" : "GitSpace-ContributorListView-DarkMode@3x.png", 48 | "idiom" : "universal", 49 | "scale" : "3x" 50 | } 51 | ], 52 | "info" : { 53 | "author" : "xcode", 54 | "version" : 1 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GitSpace-ContributorListView.imageset/GitSpace-ContributorListView-DarkMode@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GitSpace-ContributorListView.imageset/GitSpace-ContributorListView-DarkMode@1x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GitSpace-ContributorListView.imageset/GitSpace-ContributorListView-DarkMode@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GitSpace-ContributorListView.imageset/GitSpace-ContributorListView-DarkMode@2x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GitSpace-ContributorListView.imageset/GitSpace-ContributorListView-DarkMode@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GitSpace-ContributorListView.imageset/GitSpace-ContributorListView-DarkMode@3x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GitSpace-ContributorListView.imageset/GitSpace-ContributorListView@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GitSpace-ContributorListView.imageset/GitSpace-ContributorListView@1x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GitSpace-ContributorListView.imageset/GitSpace-ContributorListView@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GitSpace-ContributorListView.imageset/GitSpace-ContributorListView@2x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GitSpace-ContributorListView.imageset/GitSpace-ContributorListView@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GitSpace-ContributorListView.imageset/GitSpace-ContributorListView@3x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GitSpace-Loading.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "loading-light.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "appearances" : [ 10 | { 11 | "appearance" : "luminosity", 12 | "value" : "dark" 13 | } 14 | ], 15 | "filename" : "loading-dark.png", 16 | "idiom" : "universal", 17 | "scale" : "1x" 18 | }, 19 | { 20 | "filename" : "loading-light@2x.png", 21 | "idiom" : "universal", 22 | "scale" : "2x" 23 | }, 24 | { 25 | "appearances" : [ 26 | { 27 | "appearance" : "luminosity", 28 | "value" : "dark" 29 | } 30 | ], 31 | "filename" : "loading-dark@2x.png", 32 | "idiom" : "universal", 33 | "scale" : "2x" 34 | }, 35 | { 36 | "filename" : "loading-light@3x.png", 37 | "idiom" : "universal", 38 | "scale" : "3x" 39 | }, 40 | { 41 | "appearances" : [ 42 | { 43 | "appearance" : "luminosity", 44 | "value" : "dark" 45 | } 46 | ], 47 | "filename" : "loading-dark@3x.png", 48 | "idiom" : "universal", 49 | "scale" : "3x" 50 | } 51 | ], 52 | "info" : { 53 | "author" : "xcode", 54 | "version" : 1 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GitSpace-Loading.imageset/loading-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GitSpace-Loading.imageset/loading-dark.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GitSpace-Loading.imageset/loading-dark@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GitSpace-Loading.imageset/loading-dark@2x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GitSpace-Loading.imageset/loading-dark@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GitSpace-Loading.imageset/loading-dark@3x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GitSpace-Loading.imageset/loading-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GitSpace-Loading.imageset/loading-light.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GitSpace-Loading.imageset/loading-light@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GitSpace-Loading.imageset/loading-light@2x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GitSpace-Loading.imageset/loading-light@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GitSpace-Loading.imageset/loading-light@3x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GitSpace-Signin.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "GitSpace-Signin.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "appearances" : [ 10 | { 11 | "appearance" : "luminosity", 12 | "value" : "dark" 13 | } 14 | ], 15 | "filename" : "GitSpace-Signin-DarkMode.png", 16 | "idiom" : "universal", 17 | "scale" : "1x" 18 | }, 19 | { 20 | "filename" : "GitSpace-Signin@2x.png", 21 | "idiom" : "universal", 22 | "scale" : "2x" 23 | }, 24 | { 25 | "appearances" : [ 26 | { 27 | "appearance" : "luminosity", 28 | "value" : "dark" 29 | } 30 | ], 31 | "filename" : "GitSpace-Signin-DarkMode@2x.png", 32 | "idiom" : "universal", 33 | "scale" : "2x" 34 | }, 35 | { 36 | "filename" : "GitSpace-Signin@3x.png", 37 | "idiom" : "universal", 38 | "scale" : "3x" 39 | }, 40 | { 41 | "appearances" : [ 42 | { 43 | "appearance" : "luminosity", 44 | "value" : "dark" 45 | } 46 | ], 47 | "filename" : "GitSpace-Signin-DarkMode@3x.png", 48 | "idiom" : "universal", 49 | "scale" : "3x" 50 | } 51 | ], 52 | "info" : { 53 | "author" : "xcode", 54 | "version" : 1 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GitSpace-Signin.imageset/GitSpace-Signin-DarkMode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GitSpace-Signin.imageset/GitSpace-Signin-DarkMode.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GitSpace-Signin.imageset/GitSpace-Signin-DarkMode@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GitSpace-Signin.imageset/GitSpace-Signin-DarkMode@2x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GitSpace-Signin.imageset/GitSpace-Signin-DarkMode@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GitSpace-Signin.imageset/GitSpace-Signin-DarkMode@3x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GitSpace-Signin.imageset/GitSpace-Signin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GitSpace-Signin.imageset/GitSpace-Signin.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GitSpace-Signin.imageset/GitSpace-Signin@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GitSpace-Signin.imageset/GitSpace-Signin@2x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GitSpace-Signin.imageset/GitSpace-Signin@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GitSpace-Signin.imageset/GitSpace-Signin@3x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Activity-Guide.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "activity-guidie-light.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "appearances" : [ 10 | { 11 | "appearance" : "luminosity", 12 | "value" : "dark" 13 | } 14 | ], 15 | "filename" : "activity-guide-dark.png", 16 | "idiom" : "universal", 17 | "scale" : "1x" 18 | }, 19 | { 20 | "filename" : "activity-guidie-light@2x.png", 21 | "idiom" : "universal", 22 | "scale" : "2x" 23 | }, 24 | { 25 | "appearances" : [ 26 | { 27 | "appearance" : "luminosity", 28 | "value" : "dark" 29 | } 30 | ], 31 | "filename" : "activity-guide-dark@2x.png", 32 | "idiom" : "universal", 33 | "scale" : "2x" 34 | }, 35 | { 36 | "filename" : "activity-guidie-light@3x.png", 37 | "idiom" : "universal", 38 | "scale" : "3x" 39 | }, 40 | { 41 | "appearances" : [ 42 | { 43 | "appearance" : "luminosity", 44 | "value" : "dark" 45 | } 46 | ], 47 | "filename" : "activity-guide-dark@3x.png", 48 | "idiom" : "universal", 49 | "scale" : "3x" 50 | } 51 | ], 52 | "info" : { 53 | "author" : "xcode", 54 | "version" : 1 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Activity-Guide.imageset/activity-guide-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Activity-Guide.imageset/activity-guide-dark.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Activity-Guide.imageset/activity-guide-dark@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Activity-Guide.imageset/activity-guide-dark@2x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Activity-Guide.imageset/activity-guide-dark@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Activity-Guide.imageset/activity-guide-dark@3x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Activity-Guide.imageset/activity-guidie-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Activity-Guide.imageset/activity-guidie-light.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Activity-Guide.imageset/activity-guidie-light@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Activity-Guide.imageset/activity-guidie-light@2x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Activity-Guide.imageset/activity-guidie-light@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Activity-Guide.imageset/activity-guidie-light@3x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Block.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "GitSpace-Block-Light.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "appearances" : [ 10 | { 11 | "appearance" : "luminosity", 12 | "value" : "dark" 13 | } 14 | ], 15 | "filename" : "GitSpace-Block-Dark.png", 16 | "idiom" : "universal", 17 | "scale" : "1x" 18 | }, 19 | { 20 | "filename" : "GitSpace-Block-Light@2x.png", 21 | "idiom" : "universal", 22 | "scale" : "2x" 23 | }, 24 | { 25 | "appearances" : [ 26 | { 27 | "appearance" : "luminosity", 28 | "value" : "dark" 29 | } 30 | ], 31 | "filename" : "GitSpace-Block-Dark@2x.png", 32 | "idiom" : "universal", 33 | "scale" : "2x" 34 | }, 35 | { 36 | "filename" : "GitSpace-Block-Light@3x.png", 37 | "idiom" : "universal", 38 | "scale" : "3x" 39 | }, 40 | { 41 | "appearances" : [ 42 | { 43 | "appearance" : "luminosity", 44 | "value" : "dark" 45 | } 46 | ], 47 | "filename" : "GitSpace-Block-Dark@3x.png", 48 | "idiom" : "universal", 49 | "scale" : "3x" 50 | } 51 | ], 52 | "info" : { 53 | "author" : "xcode", 54 | "version" : 1 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Block.imageset/GitSpace-Block-Dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Block.imageset/GitSpace-Block-Dark.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Block.imageset/GitSpace-Block-Dark@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Block.imageset/GitSpace-Block-Dark@2x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Block.imageset/GitSpace-Block-Dark@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Block.imageset/GitSpace-Block-Dark@3x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Block.imageset/GitSpace-Block-Light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Block.imageset/GitSpace-Block-Light.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Block.imageset/GitSpace-Block-Light@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Block.imageset/GitSpace-Block-Light@2x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Block.imageset/GitSpace-Block-Light@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Block.imageset/GitSpace-Block-Light@3x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Chat-Guide.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "chat-guide-light.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "appearances" : [ 10 | { 11 | "appearance" : "luminosity", 12 | "value" : "dark" 13 | } 14 | ], 15 | "filename" : "chat-guide-dark.png", 16 | "idiom" : "universal", 17 | "scale" : "1x" 18 | }, 19 | { 20 | "filename" : "chat-guide-light@2x.png", 21 | "idiom" : "universal", 22 | "scale" : "2x" 23 | }, 24 | { 25 | "appearances" : [ 26 | { 27 | "appearance" : "luminosity", 28 | "value" : "dark" 29 | } 30 | ], 31 | "filename" : "chat-guide-dark@2x.png", 32 | "idiom" : "universal", 33 | "scale" : "2x" 34 | }, 35 | { 36 | "filename" : "chat-guide-light@3x.png", 37 | "idiom" : "universal", 38 | "scale" : "3x" 39 | }, 40 | { 41 | "appearances" : [ 42 | { 43 | "appearance" : "luminosity", 44 | "value" : "dark" 45 | } 46 | ], 47 | "filename" : "chat-guide-dark@3x.png", 48 | "idiom" : "universal", 49 | "scale" : "3x" 50 | } 51 | ], 52 | "info" : { 53 | "author" : "xcode", 54 | "version" : 1 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Chat-Guide.imageset/chat-guide-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Chat-Guide.imageset/chat-guide-dark.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Chat-Guide.imageset/chat-guide-dark@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Chat-Guide.imageset/chat-guide-dark@2x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Chat-Guide.imageset/chat-guide-dark@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Chat-Guide.imageset/chat-guide-dark@3x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Chat-Guide.imageset/chat-guide-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Chat-Guide.imageset/chat-guide-light.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Chat-Guide.imageset/chat-guide-light@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Chat-Guide.imageset/chat-guide-light@2x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Chat-Guide.imageset/chat-guide-light@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Chat-Guide.imageset/chat-guide-light@3x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-General-Guide.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "guide-general-light.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "appearances" : [ 10 | { 11 | "appearance" : "luminosity", 12 | "value" : "dark" 13 | } 14 | ], 15 | "filename" : "guide-general-dark.png", 16 | "idiom" : "universal", 17 | "scale" : "1x" 18 | }, 19 | { 20 | "filename" : "guide-general-light@2x.png", 21 | "idiom" : "universal", 22 | "scale" : "2x" 23 | }, 24 | { 25 | "appearances" : [ 26 | { 27 | "appearance" : "luminosity", 28 | "value" : "dark" 29 | } 30 | ], 31 | "filename" : "guide-general-dark@2x.png", 32 | "idiom" : "universal", 33 | "scale" : "2x" 34 | }, 35 | { 36 | "filename" : "guide-general-light@3x.png", 37 | "idiom" : "universal", 38 | "scale" : "3x" 39 | }, 40 | { 41 | "appearances" : [ 42 | { 43 | "appearance" : "luminosity", 44 | "value" : "dark" 45 | } 46 | ], 47 | "filename" : "guide-general-dark@3x.png", 48 | "idiom" : "universal", 49 | "scale" : "3x" 50 | } 51 | ], 52 | "info" : { 53 | "author" : "xcode", 54 | "version" : 1 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-General-Guide.imageset/guide-general-dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-General-Guide.imageset/guide-general-dark.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-General-Guide.imageset/guide-general-dark@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-General-Guide.imageset/guide-general-dark@2x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-General-Guide.imageset/guide-general-dark@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-General-Guide.imageset/guide-general-dark@3x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-General-Guide.imageset/guide-general-light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-General-Guide.imageset/guide-general-light.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-General-Guide.imageset/guide-general-light@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-General-Guide.imageset/guide-general-light@2x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-General-Guide.imageset/guide-general-light@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-General-Guide.imageset/guide-general-light@3x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Knock.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "GitSpace-Knock-Light.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "appearances" : [ 10 | { 11 | "appearance" : "luminosity", 12 | "value" : "dark" 13 | } 14 | ], 15 | "filename" : "GitSpace-Knock-Dark.png", 16 | "idiom" : "universal", 17 | "scale" : "1x" 18 | }, 19 | { 20 | "filename" : "GitSpace-Knock-Light@2x.png", 21 | "idiom" : "universal", 22 | "scale" : "2x" 23 | }, 24 | { 25 | "appearances" : [ 26 | { 27 | "appearance" : "luminosity", 28 | "value" : "dark" 29 | } 30 | ], 31 | "filename" : "GitSpace-Knock-Dark@2x.png", 32 | "idiom" : "universal", 33 | "scale" : "2x" 34 | }, 35 | { 36 | "filename" : "GitSpace-Knock-Light@3x.png", 37 | "idiom" : "universal", 38 | "scale" : "3x" 39 | }, 40 | { 41 | "appearances" : [ 42 | { 43 | "appearance" : "luminosity", 44 | "value" : "dark" 45 | } 46 | ], 47 | "filename" : "GitSpace-Knock-Dark@3x.png", 48 | "idiom" : "universal", 49 | "scale" : "3x" 50 | } 51 | ], 52 | "info" : { 53 | "author" : "xcode", 54 | "version" : 1 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Knock.imageset/GitSpace-Knock-Dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Knock.imageset/GitSpace-Knock-Dark.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Knock.imageset/GitSpace-Knock-Dark@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Knock.imageset/GitSpace-Knock-Dark@2x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Knock.imageset/GitSpace-Knock-Dark@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Knock.imageset/GitSpace-Knock-Dark@3x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Knock.imageset/GitSpace-Knock-Light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Knock.imageset/GitSpace-Knock-Light.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Knock.imageset/GitSpace-Knock-Light@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Knock.imageset/GitSpace-Knock-Light@2x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Knock.imageset/GitSpace-Knock-Light@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Knock.imageset/GitSpace-Knock-Light@3x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-KnockHistoryView.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "GitSpace-KnockHistoryView@1x.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "appearances" : [ 10 | { 11 | "appearance" : "luminosity", 12 | "value" : "dark" 13 | } 14 | ], 15 | "filename" : "GitSpace-KnockHistoryView-DarkMode@1x.png", 16 | "idiom" : "universal", 17 | "scale" : "1x" 18 | }, 19 | { 20 | "filename" : "GitSpace-KnockHistoryView@2x.png", 21 | "idiom" : "universal", 22 | "scale" : "2x" 23 | }, 24 | { 25 | "appearances" : [ 26 | { 27 | "appearance" : "luminosity", 28 | "value" : "dark" 29 | } 30 | ], 31 | "filename" : "GitSpace-KnockHistoryView-DarkMode@2x.png", 32 | "idiom" : "universal", 33 | "scale" : "2x" 34 | }, 35 | { 36 | "filename" : "GitSpace-KnockHistoryView@3x.png", 37 | "idiom" : "universal", 38 | "scale" : "3x" 39 | }, 40 | { 41 | "appearances" : [ 42 | { 43 | "appearance" : "luminosity", 44 | "value" : "dark" 45 | } 46 | ], 47 | "filename" : "GitSpace-KnockHistoryView-DarkMode@3x.png", 48 | "idiom" : "universal", 49 | "scale" : "3x" 50 | } 51 | ], 52 | "info" : { 53 | "author" : "xcode", 54 | "version" : 1 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-KnockHistoryView.imageset/GitSpace-KnockHistoryView-DarkMode@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-KnockHistoryView.imageset/GitSpace-KnockHistoryView-DarkMode@1x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-KnockHistoryView.imageset/GitSpace-KnockHistoryView-DarkMode@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-KnockHistoryView.imageset/GitSpace-KnockHistoryView-DarkMode@2x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-KnockHistoryView.imageset/GitSpace-KnockHistoryView-DarkMode@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-KnockHistoryView.imageset/GitSpace-KnockHistoryView-DarkMode@3x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-KnockHistoryView.imageset/GitSpace-KnockHistoryView@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-KnockHistoryView.imageset/GitSpace-KnockHistoryView@1x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-KnockHistoryView.imageset/GitSpace-KnockHistoryView@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-KnockHistoryView.imageset/GitSpace-KnockHistoryView@2x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-KnockHistoryView.imageset/GitSpace-KnockHistoryView@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-KnockHistoryView.imageset/GitSpace-KnockHistoryView@3x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Report.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "GitSpace-Report-Light.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "appearances" : [ 10 | { 11 | "appearance" : "luminosity", 12 | "value" : "dark" 13 | } 14 | ], 15 | "filename" : "GitSpace-Report-Dark.png", 16 | "idiom" : "universal", 17 | "scale" : "1x" 18 | }, 19 | { 20 | "filename" : "GitSpace-Report-Light@2x.png", 21 | "idiom" : "universal", 22 | "scale" : "2x" 23 | }, 24 | { 25 | "appearances" : [ 26 | { 27 | "appearance" : "luminosity", 28 | "value" : "dark" 29 | } 30 | ], 31 | "filename" : "GitSpace-Report-Dark@2x.png", 32 | "idiom" : "universal", 33 | "scale" : "2x" 34 | }, 35 | { 36 | "filename" : "GitSpace-Report-Light@3x.png", 37 | "idiom" : "universal", 38 | "scale" : "3x" 39 | }, 40 | { 41 | "appearances" : [ 42 | { 43 | "appearance" : "luminosity", 44 | "value" : "dark" 45 | } 46 | ], 47 | "filename" : "GitSpace-Report-Dark@3x.png", 48 | "idiom" : "universal", 49 | "scale" : "3x" 50 | } 51 | ], 52 | "info" : { 53 | "author" : "xcode", 54 | "version" : 1 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Report.imageset/GitSpace-Report-Dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Report.imageset/GitSpace-Report-Dark.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Report.imageset/GitSpace-Report-Dark@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Report.imageset/GitSpace-Report-Dark@2x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Report.imageset/GitSpace-Report-Dark@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Report.imageset/GitSpace-Report-Dark@3x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Report.imageset/GitSpace-Report-Light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Report.imageset/GitSpace-Report-Light.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Report.imageset/GitSpace-Report-Light@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Report.imageset/GitSpace-Report-Light@2x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Report.imageset/GitSpace-Report-Light@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Report.imageset/GitSpace-Report-Light@3x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Star.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "GitSpace-Star-Light.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "appearances" : [ 10 | { 11 | "appearance" : "luminosity", 12 | "value" : "dark" 13 | } 14 | ], 15 | "filename" : "GitSpace-Star-Dark.png", 16 | "idiom" : "universal", 17 | "scale" : "1x" 18 | }, 19 | { 20 | "filename" : "GitSpace-Star-Light@2x.png", 21 | "idiom" : "universal", 22 | "scale" : "2x" 23 | }, 24 | { 25 | "appearances" : [ 26 | { 27 | "appearance" : "luminosity", 28 | "value" : "dark" 29 | } 30 | ], 31 | "filename" : "GitSpace-Star-Dark@2x.png", 32 | "idiom" : "universal", 33 | "scale" : "2x" 34 | }, 35 | { 36 | "filename" : "GitSpace-Star-Light@3x.png", 37 | "idiom" : "universal", 38 | "scale" : "3x" 39 | }, 40 | { 41 | "appearances" : [ 42 | { 43 | "appearance" : "luminosity", 44 | "value" : "dark" 45 | } 46 | ], 47 | "filename" : "GitSpace-Star-Dark@3x.png", 48 | "idiom" : "universal", 49 | "scale" : "3x" 50 | } 51 | ], 52 | "info" : { 53 | "author" : "xcode", 54 | "version" : 1 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Star.imageset/GitSpace-Star-Dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Star.imageset/GitSpace-Star-Dark.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Star.imageset/GitSpace-Star-Dark@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Star.imageset/GitSpace-Star-Dark@2x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Star.imageset/GitSpace-Star-Dark@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Star.imageset/GitSpace-Star-Dark@3x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Star.imageset/GitSpace-Star-Light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Star.imageset/GitSpace-Star-Light.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Star.imageset/GitSpace-Star-Light@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Star.imageset/GitSpace-Star-Light@2x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Star.imageset/GitSpace-Star-Light@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Star.imageset/GitSpace-Star-Light@3x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Tag-Guide.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "tag_star_light.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "appearances" : [ 10 | { 11 | "appearance" : "luminosity", 12 | "value" : "dark" 13 | } 14 | ], 15 | "filename" : "tag_star_dark.png", 16 | "idiom" : "universal", 17 | "scale" : "1x" 18 | }, 19 | { 20 | "filename" : "tag_star_light@2x.png", 21 | "idiom" : "universal", 22 | "scale" : "2x" 23 | }, 24 | { 25 | "appearances" : [ 26 | { 27 | "appearance" : "luminosity", 28 | "value" : "dark" 29 | } 30 | ], 31 | "filename" : "tag_star_dark@2x.png", 32 | "idiom" : "universal", 33 | "scale" : "2x" 34 | }, 35 | { 36 | "filename" : "tag_star_light@3x.png", 37 | "idiom" : "universal", 38 | "scale" : "3x" 39 | }, 40 | { 41 | "appearances" : [ 42 | { 43 | "appearance" : "luminosity", 44 | "value" : "dark" 45 | } 46 | ], 47 | "filename" : "tag_star_dark@3x.png", 48 | "idiom" : "universal", 49 | "scale" : "3x" 50 | } 51 | ], 52 | "info" : { 53 | "author" : "xcode", 54 | "version" : 1 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Tag-Guide.imageset/tag_star_dark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Tag-Guide.imageset/tag_star_dark.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Tag-Guide.imageset/tag_star_dark@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Tag-Guide.imageset/tag_star_dark@2x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Tag-Guide.imageset/tag_star_dark@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Tag-Guide.imageset/tag_star_dark@3x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Tag-Guide.imageset/tag_star_light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Tag-Guide.imageset/tag_star_light.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Tag-Guide.imageset/tag_star_light@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Tag-Guide.imageset/tag_star_light@2x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Tag-Guide.imageset/tag_star_light@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/GuideView/GitSpace-Tag-Guide.imageset/tag_star_light@3x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/storage/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/storage/GitSpace-MainKnockView.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "GitSpace-MainKnockView@1x.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "appearances" : [ 10 | { 11 | "appearance" : "luminosity", 12 | "value" : "dark" 13 | } 14 | ], 15 | "filename" : "GitSpace-MainKnockView-DarkMode@1x.png", 16 | "idiom" : "universal", 17 | "scale" : "1x" 18 | }, 19 | { 20 | "filename" : "GitSpace-MainKnockView@2x.png", 21 | "idiom" : "universal", 22 | "scale" : "2x" 23 | }, 24 | { 25 | "appearances" : [ 26 | { 27 | "appearance" : "luminosity", 28 | "value" : "dark" 29 | } 30 | ], 31 | "filename" : "GitSpace-MainKnockView-DarkMode@2x.png", 32 | "idiom" : "universal", 33 | "scale" : "2x" 34 | }, 35 | { 36 | "filename" : "GitSpace-MainKnockView@3x.png", 37 | "idiom" : "universal", 38 | "scale" : "3x" 39 | }, 40 | { 41 | "appearances" : [ 42 | { 43 | "appearance" : "luminosity", 44 | "value" : "dark" 45 | } 46 | ], 47 | "filename" : "GitSpace-MainKnockView-DarkMode@3x.png", 48 | "idiom" : "universal", 49 | "scale" : "3x" 50 | } 51 | ], 52 | "info" : { 53 | "author" : "xcode", 54 | "version" : 1 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/storage/GitSpace-MainKnockView.imageset/GitSpace-MainKnockView-DarkMode@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/storage/GitSpace-MainKnockView.imageset/GitSpace-MainKnockView-DarkMode@1x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/storage/GitSpace-MainKnockView.imageset/GitSpace-MainKnockView-DarkMode@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/storage/GitSpace-MainKnockView.imageset/GitSpace-MainKnockView-DarkMode@2x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/storage/GitSpace-MainKnockView.imageset/GitSpace-MainKnockView-DarkMode@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/storage/GitSpace-MainKnockView.imageset/GitSpace-MainKnockView-DarkMode@3x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/storage/GitSpace-MainKnockView.imageset/GitSpace-MainKnockView@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/storage/GitSpace-MainKnockView.imageset/GitSpace-MainKnockView@1x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/storage/GitSpace-MainKnockView.imageset/GitSpace-MainKnockView@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/storage/GitSpace-MainKnockView.imageset/GitSpace-MainKnockView@2x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/MascotImages/storage/GitSpace-MainKnockView.imageset/GitSpace-MainKnockView@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/MascotImages/storage/GitSpace-MainKnockView.imageset/GitSpace-MainKnockView@3x.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/ProfilePlaceholder.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "ProfilePlaceholder.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "author" : "xcode", 19 | "version" : 1 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/ProfilePlaceholder.imageset/ProfilePlaceholder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/ProfilePlaceholder.imageset/ProfilePlaceholder.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/UnreadMessage/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/UnreadMessage/UnreadMessageCapsule.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "0.004", 9 | "green" : "1.000", 10 | "red" : "0.741" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | }, 15 | { 16 | "appearances" : [ 17 | { 18 | "appearance" : "luminosity", 19 | "value" : "dark" 20 | } 21 | ], 22 | "color" : { 23 | "color-space" : "srgb", 24 | "components" : { 25 | "alpha" : "1.000", 26 | "blue" : "0.180", 27 | "green" : "0.161", 28 | "red" : "0.153" 29 | } 30 | }, 31 | "idiom" : "universal" 32 | } 33 | ], 34 | "info" : { 35 | "author" : "xcode", 36 | "version" : 1 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/UnreadMessage/UnreadMessageText.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "0x00", 9 | "green" : "0x00", 10 | "red" : "0x00" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | }, 15 | { 16 | "appearances" : [ 17 | { 18 | "appearance" : "luminosity", 19 | "value" : "dark" 20 | } 21 | ], 22 | "color" : { 23 | "color-space" : "srgb", 24 | "components" : { 25 | "alpha" : "1.000", 26 | "blue" : "0x10", 27 | "green" : "0xFF", 28 | "red" : "0xFA" 29 | } 30 | }, 31 | "idiom" : "universal" 32 | } 33 | ], 34 | "info" : { 35 | "author" : "xcode", 36 | "version" : 1 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/avatarImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "avatarImage_lightMode.png", 5 | "idiom" : "universal", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "appearances" : [ 10 | { 11 | "appearance" : "luminosity", 12 | "value" : "dark" 13 | } 14 | ], 15 | "filename" : "avatarImage_darkMode.png", 16 | "idiom" : "universal", 17 | "scale" : "1x" 18 | }, 19 | { 20 | "idiom" : "universal", 21 | "scale" : "2x" 22 | }, 23 | { 24 | "appearances" : [ 25 | { 26 | "appearance" : "luminosity", 27 | "value" : "dark" 28 | } 29 | ], 30 | "idiom" : "universal", 31 | "scale" : "2x" 32 | }, 33 | { 34 | "idiom" : "universal", 35 | "scale" : "3x" 36 | }, 37 | { 38 | "appearances" : [ 39 | { 40 | "appearance" : "luminosity", 41 | "value" : "dark" 42 | } 43 | ], 44 | "idiom" : "universal", 45 | "scale" : "3x" 46 | } 47 | ], 48 | "info" : { 49 | "author" : "xcode", 50 | "version" : 1 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/avatarImage.imageset/avatarImage_darkMode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/avatarImage.imageset/avatarImage_darkMode.png -------------------------------------------------------------------------------- /GitSpace/Resources/Assets.xcassets/avatarImage.imageset/avatarImage_lightMode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/APP-iOS1/finalproject-gitspace/8247b0fc9c9f595c80a61d3791b16a24d2e4bde9/GitSpace/Resources/Assets.xcassets/avatarImage.imageset/avatarImage_lightMode.png -------------------------------------------------------------------------------- /GitSpace/Resources/GitSpace.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | aps-environment 6 | development 7 | 8 | 9 | -------------------------------------------------------------------------------- /GitSpace/Sources/Models/BlockedUsers.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BlockedUsers.swift 3 | // GitSpace 4 | // 5 | // Created by 최한호 on 2023/05/07. 6 | // 7 | import Foundation 8 | 9 | final class BlockedUsers: ObservableObject { 10 | /** 11 | currentUser의 BlockedUsers를 담아줄 배열입니다. ContentView의 retrieveBlockedUserList 메서드를 통해 currentUser의 BlockedUsers를 blockedUserList에 담아줍니다. 12 | - Properties: (UserInfo, GithubUser) 형식의 튜플 타입으로 이루어져 있습니다. 13 | - Author: 한호 14 | */ 15 | @Published var blockedUserList: [(userInfo: UserInfo, gitHubUser: GithubUser)] = [] 16 | } 17 | -------------------------------------------------------------------------------- /GitSpace/Sources/Models/Knock.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Knock.swift 3 | // GitSpace 4 | // 5 | // Created by 이승준 on 2023/02/11. 6 | // 7 | 8 | import Foundation 9 | import FirebaseFirestore 10 | import FirebaseFirestoreSwift 11 | 12 | struct Knock: Codable, Hashable, Identifiable { 13 | var id: String = UUID().uuidString 14 | var knockedDate: Timestamp 15 | var knockMessage: String 16 | var knockStatus: String 17 | var knockCategory: String 18 | var declineMessage: String? = nil 19 | var receivedUserName: String 20 | var sentUserName: String 21 | var receivedUserID: String 22 | var sentUserID: String 23 | 24 | var acceptedDate: Timestamp? = nil 25 | var declinedDate: Timestamp? = nil 26 | 27 | var chatID: String? = nil 28 | 29 | var dateDiff: String { 30 | get { 31 | let diff = knockedDate.dateValue() 32 | return diff.timeAgoDisplay() 33 | } 34 | } 35 | 36 | /// 기본 생성자 37 | init( 38 | date: Date, 39 | knockMessage: String, 40 | knockStatus: String, 41 | knockCategory: String, 42 | declineMessage: String? = nil, 43 | receivedUserName: String, 44 | sentUserName: String, 45 | receivedUserID: String, 46 | sentUserID: String 47 | ) { 48 | self.knockedDate = Timestamp(date: date) 49 | self.knockMessage = knockMessage 50 | self.knockStatus = knockStatus 51 | self.knockCategory = knockCategory 52 | self.declineMessage = declineMessage 53 | self.receivedUserName = receivedUserName 54 | self.sentUserName = sentUserName 55 | self.receivedUserID = receivedUserID 56 | self.sentUserID = sentUserID 57 | } 58 | 59 | /// 옵셔널의 기본값으로 전달할 인스턴스를 생성하는 생성자 60 | init(isFailedDummy: Bool) { 61 | self.init( 62 | date: .now, 63 | knockMessage: "FAILED", 64 | knockStatus: "FAILED", 65 | knockCategory: "FAILED", 66 | receivedUserName: "FAILED", 67 | sentUserName: "FAILED", 68 | receivedUserID: "", 69 | sentUserID: "" 70 | ) 71 | } 72 | } 73 | -------------------------------------------------------------------------------- /GitSpace/Sources/Models/Message.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MessageCellModel.swift 3 | // GitSpace 4 | // 5 | // Created by 원태영 on 2023/01/27. 6 | // 7 | 8 | import Foundation 9 | 10 | // 채팅 메세지 모델 11 | struct Message : Identifiable, Codable { 12 | let id: String // 메세지 ID 13 | let senderID: String // 메세지 작성자 유저 ID 14 | var textContent: String // 메세지 내용 15 | let imageContent: String? // 메세지에 첨부한 이미지 16 | let sentDate: Date // 메세지 작성 날짜 17 | let isRead: Bool // 수신 유저의 메세지 확인 여부 18 | 19 | var sentDateAsString : String { 20 | let dateFormatter = DateFormatter() 21 | dateFormatter.locale = Locale(identifier: "ko_kr") 22 | dateFormatter.timeZone = TimeZone(abbreviation: "KST") 23 | dateFormatter.dateFormat = "HH:mm" 24 | 25 | return dateFormatter.string(from: sentDate) 26 | } 27 | 28 | static func encodedMessage(with message: Message) -> Message { 29 | var encodedMessage: Message = message 30 | encodedMessage.textContent = message.textContent.asBase64 ?? "" 31 | return encodedMessage 32 | } 33 | 34 | static func decodedMessage(with message: Message) -> Message { 35 | var decodedMessage: Message = message 36 | decodedMessage.textContent = message.textContent.decodedBase64String ?? "" 37 | return decodedMessage 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /GitSpace/Sources/Models/PushNotification/PushNotificationProtocol.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PushNotification.swift 3 | // GitSpace 4 | // 5 | // Created by Celan on 2023/03/08. 6 | // 7 | 8 | import SwiftUI 9 | 10 | /** 11 | PushNotification을 발송하는 모델이 채택합니다. 12 | 해당 모델은 서버 엔드포인트에 접근할 url 속성과 sendNotification, MakeNotificationData, configureHTTPRequst 메소드를 갖습니다. 13 | 14 | - Author: @Valselee(celan) 15 | */ 16 | protocol GSPushNotificationSendable { 17 | var url: URL? { get } 18 | 19 | /** 20 | Notification을 생성하여 발송하는 동시성 메소드입니다. 21 | - Parameters: 22 | - with: PushNotificationMessageType 열거형 타입으로 knock, chat을 전달합니다. 해당 내용으로 Push Notification을 구성합니다. 23 | - to: 어떤 유저에게 알람을 보낼지 UserInfo 타입으로 전달합니다. 24 | */ 25 | func sendNotification( 26 | with message: PushNotificationMessageType, 27 | to userInfo: UserInfo 28 | ) async -> Void 29 | 30 | /** 31 | Notification의 payload 데이터를 생성합니다. 32 | - Parameters: 33 | - pushNotificationBody: PushNotificationMessageBody 열거형 타입으로 Data를 만들 때 필요한 데이터를 전달합니다. 34 | - to: UserInfo 정보를 받아서 해당 유저의 기기 토큰과 아이디를 활용하여 필요한 Data 타입을 리턴합니다. 35 | - Returns: Data? 36 | 37 | */ 38 | func makeNotificationData( 39 | pushNotificationBody: PushNotificationMessageBody, 40 | to userInfo: UserInfo 41 | ) -> Data? 42 | 43 | /** 44 | Notification의 HTTP Request를 생성합니다. 45 | - Returns: URLRequest 46 | */ 47 | func configureHTTPRequest( 48 | url: URL 49 | ) -> URLRequest 50 | } 51 | 52 | /** 53 | Notification을 탭할 때 View를 Navigate할 수 있도록 합니다. 54 | */ 55 | protocol GSPushNotificationNavigatable { 56 | var isNavigatedToReceivedKnock: Bool { get set } 57 | var isNavigatedToSentKnock: Bool { get set } 58 | var isNavigatedToChat: Bool { get set } 59 | } 60 | -------------------------------------------------------------------------------- /GitSpace/Sources/Models/Report.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Report.swift 3 | // GitSpace 4 | // 5 | // Created by Celan on 2023/04/16. 6 | // 7 | 8 | import Foundation 9 | import FirebaseFirestore 10 | 11 | struct Report: Codable { 12 | var id: String = UUID().uuidString 13 | var reason: String 14 | var reporterID: String 15 | var targetUserID: String 16 | var date: Timestamp 17 | // Knock 메시지, Chat 메시지 등등 18 | var content: String? 19 | var type: String 20 | 21 | enum ReportType: String, Codable { 22 | case user = "User" 23 | case chat = "Chat" 24 | case knock = "Knock" 25 | } 26 | 27 | enum ReportReason: String, Codable, CaseIterable { 28 | case spamming = "Spamming" 29 | case offensive = "Verbal Abuse, Offensive Language" 30 | case sexual = "Sexual Description(Activity)" 31 | case cheating = "Cheating" 32 | case bullying = "Cyberbullying or Harassment" 33 | 34 | func getDescription() -> String { 35 | switch self { 36 | case .spamming: 37 | return "Sending unsolicited messages in bulk by chat and knock." 38 | case .offensive: 39 | return "Including, but not limited to language that is unlawful, harmful, threatening, abusive, harassing, defamatory, vulgar, obscene, sexually explicit, or otherwise objectionable." 40 | case .sexual: 41 | return "Sending offensive sexual content to other users." 42 | case .cheating: 43 | return "Using unapproved third party programs or cheating the other users with false information." 44 | case .bullying: 45 | return "Intentionally bullying other users." 46 | } 47 | } 48 | 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /GitSpace/Sources/Models/Repository.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Repository.swift 3 | // GitSpace 4 | // 5 | // Created by Da Hae Lee on 2023/02/05. 6 | // 7 | 8 | import Foundation 9 | 10 | // MARK: - Temporary Repository Sturct 11 | struct Repository: Identifiable, Codable, Equatable { 12 | static func == (lhs: Repository, rhs: Repository) -> Bool { 13 | return lhs.id == rhs.id 14 | } 15 | 16 | var id: Int 17 | var name: String 18 | var fullName: String 19 | var owner: Owner 20 | var description: String? 21 | // var tags: [Int]? 22 | var isPrivate: Bool 23 | var stargazersCount: Int 24 | 25 | enum CodingKeys: String, CodingKey { 26 | case id = "id" 27 | case name = "name" 28 | case fullName = "full_name" 29 | case owner = "owner" 30 | case description = "description" 31 | case isPrivate = "private" 32 | case stargazersCount = "stargazers_count" 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /GitSpace/Sources/Models/Tag.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Tag.swift 3 | // GitSpace 4 | // 5 | // Created by Da Hae Lee on 2023/02/05. 6 | // 7 | 8 | import Foundation 9 | 10 | // MARK: - Temporary Tag Struct 11 | struct Tag: Identifiable, Hashable, Codable { 12 | var id: String = UUID().uuidString 13 | var tagName: String 14 | var repositories: [String] // “${username}/${repoName}” 15 | var isSelected: Bool = false 16 | } 17 | -------------------------------------------------------------------------------- /GitSpace/Sources/Network/APIModels/AppInfo.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppInfo.swift 3 | // GitSpace 4 | // 5 | // Created by 원태영 on 2023/07/03. 6 | // 7 | 8 | import Foundation 9 | 10 | struct AppInfo: Codable { 11 | let resultCount: Int 12 | let results: [AppInfoResult] 13 | } 14 | 15 | struct AppInfoResult: Codable { 16 | let version: String 17 | } 18 | -------------------------------------------------------------------------------- /GitSpace/Sources/Network/APIModels/ContributorProfile.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ContributorProfile.swift 3 | // GitSpace 4 | // 5 | // Created by 박제균 on 2023/02/14. 6 | // 7 | 8 | import Foundation 9 | 10 | struct ContributorProfile: Identifiable, Codable { 11 | 12 | var id: Int // 고유 id 13 | var login: String // github id 14 | 15 | var url: String 16 | var avatar_url: String // profile image 17 | 18 | var followers_url: String // followers 19 | var following_url: String // following 20 | 21 | } 22 | -------------------------------------------------------------------------------- /GitSpace/Sources/Network/APIModels/Event.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Event.swift 3 | // GitSpace 4 | // 5 | // Created by 박제균 on 2023/02/15. 6 | // 7 | 8 | import Foundation 9 | 10 | struct Event: Codable, Identifiable { 11 | let id: String 12 | let type: String? 13 | let actor: Actor 14 | let repo: Repo 15 | let `public`: Bool 16 | let createdAt: String 17 | 18 | enum CodingKeys: String, CodingKey { 19 | case id, type, actor, repo, `public` 20 | case createdAt = "created_at" 21 | } 22 | } 23 | 24 | struct Actor: Codable, Identifiable { 25 | let id: Int 26 | let login: String 27 | let displayLogin: String 28 | let gravatarID: String? 29 | let url: String 30 | let avatarURL: String 31 | 32 | enum CodingKeys: String, CodingKey { 33 | case id, login, url 34 | case displayLogin = "display_login" 35 | case gravatarID = "gravatar_id" 36 | case avatarURL = "avatar_url" 37 | } 38 | 39 | } 40 | 41 | struct Repo: Codable, Identifiable { 42 | let id: Int 43 | let name: String 44 | let url: String 45 | } 46 | -------------------------------------------------------------------------------- /GitSpace/Sources/Network/APIModels/FollowerResponse.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Follower.swift 3 | // GitSpace 4 | // 5 | // Created by 박제균 on 2023/02/15. 6 | // 7 | 8 | import Foundation 9 | 10 | struct FollowerResponse: Codable, Identifiable, Equatable { 11 | 12 | let id: Int 13 | let name: String? 14 | let url: String 15 | let login: String 16 | let avatarURL: String 17 | 18 | enum CodingKeys: String, CodingKey { 19 | case id, name, url, login 20 | case avatarURL = "avatar_url" 21 | } 22 | 23 | // 이름, 프로필사진, 24 | // 팔로워수, 레포지토리 수 25 | 26 | } 27 | -------------------------------------------------------------------------------- /GitSpace/Sources/Network/APIModels/FollowingResponse.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FollowingResponse.swift 3 | // GitSpace 4 | // 5 | // Created by 최한호 on 2023/03/21. 6 | // 7 | 8 | import Foundation 9 | 10 | struct FollowingResponse: Codable { 11 | let login: String 12 | let id: Int 13 | let nodeID: String 14 | let avatarURL: String 15 | let gravatarID: String 16 | let url, htmlURL, followersURL: String 17 | let followingURL, gistsURL, starredURL: String 18 | let subscriptionsURL, organizationsURL, reposURL: String 19 | let eventsURL: String 20 | let receivedEventsURL: String 21 | let type: String 22 | let siteAdmin: Bool 23 | 24 | enum CodingKeys: String, CodingKey { 25 | case login, id 26 | case nodeID = "node_id" 27 | case avatarURL = "avatar_url" 28 | case gravatarID = "gravatar_id" 29 | case url 30 | case htmlURL = "html_url" 31 | case followersURL = "followers_url" 32 | case followingURL = "following_url" 33 | case gistsURL = "gists_url" 34 | case starredURL = "starred_url" 35 | case subscriptionsURL = "subscriptions_url" 36 | case organizationsURL = "organizations_url" 37 | case reposURL = "repos_url" 38 | case eventsURL = "events_url" 39 | case receivedEventsURL = "received_events_url" 40 | case type 41 | case siteAdmin = "site_admin" 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /GitSpace/Sources/Network/APIModels/GithubUser.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GitHubUser.swift 3 | // GitSpace 4 | // 5 | // Created by 이다혜, 박제균 on 2023/02/09. 6 | // 7 | 8 | import Foundation 9 | 10 | struct GithubUser: Identifiable, Codable, Equatable { 11 | let id: Int // 고유 id 12 | let login: String // github id 13 | let name: String? // username 14 | let email: String? // email 15 | let avatar_url: String // profile image 16 | let bio: String? // bio, intro message 17 | let company: String? // company 18 | let location: String? // location 19 | let blog: String? // blog url 20 | let public_repos: Int // public repos 21 | let followers: Int // followers 22 | let following: Int // following 23 | } 24 | 25 | -------------------------------------------------------------------------------- /GitSpace/Sources/Network/APIModels/Owner.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Owner.swift 3 | // GitSpace 4 | // 5 | // Created by 박제균 on 2023/02/14. 6 | // 7 | 8 | import Foundation 9 | 10 | // MARK: - Owner 11 | struct Owner: Codable { 12 | 13 | let login: String 14 | let id: Int 15 | let nodeID: String 16 | let avatarURL: String 17 | let gravatarID: String? 18 | let url, htmlURL, followersURL: String 19 | let followingURL, gistsURL, starredURL: String 20 | let subscriptionsURL, organizationsURL, reposURL: String 21 | let eventsURL: String 22 | let receivedEventsURL: String 23 | 24 | enum CodingKeys: String, CodingKey { 25 | case login, id 26 | case nodeID = "node_id" 27 | case avatarURL = "avatar_url" 28 | case gravatarID = "gravatar_id" 29 | case url 30 | case htmlURL = "html_url" 31 | case followersURL = "followers_url" 32 | case followingURL = "following_url" 33 | case gistsURL = "gists_url" 34 | case starredURL = "starred_url" 35 | case subscriptionsURL = "subscriptions_url" 36 | case organizationsURL = "organizations_url" 37 | case reposURL = "repos_url" 38 | case eventsURL = "events_url" 39 | case receivedEventsURL = "received_events_url" 40 | } 41 | } 42 | 43 | -------------------------------------------------------------------------------- /GitSpace/Sources/Network/APIModels/RepositoryResponse.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RepositoryResponse.swift 3 | // GitSpace 4 | // 5 | // Created by 박제균 on 2023/02/09. 6 | // 7 | 8 | 9 | import Foundation 10 | 11 | // FIXME: - QuickType 돌린 임시 모델, 필요한 데이터만 골라서 모델링 다시 하기 12 | struct RepositoryResponse: Codable { 13 | let id: Int 14 | let nodeID, name, fullName: String 15 | 16 | enum CodingKeys: String, CodingKey { 17 | case id, name 18 | case fullName = "full_name" 19 | case nodeID = "node_id" 20 | } 21 | 22 | } 23 | 24 | 25 | struct RepositoryReadmeResponse: Codable { 26 | let size: Int 27 | let name, path, content, url: String 28 | let gitURL, htmlURL, downloadURL: String? 29 | 30 | enum CodingKeys: String, CodingKey { 31 | case size, name, path, content, url 32 | case gitURL = "git_url" 33 | case htmlURL = "html_url" 34 | case downloadURL = "download_url" 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /GitSpace/Sources/Network/Common/Endpoint.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Endpoint.swift 3 | // GitSpace 4 | // 5 | // Created by 박제균 on 2023/02/09. 6 | // 7 | 8 | import Foundation 9 | 10 | protocol Endpoint { 11 | var scheme: String { get } 12 | var host: String { get } 13 | var path: String { get } 14 | var method: HTTPRequestMethod { get } 15 | var header: [String: String]? { get } 16 | var body: [String: String]? { get } 17 | var queryItems: [URLQueryItem] { get } 18 | } 19 | 20 | extension Endpoint { 21 | var scheme: String { 22 | return "https" 23 | } 24 | 25 | var host: String { 26 | return "api.github.com" 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /GitSpace/Sources/Network/Common/GitHubAPIError.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GitHubAPIError.swift 3 | // GitSpace 4 | // 5 | // Created by 박제균 on 2023/02/05. 6 | // 7 | 8 | import Foundation 9 | 10 | enum GitHubAPIError: Error { 11 | /// URLComponents를 통해 URL 생성에 실패한 경우 보여줄 에러 메시지 12 | case invalidURL 13 | case invalidResponse 14 | case failToDecoding 15 | case failToEncoding 16 | case failToLoadREADME 17 | case unauthorized 18 | case unexpectedStatusCode 19 | case notModified 20 | case requiresAuthentification 21 | case forbidden 22 | case notFound 23 | case failToRequest 24 | case unknown 25 | 26 | var errorDescription: String { 27 | switch self { 28 | case .invalidURL: return "URL was invalid, Please try again." 29 | case .invalidResponse: return "Invalid response from the server. Please try again." 30 | case .failToDecoding: return "Fail to decode data. Please try again" 31 | case .failToEncoding: return "Fail to encode data. Please try again" 32 | case .unauthorized: return "Authorization Failed. Please try again" 33 | case .unexpectedStatusCode: return "Unexpected Error occured. Please try again" 34 | case .notModified: return "No data modification has been made. Please try again" 35 | case .requiresAuthentification: return "Authentication is required. Please try again" 36 | case .forbidden: return "This is an invalid permission. Please Try Again" 37 | case .notFound: return "Resources are not found. Please Try Again" 38 | case .failToLoadREADME: return "Fail to load README.md from Server. Please Try Again" 39 | case .failToRequest: return "Fail to Request Network. Please Try Again" 40 | default: return "Unknown Error. Please try Again" 41 | } 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /GitSpace/Sources/Network/Common/HTTPRequestMethod.swift: -------------------------------------------------------------------------------- 1 | // 2 | // HTTPRequestMethod.swift 3 | // GitSpace 4 | // 5 | // Created by 박제균 on 2023/02/09. 6 | // 7 | 8 | import Foundation 9 | 10 | enum HTTPRequestMethod: String { 11 | case get = "GET" 12 | case put = "PUT" 13 | case delete = "DELETE" 14 | case post = "POST" 15 | } 16 | -------------------------------------------------------------------------------- /GitSpace/Sources/Router/GSTabBarRouter.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GSTabBarRouter.swift 3 | // GitSpace 4 | // 5 | // Created by 박제균 on 2023/02/03. 6 | // 7 | 8 | import SwiftUI 9 | 10 | /** 11 | 현재 렌더링하고 있는 탭을 저장하는 GSTabBarRouter class 12 | 13 | - Author: 제균 14 | */ 15 | 16 | final class GSTabBarRouter: ObservableObject { 17 | @Published var currentPage: Page? 18 | } 19 | 20 | extension GSTabBarRouter { 21 | enum Page { 22 | case stars 23 | case chats 24 | case knocks 25 | case profile 26 | 27 | static func ==( 28 | lhs: GSTabBarRouter.Page, 29 | rhs: GSTabBarRouter.Page 30 | ) -> Bool { 31 | switch (lhs, rhs) { 32 | case (.stars, .stars): 33 | return true 34 | case (.profile, .profile): 35 | return true 36 | case (.knocks, .knocks): 37 | return true 38 | case (.chats, .chats): 39 | return true 40 | default: 41 | return false 42 | } 43 | } 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /GitSpace/Sources/ViewModels/ContributorViewModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ContributorViewModel.swift 3 | // GitSpace 4 | // 5 | // Created by 박제균 on 2023/02/14. 6 | // 7 | 8 | import Foundation 9 | import SwiftUI 10 | 11 | final class ContributorViewModel: ObservableObject { 12 | 13 | private let service: GitHubService 14 | 15 | init(service: GitHubService) { 16 | self.service = service 17 | } 18 | 19 | @Published var contributors: [GithubUser] = [] 20 | @Published var isLoading: Bool = true 21 | var temporaryContributors: [GithubUser] = [] 22 | 23 | /// FirebaseUserID로 GitHub Contributor 를 가져오는 메소드. 24 | public func getContributor(with userID: Int) -> GithubUser? { 25 | 26 | let result = contributors.filter { $0.id == userID }.first 27 | print(#file, #function, result?.name ?? "FAILED") 28 | return result 29 | } 30 | 31 | @MainActor 32 | func requestContributors(repository: Repository, page: Int) async -> Result { 33 | 34 | let contributorsResult = await service.requestRepositoryContributors(owner: repository.owner.login, repositoryName: repository.name, page: page) 35 | 36 | switch contributorsResult { 37 | case .success(let users): 38 | for user in users { 39 | let result = await service.requestUserInformation(userName: user.login) 40 | switch result { 41 | case .success(let user): 42 | temporaryContributors.append(user) 43 | case .failure(let error): 44 | return .failure(error) 45 | } 46 | } 47 | return .success(()) 48 | case .failure(let error): 49 | // 컨트리뷰터 목록을 가져올 수 없다는 에러 50 | return .failure(error) 51 | } 52 | } 53 | 54 | 55 | 56 | 57 | } 58 | -------------------------------------------------------------------------------- /GitSpace/Sources/ViewModels/CurrentUserProfileViewModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CurrentUserProfileViewModel.swift 3 | // GitSpace 4 | // 5 | // Created by 박제균 on 2023/03/09. 6 | // 7 | 8 | import Foundation 9 | 10 | final class CurrentUserProfileViewModel: ObservableObject { 11 | 12 | let gitHubService: GitHubService 13 | 14 | init(service: GitHubService) { 15 | self.gitHubService = service 16 | } 17 | 18 | @MainActor 19 | func requestUserReadMe(user: GithubUser) async -> Result { 20 | let result = await gitHubService.requestRepositoryReadme(owner: user.login, repositoryName: user.login) 21 | 22 | switch result { 23 | 24 | case .success(let readme): 25 | guard let content = Data(base64Encoded: readme.content, options: .ignoreUnknownCharacters) else { 26 | return .failure(.failToLoadREADME) 27 | } 28 | 29 | guard let decodeContent = String(data: content, encoding: .utf8) else { 30 | return .failure(.failToLoadREADME) 31 | } 32 | 33 | let htmlResult = await gitHubService.requestMarkdownToHTML(content: decodeContent) 34 | 35 | switch htmlResult { 36 | 37 | case .success(let result): 38 | return .success(result) 39 | // markdown을 html로 변환 실패 40 | case .failure(let error): 41 | return .failure(error) 42 | } 43 | 44 | // repository의 markdown을 요청 실패 45 | case .failure(let error): 46 | return .failure(error) 47 | } 48 | } 49 | 50 | } 51 | -------------------------------------------------------------------------------- /GitSpace/Sources/ViewModels/RepositoryDetailViewModel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RepositoryDetailViewModel.swift 3 | // GitSpace 4 | // 5 | // Created by 박제균 on 2023/03/08. 6 | // 7 | 8 | import Foundation 9 | 10 | final class RepositoryDetailViewModel: ObservableObject { 11 | 12 | private let service: GitHubService 13 | 14 | init(service: GitHubService) { 15 | self.service = service 16 | } 17 | 18 | @MainActor 19 | func requestReadMe(repository: Repository) async -> Result { 20 | let readMeResult = await service.requestRepositoryReadme(owner: repository.owner.login, repositoryName: repository.name) 21 | 22 | switch readMeResult { 23 | 24 | case .success(let response): 25 | guard let content = Data(base64Encoded: response.content, options: .ignoreUnknownCharacters) else { 26 | return .failure(GitHubAPIError.failToLoadREADME) 27 | } 28 | 29 | guard let decodeContent = String(data: content, encoding: .utf8) else { 30 | return .failure(GitHubAPIError.failToLoadREADME) 31 | } 32 | 33 | let htmlResult = await service.requestMarkdownToHTML(content: decodeContent) 34 | 35 | switch htmlResult { 36 | case .success(let result): 37 | return .success(result) 38 | case .failure(let error): 39 | return .failure(error) 40 | } 41 | 42 | case .failure(let error): 43 | return .failure(error) 44 | } 45 | } 46 | 47 | 48 | } 49 | -------------------------------------------------------------------------------- /GitSpace/Sources/Views/Auth/LoadingProgressView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LoadingProgressView.swift 3 | // GitSpace 4 | // 5 | // Created by 정예슬 on 2023/03/09. 6 | // 7 | 8 | import SwiftUI 9 | import Lottie 10 | 11 | struct LoadingProgressView: View { 12 | 13 | @Environment(\.colorScheme) var colorScheme 14 | 15 | /// 로그인 프로세스 동안 띄워 줄 로딩 뷰. 16 | /// 화면 전체에 overlay로 덮어 버튼 클릭을 막을 수 있다. 17 | /// 위에 올릴 View가 이 LoadingProgressView.swift 이다. 18 | var body: some View { 19 | ZStack { 20 | VStack { 21 | Spacer() 22 | 23 | if colorScheme == .light { 24 | LottieView(jsonName: "LoadingDots.json") 25 | .padding(.top, 85) 26 | .scaleEffect(1.3) 27 | .background(.white) 28 | } else { 29 | LottieView(jsonName: "LoadingDotsDark.json") 30 | .padding(.top, 85) 31 | .scaleEffect(1.3) 32 | .background(.black) 33 | } 34 | 35 | Spacer() 36 | } 37 | 38 | VStack{ 39 | Spacer() 40 | 41 | Image("GitSpace-Loading") 42 | .resizable() 43 | .scaledToFit() 44 | .frame(width: 200) 45 | .padding(.bottom, 100) 46 | 47 | Spacer() 48 | } 49 | } 50 | .ignoresSafeArea() 51 | } 52 | } 53 | 54 | struct LoadingProgressView_Previews: PreviewProvider { 55 | static var previews: some View { 56 | LoadingProgressView() 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /GitSpace/Sources/Views/Auth/LottieView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LottieView.swift 3 | // GitSpace 4 | // 5 | // Created by 정예슬 on 2023/03/09. 6 | // 7 | 8 | import Foundation 9 | import SwiftUI 10 | import Lottie 11 | import UIKit 12 | 13 | struct LottieView: UIViewRepresentable { 14 | var name : String 15 | var loopMode: LottieLoopMode 16 | 17 | // 간단하게 View로 JSON 파일 이름으로 애니메이션을 실행합니다. 18 | init(jsonName: String = "", loopMode : LottieLoopMode = .loop){ 19 | self.name = jsonName 20 | self.loopMode = loopMode 21 | } 22 | 23 | func makeUIView(context: UIViewRepresentableContext) -> UIView { 24 | let view = UIView(frame: .zero) 25 | 26 | let animationView = LottieAnimationView() 27 | let animation = LottieAnimation.named(name) 28 | animationView.animation = animation 29 | // AspectFit으로 적절한 크기의 에니매이션을 불러옵니다. 30 | animationView.contentMode = .scaleAspectFit 31 | // 애니메이션은 기본으로 Loop합니다. 32 | animationView.loopMode = loopMode 33 | // 애니메이션을 재생합니다 34 | animationView.play() 35 | // 백그라운드에서 재생이 멈추는 오류를 잡습니다 36 | animationView.backgroundBehavior = .pauseAndRestore 37 | //컨테이너의 너비와 높이를 자동으로 지정할 수 있도록합니다. 로티는 컨테이너 위에 작성됩니다. 38 | 39 | 40 | animationView.translatesAutoresizingMaskIntoConstraints = false 41 | 42 | view.addSubview(animationView) 43 | //레이아웃의 높이와 넓이의 제약 44 | NSLayoutConstraint.activate([ 45 | animationView.heightAnchor.constraint(equalTo: view.heightAnchor), 46 | animationView.widthAnchor.constraint(equalTo: view.widthAnchor) 47 | ]) 48 | 49 | return view 50 | } 51 | 52 | func updateUIView(_ uiView: UIViewType, context: Context) { 53 | } 54 | } 55 | 56 | struct LottieView_Previews: PreviewProvider { 57 | static var previews: some View { 58 | LottieView() 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /GitSpace/Sources/Views/Chat/ChatRoom/ChatRoomKnockSection.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ChatDetailKnockSection.swift 3 | // GitSpace 4 | // 5 | // Created by 원태영 on 2023/02/01. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct ChatDetailKnockSection: View { 11 | 12 | @Environment(\.colorScheme) var colorScheme 13 | let chat: Chat 14 | 15 | var body: some View { 16 | VStack(spacing: 10) { 17 | GSText.CustomTextView(style: .sectionTitle, 18 | string: chat.knockContentDateAsString) 19 | .padding(.bottom, 10) 20 | 21 | HStack { 22 | RoundedRectangle(cornerRadius: 10) 23 | .frame(width: 3, height: 15) 24 | .foregroundColor( 25 | colorScheme == .light 26 | ? .gsGreenPrimary 27 | : .gsYellowPrimary 28 | ) 29 | Text("Knock Message") 30 | .font(.footnote) 31 | .foregroundColor(.gsLightGray1) 32 | .bold() 33 | 34 | Spacer() 35 | } 36 | .padding(.leading, 20) 37 | 38 | GSCanvas.CustomCanvasView(style: .primary) { 39 | HStack { 40 | GSText.CustomTextView(style: .body1, 41 | string: chat.knockContent) 42 | .frame(maxWidth: .infinity) 43 | } 44 | } 45 | .padding(.horizontal, 20) 46 | } 47 | } 48 | } 49 | 50 | -------------------------------------------------------------------------------- /GitSpace/Sources/Views/Chat/GithubProfileImage.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ProfileAsyncImage.swift 3 | // GitSpace 4 | // 5 | // Created by 원태영 on 2023/02/01. 6 | // 7 | 8 | import SwiftUI 9 | 10 | // MARK: -View : 11 | struct GithubProfileImage: View { 12 | 13 | let urlStr: String 14 | let size: CGFloat 15 | @State private var profileImage: Image? 16 | 17 | init(urlStr: String, size: CGFloat) { 18 | self.urlStr = urlStr 19 | self.size = size 20 | } 21 | 22 | var body : some View { 23 | 24 | VStack { 25 | EmptyView() 26 | if let profileImage { 27 | profileImage 28 | .resizable() 29 | .aspectRatio(contentMode: .fit) 30 | .clipShape(Circle()) 31 | .frame(width : size) 32 | } 33 | } 34 | .task { 35 | profileImage = await .loadCachedImage(key: urlStr) 36 | } 37 | } 38 | } 39 | 40 | 41 | struct DefaultProfileImage: View { 42 | let size: CGFloat 43 | 44 | var body: some View { 45 | Image("ProfilePlaceholder") 46 | .resizable() 47 | .aspectRatio(contentMode: .fit) 48 | .clipShape(Circle()) 49 | .frame(width : size) 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /GitSpace/Sources/Views/Chat/MainChat/ChatListSkeletonCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ChatListSkeletonCell.swift 3 | // GitSpace 4 | // 5 | // Created by 원태영 on 2023/02/07. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct ChatListSkeletonCell : View { 11 | 12 | @State var opacity: CGFloat = 0.4 13 | 14 | var body: some View { 15 | VStack(alignment: .leading){ 16 | HStack{ 17 | Image("ProfilePlaceholder") 18 | .resizable() 19 | .aspectRatio(contentMode: .fit) 20 | .clipShape(Circle()) 21 | .frame(width : 55) 22 | .padding(.trailing) 23 | 24 | 25 | VStack(alignment: .leading) { 26 | Text("@Skeleton~") 27 | .font(.title3) 28 | .bold() 29 | .padding(.bottom, 5) 30 | .lineLimit(1) 31 | .modifier(BlinkingSkeletonModifier(opacity: opacity, shouldShow: true)) 32 | 33 | Text("@Skeleton Messages") 34 | .foregroundColor(.gray) 35 | .frame(maxWidth: .infinity, alignment: .leading) 36 | .modifier(BlinkingSkeletonModifier(opacity: opacity, shouldShow: true)) 37 | } 38 | 39 | } 40 | .frame(width: 330,height: 100, alignment: .leading) 41 | Divider() 42 | .frame(width: 350) 43 | } 44 | .task { 45 | withAnimation(.linear(duration: 1.0).repeatForever(autoreverses: true)){ 46 | self.opacity = opacity == 0.4 ? 0.8 : 0.4 47 | } 48 | } 49 | 50 | } 51 | } 52 | 53 | 54 | struct ChatListSkeletonCell_Previews: PreviewProvider { 55 | static var previews: some View { 56 | ChatListSkeletonCell() 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /GitSpace/Sources/Views/Common/FailToLoadReadmeView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // FailToLoadReadmeView.swift 3 | // GitSpace 4 | // 5 | // Created by 박제균 on 2023/03/17. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct FailToLoadReadmeView: View { 11 | var body: some View { 12 | VStack { 13 | Image("GitSpace-ReadMe-Empty") 14 | .resizable() 15 | .aspectRatio(contentMode: .fit) 16 | .frame(width: 250, height: 200) 17 | 18 | GSText.CustomTextView(style: .title3, string: "Fail to Load **README.md**") 19 | } 20 | .frame(width: 250, height: 200) 21 | } 22 | } 23 | 24 | struct ReadmeEmptyView: View { 25 | var body: some View { 26 | VStack { 27 | Image("GitSpace-ReadMe-Empty") 28 | .resizable() 29 | .aspectRatio(contentMode: .fit) 30 | .frame(width: 250, height: 200) 31 | 32 | GSText.CustomTextView(style: .title3, string: "**README.md** does not exist.") 33 | } 34 | .frame(maxWidth: .infinity, alignment: .center) 35 | //.frame(height: 200) 36 | } 37 | } 38 | 39 | 40 | 41 | struct FailToLoadReadmeView_Previews: PreviewProvider { 42 | static var previews: some View { 43 | FailToLoadReadmeView() 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /GitSpace/Sources/Views/Common/KnockMessageMenu.swift: -------------------------------------------------------------------------------- 1 | // 2 | // KnockEllipsisMenu.swift 3 | // GitSpace 4 | // 5 | // Created by Celan on 2023/04/24. 6 | // 7 | 8 | import SwiftUI 9 | 10 | /** 11 | EillipsisMenu를 그리는 ViewBuilder입니다. 12 | Report와 Edit Menu가 Nested 되어 있습니다. 13 | 수신인일 경우, Report 메뉴를 띄우고 14 | 발신인일 경우, Edit 버튼을 띄웁니다. 15 | */ 16 | struct KnockMessageMenu: View { 17 | @Environment(\.colorScheme) var colorScheme 18 | @EnvironmentObject var userStore: UserStore 19 | @Binding var knock: Knock 20 | @Binding var isReporting: Bool 21 | @Binding var isEditingKnockMessage: Bool 22 | 23 | /** 24 | knock의 발신인이 현재 유저인지 id를 비교하고, 현재 유저가 보낸 knock라면 true를 리턴합니다. 25 | */ 26 | private var isCurrentUserSentKnock: Bool { 27 | return knock.sentUserID == userStore.currentUser?.id 28 | } 29 | 30 | // MARK: - BODY 31 | var body: some View { 32 | switch isCurrentUserSentKnock { 33 | case true: 34 | Button { 35 | withAnimation { 36 | isEditingKnockMessage.toggle() 37 | } 38 | } label: { 39 | Image(systemName: "pencil") 40 | .frame(width: 40, height: 40) 41 | } 42 | .tint(colorScheme == .light ? .gsLightGray2 : .white) 43 | 44 | case false: 45 | Menu { 46 | Button(role: .destructive) { 47 | withAnimation { 48 | isReporting.toggle() 49 | } 50 | } label: { 51 | Label("Report", systemImage: "exclamationmark.bubble") 52 | } 53 | } label: { 54 | Image(systemName: "ellipsis") 55 | .frame(width: 40, height: 40) 56 | } 57 | .tint(colorScheme == .light ? .gsLightGray2 : .white) 58 | 59 | } 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /GitSpace/Sources/Views/Common/ReadmeLoadingView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ReadmeLoadingView.swift 3 | // GitSpace 4 | // 5 | // Created by 박제균 on 2023/03/16. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct ReadmeLoadingView: View { 11 | var body: some View { 12 | VStack { 13 | Image("GitSpace-Loading") 14 | .resizable() 15 | .aspectRatio(contentMode: .fit) 16 | .frame(width: 250, height: 200) 17 | 18 | GSText.CustomTextView(style: .title4, string: "Loading README.md...") 19 | } 20 | .frame(width: 250, height: 200) 21 | 22 | } 23 | } 24 | 25 | struct ReadmeLoadingView_Previews: PreviewProvider { 26 | static var previews: some View { 27 | ReadmeLoadingView() 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /GitSpace/Sources/Views/GuideCenter/GuideCenterView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GuideCenterView.swift 3 | // GitSpace 4 | // 5 | // Created by 최한호 on 2023/02/07. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct GuideCenterView: View { 11 | 12 | @Environment(\.dismiss) private var dismiss 13 | @Environment(\.colorScheme) var colorScheme 14 | 15 | var body: some View { 16 | NavigationView { 17 | ScrollView { 18 | 19 | HStack { 20 | 21 | Image("GitSpace-General-Guide") 22 | .resizable() 23 | .aspectRatio(contentMode: .fit) 24 | .frame(width: 100, height: 100) 25 | 26 | VStack(alignment: .leading) { 27 | GSText.CustomTextView( 28 | style: .title3, 29 | string: "The Essential Guidebook for GitSpacers 📖") 30 | } 31 | 32 | Spacer() 33 | } 34 | .padding(.horizontal) 35 | 36 | GuideFuncSection() 37 | GuideBlockSection() 38 | GuideReportSection() 39 | 40 | } // ScrollView 41 | .navigationBarTitle("Guide Center") 42 | .toolbar { 43 | ToolbarItem(placement: .navigationBarLeading) { 44 | Button { 45 | dismiss() 46 | } label: { 47 | Image(systemName: "xmark") 48 | } // Button 49 | } // ToolbarItem 50 | } // toolbar 51 | } // NavigationView 52 | } // body 53 | } 54 | 55 | struct GuideCenterView_Previews: PreviewProvider { 56 | static var previews: some View { 57 | GuideCenterView() 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /GitSpace/Sources/Views/GuideCenter/GuideFunc/ActivityGuideView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ActivityGuideView.swift 3 | // GitSpace 4 | // 5 | // Created by 최한호 on 2023/02/08. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct ActivityGuideView: View { 11 | var body: some View { 12 | ScrollView { 13 | VStack(alignment: .leading) { 14 | HStack { 15 | Text("Catch up with your friends' latest Git activities 👀") 16 | .font(.system(size: 22, weight: .light)) 17 | .foregroundColor(.gsGray1) 18 | 19 | Spacer() 20 | } 21 | 22 | Divider() 23 | 24 | Text( 25 | """ 26 | GitSpace provides **activity feed** for users to check on **Git-related activities** of the people they follow on GitHub, and be connected with their networks and communities. \nWish to learn more about what other professionals are up to? Check out the Activity tab on GitSpace! 27 | """) 28 | .padding(.vertical) 29 | 30 | } // VStack 31 | .padding(.horizontal) 32 | .lineSpacing(2.5) 33 | } // ScrollView 34 | .navigationBarTitle("Activity") 35 | } // body 36 | } 37 | 38 | struct ActivityGuideView_Previews: PreviewProvider { 39 | static var previews: some View { 40 | ActivityGuideView() 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /GitSpace/Sources/Views/GuideCenter/GuideFunc/ChatGuideView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ChatGuideView.swift 3 | // GitSpace 4 | // 5 | // Created by 최한호 on 2023/02/07. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct ChatGuideView: View { 11 | var body: some View { 12 | ScrollView { 13 | VStack(alignment: .leading) { 14 | HStack { 15 | Text("Connect with contributors of your starred repositories 👥") 16 | .font(.system(size: 22, weight: .light)) 17 | .foregroundColor(.gsGray1) 18 | 19 | Spacer() 20 | } 21 | 22 | Divider() 23 | 24 | Text( 25 | """ 26 | Once the Knock message is approved, you are all set to start your conversations! \nIt is your chance to talk to worldwide developers with awesome projects on GitHub, build connections, as well as to be exposed within the community. You are free to ask questions, give suggestions, offer a job interview, and more just like on any other chatting app. \nPlease remember that we are all unfamiliar to each other, and that **we must respect one another in the community.** Please be reasonable, gentle, and considerate with your language. 27 | """) 28 | .padding(.vertical) 29 | 30 | 31 | } // VStack 32 | .padding(.horizontal) 33 | .lineSpacing(2.5) 34 | } // ScrollView 35 | .navigationBarTitle("Chat") 36 | } // body 37 | } 38 | 39 | struct ChatGuideView_Previews: PreviewProvider { 40 | static var previews: some View { 41 | ChatGuideView() 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /GitSpace/Sources/Views/Home/ActivityView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ActivityView.swift 3 | // GitSpace 4 | // 5 | // Created by 박제균 on 2023/01/18. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct ActivityView: View { 11 | 12 | @EnvironmentObject var gitHubAuthManager: GitHubAuthManager 13 | @ObservedObject var eventViewModel: EventViewModel 14 | 15 | var body: some View { 16 | 17 | ScrollView { 18 | ForEach(eventViewModel.events) { event in 19 | // event, gitHubUser, Repository 필요 20 | // 인덱스로 접근하면 안되던뎅 21 | ActivityFeedView(eventViewModel: eventViewModel, event: event) 22 | Divider() 23 | } 24 | } // ScrollView 25 | .refreshable { 26 | Task{ 27 | guard let currentGitHubUser = gitHubAuthManager.authenticatedUser?.login else { return } 28 | try await eventViewModel.requestAuthenticatedUserReceivedEvents(who: currentGitHubUser) 29 | } 30 | } 31 | } // body 32 | } 33 | -------------------------------------------------------------------------------- /GitSpace/Sources/Views/Home/ContributorListSkeletonCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ContributorListSkeletonCell.swift 3 | // GitSpace 4 | // 5 | // Created by 박제균 on 2023/03/12. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct ContributorListSkeletonCell: View { 11 | 12 | @State var opacity: CGFloat = 0.4 13 | 14 | var body: some View { 15 | VStack { 16 | Image("ProfilePlaceholder") 17 | .resizable() 18 | .aspectRatio(contentMode: .fit) 19 | .clipShape(Circle()) 20 | .frame(width: 40, height: 40) 21 | .modifier(BlinkingSkeletonModifier(opacity: opacity, shouldShow: true)) 22 | } 23 | .task { 24 | withAnimation(.linear(duration: 1.0).repeatForever(autoreverses: true)) { 25 | self.opacity = opacity == 0.4 ? 0.8 : 0.4 26 | } 27 | } 28 | 29 | } 30 | } 31 | 32 | 33 | struct ContributorListSkeletonCell_Previews: PreviewProvider { 34 | static var previews: some View { 35 | ContributorListSkeletonCell() 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /GitSpace/Sources/Views/Home/HomeCardSkeletonCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // HomeCardSkeletonCell.swift 3 | // GitSpace 4 | // 5 | // Created by 정예슬 on 2023/02/15. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct HomeCardSkeletonCell: View { 11 | @State var opacity: CGFloat = 0.4 12 | 13 | var body: some View { 14 | GSCanvas.CustomCanvasView.init(style: .primary, content: { 15 | /* 캔버스 내부: */ 16 | Group { 17 | NavigationLink { } 18 | label: { 19 | VStack(alignment: .leading, spacing: 10) { 20 | Text("repo owner") 21 | .multilineTextAlignment(.leading) 22 | .modifier(BlinkingSkeletonModifier(opacity: opacity, shouldShow: true)) 23 | 24 | Text("this is repo name") 25 | .multilineTextAlignment(.leading) 26 | .modifier(BlinkingSkeletonModifier(opacity: opacity, shouldShow: true)) 27 | 28 | Text("Repo description") 29 | .multilineTextAlignment(.leading) 30 | .frame(maxWidth: .infinity, alignment: .leading) 31 | .modifier(BlinkingSkeletonModifier(opacity: opacity, shouldShow: true)) 32 | } 33 | } 34 | } 35 | }) 36 | .task { 37 | withAnimation(.linear(duration: 1.0).repeatForever(autoreverses: true)){ 38 | self.opacity = opacity == 0.4 ? 0.8 : 0.4 39 | } 40 | } 41 | .padding(.horizontal, 20) 42 | .padding(.vertical, 10) 43 | } 44 | } 45 | 46 | struct HomeCardSkeletonCell_Previews: PreviewProvider { 47 | static var previews: some View { 48 | HomeCardSkeletonCell() 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /GitSpace/Sources/Views/Home/RepositoryCardView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // RepositoryCardView.swift 3 | // GitSpace 4 | // 5 | // Created by Da Hae Lee on 2023/02/05. 6 | // 7 | 8 | import SwiftUI 9 | 10 | // MARK: - Repository Card View 11 | /// Starred View에서 사용되는 Repository를 감싸는 Card View입니다. 12 | struct RepositoryCardView: View { 13 | @Environment(\.colorScheme) var colorScheme 14 | var content: () -> Content 15 | 16 | init(@ViewBuilder content: @escaping () -> Content) { 17 | self.content = content 18 | } 19 | 20 | // FIXME: 배경색을 GScolor로 바꿔줘야 함 21 | /// systemGray 컬러를 임시 방편으로 다크모드에 대응하도록 설정하였다. 22 | var body: some View { 23 | Group(content: content) 24 | .background(colorScheme == .light ? .white : Color(.systemGray4)) 25 | .cornerRadius(17) 26 | .shadow( 27 | color: Color(.systemGray6), 28 | radius: 8, 29 | x: 0, y: 2) 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /GitSpace/Sources/Views/Knock/SendKnock/BeforeSendKnockSection.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BeforeSendKnockSection.swift 3 | // GitSpace 4 | // 5 | // Created by 최한호 on 2023/05/08. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct BeforeSendKnockSection: View { 11 | 12 | @State var targetGithubUser: GithubUser? 13 | @Binding var showKnockGuide: Bool 14 | 15 | var body: some View { 16 | if let targetGithubUser { 17 | VStack(alignment: .center, spacing: 10) { 18 | HStack(spacing: 5) { 19 | GSText.CustomTextView( 20 | style: .body1, 21 | string: "It's the first message to") 22 | GSText.CustomTextView( 23 | style: .title3, 24 | string: "\(targetGithubUser.login)!") 25 | } 26 | 27 | HStack(spacing: 5) { 28 | Text("Would you like to") 29 | Button { 30 | showKnockGuide.toggle() 31 | } label: { 32 | Text("Knock") 33 | .bold() 34 | } 35 | Text("?") 36 | .padding(.leading, -4) 37 | } 38 | .padding(.top, -8) 39 | 40 | GSText.CustomTextView( 41 | style: .caption1, 42 | string: 43 | """ 44 | Please select the purpose of the chat so that the other person can understand your intention. 45 | """) 46 | } 47 | .multilineTextAlignment(.center) 48 | .padding(.horizontal, 20) 49 | } 50 | } 51 | } 52 | 53 | struct BeforeSendKnockSection_Previews: PreviewProvider { 54 | static var previews: some View { 55 | BeforeSendKnockSection( 56 | showKnockGuide: .constant(false) 57 | ) 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /GitSpace/Sources/Views/Notification/NotificationView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NotificationView.swift 3 | // GitSpace 4 | // 5 | // Created by 박제균 on 2023/02/07. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct NotificationView: View { 11 | 12 | var body: some View { 13 | 14 | ScrollView { 15 | 16 | ForEach(0..<10) { _ in 17 | KnockNotificationCell() 18 | Divider() 19 | SystemNotificationCell() 20 | Divider() 21 | } 22 | 23 | } 24 | // .padding(.top, 20) 25 | .navigationBarTitle("Notifications") 26 | .navigationBarTitleDisplayMode(.inline) 27 | 28 | 29 | } 30 | } 31 | 32 | struct NotificationView_Previews: PreviewProvider { 33 | static var previews: some View { 34 | NavigationView { 35 | NotificationView() 36 | } 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /GitSpace/Sources/Views/Notification/SystemNotificationCell.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SystemNotificationCell.swift 3 | // GitSpace 4 | // 5 | // Created by 박제균 on 2023/02/07. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct SystemNotificationCell: View { 11 | var body: some View { 12 | HStack(spacing: 25) { 13 | 14 | Image("GitSpace-MainKnockView") 15 | .resizable() 16 | .aspectRatio(contentMode: .fit) 17 | .frame(width: 50, height: 50) 18 | 19 | GSText.CustomTextView(style: .body1, string: "Some System Message") 20 | 21 | Spacer() 22 | VStack { 23 | Spacer() 24 | GSText.CustomTextView(style: .caption2, string: "\("1") 시간 전") 25 | } 26 | } 27 | .padding(.top, 10) 28 | .padding(.horizontal, 20) 29 | 30 | } 31 | } 32 | 33 | struct SystemNotificationCell_Previews: PreviewProvider { 34 | static var previews: some View { 35 | SystemNotificationCell() 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /GitSpace/Sources/Views/Profile/MainProfileView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // profileDetailView.swift 3 | // GitSpace 4 | // 5 | // Created by 정예슬 on 2023/01/17. 6 | // 7 | 8 | import SwiftUI 9 | 10 | // 사용자의 프로필 뷰 11 | // TODO: - ToolBar Item들 네비게이션으로 다른 뷰 연결 12 | 13 | struct MainProfileView: View { 14 | 15 | @State private var showGuideCenter: Bool = false 16 | 17 | var body: some View { 18 | CurrentUserProfileView() 19 | // FIXME: - 추후 네비게이션 타이틀 지정 (작성자: 제균) 20 | .navigationTitle("") 21 | .toolbar { 22 | ToolbarItemGroup(placement: .navigationBarTrailing){ 23 | Button { 24 | showGuideCenter.toggle() 25 | } label: { 26 | Image(systemName: "info.circle") 27 | .foregroundColor(.primary) 28 | } 29 | .padding(.trailing, -10) 30 | 31 | NavigationLink { 32 | SetMainView() 33 | } label: { 34 | Image(systemName: "gearshape") 35 | .foregroundColor(.primary) 36 | } 37 | } 38 | } 39 | .fullScreenCover(isPresented: $showGuideCenter) { 40 | GuideCenterView() 41 | } 42 | } 43 | } 44 | 45 | struct MainProfileView_Previews: PreviewProvider { 46 | static var previews: some View { 47 | NavigationView{ 48 | MainProfileView() 49 | } 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /GitSpace/Sources/Views/Settings/AppSettings/SetTextMediaView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SetTextMediaView.swift 3 | // GitSpace 4 | // 5 | // Created by 최한호 on 2023/02/09. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct SetTextMediaView: View { 11 | 12 | @AppStorage("isAutoCompleted") var isAutoCompleted: Bool = false 13 | @AppStorage("isEnterToSent") var isEnterToSent: Bool = false 14 | @AppStorage("isDataSaved") var isDataSaved: Bool = false 15 | 16 | var body: some View { 17 | List { 18 | 19 | Section { 20 | Toggle(isOn: $isAutoCompleted) { 21 | Text("Use Auto Complete") 22 | } 23 | .toggleStyle(SwitchToggleStyle(tint: .gsGreenPrimary)) 24 | 25 | Toggle(isOn: $isEnterToSent) { 26 | Text("Press Enter to Send") 27 | } 28 | .toggleStyle(SwitchToggleStyle(tint: .gsGreenPrimary)) 29 | 30 | } header: { 31 | Text("Keyboard") 32 | } 33 | 34 | 35 | 36 | // MARK: - DATA CONSUMPTION 37 | Section { 38 | 39 | Toggle(isOn: $isDataSaved) { 40 | Text("Data Saving Mode") 41 | } 42 | .toggleStyle(SwitchToggleStyle(tint: .gsGreenPrimary)) 43 | 44 | } header: { 45 | Text("DATA CONSUMPTION") 46 | } footer: { 47 | Text("When this is on, images will be sent in lower quality on cellular networks to reduce data usage.") 48 | } 49 | 50 | } // List 51 | .navigationBarTitle("Text & Media", displayMode: .inline) 52 | } 53 | } 54 | 55 | struct SetTextMediaView_Previews: PreviewProvider { 56 | static var previews: some View { 57 | SetTextMediaView() 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /GitSpace/Sources/Views/Settings/Legal/SetLicensesView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SetLicensesView.swift 3 | // GitSpace 4 | // 5 | // Created by 최한호 on 2023/02/08. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct SetLicensesView: View { 11 | var body: some View { 12 | ScrollView { 13 | Text(""" 14 | **MIT License** 15 | 16 | Copyright (c) 2023 **GitSpace** 17 | 18 | Permission is hereby granted, free of charge, to any person obtaining a copy 19 | of this software and associated documentation files (the "Software"), to deal 20 | in the Software without restriction, including without limitation the rights 21 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 22 | copies of the Software, and to permit persons to whom the Software is 23 | furnished to do so, subject to the following conditions: 24 | 25 | The above copyright notice and this permission notice shall be included in all 26 | copies or substantial portions of the Software. 27 | 28 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 29 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 30 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 31 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 32 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 33 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 34 | SOFTWARE. 35 | """) 36 | .multilineTextAlignment(.leading) 37 | .font(.body) 38 | .padding(.horizontal, 20) 39 | } // ScrollView 40 | .navigationBarTitle("Licenses", displayMode: .inline) 41 | } // body 42 | } 43 | 44 | struct SetLicensesView_Previews: PreviewProvider { 45 | static var previews: some View { 46 | SetLicensesView() 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /GitSpace/Sources/Views/Settings/SetPrivacySafetyView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SetPrivacySafetyView.swift 3 | // GitSpace 4 | // 5 | // Created by 최한호 on 2023/02/09. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct SetPrivacySafetyView: View { 11 | var body: some View { 12 | List { 13 | // MARK: - APP MANAGEMENT 14 | Section { 15 | Button(role: .cancel) { 16 | print("모든 캐시를 ;;삭제할거임") 17 | } label: { 18 | HStack { 19 | Text("Clear cache") 20 | Spacer() 21 | Text("\(10) MB") 22 | .foregroundColor(.gsGray2) 23 | } 24 | } 25 | } header: { 26 | Text("app Management") 27 | } 28 | 29 | } // List 30 | .navigationBarTitle("Privacy & Safety", displayMode: .inline) 31 | } 32 | } 33 | 34 | struct SetPrivacySafetyView_Previews: PreviewProvider { 35 | static var previews: some View { 36 | SetPrivacySafetyView() 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /GitSpace/Utilities/Components/GSCanvas.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GSCanvas.swift 3 | // GitSpace 4 | // 5 | // Created by yeeunchoi on 2023/02/03. 6 | // 7 | 8 | import Foundation 9 | import SwiftUI 10 | 11 | 12 | struct GSCanvas { 13 | public enum GSCanvasStyle { 14 | case primary 15 | /* 카드 스타일은 나중에 더 추가될 가능성 있음 (예: 프로필 뷰에서 자기소개 카드) */ 16 | } 17 | 18 | struct CustomCanvasView: View { 19 | 20 | public let style: GSCanvasStyle 21 | public let content: Content 22 | 23 | var body: some View { 24 | 25 | content 26 | .modifier(GSCanvasModifier(style: .primary)) 27 | } 28 | 29 | init(style: GSCanvasStyle, @ViewBuilder content: () -> Content) { 30 | self.style = style 31 | self.content = content() 32 | } 33 | 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /GitSpace/Utilities/Components/GSTabBarBackGround.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GSTabBarBackGround.swift 3 | // GitSpace 4 | // 5 | // Created by 박제균 on 2023/02/03. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct GSTabBarBackGround { 11 | 12 | /** 13 | 커스텀 탭바의 배경이 Rectangle인지 RoundedRectangle인지 선택할 수 있습니다. 또한 연관값으로 배경색상과, RoundedRectangle의 경우 cornerRadius값을 입력해주시면 됩니다. 14 | */ 15 | public enum GSTabBarBackGroundStyle { 16 | case rectangle(backGroundColor: Color) 17 | case roundedRectangle(backGroundColor: Color, cornerRadius: CGFloat) 18 | } 19 | 20 | /** 21 | 탭바는 가로 고정이기 때문에 HStack으로 두었습니다. 22 | */ 23 | struct CustomTabBarBackgroundView: View { 24 | 25 | public let style: GSTabBarBackGroundStyle 26 | public let content: Content 27 | 28 | var body: some View { 29 | 30 | switch style { 31 | 32 | case .rectangle(let backGroundColor): 33 | HStack { 34 | content 35 | } 36 | .edgesIgnoringSafeArea(.bottom) 37 | .tabBarBackGroundModifier(style: .rectangle(backGroundColor: backGroundColor)) 38 | 39 | case .roundedRectangle(let backGroundColor, let cornerRadius): 40 | HStack { 41 | content 42 | } 43 | .edgesIgnoringSafeArea(.bottom) 44 | .tabBarBackGroundModifier(style: .roundedRectangle(backGroundColor: backGroundColor, cornerRadius: cornerRadius)) 45 | } 46 | } 47 | 48 | init(style: GSTabBarBackGroundStyle, @ViewBuilder content: () -> Content) { 49 | self.style = style 50 | self.content = content() 51 | } 52 | 53 | } 54 | 55 | } 56 | 57 | 58 | -------------------------------------------------------------------------------- /GitSpace/Utilities/CustomHostingController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CustomHostingController.swift 3 | // GitSpace 4 | // 5 | // Created by Da Hae Lee on 2023/04/20. 6 | // 7 | 8 | import SwiftUI 9 | 10 | class CustomHostingController: UIHostingController { 11 | 12 | override func viewDidLoad() { 13 | view.backgroundColor = .systemBackground 14 | print(rootView) 15 | // setting presentation controller properties 16 | if let presentationController = presentationController as? UISheetPresentationController { 17 | 18 | switch rootView { 19 | case is ReportView: 20 | presentationController.detents = [ 21 | .large() 22 | ] 23 | default: 24 | presentationController.detents = [ 25 | .medium(), 26 | .large() 27 | ] 28 | } 29 | // to show grab protion 30 | presentationController.prefersGrabberVisible = true 31 | } 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /GitSpace/Utilities/DesignSystemStyleEnums.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DesignSystemStyleEnums.swift 3 | // GitSpace 4 | // 5 | // Created by 이승준 on 2023/02/03. 6 | // 7 | 8 | import SwiftUI 9 | 10 | public enum GSButtonStyle { 11 | case primary(isDisabled: Bool) 12 | case secondary(isDisabled: Bool) 13 | 14 | /** 15 | 레포지토리뷰, 스타뷰, 필터뷰에서는 적용된 상태의 스타일을 적용하여 Green, Yellow 컬러로 tint한다 16 | AddTagSheetView에서는 isSelectedInAddTagSheet에 유저가 태그를 선택했는지 여부를 할당하고 흑백 컬러로 분기한다. 17 | */ 18 | case tag( 19 | isAppliedInView: Bool? = nil, 20 | isSelectedInAddTagSheet: Bool? = nil 21 | ) 22 | case plainText(isDestructive: Bool) 23 | case homeTab(tabName: String, 24 | tabSelection: Binding) 25 | } 26 | -------------------------------------------------------------------------------- /GitSpace/Utilities/Extensions/Button+ColorScheme.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Button+.swift 3 | // GitSpace 4 | // 5 | // Created by 이승준 on 2023/01/24. 6 | // 7 | 8 | import SwiftUI 9 | 10 | extension Button { 11 | /// - Important: ONLY USED IN DESIGN SYSTEM CODE 12 | public func buttonColorSchemeModifier(style: GSButtonStyle) -> some View { 13 | modifier(GSButtonStyleModifiers(style: style)) 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /GitSpace/Utilities/Extensions/CGFloat+.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CGFloat+.swift 3 | // GitSpace 4 | // 5 | // Created by 원태영 on 2023/05/15. 6 | // 7 | 8 | import Foundation 9 | 10 | extension CGFloat { 11 | var asInt: Int { 12 | switch self { 13 | case .infinity, .nan: 14 | return 0 15 | default: 16 | return Int(self) 17 | } 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /GitSpace/Utilities/Extensions/Date+.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Date+.swift 3 | // GitSpace 4 | // 5 | // Created by 박제균 on 2023/02/16. 6 | // 7 | 8 | import Foundation 9 | 10 | extension Date { 11 | private static var formatter: RelativeDateTimeFormatter = { 12 | let formatter = RelativeDateTimeFormatter() 13 | formatter.unitsStyle = .full 14 | return formatter 15 | }() 16 | 17 | func timeAgoDisplay() -> String { 18 | Self.formatter.localizedString(for: self, relativeTo: Date()) 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /GitSpace/Utilities/Extensions/Date+DateDiff.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Date+DateDiff.swift 3 | // GitSpace 4 | // 5 | // Created by 이승준 on 2023/01/31. 6 | // 7 | 8 | import Foundation 9 | 10 | extension Date { 11 | static func -(recent: Date, previous: Date) -> (month: Int?, day: Int?, hour: Int?, minute: Int?, second: Int?) { 12 | let day = Calendar.current.dateComponents([.day], from: previous, to: recent).day 13 | let month = Calendar.current.dateComponents([.month], from: previous, to: recent).month 14 | let hour = Calendar.current.dateComponents([.hour], from: previous, to: recent).hour 15 | let minute = Calendar.current.dateComponents([.minute], from: previous, to: recent).minute 16 | let second = Calendar.current.dateComponents([.second], from: previous, to: recent).second 17 | 18 | return (month: month, day: day, hour: hour, minute: minute, second: second) 19 | } 20 | } 21 | 22 | extension Date { 23 | public func formattedDateString() -> String { 24 | let dateFormatter = DateFormatter() 25 | dateFormatter.dateFormat = "yyyy-MM-dd HH:mm" 26 | return dateFormatter.string(from: self) 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /GitSpace/Utilities/Extensions/Int+.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Int+.swift 3 | // GitSpace 4 | // 5 | // Created by 원태영 on 2023/05/15. 6 | // 7 | 8 | import Foundation 9 | 10 | extension Int { 11 | var asFloat: CGFloat { 12 | return CGFloat(self) 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /GitSpace/Utilities/Extensions/String+.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Array+String.swift 3 | // GitSpace 4 | // 5 | // Created by 이승준 on 2023/02/12. 6 | // 7 | 8 | import Foundation 9 | 10 | extension String { 11 | /// 영어의 소대문자 구분 없이 문자열을 포함하는지를 확인 후 Bool 을 리턴하는 메소드. 12 | public func contains( 13 | _ string: String, 14 | isCaseInsensitive caseInsensitive: Bool 15 | ) -> Bool { 16 | caseInsensitive 17 | ? range(of: string, options: .caseInsensitive) != nil 18 | : contains(string) 19 | } 20 | 21 | public func stringToDate() -> Date { 22 | let dateFormatter = DateFormatter() 23 | dateFormatter.locale = Locale(identifier: "en_US_POSIX") 24 | // set locale to reliable US_POSIX 25 | dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZ" 26 | guard let date = dateFormatter.date(from: self) else { return Date() } 27 | return date 28 | } 29 | 30 | /// Base64 인코딩 31 | public var asBase64: String? { 32 | let utf8Data = self.data(using: .utf8) 33 | return utf8Data?.base64EncodedString() 34 | } 35 | 36 | /// Base64 디코딩 37 | public var decodedBase64String: String? { 38 | let data: Data? = Data(base64Encoded: self) 39 | guard let data else { return nil } 40 | return String(data: data, encoding: .utf8) 41 | 42 | public func isValidPattern(pattern: String) -> Bool { 43 | return self.range(of: pattern, options: .regularExpression) != nil 44 | 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /GitSpace/Utilities/Extensions/UIFont+.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIFont+.swift 3 | // GitSpace 4 | // 5 | // Created by 원태영 on 2023/02/05. 6 | // 7 | 8 | import SwiftUI 9 | 10 | extension UIFont { 11 | // MARK: Method - SwiftUI system Font를 UIFont 타입으로 변환하는 함수 12 | static func fontToUIFont(from font: Font) -> UIFont { 13 | let style: UIFont.TextStyle 14 | switch font { 15 | case .largeTitle: style = .largeTitle 16 | case .title: style = .title1 17 | case .title2: style = .title2 18 | case .title3: style = .title3 19 | case .headline: style = .headline 20 | case .subheadline: style = .subheadline 21 | case .callout: style = .callout 22 | case .caption: style = .caption1 23 | case .caption2: style = .caption2 24 | case .footnote: style = .footnote 25 | case .body: fallthrough 26 | default: style = .body 27 | } 28 | return UIFont.preferredFont(forTextStyle: style) 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /GitSpace/Utilities/Extensions/UIScreen+.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIScreen+.swift 3 | // GitSpace 4 | // 5 | // Created by 박제균 on 2023/02/14. 6 | // 7 | 8 | import UIKit 9 | 10 | extension UIScreen { 11 | /// - Mini, SE: 375.0 12 | /// - pro: 390.0 13 | /// - pro max: 428.0 14 | var isWiderThan375pt: Bool { self.bounds.size.width > 375 } 15 | } 16 | -------------------------------------------------------------------------------- /GitSpace/Utilities/Extensions/View+DesignSystem.swift: -------------------------------------------------------------------------------- 1 | // 2 | // View+DesignSystem.swift 3 | // GitSpace 4 | // 5 | // Created by 이승준 on 2023/02/03. 6 | // 7 | 8 | import SwiftUI 9 | 10 | extension View { 11 | public func navigationLinkStyleModifier(navigationStyle: GSButtonStyle) -> some View { 12 | modifier(GSButtonStyleModifiers(style: navigationStyle)) 13 | } 14 | 15 | public func labelHierarchyModifier(style: Constant.LabelHierarchy) -> some View { 16 | modifier(GSLabelModifier(style: style)) 17 | } 18 | 19 | public func shadowColorSchemeModifier() -> some View { 20 | modifier(ShadowColorSchemeModifier()) 21 | } 22 | } 23 | 24 | -------------------------------------------------------------------------------- /GitSpace/Utilities/Extensions/View+TextEditorBackgroundColor.swift: -------------------------------------------------------------------------------- 1 | // 2 | // View+TextEditorBackgroundColor.swift 3 | // GitSpace 4 | // 5 | // Created by Celan on 2023/07/06. 6 | // 7 | 8 | import SwiftUI 9 | 10 | public extension View { 11 | func textEditorBackgroundClear() -> some View { 12 | if #available(iOS 16.0, *) { 13 | return scrollContentBackground(.hidden) 14 | } else { 15 | return onAppear { 16 | UITextView.appearance().backgroundColor = .clear 17 | } 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /GitSpace/Utilities/Extensions/View+cornerRadius.swift: -------------------------------------------------------------------------------- 1 | // 2 | // View+cornerRadius.swift 3 | // GitSpace 4 | // 5 | // Created by 박제균 on 2023/02/03. 6 | // 7 | 8 | import SwiftUI 9 | 10 | extension View { 11 | func cornerRadius(_ radius:CGFloat, corners: UIRectCorner) -> some View { 12 | clipShape(RoundedCorner(radius: radius,corners: corners)) 13 | } 14 | } 15 | 16 | struct RoundedCorner: Shape { 17 | var radius: CGFloat = .infinity 18 | var corners: UIRectCorner = .allCorners 19 | 20 | func path(in rect: CGRect) -> Path { 21 | let path = UIBezierPath(roundedRect: rect, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius)) 22 | return Path(path.cgPath) 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /GitSpace/Utilities/HalfSheetManager.swift: -------------------------------------------------------------------------------- 1 | // 2 | // HalfSheetManager.swift 3 | // GitSpace 4 | // 5 | // Created by Da Hae Lee on 2023/04/20. 6 | // 7 | 8 | import SwiftUI 9 | import UIKit 10 | 11 | struct HalfSheetManager: UIViewControllerRepresentable { 12 | @Binding var isPresented: Bool 13 | var onDismiss: (() -> ())? 14 | var content: Content 15 | let controller = UIViewController() 16 | 17 | func makeCoordinator() -> Coordinator { 18 | return Coordinator(parent: self) 19 | } 20 | 21 | func makeUIViewController(context: Context) -> UIViewController { 22 | controller.view.backgroundColor = .clear 23 | return controller 24 | } 25 | 26 | func updateUIViewController(_ uiViewController: UIViewController, context: Context) { 27 | if isPresented { 28 | let sheetController = CustomHostingController(rootView: content) 29 | sheetController.presentationController?.delegate = context.coordinator 30 | uiViewController.present(sheetController, animated: true) 31 | } else { 32 | // choosing view when showsheet toggled againg 33 | uiViewController.dismiss(animated: true) 34 | } 35 | } 36 | 37 | // On dismiss 38 | class Coordinator: NSObject, UISheetPresentationControllerDelegate { 39 | var parent: HalfSheetManager 40 | 41 | init(parent: HalfSheetManager) { 42 | self.parent = parent 43 | } 44 | 45 | func presentationControllerDidDismiss(_ presentationController: UIPresentationController) { 46 | parent.isPresented = false 47 | if parent.onDismiss != nil { 48 | parent.onDismiss!() 49 | } 50 | } 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /GitSpace/Utilities/KeyboardHandler.swift: -------------------------------------------------------------------------------- 1 | // 2 | // KeyboardHandler.swift 3 | // GitSpace 4 | // 5 | // Created by 최한호 on 2023/02/01. 6 | // 7 | 8 | import Combine 9 | import SwiftUI 10 | 11 | final class KeyboardHandler: ObservableObject { 12 | @Published private(set) var keyboardHeight: CGFloat = 0 13 | 14 | private var cancellable: AnyCancellable? 15 | 16 | private let keyboardWillShow = NotificationCenter.default.publisher(for: UIResponder.keyboardWillShowNotification) 17 | .compactMap { ($0.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect)?.height } 18 | 19 | private let keyboardWillHide = NotificationCenter.default.publisher(for: UIResponder.keyboardWillHideNotification) 20 | .map { _ in CGFloat.zero } 21 | 22 | init() { 23 | cancellable = Publishers.Merge(keyboardWillShow, keyboardWillHide).subscribe(on: DispatchQueue.main) 24 | .assign(to: \.self.keyboardHeight, on: self) 25 | } 26 | 27 | } 28 | -------------------------------------------------------------------------------- /GitSpace/Utilities/Modifiers/BlinkingSkeletonModifier.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BlinkingSkeletonModifier.swift 3 | // GitSpace 4 | // 5 | // Created by 정예슬 on 2023/02/06. 6 | // 7 | 8 | 9 | import SwiftUI 10 | 11 | struct BlinkingSkeletonModifier: Animatable, ViewModifier { 12 | 13 | var opacity: Double 14 | var shouldShow: Bool 15 | 16 | var animatableData: Double { 17 | get { opacity } 18 | set { opacity = newValue } 19 | } 20 | 21 | func body(content: Content) -> some View { 22 | content 23 | .overlay( 24 | ZStack { 25 | //ZStack에서 애니메이션 처리를 할 때 zIndex 지정해주지 않으면 애니메이션 에러가 발생할 수 있음. 26 | Color.white.zIndex(0) 27 | 28 | //아래 있는 코드의 뷰가 더 상위에 떠야하므로 zIndex 1 29 | RoundedRectangle(cornerRadius: 8) 30 | .fill(.gray) 31 | .opacity(self.opacity).zIndex(1) 32 | }.opacity(self.shouldShow ? 1 : 0) 33 | ) 34 | .cornerRadius(8) 35 | } 36 | } 37 | 38 | -------------------------------------------------------------------------------- /GitSpace/Utilities/Modifiers/ButtonLabelLayoutModifier.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ButtonLabelLayoutModifier.swift 3 | // GitSpace 4 | // 5 | // Created by 이승준 on 2023/02/03. 6 | // 7 | 8 | import SwiftUI 9 | 10 | public struct ButtonLabelLayoutModifier: ViewModifier { 11 | public let buttonLabel: GSButton.GSButtonStyle 12 | 13 | public func body(content: Content) -> some View { 14 | switch buttonLabel { 15 | case .primary(let isDisabled): 16 | content 17 | .padding(.horizontal, 34) 18 | .padding(.vertical, 18) 19 | .frame(minWidth: 150) 20 | .foregroundColor(isDisabled ? Color.white : Color.primary) 21 | case .secondary(let isDisabled): 22 | content 23 | .padding(.horizontal, 23) 24 | .padding(.vertical, 13) 25 | .frame(minWidth: 80) 26 | .foregroundColor(isDisabled ? .white : Color.primary) 27 | case .tag(let isEditing, let isSelected): 28 | content 29 | .padding(.horizontal, 12) 30 | .padding(.vertical, 9) 31 | .frame(minWidth: 62) 32 | .foregroundColor(isSelected ? Color.primary : Color.white) 33 | case .homeTab: 34 | content 35 | .foregroundColor(Color.primary) 36 | case .plainText(let isDestructive): 37 | content 38 | .foregroundColor(isDestructive ? .gsRed : Color.primary) 39 | } 40 | } 41 | 42 | init(buttonLabel: GSButton.GSButtonStyle) { 43 | self.buttonLabel = buttonLabel 44 | } 45 | } 46 | 47 | -------------------------------------------------------------------------------- /GitSpace/Utilities/Modifiers/GSCanvasModifier.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GSCanvasColorSchemeModifier.swift 3 | // GitSpace 4 | // 5 | // Created by yeeunchoi on 2023/02/03. 6 | // 7 | 8 | import SwiftUI 9 | 10 | 11 | public struct GSCanvasModifier: ViewModifier { 12 | @Environment(\.colorScheme) var colorScheme 13 | 14 | let style: GSCanvas.GSCanvasStyle 15 | let minHeight: CGFloat? = 50 16 | 17 | 18 | public func body(content: Content) -> some View { 19 | switch style { 20 | case .primary: // default style 21 | content 22 | .padding(20) 23 | .background( 24 | RoundedRectangle(cornerRadius: 17, style: .continuous) 25 | .fill(colorScheme == .dark ? Color.gsGray3 : Color.white) 26 | .frame(maxWidth: .infinity) 27 | .frame(minHeight: minHeight) 28 | .shadow(color: .gsGray2.opacity(colorScheme == .dark ? 0.0 : 0.3), radius: 6, x: 0, y: 2) 29 | ) 30 | } 31 | } 32 | 33 | 34 | init(style: GSCanvas.GSCanvasStyle) { 35 | self.style = style 36 | } 37 | } 38 | 39 | -------------------------------------------------------------------------------- /GitSpace/Utilities/Modifiers/GSTextEditorLayoutModifier.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GSTextEditorLayoutModifier.swift 3 | // GitSpace 4 | // 5 | // Created by 원태영 on 2023/04/25. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct GSTextEditorLayoutModifier: ViewModifier { 11 | 12 | let font: Font 13 | let color: Color 14 | let lineSpace: CGFloat 15 | let maxHeight: CGFloat 16 | let horizontalInset: CGFloat 17 | let bottomInset: CGFloat 18 | 19 | func body(content: Content) -> some View { 20 | content 21 | .font(font) 22 | .foregroundColor(color) 23 | .lineSpacing(lineSpace) 24 | .frame(maxHeight: maxHeight) 25 | .padding(.horizontal, horizontalInset) 26 | .padding(.bottom, bottomInset) 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /GitSpace/Utilities/Modifiers/GSTextFieldLayoutModifier.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GSTextFieldLayoutModifier.swift 3 | // GitSpace 4 | // 5 | // Created by 원태영, 이다혜, 최한호 on 2023/02/03. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct GSTextFieldLayoutModifier: ViewModifier { 11 | 12 | public let style: GSTextField.GSTextFieldStyle 13 | public let const = Constant.TextFieldConst.self 14 | 15 | func body(content: Content) -> some View { 16 | switch style { 17 | case .searchBarField: 18 | content 19 | .foregroundColor(.primary) 20 | .padding(EdgeInsets(top: const.SEARCHBAR_INSET_VERTICAL, 21 | leading: const.SEARCHBAR_INSET_HORIZONTAL, 22 | bottom: const.SEARCHBAR_INSET_VERTICAL, 23 | trailing: const.SEARCHBAR_INSET_HORIZONTAL)) 24 | // FIXME: gsGray3 추가 후 변경 필요 25 | .background(Color.gsGray3) 26 | .cornerRadius(const.SEARCHBAR_CORNER_RADIUS) 27 | 28 | case .addTagField: 29 | content 30 | .foregroundColor(.primary) 31 | .padding(EdgeInsets(top: const.ADDTAG_INSET_VERTICAL, 32 | leading: const.ADDTAG_INSET_HORIZONTAL, 33 | bottom: const.ADDTAG_INSET_VERTICAL, 34 | trailing: const.ADDTAG_INSET_HORIZONTAL)) 35 | // FIXME: gsGray3 추가 후 변경 필요 36 | .background(Color.gsGray3) 37 | .cornerRadius(const.ADDTAG_CORNER_RADIUS) 38 | } 39 | 40 | } 41 | } 42 | 43 | -------------------------------------------------------------------------------- /GitSpace/Utilities/Modifiers/PinnedViewHeaderModifier.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PinnedViewHeaderModifier.swift 3 | // GitSpace 4 | // 5 | // Created by 이승준 on 2023/02/12. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct PinnedViewHeaderModifier: ViewModifier { 11 | func body(content: Content) -> some View { 12 | content 13 | .padding(.vertical, 12) 14 | .padding(.horizontal, 20) 15 | .frame(alignment: .leading) 16 | .background { 17 | LinearGradient( 18 | colors: [ 19 | Color(.systemBackground), 20 | Color(.systemBackground).opacity(0.4) 21 | ], 22 | startPoint: .top, 23 | endPoint: .bottom 24 | ) 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /GitSpace/Utilities/Modifiers/ShadowColorSchemeModifier.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ShadowColorSchemeModifier.swift 3 | // GitSpace 4 | // 5 | // Created by 이승준 on 2023/02/03. 6 | // 7 | 8 | import SwiftUI 9 | 10 | // MARK: - SHADOW COLOR SCHEME MODIFIER 11 | public struct ShadowColorSchemeModifier: ViewModifier { 12 | @Environment(\.colorScheme) var colorScheme 13 | 14 | public func body(content: Content) -> some View { 15 | switch colorScheme { 16 | case .light: 17 | content 18 | .shadow( 19 | color: .gsYellowPrimary.opacity(0.21), 20 | radius: 9, 21 | x: 0, 22 | y: 9 23 | ) 24 | case .dark: 25 | content 26 | .shadow( 27 | color: .gsGreenPrimary.opacity(0.29), 28 | radius: 36, 29 | x: 0, 30 | y: 14 31 | ) 32 | @unknown default: 33 | content 34 | 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /GitSpace/Utilities/Modifiers/TabBarBackgroundModifier.swift: -------------------------------------------------------------------------------- 1 | // 2 | // TabBarBackgroundModifier.swift 3 | // GitSpace 4 | // 5 | // Created by 박제균 on 2023/02/03. 6 | // 7 | 8 | import SwiftUI 9 | 10 | struct TabBarBackgroundModifier: ViewModifier { 11 | 12 | let style: GSTabBarBackGround.GSTabBarBackGroundStyle 13 | 14 | init(backgroundStyle: GSTabBarBackGround.GSTabBarBackGroundStyle) { 15 | self.style = backgroundStyle 16 | } 17 | 18 | func body(content: Content) -> some View { 19 | switch style { 20 | case .rectangle(let backGroundColor): 21 | content 22 | .background(backGroundColor) 23 | case .roundedRectangle(let backGroundColor, let cornerRadius): 24 | content 25 | .background(backGroundColor) 26 | .cornerRadius(cornerRadius, corners: [.topLeft, .topRight]) 27 | } 28 | } 29 | 30 | } 31 | -------------------------------------------------------------------------------- /GitSpace/Utilities/Modifiers/ViewDidLoadModifier.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewDidLoadModifier.swift 3 | // GitSpace 4 | // 5 | // Created by Da Hae Lee on 2023/02/27. 6 | // 7 | 8 | import SwiftUI 9 | 10 | // MARK: ViewDidLoad 수정자 11 | /// 뷰가 한번 로드되었을 때를 감지하여 액션을 수행하게 하는 ViewDidLoad 수정자이다. 12 | struct ViewDidLoadModifier: ViewModifier { 13 | @State private var viewDidLoad: Bool = false 14 | let action: (() -> Void)? 15 | 16 | func body(content: Content) -> some View { 17 | content 18 | .onAppear { 19 | if viewDidLoad == false { 20 | viewDidLoad = true 21 | action?() 22 | } 23 | } 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /GitSpace/Utilities/Utility.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Utility.swift 3 | // GitSpace 4 | // 5 | // Created by 원태영 on 2023/01/27. 6 | // 7 | 8 | import SwiftUI 9 | import FirebaseAuth 10 | 11 | enum Utility { 12 | // FIXME: loginUserID -> 유저 객체 참조로 변경하려하였으나, Model 연산 프로퍼티에서 유저 ID가 필요한 로직으로 구성하여 바로 포팅할 수 없음. 이후에 로직 수정 후 유저 객체로 변경 예정 230215 By. 태영 13 | static var loginUserID: String = "" 14 | 15 | static var MessageCellWidth: CGFloat { 16 | return UIScreen.main.bounds.width / 5 * 3 17 | } 18 | 19 | static var UIWidth: CGFloat { 20 | return UIScreen.main.bounds.width 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /GitSpace/Utilities/ViewHighlightColorStyle.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewHighlightColorStyle.swift 3 | // GitSpace 4 | // 5 | // Created by 이승준 on 2023/02/03. 6 | // 7 | 8 | import SwiftUI 9 | 10 | // TODO: DEPRECATE 11 | struct ViewHighlightColorStyle: ButtonStyle { 12 | let style: Constant.LabelHierarchy 13 | @Environment(\.colorScheme) var colorScheme 14 | 15 | func makeBody(configuration: Self.Configuration) -> some View { 16 | configuration.label 17 | .background( 18 | configuration.isPressed 19 | ? Color.gsGreenPressed 20 | : colorSchemeBackgroundColor() 21 | ) 22 | .cornerRadius(.infinity) 23 | } 24 | 25 | private func colorSchemeBackgroundColor() -> Color { 26 | switch colorScheme { 27 | case .light: 28 | return Color.gsGreenPrimary 29 | case .dark: 30 | return Color.gsYellowPrimary 31 | @unknown default: 32 | return Color.clear 33 | } 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /GitSpace/en.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* 2 | Localizable.strings 3 | GitSpace 4 | 5 | Created by 최한호 on 2023/02/09. 6 | 7 | */ 8 | -------------------------------------------------------------------------------- /GitSpace/ko.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* 2 | Localizable.strings 3 | GitSpace 4 | 5 | Created by 최한호 on 2023/02/09. 6 | 7 | */ 8 | -------------------------------------------------------------------------------- /License: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 GitSpace 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /SUMMARY.md: -------------------------------------------------------------------------------- 1 | # Table of contents 2 | 3 | * [GitSpace](README.md) 4 | * [.github](.github/README.md) 5 | * [PULL\_REQUEST\_TEMPLATE](.github/PULL\_REQUEST\_TEMPLATE.md) 6 | * [ISSUE\_TEMPLATE](.github/issue\_template/README.md) 7 | * [\[BugFix\]](.github/ISSUE\_TEMPLATE/bug\_report.md) 8 | * [ISSUE\_TEMPLATE](.github/issue\_template-1/README.md) 9 | * [\[Docs\]](.github/ISSUE\_TEMPLATE/document\_template.md) 10 | * [ISSUE\_TEMPLATE](.github/issue\_template-2/README.md) 11 | * [\[Feat\]](.github/ISSUE\_TEMPLATE/feature\_template.md) 12 | * [docs](docs/README.md) 13 | * [feedback](docs/feedback/README.md) 14 | * [230119\_Feedback](docs/feedback/230119\_Feedback.md) 15 | * [retrospect](docs/retrospect/README.md) 16 | * [↩️ Retrospect](docs/retrospect/first\_sprint.md) 17 | * [기술 연구 자료](docs/tech/README.md) 18 | * [230120\_renderingMarkdown\_jegyun](docs/tech/230120\_renderingMarkdown\_jegyun.md) 19 | * [FireStore\_CollectionGroupQuery](docs/tech/FireStore\_CollectionGroupQuery.md) 20 | * [GitSpace 기술 연구]() 21 | * [Firestore\_Listener](docs/tech/Firestore\_Listener.md) 22 | * [DesignSystem](docs/tech/designsystem/README.md) 23 | * [GitSpace Design System Doc](docs/tech/DesignSystem/DesignSystem.md) 24 | -------------------------------------------------------------------------------- /docs/README.md: -------------------------------------------------------------------------------- 1 | # docs 2 | 3 | -------------------------------------------------------------------------------- /docs/feedback/README.md: -------------------------------------------------------------------------------- 1 | # feedback 2 | 3 | -------------------------------------------------------------------------------- /docs/retrospect/README.md: -------------------------------------------------------------------------------- 1 | # retrospect 2 | 3 | -------------------------------------------------------------------------------- /docs/tech/230120_renderingMarkdown_jegyun.md: -------------------------------------------------------------------------------- 1 | # 기술검증 2 | ## GitHub Markdown API 3 | 4 | - 링크: [바로가기](https://docs.github.com/ko/rest/markdown?apiVersion=2022-11-28) 5 | - markdown 문서를 HTML 페이지 혹은 raw text로 제공 6 | 7 | ## 기존 GitStar에서 markdown을 받아오던 방법 8 | 9 | 1. 깃허브 레포지토리 컨텐츠 API를 사용하면 레포지토리의 정보에 접근할 수 있고, 키값중에 download_url가 존재한다. 10 | 2. download_url(raw.githubusercontent.com~)에 접속해보면 해당 url에서 raw content의 형태로 파일의 정보를 볼 수 있다. 11 | 3. 이러한 markdown data를 `URLSession`을 이용하여 raw content markdown을 Swift의 Data 타입으로 받아온다. 12 | 4. 받아온 데이터를 Client에서 utf8인코딩하여 String으로 변환한다. 13 | 5. GitHub markdown API를 사용하여 변환한 String을 Post Request로 보낸다. 14 | 6. 5의 Request에 대한 Response로 html 형식의 Data를 받아온다 15 | 7. 받아온 데이터를 utf8인코딩하여 String으로 변환한다. 16 | 8. 변환한 html String을 webview를 이용하여 보여준다. 17 | 18 | 19 | ## 새롭게 시도중인 방법 20 | 21 | - 외부 라이브러리를 사용하여 이를 SwiftUI View에 render하는 방법을 생각중 22 | 23 | ## GFM? 24 | - GitHub Flavored Markdown 은 줄여서 GFM 이라고도 하며, 현재 GitHub.com과 GitHub Enterprise 의 사용자 컨텐츠를 지원하는 Markdown의 한 종류(dialect)**입니다. 25 | - SwiftUI는 GFM을 지원하는중, iOS 15에서부터 (!!!) 26 | - 이와 관련된 애플의 오픈소스 라이브러리가 존재함 27 | - [깃허브 바로가기](https://github.com/apple/swift-markdown) 28 | - [Document 바로가기](https://apple.github.io/swift-markdown/documentation/markdown) 29 | - 확인결과 라이브러리에서 테이블이 아직 지원안됨 30 | - 테이블 이외에도 헤딩,,, 등 지원되지 않는것이 많음 31 | 32 | # References 33 | - https://phillip5094.tistory.com/22#-1.-gfm-%EC%A7%80%EC%9B%90 34 | - https://blog.eidinger.info/3-surprises-when-using-markdown-in-swiftui 35 | - https://iosexample.com/a-native-swiftui-view-for-rendering-markdown-text-in-an-ios-or-macos-app/ 36 | - https://github.com/objecthub/swift-markdownkit 37 | - https://stackoverflow.com/questions/70643384/how-to-render-markdown-headings-in-swiftui-attributedstring 38 | - https://green1229.tistory.com/184 39 | -------------------------------------------------------------------------------- /docs/tech/DesignSystem/README.md: -------------------------------------------------------------------------------- 1 | # DesignSystem 2 | 3 | -------------------------------------------------------------------------------- /docs/tech/FireStore_CollectionGroupQuery.md: -------------------------------------------------------------------------------- 1 | # Collection Group 2 | FireStore 'collectionGroup' 쿼리에 대해 기술합니다. 3 | 4 | ## collectionGroup? 5 | FireStore DB는 컬렉션과 서브컬렉션 구조로 이루어져있는데, 기존에는 서브컬렉션에 접근하기 위해서 루트 컬렉션부터 타고 들어가야하는데, collectionGroup 쿼리를 이용하면 컬렉션의 이름을 통해서 위치에 상관없이 접근 가능합니다. 6 | 7 | ## 주의할 점 8 | - collectionGroup(컬렉션 이름)의 형태로 사용합니다. 9 | - collectionGroup은 FireStore에서 기본값으로 쿼리가 비활성화 되어 있습니다. 따라서 필요한 쿼리 컬렉션 필드 색인을 수동으로 지정해주어야합니다. 10 | - 단일 필드에 대한 색인과 복합 필드에 대한 색인이 분리되어있습니다. 11 | - 복합 필드 쿼리를 사용하는 경우, 지정한 필드들이 모두 쿼리 내용에 포함되어야합니다. (필요없더라도) 12 | - 복합 필드 쿼리에서 오름차순으로 지정된 경우, 오름차순'만' 가능합니다. 13 | - 색인 설정은 설정 완료 후 약 2~3분 소요됩니다. 14 | - 복합 쿼리 필드 지정 시 필드를 순서대로 설정하게 되는데, 정렬에 관련한 필드 순서를 아래로 두어야 쿼리 시 오류가 발생하지 않습니다. (이유 불명) 15 | - SQL 작성 시 where절 -> order by 순서로 작성하는 것과 유사하게 생각하면 됩니다. 16 | 17 | 18 | # 작성자 19 | 원태영, 정예슬 20 | -------------------------------------------------------------------------------- /docs/tech/Firestore_Listener.md: -------------------------------------------------------------------------------- 1 | # FireStore Listener 2 | Firestore Listener를 활용하여 DB 문서의 변경을 감지하고, 이를 실시간으로 처리해줄 수 있습니다. 3 | 4 | 5 | ## Code 6 | 7 | ```swift 8 | var listener : ListenerRegistration? 9 | 10 | func addListener() { 11 | listener = database.collectionGroup("ChatCell").addSnapshotListener { snapshot, error in 12 | // snapshot이 비어있으면 에러 출력 후 리턴 13 | guard let snp = snapshot else { 14 | print("Error fetching documents: \(error!)") 15 | return 16 | } 17 | // document 변경 사항에 대해 감지해서 작업 수행 18 | snp.documentChanges.forEach { diff in 19 | switch diff.type { 20 | case .added: 21 | print("added") 22 | self.chatCells.append(self.fetchNewChat(newChat: diff.document)) 23 | case .modified: 24 | print("modified") 25 | case .removed: 26 | print("removed") 27 | } 28 | } 29 | } 30 | } 31 | 32 | func removeListener() { 33 | guard listener != nil else { 34 | return 35 | } 36 | listener!.remove() 37 | } 38 | 39 | ``` 40 | 41 | ## 참고사항 42 | - addSnapshotListener를 통해 실시간 감지 기능을 작동시킬 수 있습니다. 43 | - 실시간 감지 기능이 작동되는 동안 DB의 변경사항이 생기면 이를 감지합니다. 44 | - documentChanges를 통해 변경사항을 받을 수 있으며, 이는 세 가지 타입 중 하나에 해당합니다. 45 | - .added : 문서 추가 46 | - .modified : 문서 변경 47 | - .removed : 문서 삭제 48 | - 컬렉션, 문서ID 등을 통해 실시간 감지 대상 경로를 한정할 수 있습니다. 49 | - listener.remove() 함수를 호출하여 실시간 감지 기능을 중지할 수 있습니다. 50 | - remove하기 위해서는 addSnapshotListener 함수에서 리턴하는 ListenerRegistration 타입의 인스턴스를 변수에 저장해두어야합니다. 51 | - Listener 작동 시, 기존에 있는 문서들이 새로 추가된 것으로 인식하는 문제가 있습니다. 52 | - 문서가 추가될 때, 읽기 횟수는 새로 추가된 문서에 대해서만 증가합니다. 53 | 54 | 55 | # 작성자 56 | - 원태영, 정예슬 57 | -------------------------------------------------------------------------------- /docs/tech/README.md: -------------------------------------------------------------------------------- 1 | ## 📒 기술 연구 자료 2 | > 23.01.16 ~ ing 3 | 4 | GitSpace 개발을 하면서 필요한 기술들을 연구한 자료입니다. 5 | 6 | 7 | ### Firebase 8 | * [Firestore CollectionGroup](https://github.com/APPSCHOOL1-REPO/finalproject-gitspace/blob/dev/docs/tech/FireStore_CollectionGroupQuery.md) 9 | * [FireStore Listener](https://github.com/APPSCHOOL1-REPO/finalproject-gitspace/blob/dev/docs/tech/Firestore_Listener.md) 10 | 11 | ### SSO 12 | (ing) 13 | 14 | ### Design System 15 | (ing) 16 | 17 | ### 18 | --------------------------------------------------------------------------------