From 95700e4cc624e97882ee00f15c1df82e4e4dcc29 Mon Sep 17 00:00:00 2001 From: KIM CHANHEE <85754295+chanhihi@users.noreply.github.com> Date: Mon, 29 Apr 2024 17:14:27 +0900 Subject: [PATCH] =?UTF-8?q?Revert=20"Version=201.0.0=20=F0=9F=A5=B3?= =?UTF-8?q?=F0=9F=8E=8A=20(#257)"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 3caea10a300b32aca555bfe34e2cb8f19817e044. --- .github/PULL_REQUEST_TEMPLATE.md | 10 - .github/Release-note.yml | 51 -- .github/workflows/Deployment.yml | 98 ---- .gitignore | 9 - .gitmodules | 3 - Gemfile | 4 - Makefile | 19 - Project.swift | 76 +-- README.md | 100 ---- .../Media.xcassets/128.imageset/128 1.png | Bin 7717 -> 0 bytes .../Media.xcassets/128.imageset/128.png | Bin 7717 -> 0 bytes .../Media.xcassets/128.imageset/Contents.json | 22 - .../Resources/Media.xcassets/Contents.json | 6 - .../ShareExtension+UIColor+Extension.swift | 22 - .../ShareExtension+UIbutton+Extension.swift | 22 - .../Sources/ShareViewController.swift | 187 ------- .../View/ShareExtensionPanelView.swift | 145 ----- Tuist/Dependencies.swift | 7 +- Tuist/Signing/debug.cer.encrypted | 1 - Tuist/Signing/debug.p12.encrypted | 1 - Tuist/Signing/iBox.Debug.mobileprovision | Bin 17472 -> 0 bytes Tuist/Signing/iBox.Release.mobileprovision | Bin 13200 -> 0 bytes .../iBoxShareExtension.Debug.mobileprovision | Bin 16701 -> 0 bytes ...iBoxShareExtension.Release.mobileprovision | Bin 12415 -> 0 bytes Tuist/Signing/release.cer.encrypted | 1 - Tuist/Signing/release.p12.encrypted | 1 - fastlane/Appfile | 8 - fastlane/Fastfile | 73 --- fastlane/README.md | 40 -- fastlane/report.xml | 38 -- .../Assets.xcassets/42pack_icon/Contents.json | 6 - .../42pack_icon/fox/Contents.json | 6 - .../fox/fox_page0.imageset/Contents.json | 24 - .../fox/fox_page0.imageset/fox0.png | Bin 3944 -> 0 bytes .../fox/fox_page1.imageset/Contents.json | 24 - .../fox/fox_page1.imageset/fox1.png | Bin 3950 -> 0 bytes .../fox/fox_page2.imageset/Contents.json | 24 - .../fox/fox_page2.imageset/fox2.png | Bin 3946 -> 0 bytes .../fox/fox_page3.imageset/Contents.json | 24 - .../fox/fox_page3.imageset/fox3.png | Bin 3990 -> 0 bytes .../fox/fox_page4.imageset/Contents.json | 24 - .../fox/fox_page4.imageset/fox4.png | Bin 3900 -> 0 bytes .../42pack_icon/sitting_fox/Contents.json | 6 - .../sitting_fox0.imageset/Contents.json | 24 - .../sitting_fox0.imageset/sitting_fox0.png | Bin 3816 -> 0 bytes .../sitting_fox1.imageset/Contents.json | 24 - .../sitting_fox1.imageset/sitting_fox1.png | Bin 3673 -> 0 bytes .../sitting_fox2.imageset/Contents.json | 24 - .../sitting_fox2.imageset/sitting_fox2.png | Bin 3765 -> 0 bytes .../sitting_fox3.imageset/Contents.json | 24 - .../sitting_fox3.imageset/sitting_fox3.png | Bin 3673 -> 0 bytes .../AppIcon.appiconset/100.png | Bin 3464 -> 0 bytes .../AppIcon.appiconset/1024.png | Bin 47451 -> 0 bytes .../AppIcon.appiconset/114.png | Bin 3988 -> 0 bytes .../AppIcon.appiconset/120.png | Bin 4166 -> 0 bytes .../AppIcon.appiconset/144.png | Bin 5166 -> 0 bytes .../AppIcon.appiconset/152.png | Bin 5607 -> 0 bytes .../AppIcon.appiconset/167.png | Bin 5882 -> 0 bytes .../AppIcon.appiconset/180.png | Bin 6679 -> 0 bytes .../Assets.xcassets/AppIcon.appiconset/20.png | Bin 622 -> 0 bytes .../Assets.xcassets/AppIcon.appiconset/29.png | Bin 941 -> 0 bytes .../Assets.xcassets/AppIcon.appiconset/40.png | Bin 1334 -> 0 bytes .../Assets.xcassets/AppIcon.appiconset/50.png | Bin 1715 -> 0 bytes .../Assets.xcassets/AppIcon.appiconset/57.png | Bin 1922 -> 0 bytes .../Assets.xcassets/AppIcon.appiconset/58.png | Bin 1914 -> 0 bytes .../Assets.xcassets/AppIcon.appiconset/60.png | Bin 1989 -> 0 bytes .../Assets.xcassets/AppIcon.appiconset/72.png | Bin 2444 -> 0 bytes .../Assets.xcassets/AppIcon.appiconset/76.png | Bin 2622 -> 0 bytes .../Assets.xcassets/AppIcon.appiconset/80.png | Bin 2662 -> 0 bytes .../Assets.xcassets/AppIcon.appiconset/87.png | Bin 3025 -> 0 bytes .../AppIcon.appiconset/Contents.json | 149 +---- .../LaunchIcon.imageset/Contents.json | 21 - .../LaunchIcon.imageset/LaunchIcon.png | Bin 47803 -> 0 bytes iBox/Resources/Assets.xcassets/Logo/1024.png | Bin 193380 -> 0 bytes .../Logo/128.imageset/128 1.png | Bin 7717 -> 0 bytes .../Assets.xcassets/Logo/128.imageset/128.png | Bin 7717 -> 0 bytes .../Logo/128.imageset/Contents.json | 22 - iBox/Resources/Assets.xcassets/Logo/128.png | Bin 7717 -> 0 bytes iBox/Resources/Assets.xcassets/Logo/256.png | Bin 22350 -> 0 bytes iBox/Resources/Assets.xcassets/Logo/32.png | Bin 1196 -> 0 bytes iBox/Resources/Assets.xcassets/Logo/512.png | Bin 67765 -> 0 bytes iBox/Resources/Assets.xcassets/Logo/64.png | Bin 2884 -> 0 bytes .../Assets.xcassets/Logo/Contents.json | 6 - .../appstore.imageset/Contents.json | 21 - .../appstore.imageset/appstore.png | Bin 47451 -> 0 bytes .../playstore.imageset/Contents.json | 21 - .../playstore.imageset/playstore.png | Bin 24441 -> 0 bytes iBox/Resources/Version | 1 - .../iBox.xcdatamodel/contents | 16 +- .../Sources/AddBookmark/AddBookmarkView.swift | 312 ----------- .../AddBookmarkViewController.swift | 226 -------- iBox/Sources/AddBookmark/FolderListCell.swift | 88 --- iBox/Sources/AddBookmark/FolderListView.swift | 108 ---- .../FolderListViewController.swift | 113 ---- iBox/Sources/AppDelegate.swift | 63 ++- iBox/Sources/Base/BaseViewController.swift | 238 -------- .../Base/BottomSheetViewController.swift | 143 ----- iBox/Sources/BaseViewController.swift | 18 + iBox/Sources/BoxList/BoxListCell.swift | 129 ----- .../BoxList/BoxListCellViewModel.swift | 29 - .../BoxList/BoxListSectionViewModel.swift | 74 --- iBox/Sources/BoxList/BoxListView.swift | 525 ------------------ .../BoxList/BoxListViewController.swift | 303 ---------- iBox/Sources/BoxList/BoxListViewModel.swift | 206 ------- iBox/Sources/BoxList/Edit/EditCell.swift | 72 --- iBox/Sources/BoxList/Edit/EditView.swift | 87 --- .../BoxList/Edit/EditViewController.swift | 34 -- .../BoxList/EditFolder/EditFolderCell.swift | 88 --- .../BoxList/EditFolder/EditFolderView.swift | 152 ----- .../EditFolder/EditFolderViewController.swift | 139 ----- .../EditFolder/EditFolderViewModel.swift | 59 -- iBox/Sources/BoxList/FolderButton.swift | 87 --- iBox/Sources/BoxList/FolderView.swift | 63 --- .../CustomLaunchScreenView.swift | 79 --- .../CustomLaunchScreenViewController.swift | 93 ---- iBox/Sources/Error/ErrorCode.swift | 18 - iBox/Sources/Error/ErrorPageView.swift | 187 ------- .../Error/ErrorPageViewController.swift | 154 ----- .../Extension/Notification+Extension.swift | 15 - .../Extension/UIButton+Extension.swift | 55 -- .../Sources/Extension/UIColor+Extension.swift | 43 -- iBox/Sources/Extension/UIFont+Extension.swift | 23 - .../Sources/Extension/UIImage+Extension.swift | 27 - iBox/Sources/Extension/UIView+Extension.swift | 54 -- .../UIViewController+Extension.swift | 30 - iBox/Sources/Favorite/FavoriteView.swift | 68 --- .../Favorite/FavoriteViewController.swift | 44 -- iBox/Sources/Initializer/DefaultData.swift | 50 -- .../Initializer/DefaultDataModel.swift | 31 -- iBox/Sources/Main/MainTabBarController.swift | 66 --- iBox/Sources/MainView.swift | 46 ++ iBox/Sources/MainViewController.swift | 18 + iBox/Sources/Model/Bookmark.swift | 14 - iBox/Sources/Model/BookmarkError.swift | 14 - iBox/Sources/Model/EditItem.swift | 19 - iBox/Sources/Model/Folder.swift | 15 - iBox/Sources/Model/HomeTabType.swift | 20 - iBox/Sources/Model/Metadata.swift | 12 - iBox/Sources/Model/SettingsItem.swift | 33 -- iBox/Sources/Model/Theme.swift | 30 - iBox/Sources/Model/VersionInfo.swift | 23 - iBox/Sources/SceneDelegate.swift | 19 +- iBox/Sources/Settings/Guide/GuideView.swift | 68 --- .../Settings/Guide/GuideViewController.swift | 30 - .../HomeTab/HomeTabSelectorCell.swift | 74 --- .../HomeTab/HomeTabSelectorView.swift | 95 ---- .../HomeTabSelectorViewController.swift | 32 -- .../HomeTab/HomeTabSelectorViewModel.swift | 15 - .../Settings/Reset/ResetSuccessView.swift | 99 ---- iBox/Sources/Settings/Reset/ResetView.swift | 73 --- .../Settings/Reset/ResetViewController.swift | 96 ---- .../Settings/SettingsCellViewModel.swift | 30 - iBox/Sources/Settings/SettingsItemCell.swift | 110 ---- .../Settings/SettingsSectionViewModel.swift | 18 - iBox/Sources/Settings/SettingsView.swift | 131 ----- .../Settings/SettingsViewController.swift | 63 --- iBox/Sources/Settings/SettingsViewModel.swift | 55 -- iBox/Sources/Settings/Theme/ThemeCell.swift | 88 --- iBox/Sources/Settings/Theme/ThemeView.swift | 102 ---- .../Settings/Theme/ThemeViewController.swift | 32 -- .../Settings/Theme/ThemeViewModel.swift | 23 - iBox/Sources/Shared/AddBookmarkManager.swift | 105 ---- .../FullSizePresentationController.swift | 37 -- .../SlideInPresentationAnimator.swift | 46 -- iBox/Sources/Shared/AppStateManager.swift | 19 - iBox/Sources/Shared/CoreDataManager.swift | 333 ----------- iBox/Sources/Shared/NetworkManager.swift | 42 -- .../Shared/SlideInPresentationManager.swift | 22 - iBox/Sources/Shared/UserDefaultsManager.swift | 60 -- iBox/Sources/Shared/WebCacheManager.swift | 49 -- iBox/Sources/Shared/WebViewPreloader.swift | 48 -- .../Sources/Versioning/VersionCheckCode.swift | 21 - .../Versioning/VersioningHandler.swift | 83 --- iBox/Sources/Web/RefreshControl.swift | 119 ---- iBox/Sources/Web/WebView.swift | 233 -------- iBox/Sources/Web/WebViewController.swift | 99 ---- 176 files changed, 153 insertions(+), 8488 deletions(-) delete mode 100644 .github/PULL_REQUEST_TEMPLATE.md delete mode 100644 .github/Release-note.yml delete mode 100644 .github/workflows/Deployment.yml delete mode 100644 .gitmodules delete mode 100644 Gemfile delete mode 100644 Makefile delete mode 100644 README.md delete mode 100644 ShareExtension/Resources/Media.xcassets/128.imageset/128 1.png delete mode 100644 ShareExtension/Resources/Media.xcassets/128.imageset/128.png delete mode 100644 ShareExtension/Resources/Media.xcassets/128.imageset/Contents.json delete mode 100644 ShareExtension/Resources/Media.xcassets/Contents.json delete mode 100644 ShareExtension/Sources/Extension/ShareExtension+UIColor+Extension.swift delete mode 100644 ShareExtension/Sources/Extension/ShareExtension+UIbutton+Extension.swift delete mode 100644 ShareExtension/Sources/ShareViewController.swift delete mode 100644 ShareExtension/Sources/View/ShareExtensionPanelView.swift delete mode 100644 Tuist/Signing/debug.cer.encrypted delete mode 100644 Tuist/Signing/debug.p12.encrypted delete mode 100644 Tuist/Signing/iBox.Debug.mobileprovision delete mode 100644 Tuist/Signing/iBox.Release.mobileprovision delete mode 100644 Tuist/Signing/iBoxShareExtension.Debug.mobileprovision delete mode 100644 Tuist/Signing/iBoxShareExtension.Release.mobileprovision delete mode 100644 Tuist/Signing/release.cer.encrypted delete mode 100644 Tuist/Signing/release.p12.encrypted delete mode 100644 fastlane/Appfile delete mode 100644 fastlane/Fastfile delete mode 100644 fastlane/README.md delete mode 100644 fastlane/report.xml delete mode 100644 iBox/Resources/Assets.xcassets/42pack_icon/Contents.json delete mode 100644 iBox/Resources/Assets.xcassets/42pack_icon/fox/Contents.json delete mode 100644 iBox/Resources/Assets.xcassets/42pack_icon/fox/fox_page0.imageset/Contents.json delete mode 100644 iBox/Resources/Assets.xcassets/42pack_icon/fox/fox_page0.imageset/fox0.png delete mode 100644 iBox/Resources/Assets.xcassets/42pack_icon/fox/fox_page1.imageset/Contents.json delete mode 100644 iBox/Resources/Assets.xcassets/42pack_icon/fox/fox_page1.imageset/fox1.png delete mode 100644 iBox/Resources/Assets.xcassets/42pack_icon/fox/fox_page2.imageset/Contents.json delete mode 100644 iBox/Resources/Assets.xcassets/42pack_icon/fox/fox_page2.imageset/fox2.png delete mode 100644 iBox/Resources/Assets.xcassets/42pack_icon/fox/fox_page3.imageset/Contents.json delete mode 100644 iBox/Resources/Assets.xcassets/42pack_icon/fox/fox_page3.imageset/fox3.png delete mode 100644 iBox/Resources/Assets.xcassets/42pack_icon/fox/fox_page4.imageset/Contents.json delete mode 100644 iBox/Resources/Assets.xcassets/42pack_icon/fox/fox_page4.imageset/fox4.png delete mode 100644 iBox/Resources/Assets.xcassets/42pack_icon/sitting_fox/Contents.json delete mode 100644 iBox/Resources/Assets.xcassets/42pack_icon/sitting_fox/sitting_fox0.imageset/Contents.json delete mode 100644 iBox/Resources/Assets.xcassets/42pack_icon/sitting_fox/sitting_fox0.imageset/sitting_fox0.png delete mode 100644 iBox/Resources/Assets.xcassets/42pack_icon/sitting_fox/sitting_fox1.imageset/Contents.json delete mode 100644 iBox/Resources/Assets.xcassets/42pack_icon/sitting_fox/sitting_fox1.imageset/sitting_fox1.png delete mode 100644 iBox/Resources/Assets.xcassets/42pack_icon/sitting_fox/sitting_fox2.imageset/Contents.json delete mode 100644 iBox/Resources/Assets.xcassets/42pack_icon/sitting_fox/sitting_fox2.imageset/sitting_fox2.png delete mode 100644 iBox/Resources/Assets.xcassets/42pack_icon/sitting_fox/sitting_fox3.imageset/Contents.json delete mode 100644 iBox/Resources/Assets.xcassets/42pack_icon/sitting_fox/sitting_fox3.imageset/sitting_fox3.png delete mode 100644 iBox/Resources/Assets.xcassets/AppIcon.appiconset/100.png delete mode 100644 iBox/Resources/Assets.xcassets/AppIcon.appiconset/1024.png delete mode 100644 iBox/Resources/Assets.xcassets/AppIcon.appiconset/114.png delete mode 100644 iBox/Resources/Assets.xcassets/AppIcon.appiconset/120.png delete mode 100644 iBox/Resources/Assets.xcassets/AppIcon.appiconset/144.png delete mode 100644 iBox/Resources/Assets.xcassets/AppIcon.appiconset/152.png delete mode 100644 iBox/Resources/Assets.xcassets/AppIcon.appiconset/167.png delete mode 100644 iBox/Resources/Assets.xcassets/AppIcon.appiconset/180.png delete mode 100644 iBox/Resources/Assets.xcassets/AppIcon.appiconset/20.png delete mode 100644 iBox/Resources/Assets.xcassets/AppIcon.appiconset/29.png delete mode 100644 iBox/Resources/Assets.xcassets/AppIcon.appiconset/40.png delete mode 100644 iBox/Resources/Assets.xcassets/AppIcon.appiconset/50.png delete mode 100644 iBox/Resources/Assets.xcassets/AppIcon.appiconset/57.png delete mode 100644 iBox/Resources/Assets.xcassets/AppIcon.appiconset/58.png delete mode 100644 iBox/Resources/Assets.xcassets/AppIcon.appiconset/60.png delete mode 100644 iBox/Resources/Assets.xcassets/AppIcon.appiconset/72.png delete mode 100644 iBox/Resources/Assets.xcassets/AppIcon.appiconset/76.png delete mode 100644 iBox/Resources/Assets.xcassets/AppIcon.appiconset/80.png delete mode 100644 iBox/Resources/Assets.xcassets/AppIcon.appiconset/87.png delete mode 100644 iBox/Resources/Assets.xcassets/LaunchIcon.imageset/Contents.json delete mode 100644 iBox/Resources/Assets.xcassets/LaunchIcon.imageset/LaunchIcon.png delete mode 100644 iBox/Resources/Assets.xcassets/Logo/1024.png delete mode 100644 iBox/Resources/Assets.xcassets/Logo/128.imageset/128 1.png delete mode 100644 iBox/Resources/Assets.xcassets/Logo/128.imageset/128.png delete mode 100644 iBox/Resources/Assets.xcassets/Logo/128.imageset/Contents.json delete mode 100644 iBox/Resources/Assets.xcassets/Logo/128.png delete mode 100644 iBox/Resources/Assets.xcassets/Logo/256.png delete mode 100644 iBox/Resources/Assets.xcassets/Logo/32.png delete mode 100644 iBox/Resources/Assets.xcassets/Logo/512.png delete mode 100644 iBox/Resources/Assets.xcassets/Logo/64.png delete mode 100644 iBox/Resources/Assets.xcassets/Logo/Contents.json delete mode 100644 iBox/Resources/Assets.xcassets/appstore.imageset/Contents.json delete mode 100644 iBox/Resources/Assets.xcassets/appstore.imageset/appstore.png delete mode 100644 iBox/Resources/Assets.xcassets/playstore.imageset/Contents.json delete mode 100644 iBox/Resources/Assets.xcassets/playstore.imageset/playstore.png delete mode 160000 iBox/Resources/Version delete mode 100644 iBox/Sources/AddBookmark/AddBookmarkView.swift delete mode 100644 iBox/Sources/AddBookmark/AddBookmarkViewController.swift delete mode 100644 iBox/Sources/AddBookmark/FolderListCell.swift delete mode 100644 iBox/Sources/AddBookmark/FolderListView.swift delete mode 100644 iBox/Sources/AddBookmark/FolderListViewController.swift delete mode 100644 iBox/Sources/Base/BaseViewController.swift delete mode 100644 iBox/Sources/Base/BottomSheetViewController.swift create mode 100644 iBox/Sources/BaseViewController.swift delete mode 100644 iBox/Sources/BoxList/BoxListCell.swift delete mode 100644 iBox/Sources/BoxList/BoxListCellViewModel.swift delete mode 100644 iBox/Sources/BoxList/BoxListSectionViewModel.swift delete mode 100644 iBox/Sources/BoxList/BoxListView.swift delete mode 100644 iBox/Sources/BoxList/BoxListViewController.swift delete mode 100644 iBox/Sources/BoxList/BoxListViewModel.swift delete mode 100644 iBox/Sources/BoxList/Edit/EditCell.swift delete mode 100644 iBox/Sources/BoxList/Edit/EditView.swift delete mode 100644 iBox/Sources/BoxList/Edit/EditViewController.swift delete mode 100644 iBox/Sources/BoxList/EditFolder/EditFolderCell.swift delete mode 100644 iBox/Sources/BoxList/EditFolder/EditFolderView.swift delete mode 100644 iBox/Sources/BoxList/EditFolder/EditFolderViewController.swift delete mode 100644 iBox/Sources/BoxList/EditFolder/EditFolderViewModel.swift delete mode 100644 iBox/Sources/BoxList/FolderButton.swift delete mode 100644 iBox/Sources/BoxList/FolderView.swift delete mode 100644 iBox/Sources/CustomLaunchScreen/CustomLaunchScreenView.swift delete mode 100644 iBox/Sources/CustomLaunchScreen/CustomLaunchScreenViewController.swift delete mode 100644 iBox/Sources/Error/ErrorCode.swift delete mode 100644 iBox/Sources/Error/ErrorPageView.swift delete mode 100644 iBox/Sources/Error/ErrorPageViewController.swift delete mode 100644 iBox/Sources/Extension/Notification+Extension.swift delete mode 100644 iBox/Sources/Extension/UIButton+Extension.swift delete mode 100644 iBox/Sources/Extension/UIColor+Extension.swift delete mode 100644 iBox/Sources/Extension/UIFont+Extension.swift delete mode 100644 iBox/Sources/Extension/UIImage+Extension.swift delete mode 100644 iBox/Sources/Extension/UIView+Extension.swift delete mode 100644 iBox/Sources/Extension/UIViewController+Extension.swift delete mode 100644 iBox/Sources/Favorite/FavoriteView.swift delete mode 100644 iBox/Sources/Favorite/FavoriteViewController.swift delete mode 100644 iBox/Sources/Initializer/DefaultData.swift delete mode 100644 iBox/Sources/Initializer/DefaultDataModel.swift delete mode 100644 iBox/Sources/Main/MainTabBarController.swift create mode 100644 iBox/Sources/MainView.swift create mode 100644 iBox/Sources/MainViewController.swift delete mode 100644 iBox/Sources/Model/Bookmark.swift delete mode 100644 iBox/Sources/Model/BookmarkError.swift delete mode 100644 iBox/Sources/Model/EditItem.swift delete mode 100644 iBox/Sources/Model/Folder.swift delete mode 100644 iBox/Sources/Model/HomeTabType.swift delete mode 100644 iBox/Sources/Model/Metadata.swift delete mode 100644 iBox/Sources/Model/SettingsItem.swift delete mode 100644 iBox/Sources/Model/Theme.swift delete mode 100644 iBox/Sources/Model/VersionInfo.swift delete mode 100644 iBox/Sources/Settings/Guide/GuideView.swift delete mode 100644 iBox/Sources/Settings/Guide/GuideViewController.swift delete mode 100644 iBox/Sources/Settings/HomeTab/HomeTabSelectorCell.swift delete mode 100644 iBox/Sources/Settings/HomeTab/HomeTabSelectorView.swift delete mode 100644 iBox/Sources/Settings/HomeTab/HomeTabSelectorViewController.swift delete mode 100644 iBox/Sources/Settings/HomeTab/HomeTabSelectorViewModel.swift delete mode 100644 iBox/Sources/Settings/Reset/ResetSuccessView.swift delete mode 100644 iBox/Sources/Settings/Reset/ResetView.swift delete mode 100644 iBox/Sources/Settings/Reset/ResetViewController.swift delete mode 100644 iBox/Sources/Settings/SettingsCellViewModel.swift delete mode 100644 iBox/Sources/Settings/SettingsItemCell.swift delete mode 100644 iBox/Sources/Settings/SettingsSectionViewModel.swift delete mode 100644 iBox/Sources/Settings/SettingsView.swift delete mode 100644 iBox/Sources/Settings/SettingsViewController.swift delete mode 100644 iBox/Sources/Settings/SettingsViewModel.swift delete mode 100644 iBox/Sources/Settings/Theme/ThemeCell.swift delete mode 100644 iBox/Sources/Settings/Theme/ThemeView.swift delete mode 100644 iBox/Sources/Settings/Theme/ThemeViewController.swift delete mode 100644 iBox/Sources/Settings/Theme/ThemeViewModel.swift delete mode 100644 iBox/Sources/Shared/AddBookmarkManager.swift delete mode 100644 iBox/Sources/Shared/Animator/FullSizePresentationController.swift delete mode 100644 iBox/Sources/Shared/Animator/SlideInPresentationAnimator.swift delete mode 100644 iBox/Sources/Shared/AppStateManager.swift delete mode 100644 iBox/Sources/Shared/CoreDataManager.swift delete mode 100644 iBox/Sources/Shared/NetworkManager.swift delete mode 100644 iBox/Sources/Shared/SlideInPresentationManager.swift delete mode 100644 iBox/Sources/Shared/UserDefaultsManager.swift delete mode 100644 iBox/Sources/Shared/WebCacheManager.swift delete mode 100644 iBox/Sources/Shared/WebViewPreloader.swift delete mode 100644 iBox/Sources/Versioning/VersionCheckCode.swift delete mode 100644 iBox/Sources/Versioning/VersioningHandler.swift delete mode 100644 iBox/Sources/Web/RefreshControl.swift delete mode 100644 iBox/Sources/Web/WebView.swift delete mode 100644 iBox/Sources/Web/WebViewController.swift diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md deleted file mode 100644 index a8aee27..0000000 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ /dev/null @@ -1,10 +0,0 @@ -### πŸ“Œ κ°œμš” -- - -### πŸ’» μž‘μ—… λ‚΄μš© -- - -### πŸ–ΌοΈ μŠ€ν¬λ¦°μƒ· -||| -|---|---| -||| diff --git a/.github/Release-note.yml b/.github/Release-note.yml deleted file mode 100644 index e9c7fa8..0000000 --- a/.github/Release-note.yml +++ /dev/null @@ -1,51 +0,0 @@ -# Author by chanhihi -# Date 2023.08.09 -# name-template: "v$NEXT_MINOR_VERSION 🦊" -# tag-template: "v$NEXT_MINOR_VERSION" - -name-template: "v$RESOLVED_VERSION 🦊" -tag-template: "v$RESOLVED_VERSION" -version-resolver: - major: - labels: - - "⚠️ Breaking changes" - minor: - labels: - - "✨ Enhancement" - patch: - labels: - - "βš’ Refactor" - - "🐞 Bug" - default: patch - -categories: - - title: "⚠️ Breaking changes" - labels: - - "⚠️ Breaking Change" - - title: "πŸš€ Features" - labels: - - "✨ Enhancement" - - "βš’ Refactor" - - "πŸ› Structure" - - title: "πŸ› Bug Fixes" - labels: - - "🐞 Bug" - - title: "πŸ“š Documentation" - labels: - - "πŸ“„ Documentation" - - title: "🎨 Style" - labels: - - "πŸ’„ UI/UX" - - title: "πŸ— Infrastructure" - labels: - - "🌐 DevOps" -exclude-labels: - - "πŸ’– Question" - - "β˜‚οΈ Umbrella" - -change-template: "- $TITLE (#$NUMBER)" -change-title-escapes: '\<*_&' - -template: | - ## Changes - $CHANGES diff --git a/.github/workflows/Deployment.yml b/.github/workflows/Deployment.yml deleted file mode 100644 index 49762e0..0000000 --- a/.github/workflows/Deployment.yml +++ /dev/null @@ -1,98 +0,0 @@ -# Author by chanhihi -# Date 2024.04.26 - -name: Deployment - -on: - pull_request: - branches: - - main - types: - - closed - -jobs: - build: - name: Deploy on macOS latest - Release for iOS - runs-on: macos-latest - env: - XCODE_VERSION: "15.2.0" - SWIFT_VERSION: "5.9.2" - RUBY_VERSION: "2.6.10" - TUIST_VERSION: "3.36.2" - - steps: - - name: Checkout - uses: actions/checkout@v3 - - - name: Set up Ruby 2.6 - uses: ruby/setup-ruby@v1 - with: - ruby-version: ${{ env.RUBY_VERSION }} - bundler-cache: true - - - name: Set Xcode version - run: sudo xcode-select -s '/Applications/Xcode_15.2.0.app/Contents/Developer' - - - name: Setup Swift - uses: swift-actions/setup-swift@v1 - with: - swift-version: ${{ env.SWIFT_VERSION }} - - - name: .env - run: touch .env && - echo "APP_STORE_CONNECT_API_KEY_KEY_ID=${{ secrets.APP_STORE_CONNECT_API_KEY_KEY_ID }}" >> .env && - echo "APP_STORE_CONNECT_API_KEY_ISSUER_ID=${{ secrets.APP_STORE_CONNECT_API_KEY_ISSUER_ID }}" >> .env && - echo "APP_STORE_CONNECT_API_KEY_KEY=${{ secrets.APP_STORE_CONNECT_API_KEY_KEY }}" >> .env - - - name: Setting Master Key - run: | - echo "$MASTER_KEY" > Tuist/master.key - env: - MASTER_KEY: ${{secrets.MASTER_KEY}} - - - name: Mise - uses: jdx/mise-action@v2 - - - name: Install Tuist - run: mise install tuist@${{ env.TUIST_VERSION }} - - - name: Tuist version - run: mise use -g tuist@${{ env.TUIST_VERSION }} - - - name: Install Fastlane - run: brew install fastlane - - - name: Tuist clean - run: tuist clean - - - name: Tuist fetch - run: tuist fetch - - - name: Tuist Signing Decrypt - run: tuist signing decrypt - - - name: Set Keychain - run: fastlane set_keychain - env: - KEYCHAIN_NAME: ${{ secrets.KEYCHAIN_NAME }} - KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }} - - - name: Generate Xcode project with Tuist - run: tuist generate - - - name: Fastlane run - run: fastlane tf - - - name: Tagging - id: tag_version - uses: mathieudutour/github-tag-action@v6.1 - with: - github_token: ${{ secrets.CHANHIHI }} - - - name: Draft Release - id: draft_release - uses: release-drafter/release-drafter@v5 - with: - config-name: Release-note.yml - env: - GITHUB_TOKEN: ${{ secrets.CHANHIHI }} diff --git a/.gitignore b/.gitignore index 0d5c680..551a3f5 100644 --- a/.gitignore +++ b/.gitignore @@ -3,13 +3,6 @@ .DS_Store .AppleDouble .LSOverride -.env - -# Auth -*.key -*.p8 -*.p12 -*.cer # Icon must end with two Icon @@ -75,5 +68,3 @@ Derived/ ### Tuist managed dependencies ### Tuist/Dependencies - -.mise.toml diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index 46c791e..0000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "iBox/Resources/Version"] - path = iBox/Resources/Version - url = https://github.com/42Box/versioning diff --git a/Gemfile b/Gemfile deleted file mode 100644 index f0e202f..0000000 --- a/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source "https://rubygems.org" - -gem "dotenv" -gem "fastlane" diff --git a/Makefile b/Makefile deleted file mode 100644 index e8ffb27..0000000 --- a/Makefile +++ /dev/null @@ -1,19 +0,0 @@ -gen: - tuist fetch - tuist generate - -clean: - tuist clean - -fclean: clean - find . -name "*.xcodeproj" -exec rm -rf {} \; - find . -name "*.xcworkspace" -exec rm -rf {} \; - -re: fclean gen - -tf: - tuist signing decrypt - tuist fetch - tuist generate - - fastlane tf \ No newline at end of file diff --git a/Project.swift b/Project.swift index 7e20388..d32396e 100644 --- a/Project.swift +++ b/Project.swift @@ -14,24 +14,15 @@ protocol ProjectFactory { class iBoxFactory: ProjectFactory { let projectName: String = "iBox" let bundleId: String = "com.box42.iBox" - let iosVersion: String = "15.0" let dependencies: [TargetDependency] = [ - .external(name: "SnapKit"), - .external(name: "SwiftSoup"), - .external(name: "SkeletonView"), - .target(name: "iBoxShareExtension") - ] - - let iBoxShareExtensionDependencies: [TargetDependency] = [ .external(name: "SnapKit") ] - private let appInfoPlist: [String: Plist.Value] = [ + let infoPlist: [String: Plist.Value] = [ "ITSAppUsesNonExemptEncryption": false, - "CFBundleDisplayName": "iBox", "CFBundleName": "iBox", - "CFBundleShortVersionString": "1.0.0", + "CFBundleShortVersionString": "1.2.1", "CFBundleVersion": "1", "UILaunchStoryboardName": "LaunchScreen", "UIApplicationSceneManifest": [ @@ -45,72 +36,23 @@ class iBoxFactory: ProjectFactory { ] ] ], - "CFBundleURLTypes": [ - [ - "CFBundleURLName": "com.url.iBox", - "CFBundleURLSchemes": ["iBox"], - "CFBundleTypeRole": "Editor" - ] - ], - "NSAppTransportSecurity": [ - "NSAllowsArbitraryLoadsInWebContent": true - ] + "UIUserInterfaceStyle": "Light" ] - private let shareExtensionInfoPlist: [String: Plist.Value] = [ - "CFBundleDisplayName": "iBox.Share", - "CFBundleShortVersionString": "1.0.0", - "CFBundleVersion": "1", - "NSExtension": [ - "NSExtensionAttributes": [ - "NSExtensionActivationRule": [ - "NSExtensionActivationSupportsWebPageWithMaxCount": 1, - "NSExtensionActivationSupportsWebURLWithMaxCount": 1, - "SUBQUERY": [ - "extensionItems": [ - "SUBQUERY": [ - "attachments": [ - "ANY $attachment.registeredTypeIdentifiers UTI-CONFORMS-TO 'public.data'": "TRUE" - ], - "@count": 1 - ] - ], - "@count": 1 - ] - ] - ], - "NSExtensionPointIdentifier": "com.apple.share-services", - "NSExtensionPrincipalClass": "$(PRODUCT_MODULE_NAME).CustomShareViewController" - ] - ] - - func generateTarget() -> [ProjectDescription.Target] { - let appTarget = Target( + func generateTarget() -> [ProjectDescription.Target] {[ + Target( name: projectName, destinations: .iOS, product: .app, bundleId: bundleId, - deploymentTargets: .iOS(iosVersion), - infoPlist: .extendingDefault(with: appInfoPlist), + deploymentTargets: .iOS("15.0"), + infoPlist: .extendingDefault(with: infoPlist), sources: ["\(projectName)/Sources/**"], resources: "\(projectName)/Resources/**", dependencies: dependencies ) - - let shareExtensionTarget = Target( - name: "\(projectName)ShareExtension", - destinations: .iOS, - product: .appExtension, - bundleId: "\(bundleId).ShareExtension", - deploymentTargets: .iOS(iosVersion), - infoPlist: .extendingDefault(with: shareExtensionInfoPlist), - sources: ["ShareExtension/Sources/**"], - resources: ["ShareExtension/Resources/**"], - dependencies: iBoxShareExtensionDependencies - ) - - return [appTarget, shareExtensionTarget] - } + ]} + } diff --git a/README.md b/README.md deleted file mode 100644 index 4628625..0000000 --- a/README.md +++ /dev/null @@ -1,100 +0,0 @@ -
- Fox -
- - -[appstore](https://apps.apple.com) - -
- -# πŸ’β€β™€οΈπŸ’β€β™‚οΈ Introduction -μ•ˆλ…•ν•˜μ„Έμš”! 42Box iOS νŒ€μž…λ‹ˆλ‹€. 🦊 
-42BoxλŠ” μ—¬λŸ¬ μ›Ή 링크λ₯Ό μ‰½κ²Œ μ €μž₯ν•˜κ³  ν΄λ”λ³„λ‘œ 정리할 수 μžˆλŠ” μ•±μž…λ‹ˆλ‹€.Β 
-λ„μ„œκ΄€ μ„œλΉ„μŠ€, μΆœμž… 관리 λ“± 42μ„œμšΈ μƒν™œμ— ν•„μˆ˜μ μΈ μ„œλΉ„μŠ€λ“€μ„ κΈ°λ³Έ 폴더에 λͺ¨μ•„ μ œκ³΅ν•˜κ³  μžˆμ–΄μš”.Β 
-πŸ“’Β μ„œλΉ„μŠ€λ₯Ό μ›ν™œν•˜κ²Œ μ΄μš©ν•˜μ‹€ 수 μžˆλ„λ‘ 핡심 κΈ°λŠ₯을 μ†Œκ°œν•©λ‹ˆλ‹€. πŸ‘€Β 
- - -### ⭐️ Key Function -1. κΈ°λ³Έ 42폴더 제곡 - - > 42μ„œμšΈ μ„œλΉ„μŠ€μ™€ κ΄€λ ¨λœ 링크λ₯Ό 사전 μ €μž₯ν•œ μ „μš© 폴더λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€. - -2. 뢁마크 관리 - - > μ›Ή 링크λ₯Ό μ†μ‰½κ²Œ μ €μž₯ν•˜κ³  λ‚˜λ§Œμ˜ ν΄λ”λ‘œ 정리할 수 μžˆμŠ΅λ‹ˆλ‹€. - -3. 즐겨찾기 - - > κ°€μž₯ 자주 λ°©λ¬Έν•˜λŠ” μ›Ή 링크에 λΉ λ₯΄κ²Œ μ ‘κ·Όν•˜κΈ° μœ„ν•΄ 즐겨찾기 νƒ­μœΌλ‘œ μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€. - -4. 곡유 - - > μ™ΈλΆ€ μ•±μ—μ„œ μ›Ή 링크λ₯Ό κ³΅μœ ν•΄ 뢁마크λ₯Ό μ‰½κ²Œ μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€. - -5. 링크 미리보기 - - > 링크λ₯Ό μ™„μ „νžˆ 열지 μ•Šκ³ λ„ 뢁마크λ₯Ό 길게 눌러 미리 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€. - -6. 제슀처둜 뢁마크 μΆ”κ°€ - - > λΈŒλΌμš°μ§•ν•˜λŠ” λ™μ•ˆ κ°„λ‹¨ν•œ 제슀처둜 ν˜„μž¬ μ›Ή 링크λ₯Ό 뢁마크둜 μ‰½κ²Œ μ €μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€. - -7. ν…Œλ§ˆ 및 μ„€μ • - - > ν…Œλ§ˆμ™€ μ‹œμž‘ ν™”λ©΄ μ„€μ • λ“± 개인 λ§žμΆ€ν™” 섀정을 ν•  수 μžˆμŠ΅λ‹ˆλ‹€. - -### πŸ“· ScreenShot - -| 폴더 관리 | μ™ΈλΆ€ μ•±μ—μ„œ 곡유 | 제슀처둜 뢁마크 μΆ”κ°€ | -|:---:|:---:|:---:| -|image|image|image| - - -| 즐겨찾기 μ„€μ • | ν…Œλ§ˆ 및 μ„€μ • | -|:---:|:---:| -|image|image| - -
-
- -# βš™οΈ Development Environment -![iOS badge](https://img.shields.io/badge/iOS-15.0+-silver?style=flat-square) -![iOS badge](https://img.shields.io/badge/Xcode-15.0+-blue?style=flat-square) - -### πŸ›  Skills & Tech Stack - -* UIKit -* Tuist -* Combine -* MVVM -* Webkit -* ShareExtension - - -### πŸ“š Library -| Name |Version | -| ----------------- | ------ | -| SnapKit | `5.0.1`| -| SwiftSoup | `2.7.1`| -| SkeletonView | `1.0.0`| - -
-
- -# πŸ‘©πŸ»β€πŸ’»πŸ§‘πŸ»β€πŸ’» Contributor - - - - - - - - - - - - - - - -
κ΅¬μ§€μ—°κΉ€μ°¬ν¬μ΄μ§€ν˜„μ΅œμ’…μ›

jikoo


chanheki


jihyeole


jonchoi

diff --git a/ShareExtension/Resources/Media.xcassets/128.imageset/128 1.png b/ShareExtension/Resources/Media.xcassets/128.imageset/128 1.png deleted file mode 100644 index 077d76c18344fce066fb9f879587ff94f3e58f46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7717 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 16) / 255.0, - green: CGFloat((hex & 0x00FF00) >> 8) / 255.0, - blue: CGFloat(hex & 0x0000FF) / 255.0, - alpha: CGFloat(alpha) - ) - } - - static let box2 = UIColor(hex: 0xFF9548) -} diff --git a/ShareExtension/Sources/Extension/ShareExtension+UIbutton+Extension.swift b/ShareExtension/Sources/Extension/ShareExtension+UIbutton+Extension.swift deleted file mode 100644 index 466fe44..0000000 --- a/ShareExtension/Sources/Extension/ShareExtension+UIbutton+Extension.swift +++ /dev/null @@ -1,22 +0,0 @@ -// -// ShareExtension+UIbutton+Extension.swift -// iBoxShareExtension -// -// Created by Chan on 4/14/24. -// - -import UIKit - -extension UIButton { - func setBackgroundColor(_ color: UIColor, for state: UIControl.State) { - UIGraphicsBeginImageContext(CGSize(width: 1.0, height: 1.0)) - guard let context = UIGraphicsGetCurrentContext() else { return } - context.setFillColor(color.cgColor) - context.fill(CGRect(x: 0.0, y: 0.0, width: 1.0, height: 1.0)) - - let backgroundImage = UIGraphicsGetImageFromCurrentImageContext() - UIGraphicsEndImageContext() - - setBackgroundImage(backgroundImage, for: state) - } -} diff --git a/ShareExtension/Sources/ShareViewController.swift b/ShareExtension/Sources/ShareViewController.swift deleted file mode 100644 index e68ff61..0000000 --- a/ShareExtension/Sources/ShareViewController.swift +++ /dev/null @@ -1,187 +0,0 @@ -// -// ShareViewController.swift -// iBoxWebShareExtension -// -// Created by Chan on 2/8/24. -// - -import UIKit -import Social -import UniformTypeIdentifiers - -import SnapKit - -@objc(CustomShareViewController) -class CustomShareViewController: UIViewController { - - var dataURL: String? - var panelView = ShareExtensionPanelView() - var modalView: UIView = { - let modalview = UIView() - modalview.backgroundColor = .clear - return modalview - }() - - // MARK: - Life Cycle - - override func viewDidLoad() { - super.viewDidLoad() - setupProperty() - setupHierarchy() - setupLayout() - setupModal() - extractSharedURL() - } - - // MARK: - Setup Methods - - private func setupProperty() { - panelView.delegate = self - } - - private func setupHierarchy() { - view.addSubview(modalView) - modalView.addSubview(panelView) - } - - private func setupLayout() { - modalView.snp.makeConstraints { make in - make.edges.equalTo(view.safeAreaLayoutGuide) - } - - panelView.snp.makeConstraints { make in - make.leading.trailing.equalToSuperview().inset(30) - make.centerY.equalToSuperview().inset(20) - make.height.equalTo(140) - } - } - - private func setupModal() { - let tapGesture = UITapGestureRecognizer(target: self, action: #selector(handleBackgroundTap(_:))) - tapGesture.cancelsTouchesInView = false - tapGesture.delegate = self - modalView.addGestureRecognizer(tapGesture) - } - - func hideExtensionWithCompletionHandler(completion: @escaping (Bool) -> Void) { - UIView.animate(withDuration: 0.3, animations: { - self.navigationController?.view.transform = CGAffineTransform(translationX: 0, y:self.navigationController!.view.frame.size.height) - }, completion: completion) - } - - func extractSharedURL() { - guard let extensionItem = extensionContext?.inputItems.first as? NSExtensionItem else { - print("No extension items found.") - return - } - - if let item = extensionContext?.inputItems.first as? NSExtensionItem { - for attachment in item.attachments ?? [] { - if attachment.hasItemConformingToTypeIdentifier("public.plain-text") { - attachment.loadItem(forTypeIdentifier: "public.plain-text", options: nil) { (data, error) in - DispatchQueue.main.async { - if let text = data as? String { - self.extractURL(fromText: text) - } else { - print("Error loading text: \(String(describing: error))") - } - } - } - } - } - } - - for attachment in extensionItem.attachments ?? [] { - if attachment.hasItemConformingToTypeIdentifier(UTType.url.identifier) { - attachment.loadItem(forTypeIdentifier: UTType.url.identifier, options: nil) { [weak self] (data, error) in - DispatchQueue.main.async { - if let url = data as? URL, error == nil { - self?.dataURL = url.absoluteString - print("Shared URL: \(url.absoluteString)") - } else { - print("Failed to retrieve URL: \(String(describing: error))") - } - } - } - break - } else { - print("Attachment does not conform to URL type.") - } - } - } - - private func extractURL(fromText text: String) { - let detector = try? NSDataDetector(types: NSTextCheckingResult.CheckingType.link.rawValue) - let matches = detector?.matches(in: text, options: [], range: NSRange(location: 0, length: text.utf8.count)) - - if let firstMatch = matches?.first, let range = Range(firstMatch.range, in: text), let url = URL(string: String(text[range])) { - print("Extracted URL: \(url)") - self.dataURL = url.absoluteString - } else { - print("No URL found in text") - } - } - - // MARK: IBAction - - @IBAction func cancel() { - self.hideExtensionWithCompletionHandler(completion: { _ in - self.extensionContext?.completeRequest(returningItems: nil, completionHandler: nil) - }) - } - - @objc func openURL(_ url: URL) -> Bool { - self.hideExtensionWithCompletionHandler(completion: { _ in - self.extensionContext?.completeRequest(returningItems: nil, completionHandler: nil) - }) - - var responder: UIResponder? = self - while responder != nil { - if let application = responder as? UIApplication { - return application.perform(#selector(openURL(_:)), with: url) != nil - } - responder = responder?.next - } - return false - } - - @objc func handleBackgroundTap(_ sender: UITapGestureRecognizer) { - let location = sender.location(in: self.view) - if !panelView.frame.contains(location) { - cancel() - } - } -} - -extension CustomShareViewController: ShareExtensionPanelViewDelegate { - - func didTapCancel() { - cancel() - } - - func didTapOpenApp() { - guard let sharedURL = dataURL else { - print("Share extension error") - return - } - - let urlString = "iBox://url?data=\(sharedURL)".addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) ?? "" - - if let openUrl = URL(string: urlString) { - if self.openURL(openUrl) { - print("iBox 앱이 μ„±κ³΅μ μœΌλ‘œ μ—΄λ ΈμŠ΅λ‹ˆλ‹€.") - } else { - print("iBox 앱을 μ—΄ 수 μ—†μŠ΅λ‹ˆλ‹€.") - } - } else { - print("url error") - // ν•΄λ‹Ή url은 μ‚¬μš©ν•  수 μ—†μŒμ„ λ³΄μ—¬μ£ΌλŠ” λ·°λ₯Ό λ§Œλ“€μ–΄μ•Όν•¨. - } - } -} - -extension CustomShareViewController: UIGestureRecognizerDelegate { - func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { - return true - } -} diff --git a/ShareExtension/Sources/View/ShareExtensionPanelView.swift b/ShareExtension/Sources/View/ShareExtensionPanelView.swift deleted file mode 100644 index c84f702..0000000 --- a/ShareExtension/Sources/View/ShareExtensionPanelView.swift +++ /dev/null @@ -1,145 +0,0 @@ -// -// BackGroundView.swift -// iBox -// -// Created by Chan on 2/19/24. -// - -import UIKit - -import SnapKit - -protocol ShareExtensionPanelViewDelegate: AnyObject { - func didTapCancel() - func didTapOpenApp() -} - -class ShareExtensionPanelView: UIView { - - // MARK: - Properties - weak var delegate: ShareExtensionPanelViewDelegate? - - // MARK: - UI Components - lazy var stackView: UIStackView = { - let stack = UIStackView() - stack.axis = .horizontal - stack.distribution = .fillProportionally - stack.spacing = 10 - return stack - }() - - lazy var logoImageView: UIImageView = { - let logoImageView = UIImageView() - logoImageView.image = UIImage(named: "128") - logoImageView.contentMode = .scaleAspectFit - logoImageView.setContentHuggingPriority(.required, for: .horizontal) - logoImageView.setContentCompressionResistancePriority(.required, for: .horizontal) - return logoImageView - }() - - lazy var label: UILabel = { - let label = UILabel() - label.text = "이 링크λ₯Ό iBox μ•±μ—μ„œ μ—¬μ‹œκ² μŠ΅λ‹ˆκΉŒ?" - label.font = .systemFont(ofSize: 15) - label.textColor = .label - label.numberOfLines = 3 - label.setContentHuggingPriority(.defaultLow, for: .horizontal) - return label - }() - - lazy var cancelButton: UIButton = { - let button = UIButton() - button.setImage(UIImage(systemName: "xmark.circle.fill"), for: .normal) - button.tintColor = .systemGray3 - button.setContentHuggingPriority(.required, for: .horizontal) - button.setContentCompressionResistancePriority(.required, for: .horizontal) - return button - }() - - lazy var divider: UIView = { - let view = UIView() - view.backgroundColor = .lightGray - view.layer.opacity = 0.2 - return view - }() - - lazy var openAppButton: UIButton = { - let button = UIButton(type: .system) - button.setImage(UIImage(systemName: "arrow.up.forward.square"), for: .normal) - button.setTitle("μ•±μœΌλ‘œ λ‹΄μ•„κ°€κΈ°", for: .normal) - button.setTitleColor(.label, for: .normal) - button.setBackgroundColor(.clear, for: .normal) - - button.setTitle("앱이 μ‹€ν–‰λ©λ‹ˆλ‹€", for: .highlighted) - button.setTitleColor(.darkGray, for: .highlighted) - button.setBackgroundColor(.box2, for: .highlighted) - button.setImage(UIImage(systemName: "heart.fill"), for: .highlighted) - - button.imageView?.contentMode = .scaleAspectFit - button.tintColor = .box2 - - let spacing: CGFloat = 5 - button.imageEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: spacing) - button.titleEdgeInsets = UIEdgeInsets(top: 0, left: spacing, bottom: 0, right: 0) - - return button - }() - - // MARK: - Initializer - override init(frame: CGRect) { - super.init(frame: frame) - setupProperty() - setupHierarchy() - setupLayout() - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - // MARK: - Setup Methods - private func setupProperty() { - backgroundColor = .systemBackground - clipsToBounds = true - layer.cornerRadius = 15 - - cancelButton.addTarget(self, action: #selector(cancelButtonTapped), for: .touchUpInside) - openAppButton.addTarget(self, action: #selector(openAppButtonTapped), for: .touchUpInside) - } - - private func setupHierarchy() { - addSubview(stackView) - stackView.addArrangedSubview(logoImageView) - stackView.addArrangedSubview(label) - stackView.addArrangedSubview(cancelButton) - - addSubview(divider) - addSubview(openAppButton) - } - - private func setupLayout() { - stackView.snp.makeConstraints { make in - make.top.leading.trailing.equalToSuperview().inset(20) - } - - divider.snp.makeConstraints { make in - make.top.equalTo(stackView.snp.bottom).offset(10) - make.leading.trailing.equalToSuperview() - make.height.equalTo(1) - } - - openAppButton.snp.makeConstraints { make in - make.top.equalTo(divider.snp.bottom) - make.width.leading.trailing.bottom.equalToSuperview() - } - } - - // MARK: - Action Functions - @objc func cancelButtonTapped() { - delegate?.didTapCancel() - } - - @objc func openAppButtonTapped() { - delegate?.didTapOpenApp() - } -} diff --git a/Tuist/Dependencies.swift b/Tuist/Dependencies.swift index 0e66bfc..b258631 100644 --- a/Tuist/Dependencies.swift +++ b/Tuist/Dependencies.swift @@ -8,11 +8,8 @@ import ProjectDescription let spm = SwiftPackageManagerDependencies([ - .remote(url: "https://github.com/SnapKit/SnapKit.git", requirement: .upToNextMinor(from: "5.0.1")), - .remote(url: "https://github.com/scinfu/SwiftSoup.git", requirement: .upToNextMajor(from: "2.7.1")), - .remote(url: "https://github.com/Juanpe/SkeletonView.git", requirement: .upToNextMajor(from: "1.0.0")) -], productTypes: ["SnapKit": .framework, "SwiftSoup": .framework, "SkeletonView": .framework] -) + .remote(url: "https://github.com/SnapKit/SnapKit.git", requirement: .upToNextMinor(from: "5.0.1")) +]) let dependencies = Dependencies( swiftPackageManager: spm, diff --git a/Tuist/Signing/debug.cer.encrypted b/Tuist/Signing/debug.cer.encrypted deleted file mode 100644 index 30ca264..0000000 --- a/Tuist/Signing/debug.cer.encrypted +++ /dev/null @@ -1 +0,0 @@ -IIQiI4/q9SfKX3HQz+Il4A==-Zm/M7463yYLz0r3uVmfIOViANQzqd+o0Npp9PpW/mNLB8t26kilJbNnJFsvURmuT5rmcZ0LbUxnfK9c2vPuRRwqcTsznLL9SEW8CZHt4CH5pF07LrSvoNQqkfWiBCHO/4dLgIa6NoiVN8rOIsIQ9ghgYTgwItg427WTKX8cB7tiewG1oOUEtxJvj/ju4Aa+qV+xh3Vp96x0dJvPXO6DToJTEWwU1o3CNWk8j+ibLmPz/7UzOq3u6s1rGNjsmNyyoQ6jjQ3HyMtlaH18LfqwK2JKiMOny1hA4sL3B9sAkJl2r7cyxM7MLFMI/qg4kfNIHtYs5bTQ359uke29QwRnV7F6YcV+hfZSxMcxMUSkOvGaEk7Q4jhlAkDSt1YmvOC+pqs6E4LI8RktFPYd+Z2Kvb1aG2TOoRjSHLojJNKrlobOOIzmnlKesLj3YzfnfXfz6T5rssyRa9kfWrGkkdjSE4CbW0Tc/tt4t8zGp964b8fYaBh7iTFyKUhUuCZR9Rl+0Gd3aSwCETG+cjw/6IeGTF6FKlJygckhT0h17eI0IgxsRQoKjJnKj35Sqd8Etlp1b6dTsODi8FSAq7UM1OHOFcwBqMPqcpgSYkxzBuQ8cyH0AGs1H3UToWZ3KQ5Zdfc8lR0njnRHpqYpNdBJBClEXJbra80jtGGYRtoF51msE81j61HpKivYuG6G5MX/vf6He3R0u+fEXX0fcouwfGPR+rK6GcX3YbMKdHw0tZ01uODlp5WctdRfuiGNJU/VV34OmqmNygFbeXINfSqFgAyb06gXcQ6flmW01/skfdgt7CqM9lviK7mWrpwzk3qqMqPbxw+1KJ7/T56ct9u/kjsxx5GNG2hI/a3hVvZX8eZCyg1PV3WVbXP+Fw1C3RZeUvll0SwxsZzihlb3gC+dU7CXVdPkImDpC7EfJdJIzWF5NeTltvugAtpy0EYsGXlhzbk020rDonAO1vDxqh+2lTNKG0/00ISItDKZZloY3phXAQqxLidJ68gwmVN2P1SqD1Ynim0EvKqvWPba9HZI9vrsd6qBZtBibx3Dna5gp/fyGi8recNatuzyCXe8QjVpuRB0N3y9at0j9Fz37jY7K99G1h81XEpaWaLXXFeFTFluQsb23Q3MUdJsgpXEzjvmKgLak5ZFx1cQ8Js3TLOPUk9PgJBc5ghgkUcXsgWT2q4PvoKAO3r4Safng5vhTG4RapuxpUBWlRumCExPKsUQtM4vpwD5F8gsKlWahiziVO6fB7TcS83Wfdx44zCxu31Xn6zffedlUOqFNHEtpDOjjrMHBOfG2uXJG7Ff+jYUtE6Vsx/bx+FwCoPlQHedETMgGZx5XURuXBZ8VXv+z4kX9o9Ohu6RO8g2KY9DgLQhkM9XRJIJkW7lqVuG5CzA/+p5KfL9f84l5YbnMIheL9UkT427E8YXyaGkJiI26wv9dO2Og4inP+DMcsDJva0+ClcHWf8/9VnHWDPku3LTDQFSxaPhOPaobEtc5/kjjzDmCDn7ZE7hFQoiYtyXRKpmQ80Ez8Ji4IR0OAQl2Z2bcN+9rpBrCv0kyZJYGKK/o3QcdqZj5HNkRGBE4EOZiKvTniIY2Z7kNGxM5moZYqSWhU9/8pUtA9RUIX5E3mW4KGCJ2+uXaEl2b9H8ia+cQVUzzidoNXwWhGD2wlZPrKewTb8K+zapxsyUbWLrkvYAXRCvQunmVHmD+v4DaR/95J+8xjCxc/02nMUWAxmPJrptWTjs2MBlcTIGpQDMnFo9LJnOu4S2wbfHc9/cOGVTnX0i+3UaghRWDwpyB+/i9Ioy2sidLW2/R0yVJTa4cyDn0ECFNe3W/l26hd/nXQOCi+BSiRiE1x0SZVJ4NIJjhKvIeJRc7iiFe6UTcN9StH2Ik940qgiZEO2yKFVVCWwkfsz9pFzuw+pxP7viAnELn5C3xU3NT7nSw0GEd1d6h5P9yk22PxxFGEXj3UL5Ygx6HGg== \ No newline at end of file diff --git a/Tuist/Signing/debug.p12.encrypted b/Tuist/Signing/debug.p12.encrypted deleted file mode 100644 index df2043e..0000000 --- a/Tuist/Signing/debug.p12.encrypted +++ /dev/null @@ -1 +0,0 @@ -5OXOPxe34sNNBC4hMy9pxQ==-Kr6wbaB5ueQaIHZlZBV/sRaI/5uPrRtYBP3nlBjbOi5Ve/ogG85bQeCRJoONVcckTasaL6urhkJW7/3jLzq4vzK+deYA+fldHcon7NY2LUs/OYrn6fLthFsiZWGZwMaDNszINCbPJQTwUCu870gSJM927rs/q9tRnU8VGJTXthfC9vmvI6hHYiHFP7SM2eMFhGuClnvEYx99AZRBrfeWL319G0hXb6tDRQ8nfh1PQ9YUbs/C47InZl5aPiH2aGYqWwch0OD5+iwkta9n7YtbgMYCBH+lPHz8uvwshgzyvdevOfU4Z8ep1ALRYVVtd2X0H0EM86U4flB19mXu1c/lY/0nUcIVr7g24ydagTJqakq1QIKD6WxKCk2C+sgge3lZYPngbmWvHwmnEUuaeq4VU74KUFQw2FcZZWJhG81tDbHC0K5z+HYndShghFUxN9LPFxvrCOFO1nbB4jzrSSd8q8pqBkglM1bhGPAmb7/BUoaDaZtqI91V5wDnhfFuFZEXK3hzJwDirLHezBjCqFfUkYdtAL/6X9dW8Jakyqq5gF5zCX9nN61YK5ZmrTvixz4rDuOqbETTHJbOCpd5NfIWi/4VHIUHcrCrTHKEA1vtNVZnrQZLvjIiAyYOL1N5dBOmV8rqD6dVsi4g5qCgL2uzNVgIp9J0yBQuzeeHy7aaJXQcE0wTjwySMU/LnUlFlzUsyGTML8hLcn7FriVf8Zwpr3A70HtKN4LfL8F7vmJFp0iHDZxRVspii1PYfNkSMHFBEJyZx0TkpdwVLCgUFes8YTuIj3Cawfc7NNtviBf7Xy0iXCXmDdqIkJO8+9ELehnkdSdOb09EzzcajjEE5/faVL9BemcyMg0tNQFywONlKLKA0gN5N+IlBeoEukJSWT0izvOPSPETEwsi5hgBvStEh93CbHr9dkzfTQ8raITAvA58F8mfz7mMypSGLV9McxPHvWP7Dk/oWNKCuUjJ6GwyhU27Lb8oaD/uEpSQIHmc+3NLwQ7LbRI+m2kK4ZCSPRAuxhDLpEZW2bfg1ianSPePXZSBkv810P8SkbZeGyzUtx3f7/mcbtCcACvA44sn+m5bL5MDJsMPCVLGopBwCwUPmVEYrCtG0QpYv3yHgazUU4SqJZa8eVA+RsWrH0ZXM6fgEM57xBjH3qGDUwzMYrW4CqtWNdn7v5EGoCgPkTRQ4h2msVMNXPby2e8WeLA9RNAzBFliioykX23u1EyomXbVYxQOccoAnelyvVtwy2TGbznqT4ucNak0NoXMtlNu9ZZ9yjGr3LyFOhk89XeR0NoiUV7Kj6ATx7Q5lODigdmV+ImW0wqREqACJMQUdPbAZWMiivRwNMnpQduet4USo5qASV788F3uhggWZBlL4Tgmh79CveSbpasIdA/IOhHW9zV76/kAvDSyGx5ZKaegBRhroaUMUTysdsphVreNSteEMXCGADdUOYab5I8U196Kh8dzheXLH0LlAwu2+ZHRcGkYCZSDRlmQutSge1zWYJX51K5Nn8CalcTPijERDfjzOd+mr26ELev6DH/xrProeu5kH0w4sXlB5wIFD5t7P2bb+8Rrmx53qjJ5/zXmwVnHFfnhyEtTTF+spbPM6QveO+DMd//4JbNgccy/+EfAlxz1lNaSik1NV2tRwMKthP3gjlZCEzZHIoUfJF9sTEzEd5dcHNhPL8bcpY7G0klYZyxrkHkSo45QrHAg/Fr4UxQaaClIRYaJvjzI73+9K/i0pIcxNHOJ5QR3GrR12bXNAQ2Ey4hEhNgq1I/hygES8UeCPL2nZdcJuvdcx7nMrUGTEkm5v8TadTnv1hg3x+MKD0c/3gpn1GwuKWqW4eBgXX1DpN8C072OkeaKtqYWl7JfmZfV0iRJZoVJ2l/pAQ4XluVkVdegHSYn1YjbM8NQNUwWa6we7pChyb05Upr5kMCwrChHx6t/0kNd2CQO1gKq5oH2/j1gp0VD0XePWLftIgFGWEZwi/mLNlHHoKQxcRIMKh/KdvlrxmCQuNwhdAFhBfapKl3STjWG0DBMy1N+qxV3gTCMdOy25UfBL7Zllvxy94xoy1S1GkMnfq2UZHeQMFE8xqZbQ6p5WtE08ClTLGU5+1hgj3pdPBJsUGtQJg3Qnfsta2iSyJB/ivfqN49yAUgozOMPWfiaxy27VOeJWsmuWns3HTn+zjsUeyYFbR3y4kIbsJTtqCuY+Mcfax05jgJt/QuYVftXIrdvk6wQxQc+Uzvf+Yj+CXAuBJzvBf4Tj6gQu3GpMlX/Fe7Ab9Rn+o8N6esp2zDpy9klJEnnCP4SyR3+VgjXHjbi2U1/pT5pKfQJ10v0sqNNivK1fqlvxDY2ymqDtYWl/H8ppAxCG0BcZ6si7gADF0o7rWb3Z8SMQmKtjyIeyoFwswn+41BTQD2hUfKmMc22f2px/PxKSmvcbCu7hJbG0B3tP5KJF9U1kPlSU8ExTTeX2XRdhK010/3m1Q6WfWwyiJ7t4FTs/loU6lR9wkKjrUpyT3GnNrcFulfomXC4AGVEFi5tjEYiOLemuBuFO4w0aRb+QrHZ4tYsKawYM4qpD27Q5A5rSz+lPg6fNNWhaIKaEoIasI3MD7zUxVS6DX4FNBqFat+ikvCHb5vkM9OEL4YCf5NiDXAdUxh1LzSjR0EMJIuN0j8VHSpEJMqmX4Y4rXYtPwuA4qn7xYYV9bPEMCasG9FKeVs0vl8ATqxvYGEgZtf2qoUdcwNKOAJ2RwJYzdSZuwNFLfPImL12WDxr7uuuv7jtmXIxinNgm1mh0C9lBM+gNaLEkswJJb5kj/e9engopLMXG4RNscdP1Vg7UluL3JmRQUCftEAsLWAtKNcti3HkfAc9VueGAybqFc0mW8orM5UQV8H4k++0Rb0dJeYVkbiPgsH81Aqg9u/81vduW1T6ub7/5IIF5bXKNzyC2eVD6U9NveoTL/7eVHuVG2AA5ojCK7QOEPSHIs6dMIHuQnXA+y3JU4YbueZwBBgjANsMVAYY3LW/8xtGNjVYQ9Et8xS+8ZfQet9Chg4ESp2s1g8hDrLGdAr7p5Vfk3umioNLKha7+TUHqMCgzk4eEElF/sMUpyq/jxdJqvSa+6bkR8vRBQGu0OK5xyxWEk/X/TZBjll+aHuViw4Rxkifk6oktOxjvGzJ1USR00A+wLEbn3sVjHEIdiUntXyh44f93QF1QUh+fJmzcUGyVexyectGdQZcbUVORoeaxI7J/m7LK4ZF2QqINoPi4GfRYLOwHAJlvo7fNyPsh/JdIoJdchDKlCRnIVTsC7lKjc3ljZQlvREZVapeDlN55iB9i0IwRW8I88Cpl69j86VOZNOdgOfryivkJV6Ux/9nTdYb+h2MI4B1qKggHnZH+A85La79vOgSvkMdultSYtLzMk47SW+Vu9M8tY+PBmBpa57JQxxDw1hgKWgIEuNymkulvlTb9M/aSQ/wvgdFQye4pgneSjb3zx9DrfghzggKp5+5IkrE+cnq552xblQJy8BHbWH6WsHvpEDwFuuM7W6//2D4+hj7d81m/2M1z9BYiIb4Au6FVBmJuw6DRxCHhqGhiJFMBEcHTK58RlE6ZUC8llnahbGVRDc/YpNyLU8l1o10R7is2xpxnNYd0rpnElJzOzo49ux7RhwMRviOVl7ViUVjARK1XddAB0ibkziZ0uEijR2MSXAZwN4YIj2YDE98Yz3izF5+/GTbDDMn22lscoGbQQs/pEsQ8S91bY2pOqZmEoeEkIxwHRpNOY65tmvnC8jhr11jGnj3HOjTk+jcrEBcjdQusAbWK/NXPuIFLHm6duthmQnfBYp7QLm38uiOB3TioNfLt6Q+rbTyCJ8GC7R7gvC5fwccjBeL/o6j+NggT56Am7FAK5pVivCS9xXrnVve5EjksmErFuEjD91GTrbqrLxBUOQ3rml3TTjSeTqPKxqWF7sRVTkIRCCePFl6OkBXbvN3OrQU+1iwGfbvdhIFKDbbBypMd5U+Nk6eTChuhtWGDmtvqfN5DrSSnMro0PNWC6scEpD6IwS3pdg7Tr5FGcDyVJQWJxmdHK0LgjNPYXAExvEq5TZyj0qi5bjUq56AAfmBCzkgJ//wHEhd48l+7/22QpmpXAXqPLfmIp+b4EDVQG9s+FNqcQt5azdWRwSB1SPt+LcuhcOPk/9TvUQ7jCwnzvhRRrrJh4xznhcPMxaALVP44YfSALyDtuHt3eo2TVC3MYbZ7n5MNHiN6yn82/9JtQz3I8FdO1OtHoqHwjEAEXfHA/43wxuSFY85vFD60+AH9wNNLymzqkpsiKGYO5PKbmUMsiehoYAtCPdghnHvm9vpID2LA60jcq6mSW7BE/eNLrz0fHnk5fZHlYTR+UXdXIO38eWkEMLp8XHdPNltn8nwBSpSmqgW \ No newline at end of file diff --git a/Tuist/Signing/iBox.Debug.mobileprovision b/Tuist/Signing/iBox.Debug.mobileprovision deleted file mode 100644 index e40fd7b5973e6b284b500c70816b5cdfb5f43973..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17472 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 Gw*6n5AJ$p` diff --git a/Tuist/Signing/iBox.Release.mobileprovision b/Tuist/Signing/iBox.Release.mobileprovision deleted file mode 100644 index 3c12147f330e9c66680eb7204a3623b9c1523322..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13200 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 diff --git a/Tuist/Signing/iBoxShareExtension.Debug.mobileprovision b/Tuist/Signing/iBoxShareExtension.Debug.mobileprovision deleted file mode 100644 index 5e6c2c4c9aad1c2814f9afb007510d88ef3c2293..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16701 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 diff --git a/Tuist/Signing/iBoxShareExtension.Release.mobileprovision b/Tuist/Signing/iBoxShareExtension.Release.mobileprovision deleted file mode 100644 index b9d88150a6c954b6195d5898089e64d2273da7ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12415 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 diff --git a/Tuist/Signing/release.cer.encrypted b/Tuist/Signing/release.cer.encrypted deleted file mode 100644 index e0fbb52..0000000 --- a/Tuist/Signing/release.cer.encrypted +++ /dev/null @@ -1 +0,0 @@ -/iI32Po39nIz5A4SRjThfg==-oKHwtQwnz0SLBJKPqimkZiYB6LocREJzbdXO3b9ibQhPPj0DvP1WWjG+DPDqVvX6AN43+ab6IoyNcHZ4uGIzzFYaOemQ2qmiaHjgKXpkGNNjoxQVN5Ka1wJ6NiAqUICUPIuLjiz1GUWOyMAPUnSSP2dj6wG8PpfsjalWFoTwyBUQhXgSryqL72zGGl2qtJgV42PVF9VNkGPhGP3zSdaSXbmWKJI16ijL4UH4xqDs3yPo1aULNoXySS+kYLBSqSFUUUDkqPeYh13ajCtVJJ9kc+SneR4pE0K54jHFBC/Hgl+77nmdfzCiFqMqvZI9bki7AMdFvqBXjG1ENel5V/V3My9i3+7oxURYKrLjAGuIo+99ba9Ot8xwgHAI0b+xfnQ1ztdYBZzmgNuWGT2PCK4RQl+5Sw0VUtEvauvQa9yBecvBEIHb5xwHtzyto4LEqhydeV7z9UPP1grflDqE6t4KG4K4QDbvGOOFITjXT+KzE++OrA1f66nC/0LgYz+Jvsnu9sy8smQjfOKzOrTNw7dsqZ2SOr0rGLPVYjbAqiVFelkv5EcS+XT9PH5BRzc7IkbR0An1hC+ydRqyVkmDQZ3MKL2r0wFABZ3Gmnxg/Rt/3v+QeUdVDl7a/her2SXKsR1McXdNdJ3PffvjdgtOltWnoCHDsx1YTrGTBz5trRJb8T50I5KtFfZNDZ2H7nuqFwzCs/xfmR8t7EK+XqL/SOT5vNYQaZCZMiNJPOijku2qG6YZn1Fvrq3pYNtYqaodgxD4ce5C0Y2m8OcWlh6ExSZYPBL+G1ubK70qhzdsg1X3KXU9bztGXDucUfPFwuJ5LwrBGlmeVdc62FNK3JPeKa0kWRGBEL3z9RX16S6blX5UI1g29iR96w8xlS4iPLWyWAg6SyWiZePaL7m0XhYzletj6k+h07/ZMYwrLtU+FQAJXjdfx6zAoz244eckkTzaMnr/IANtj8VvvP1NaPRnQZlSniWbx4a4vgssWdKw6EK8A00xc9uIFSjfmrqoI/MwwdsNeryrfEztqIHAZ+IQei5UiIuiatrGIHLvJe15PfbwOebVHMgK8Q1zpSsDrWZOIGMV3QipXzPSBzj7xBJ/Jyn1Ch13omwTm4hLD3g11BFIanVXeSAJc2GPBY1dV+yayrKRA5xBe83s/iLgE8wSCYxuRwzCA8kNLOzXdz19xpUqiL4jVL2sp1suiygpgcI/gv5s9HK6Mx+n6Ox7n8W9WXjwS+s0UueDJcLuAaXV2awUcm2ER7yXxU6/OVKO/2IUMr/wUV5gu46ua8r+RUYtDcS6eUak6NunabQTn/14Cp4MXC0BdZoNzHBtwffdE1XET2wEE5dnFrxv3bF097TaWMDElYOVBks0aSK2E26rb0I4BELA0qrA7vUloDhX0cSgRP0r/S+/CWFHh/0wNGIs3Bjb2PhFB3Z//wHXNac69E9VktgEDd4f0pZWaFFW/v+MdMTYezHbKciRebnmVvzJmoHCtoWQZwVdIOegtwipq+qAwKPbvBFnomesh210KnouW6ttKZNhUchEywRpISRmW6l5zmh/ediymvzdCRJFBg8a5nINNXNbVA6Q8TCjLbaimdtgJQ4ydpHqf1BGDC6SF54lMAoV5VzbLVTd/XvEAPwOzk+Vo4IAKWJUDLL8hUIZlNzDF6PK4xa9BbA3uNaV/QjctfJn6FnaHeQrbKv4NWYFGOTs8S5OnCbRcvWkmeCOehOkStytZE0vCu6M0CeNOh7dNSXJjWtYex7j+eCPCdH4q9aUH4IETpZu1fhVkdlmsJsMwZSSU9gWZlE53aLNgebPQe2C2IQwCL3s1ww75qtSIwfuQCQrjgfTTtogm1g9qxyNi2xDeqgKK9kfHLvTaKgVq7KWrTKsSElEbMINsveicHhTVsC2m+YpeSYS/XsNiJxVgNTb1ADhb6Mb+QGS05/nGR9gaLc4o9LtJc0Pq4SFnHZM5G3JG/GvNV8= \ No newline at end of file diff --git a/Tuist/Signing/release.p12.encrypted b/Tuist/Signing/release.p12.encrypted deleted file mode 100644 index d875ef4..0000000 --- a/Tuist/Signing/release.p12.encrypted +++ /dev/null @@ -1 +0,0 @@ -mAAi3BCoeYUJm5Kl56ye4g==-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 \ No newline at end of file diff --git a/fastlane/Appfile b/fastlane/Appfile deleted file mode 100644 index ead9487..0000000 --- a/fastlane/Appfile +++ /dev/null @@ -1,8 +0,0 @@ -# app_identifier("[[APP_IDENTIFIER]]") # The bundle identifier of your app -# apple_id("[[APPLE_ID]]") # Your Apple Developer Portal username - - -# For more information about the Appfile, see: -# https://docs.fastlane.tools/advanced/#appfile - -app_identifier("com.box42.iBox") diff --git a/fastlane/Fastfile b/fastlane/Fastfile deleted file mode 100644 index 1c196f1..0000000 --- a/fastlane/Fastfile +++ /dev/null @@ -1,73 +0,0 @@ -# This file contains the fastlane.tools configuration -# You can find the documentation at https://docs.fastlane.tools -# -# For a list of all available actions, check out -# -# https://docs.fastlane.tools/actions -# -# For a list of all available plugins, check out -# -# https://docs.fastlane.tools/plugins/available-plugins -# - -# Uncomment the line if you want fastlane to automatically update itself -# update_fastlane - -# Constants -APP_NAME = "iBox" -SCHEME = "iBox" -BUNDLE_ID = "com.box42.iBox" - -KEYCHAIN_NAME = ENV["KEYCHAIN_NAME"] -KEYCHAIN_PASSWORD = ENV["KEYCHAIN_PASSWORD"] - -default_platform(:ios) - -platform :ios do - # Keychain - desc "Save To Keychain" - lane :set_keychain do |options| - create_keychain( - name: "#{KEYCHAIN_NAME}", - password: "#{KEYCHAIN_PASSWORD}", - default_keychain: true, - unlock: true, - timeout: 3600, - lock_when_sleeps: true - ) - - import_certificate( - certificate_path: "Tuist/Signing/release.cer", - keychain_name: "#{KEYCHAIN_NAME}", - keychain_password: "#{KEYCHAIN_PASSWORD}" - ) - - import_certificate( - certificate_path: "Tuist/Signing/release.p12", - keychain_name: "#{KEYCHAIN_NAME}", - keychain_password: "#{KEYCHAIN_PASSWORD}" - ) - - install_provisioning_profile(path: "Tuist/Signing/#{APP_NAME}.Release.mobileprovision") - end - - # Upload TestFlight - desc "Push to TestFlight" - lane :tf do |options| - # AppStore Connect API key - app_store_connect_api_key(is_key_content_base64: true, in_house: false) - - # BuildNumber Up - increment_build_number({ build_number: latest_testflight_build_number() + 1 }) - - # Build App - build_app( - workspace: "#{APP_NAME}.xcworkspace", - scheme: "#{SCHEME}", - export_method: "app-store" - ) - - # Upload to TestFlight - upload_to_testflight(skip_waiting_for_build_processing: true) - end -end diff --git a/fastlane/README.md b/fastlane/README.md deleted file mode 100644 index 5bde376..0000000 --- a/fastlane/README.md +++ /dev/null @@ -1,40 +0,0 @@ -fastlane documentation ----- - -# Installation - -Make sure you have the latest version of the Xcode command line tools installed: - -```sh -xcode-select --install -``` - -For _fastlane_ installation instructions, see [Installing _fastlane_](https://docs.fastlane.tools/#installing-fastlane) - -# Available Actions - -## iOS - -### ios set_keychain - -```sh -[bundle exec] fastlane ios set_keychain -``` - -Save To Keychain - -### ios tf - -```sh -[bundle exec] fastlane ios tf -``` - -Push to TestFlight - ----- - -This README.md is auto-generated and will be re-generated every time [_fastlane_](https://fastlane.tools) is run. - -More information about _fastlane_ can be found on [fastlane.tools](https://fastlane.tools). - -The documentation of _fastlane_ can be found on [docs.fastlane.tools](https://docs.fastlane.tools). diff --git a/fastlane/report.xml b/fastlane/report.xml deleted file mode 100644 index 7abd9a5..0000000 --- a/fastlane/report.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/iBox/Resources/Assets.xcassets/42pack_icon/Contents.json b/iBox/Resources/Assets.xcassets/42pack_icon/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/iBox/Resources/Assets.xcassets/42pack_icon/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/iBox/Resources/Assets.xcassets/42pack_icon/fox/Contents.json b/iBox/Resources/Assets.xcassets/42pack_icon/fox/Contents.json deleted file mode 100644 index 73c0059..0000000 --- a/iBox/Resources/Assets.xcassets/42pack_icon/fox/Contents.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/iBox/Resources/Assets.xcassets/42pack_icon/fox/fox_page0.imageset/Contents.json b/iBox/Resources/Assets.xcassets/42pack_icon/fox/fox_page0.imageset/Contents.json deleted file mode 100644 index de4782f..0000000 --- a/iBox/Resources/Assets.xcassets/42pack_icon/fox/fox_page0.imageset/Contents.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "fox0.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - }, - "properties" : { - "template-rendering-intent" : "template" - } -} diff --git a/iBox/Resources/Assets.xcassets/42pack_icon/fox/fox_page0.imageset/fox0.png b/iBox/Resources/Assets.xcassets/42pack_icon/fox/fox_page0.imageset/fox0.png deleted file mode 100644 index 0892874e263d4aece136bfac2d934cdb392569c4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3944 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%0Dy!50Qvv` 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%0Dy!50Qvv` z0D$NK0Cg|`0P0`>06Lfe02gqax=}m;000SaNLh0L01FZT01FZU(%pXi0000RbVXQn zQ*UN;cVTj607GSLb9r+hQ*?D?X>TA@Z*OeDr{R1600eqTL_t(&f$iB@tQ=Ap2k_r_ ztG7Z>)L!d@NQIYLnuhXJ619{xEp3EoNGb>+_QZ>nMjtE>6*~=HY_UAFD3Mlb2_=zO zqKmDu@73*o9?ncV?wxz@%)K+$ZTTnjFy~w5`+w)0@0{~ZWTyWT;(x;1IfgCah}Z#_ zV?}1Z(lWopnDBXc4Bz3>%zUZ=oB7x`GiUayGmHsei@BAro3H{`WahG7^cUiIjK#&7 z`B+`OVN7@;mY}m{_%qDU%mo#l$jpq0t8p7Tu--OG_#nKG-Mfi4Vj*t9o|vGJ-35sa zwqe3=VV^qURAzD|Mq}T~c$bopZIbYAcoRn;8Zb$P@FvX3%m?fG9j=5SB39vGg-mzS z^~S2>^D^_gx;`5v91#<6w6a&=H>|-YSeb3eTtsYE3Q?nkt1&#DnX~Hp>@UuUI2Nbj zY#h~1{1?{ZQ>DPXl$o#f>99dW#6!4X0H%p`7@L_t_3&Gda72ty&aLD<#TdHv=JlgINf5Z6pU(s zFXN`nT;5ES5wQzS#e5vtjBQO!)n(p=dzD+-mRKV*t1~(p<8cvAQvWz;21}Gn!i#K4 z<|Jjc99r?e4!ZpA7s{F_({Gx1!&#@fuVGM2_c>GP{59QpyAv6DM#2}Qw|55^e z4~vx~tWyd=C^I@z+2ffz7(oex>K3W^;NR}P}pYNA-a24-qi~*DEimc3=(e!UE-HHWyPGw4K^pAq$0cQ%}2yxJW4$t;P>{ z8_!~4kBfiAbftAWu^&H^d)v=VHvl4HnsVk1f6 zXi@@54ZTQ_E-Enz5K6$103tR-RB%L5k){YTDBysjLy@r}iiH7DvFijGMAUI`6dRUF zWUU$Bym{}eS9UO(Z2>7`&z9wUXbV-Il#&6`Y8GKGQ04S2&F6MJnWNa;Ck|;8QE#r9r;7G||@X{|> z%+C|c55>;RS}qbKr-&IQTvLXPlM{>K&(BTgi^a?^4mXV>;xX8n8Ce|RasXz}{8imI52H3ZN4bfe_i~WlJ|C&UW9+{8AKoW!}eExnGFE2re(F+`iE_46#!l9 z0Z_aBhs|Iw0E)7{bq;-T9=d#9QpDmcXDh4R++0fmpKB>E=%LdZt9g$j;($`3&Zthxi`{{&gM}5&R^+h%b~yM9Zd3AWW9ETgVfL z1(`yIK=_}U_z%PWq}jQaiQ4!P(3V&Nr6C$XejWfQDiI(Fdt@un?|lo#M+5oIi_w{w zo%_#%{(V=tO#a9gB!7-$M?^BX5>d|Vn*3S!?g~$*UQipUPL&zMmg;!4Do9IA%up=Rh? z=qPj=x&RGBx1dpI68aT-2O}^EromdU5o`ssU{5#*j)WJ%$?!5bA1;Eoz?EiTr=n?cd`V|I)p<|3Oju?MT93~aB0<#&j8`F+Cg&D?-VWzQItUA^l>xvD zRIYI4MQ`g1<+DyrL=EogS06Xii({| zv`U^zjmmKqDIK93(F5q|^fLNk`gQs{RV`IdRle#b)i%{Ds;|}NsClUI)k@Ub)kf6b zsWa4l)YH_rsduU0(?DsMX@qO!YV6TCtMPOWZH~(v?wpc2hv(eZgf-1HBQ#fN?$aF5 zoYvCT^3%%Fs?s{6^;Da#?V+8jy+iwi_M{F~$4y6|vqR^k&SQoO!;_KDsATjprgSxR z{dFa}^}2()GkV5)QF?`X?Rxk03HmJkB>f%wz4}uIItC#I1qQ7Kw+-=zEW;GTU55RJ zuZ@h2VvIHzbs0S}Rx=JT&Npr~zH34@aW`3J(qMAU6l2OVO*7qXdf5y%vo}jIt1%lg zhs_<#1?IcWhb_<+P8LFo28$a^64R5J!)#@aTGB0pEekEXET35!SjAgyv+B3{Xl-wu zZrx~o$A)4PXj5p@WAm%6nJw40#`fA=@?77!tLJvleQsxN$G6*KchjC~A7a13zSsVP zgQJ7Uq0M2^(ZDg$vDWbhi^d9LZDyT!LOXdmt#&%*^w!zIS?qk+`4<X~g?%56 z2@eae34a)26HyS+zks@6$%2*zuOhu7%OdYYnM6sVdZQJi6QY}=U&naIl*dS8tzuWk zUW(I*6U24LW8oFzvR(TOpM zEs5_rp_~TJ^wNN(wM(bCZ0;`Z6P^ce2XB(^$}i_nB)KM)Cp}7bP2Qe7nc|*Ok@8f) z7E}wKr~0SXrM^xJP1~RLDLp2=Jp-4Km~m7{5vB?IGPN`FGKaIwvx>8%%bb_(Ts9>N z5;bK**^9Ef#WdN^)PTf9vR*Qp{o-l7 zTcBI8wqSIn=gRt3(5j`YdRObOE?Pal#&6AmwS={4Ykw%TE-Wv6xh`g1Pmxy9nxe7w ze(PI{6^cd0H#WFzsN0CzDA+i-Y3`<~O&?2mB^OJrODjs>Z{}{k_?699m0x|@lC)*8 z%%N=0R?Jr6*6Z8cw;d=~F3&F?+a9vLa|dHb$&Qyhm+ZVyVOLSNi?B>BD~Ee(8aT1AWbo&CM;EEoH56tE6@EV8X%6-*|u1-NtOIZ>P7H z9s-9XhaP{M`0e$>L5F*fu#U8SXZT%h2eqT56Y5;vIn|ZYCGC#u9zGg)w718lr{jCe z@An_mJyvsE<#^c%!il02pHAkVoIaIx>gnm^(__6$dheWxJ#(!uyl?Pq(Ao3ne9xWf z_v}A;-u3*k3(gmgUSwVDy5w-FbHIL};|Kd6ItCpEJBJ*Hx-UCj?irppeBz4xmD5+f zub#UWaP88_{E^}7QP*$YNVp-r$-DXJR{E{yw{vdK+*xxMeYfPE(!GlNn)e%iH2tw% z>L5Kn>ODH}V8MesW8ASPKV|>)e!S=*`C-L`&P4Mg+egPHeJ3wJUif(YN!F8@r^P=j z|6Kdbc>FRj6+1QlT=e|YubW?}zu5oM?q%0Dy!50Qvv` z0D$NK0Cg|`0P0`>06Lfe02gqax=}m;000SaNLh0L01FZT01FZU(%pXi0000RbVXQn zQ*UN;cVTj607GSLb9r+hQ*?D?X>TA@Z*OeDr{R1600eePL_t(&f$f=ZXq9yo$3Mrl zW|5VYe;5^&)Qd>M7v(4+sjwn3%LHk?=|z$gvLc&AD zuwueyHVgPw((w4WR9%b^HnSPPdSDUIEU9Ze9jg|?gl_@%0OtV@120MXYaD&63c`d} z0xtyZj{|KJaa)H8cL7U-_PxMzNxz$!X#zzylZ2UF1snn{49Ok^wn`ctAJ?jbJmICl zE?`QLd>zmZ^p4kgHnTcl2XH{rbE)+OgqHwaj3x~5CGZL!(0-IOl-6iDFthuC4&WHD zTGFlrV>Sb`B{hzc1%z+K&uvW!JzwC&_XCH4firQo&8!)CHuyOVd=9LU^hr$r?ZABC z5@4mIjskf=xE?2QP68hUoC3bZSN&^Xx1?MJe8z;C-3Yu7oE>UD3~ZLPHRxlKWM)qQ z8}XewNF3o{&`d@dfX7nDV-H1-5KZwKy<>2n--15anaDsa%O19%`}OdQd? z44_j|!Puzsa4zsXPP#UhM!X>reV->qJHCa_$0uoF30tLhV*Y&BOFEHn97T9UV0I_4 z7`OwtGH4zOK2w74Fu`d_*qmVq*as|=)DI;H=V4|wz#QOa;2Yp)eC3Dm;4l>rDD!~J z@vE&4zb4AvAz2~3`Z>G`TrEjs5{^P#1!ZPa@vXQ8xVLhDGetgXF9bfWh;SUtY(8FP zt;kGiIt<_ueh@ExKTA#6%q|7i;7>zy(|VX8a=;&WO4@`+?EX}Q&1^BS4VaOMi`iiS z_z2JU_XGPRorVNKD-J;wvoR|VGk}0zpcB|6>1b4^N`ux~pf#0y)j2u{^sER!f|rzGG)dZ$T6t-^58{6dU0WntBI(V@F&PnF0DOp-iN64kNqQ}{ z;$*gKfJWdRyo@~nY{)e6_%CCU@I=QX;fan(!V?{T0~cWU$u0V9RR91007*qoM6N<$ Ef}%1};{X5v diff --git a/iBox/Resources/Assets.xcassets/42pack_icon/fox/fox_page3.imageset/Contents.json b/iBox/Resources/Assets.xcassets/42pack_icon/fox/fox_page3.imageset/Contents.json deleted file mode 100644 index ea3a111..0000000 --- a/iBox/Resources/Assets.xcassets/42pack_icon/fox/fox_page3.imageset/Contents.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "fox3.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - }, - "properties" : { - "template-rendering-intent" : "template" - } -} diff --git a/iBox/Resources/Assets.xcassets/42pack_icon/fox/fox_page3.imageset/fox3.png b/iBox/Resources/Assets.xcassets/42pack_icon/fox/fox_page3.imageset/fox3.png deleted file mode 100644 index e15e2be4392683ec49db67a521070da37c90cc06..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3990 zcmV;H4{7j;P)f6 zXi@@54ZTQ_E-Enz5K6$103tR-RB%L5k){YTDBysjLy@r}iiH7DvFijGMAUI`6dRUF zWUU$Bym{}eS9UO(Z2>7`&z9wUXbV-Il#&6`Y8GKGQ04S2&F6MJnWNa;Ck|;8QE#r9r;7G||@X{|> z%+C|c55>;RS}qbKr-&IQTvLXPlM{>K&(BTgi^a?^4mXV>;xX8n8Ce|RasXz}{8imI52H3ZN4bfe_i~WlJ|C&UW9+{8AKoW!}eExnGFE2re(F+`iE_46#!l9 z0Z_aBhs|Iw0E)7{bq;-T9=d#9QpDmcXDh4R++0fmpKB>E=%LdZt9g$j;($`3&Zthxi`{{&gM}5&R^+h%b~yM9Zd3AWW9ETgVfL z1(`yIK=_}U_z%PWq}jQaiQ4!P(3V&Nr6C$XejWfQDiI(Fdt@un?|lo#M+5oIi_w{w zo%_#%{(V=tO#a9gB!7-$M?^BX5>d|Vn*3S!?g~$*UQipUPL&zMmg;!4Do9IA%up=Rh? z=qPj=x&RGBx1dpI68aT-2O}^EromdU5o`ssU{5#*j)WJ%$?!5bA1;Eoz?EiTr=n?cd`V|I)p<|3Oju?MT93~aB0<#&j8`F+Cg&D?-VWzQItUA^l>xvD zRIYI4MQ`g1<+DyrL=EogS06Xii({| zv`U^zjmmKqDIK93(F5q|^fLNk`gQs{RV`IdRle#b)i%{Ds;|}NsClUI)k@Ub)kf6b zsWa4l)YH_rsduU0(?DsMX@qO!YV6TCtMPOWZH~(v?wpc2hv(eZgf-1HBQ#fN?$aF5 zoYvCT^3%%Fs?s{6^;Da#?V+8jy+iwi_M{F~$4y6|vqR^k&SQoO!;_KDsATjprgSxR z{dFa}^}2()GkV5)QF?`X?Rxk03HmJkB>f%wz4}uIItC#I1qQ7Kw+-=zEW;GTU55RJ zuZ@h2VvIHzbs0S}Rx=JT&Npr~zH34@aW`3J(qMAU6l2OVO*7qXdf5y%vo}jIt1%lg zhs_<#1?IcWhb_<+P8LFo28$a^64R5J!)#@aTGB0pEekEXET35!SjAgyv+B3{Xl-wu zZrx~o$A)4PXj5p@WAm%6nJw40#`fA=@?77!tLJvleQsxN$G6*KchjC~A7a13zSsVP zgQJ7Uq0M2^(ZDg$vDWbhi^d9LZDyT!LOXdmt#&%*^w!zIS?qk+`4<X~g?%56 z2@eae34a)26HyS+zks@6$%2*zuOhu7%OdYYnM6sVdZQJi6QY}=U&naIl*dS8tzuWk zUW(I*6U24LW8oFzvR(TOpM zEs5_rp_~TJ^wNN(wM(bCZ0;`Z6P^ce2XB(^$}i_nB)KM)Cp}7bP2Qe7nc|*Ok@8f) z7E}wKr~0SXrM^xJP1~RLDLp2=Jp-4Km~m7{5vB?IGPN`FGKaIwvx>8%%bb_(Ts9>N z5;bK**^9Ef#WdN^)PTf9vR*Qp{o-l7 zTcBI8wqSIn=gRt3(5j`YdRObOE?Pal#&6AmwS={4Ykw%TE-Wv6xh`g1Pmxy9nxe7w ze(PI{6^cd0H#WFzsN0CzDA+i-Y3`<~O&?2mB^OJrODjs>Z{}{k_?699m0x|@lC)*8 z%%N=0R?Jr6*6Z8cw;d=~F3&F?+a9vLa|dHb$&Qyhm+ZVyVOLSNi?B>BD~Ee(8aT1AWbo&CM;EEoH56tE6@EV8X%6-*|u1-NtOIZ>P7H z9s-9XhaP{M`0e$>L5F*fu#U8SXZT%h2eqT56Y5;vIn|ZYCGC#u9zGg)w718lr{jCe z@An_mJyvsE<#^c%!il02pHAkVoIaIx>gnm^(__6$dheWxJ#(!uyl?Pq(Ao3ne9xWf z_v}A;-u3*k3(gmgUSwVDy5w-FbHIL};|Kd6ItCpEJBJ*Hx-UCj?irppeBz4xmD5+f zub#UWaP88_{E^}7QP*$YNVp-r$-DXJR{E{yw{vdK+*xxMeYfPE(!GlNn)e%iH2tw% z>L5Kn>ODH}V8MesW8ASPKV|>)e!S=*`C-L`&P4Mg+egPHeJ3wJUif(YN!F8@r^P=j z|6Kdbc>FRj6+1QlT=e|YubW?}zu5oM?q%0Dy!50Qvv` z0D$NK0Cg|`0P0`>06Lfe02gqax=}m;000SaNLh0L01FZT01FZU(%pXi0000RbVXQn zQ*UN;cVTj607GSLb9r+hQ*?D?X>TA@Z*OeDr{R1600g2*L_t(&f$iFV$lX;P2k_Tt z=3pj_da{>bH5jz`G$wfJ?DJi=kq@2d_U*&`P`?H z_W8lH566GrPk`!BurUK8iQuR0N9#hCPM9 z;Ro25WXtqS?FK^ySJfiifVbjsyl5U=zrweZe792zJH`QmtLkuU#9Gvte1FHqNp9`N zyzVhf@Riz89#`xPw&UC++a|PaD%ekORb7J1@xlptzm;VDgd9`Btl+9T7oW%LJK+5j z&Q5ZF2V9`4R^b!akmT;Fsx076tt6`IINXd^;20c+z1XdJ<|Uf*8bpjf`d23T__ziQ zHL_|+&%U*|A7>=lwGh$$JA6J?;2}-Oj^5u>I70K(FTojDgA;K=kLSM*T#(--IdN=t z!;Gvt20zCud$w)H$CBJP$1|mE;1fw6o^4-9q*YZ%;N>_Q7ij?r`|o)0t|S}Bo?!T# z_u=HeroZ6)BtM(k>Augy@J_rNk0e<)+c!yQSyhYiYEAUIAwza1S-#*2_RX_g+trl= zT@T^INq#gi{!)BWJC%>%lq5UoAeQbOog?u9d>Stu81lU&7gp6#+B>)sci_<^f1c+Y ztFZ~g7H?;7?w?>;&xVVzxYz#}-jw7XI!+#{YK6Ab=iwy#j`vm^tNDN#Jb@qLs|WMu zRdu=+46T@B*e^AIa|&M2*S;NRCiyE<%$BO^E}S`!p^xK&B)1RYSd?UMRc*ip_U+mz z4Ehk-LcA@>Zl)x-s+MZ8^^3=N?6M?Z8p5?6-{^gv>l*Awzo;K;&hs&*C-@HSeH|CK zVBPHTtGW;y4)V;w7U53q1npu9f~)Gy_~`@`|HL)gRrih#Oxmiw!;do^!FOxH$+HCy z;-n-`(!G~{gBB4zn{W@-%!Htw39hOWutmEIpJ~j9DyZqgluxe z{w1j`I4{Y=T?#%8cNv~lJyY0gpXkrw%U!?2n{ZZVgp*^pmdP!}rMR|h!Q1ef&Il*N z9{gMLDOcf}c(7~1n{oPx?x(R{EA+ibt94JBN%b3FTBT(xwrThIlUnV3^Hc(l5!cew zxI!z<{I+lGQQGle)B9Ye<=Eq3hbHhAEt^`bE$F{yuc2N%K0EIe0*~8pPG8f!a^han z{uUgK)%c87YC0JHfXkCyH!u69Ab1t-?Q7bF)OK;6@zZ>pN2WQSYXiBw-}ylmwrOU-Z6yKgoM1;Ch|5 zbNxB*rX+7)5Z@F_JZrTY)Qw60Ga=Wf@b!V__a(W0Y_3D)KLD!gGJJ8M`Q&kbv^!)3 wLsi{w|0>AX&hStZTzJ1$+rBo*1LJc153sif`|}XN$N&HU07*qoM6N<$f)O3B(f|Me diff --git a/iBox/Resources/Assets.xcassets/42pack_icon/fox/fox_page4.imageset/Contents.json b/iBox/Resources/Assets.xcassets/42pack_icon/fox/fox_page4.imageset/Contents.json deleted file mode 100644 index a772154..0000000 --- a/iBox/Resources/Assets.xcassets/42pack_icon/fox/fox_page4.imageset/Contents.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "fox4.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - }, - "properties" : { - "template-rendering-intent" : "template" - } -} diff --git a/iBox/Resources/Assets.xcassets/42pack_icon/fox/fox_page4.imageset/fox4.png b/iBox/Resources/Assets.xcassets/42pack_icon/fox/fox_page4.imageset/fox4.png deleted file mode 100644 index 352f1859245446e16b7a96567c9f14601342b0e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3900 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%0Dy!50Qvv` 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%0Dy!50Qvv` z0D$NK0Cg|`0P0`>06Lfe02gqax=}m;000SaNLh0L01FZT01FZU(%pXi0000RbVXQn zQ*UN;cVTj607GSLb9r+hQ*?D?X>TA@Z*OeDr{R1600Z<%L_t(oh27X&h}2~m$MMg* zr!tc;gXln%bg;0ZuA&R+rXW!yq3|lgpscH)6G0Fm1riZfU}a?nEiv5^WXo@?9T4a!q5+fng9EL56|~KJkRq^iU|K#rDkv`rTI7> z5kHUFIHi8vi&^+2BKA&;m6OycxRlajtj0NbHzJ;B**K*e@k8`WE-#0CX$d`PhruMbQ^{AR>OL)Vm%Z;fkW@S1gQ( zohhZBh^S4g(zrIfmL<>uf!%)>Bh=$8T4 zVh|7GnMz+ru>@PX0gUEw=V1$ODvE08DSrQse{hNHaLTITO}rctyQa(FiKrP|!uwb@ z$v&UO>-Z}oPE5_bsi_%Uuj~OIZKHi4Ret}5{rE%P!uw8xA#8-tK9RaMuJ&(tYUZJ{%`D>3t4TN&|8xawV?8Tp4s87U1j- z7~e{#<*?BsZ~wYyZsn!lj)?oKg)QMY6ZbBa4?5XfF2Ls|=XlytO=D~JV`fo4R!rT8 zYpWSiJ8<=m`s7(#iua~u{@6NzHP|Ds+Pc!aR$loiZmH(9W5SK7*vMY)!iI_4+_u(5 z#PVXy+wiH;Njf7ze~O5!s}&{!*CU^~Wpc>qREAR44lIv|ZN+5Xj*m4wbgMJBDI%7P zvU!4VvoRlw1by9ZoCp5fZJ>lLI5qpa92IOEqcO27(@N`71s=jC& zZdAiOvmH@6%}Oct;bQq_GS;=LzAd-ok$PS_!p1JSG@nsQ=?2_^7g|&adBuCNOFpA7 zHtlOV;i{|KP9mIAS}FglR*j>>a_ZGzyc?8n{jDaUyH+lx^pt!_F6XyZ_kT+Eplc%H z%Q5@w7PyqsOnfFM33Uz2ac{eP=i4e@jSfV_(71he3ml}BuEK?~2RtTcDTn2o!l{Y= e7ur>Doz{QBJhs#^hiQHQ0000f6 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%0Dy!50Qvv` z0D$NK0Cg|`0P0`>06Lfe02gqax=}m;000SaNLh0L01FZT01FZU(%pXi0000RbVXQn zQ*UN;cVTj607GSLb9r+hQ*?D?X>TA@Z*OeDr{R1600U)7L_t(oh3(i)Xk1ko#_``t z()a;d+6q!Fq9RyI#Sd_!(4}HYkQS7#R1~zjwdztt5L}h&My(4K)QuGsEuvthy3r~K zw)oY6wlRLRQjIN1Y%;Hlb0@vMxk)FJnUY8!xMc3hIp;qAdCz;^b09&cP`y!#%hN??uGHuDEPdGvHE6gV=!!@mfSYKI`C=uE*EK?Mo5yP)ey6jaURr zq7H5|b``fru{9!g%@~+c54PdiqUlrIjo)Fh!mY$XtSFj3#Dfv>bEV&Pcn4P%O^2~D zBKD`0dLp9HRp%{eHn=aHG7T?aM?`#A^jU|UxTVzR4-7=azLZj0tdU!V&#)F#XkeKP zxD&&81W#7xI*vQBXEA_L54Rk9aAVQbKu_`cH~fRkzer(6XmA;ectF$$N%8+IKi}A|eF&SP0Gt{bSw4X~aFcw}FRS^G{tlY2 zQxw;Ha{7C0iimH^jdi8qO5BHyGGuT2J{P2^;@OSjDns|0nFjlDdqj*h8*1O@Af?nV zC-XIOf?r)sx)vL7eg{E1rOz=K5l5HND(IoAhpvz+5~WoHy$$p!uWh}fG_S{)I;PJ5mw+zPD6pnMGD)Y($$zOOJ; z_XSMI1$bQE1)F0=@NPu>P5j7iiwCgS?jsoGitF+JECsA+_nw3 r6x3C?YIM)`&kyG!w^VfwZmH@&e9C*&3(olA00000NkvXXu0mjfEj9Gi diff --git a/iBox/Resources/Assets.xcassets/42pack_icon/sitting_fox/sitting_fox2.imageset/Contents.json b/iBox/Resources/Assets.xcassets/42pack_icon/sitting_fox/sitting_fox2.imageset/Contents.json deleted file mode 100644 index 9321c41..0000000 --- a/iBox/Resources/Assets.xcassets/42pack_icon/sitting_fox/sitting_fox2.imageset/Contents.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "images" : [ - { - "idiom" : "universal", - "scale" : "1x" - }, - { - "filename" : "sitting_fox2.png", - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - }, - "properties" : { - "template-rendering-intent" : "template" - } -} diff --git a/iBox/Resources/Assets.xcassets/42pack_icon/sitting_fox/sitting_fox2.imageset/sitting_fox2.png b/iBox/Resources/Assets.xcassets/42pack_icon/sitting_fox/sitting_fox2.imageset/sitting_fox2.png deleted file mode 100644 index 050be9b79d32377a2957abfa9f1a4277602f9a6b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3765 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%0Dy!50Qvv` z0D$NK0Cg|`0P0`>06Lfe02gqax=}m;000SaNLh0L01FZT01FZU(%pXi0000RbVXQn zQ*UN;cVTj607GSLb9r+hQ*?D?X>TA@Z*OeDr{R1600Y5EL_t(oh3(f{h*nh;2k_sX z87I4%+Djx+(Z$S&q8=*nO(Ii5q3|g}u*|p83WDfr5IvOj(8Zt|-7JeBA|g^M3A#W~ zL6}jRSn61LDMy=`)x$ocr|*6~9l`JqhwnT4tiAU7@3q(3Yo&KTUZ07Gn^Q`?7>SBUBBhiH zdq!Hw^tAe3C*OeFJgh2S2e2q2R@F^RsRv8(a53}=uE!SWl-#JnDWy|z8TyOoBpie7 zSc_jHVmPJL8xh0ZlADC}m{<&bfSV#>Lyg>pcn4<|L%(2FM0{I$hf_Kk_hJDCkkWxyWY+f^RUzUu9r?5OCzAt2^VFj)z$!x{!i1?z@#Y=0B$6dI)jp#Z# z#y{_t++=);sTjrx#>oU%U=tSOo*G@daV=I?jkjXmNmz*6Fd4l~M8Cnzh}hCrX9IE* zuo@Q^LnHDLf#0wTr^yMYj1fGG$0Opqb_>@Tk`u~!T#Bc0eiP9VEQyH6+UjgTF5wl- zuWDd{`wHX!h={?elT%84cpI}@h`kpP*R<8ufLyPf0he@OOUS`r{=XR;u}wb0Kg$_( z06S&R@5T=N84>@KV>G37JYK@w7VG{H5$9GSS9q--kK&dZ*&*~bAy+0@#y&awm4EjX z?ZMC_Rd4*G_Hlt(o^aLCAOOGPxLd(}9H629ck+bJuPn~mq?JEj)3#_yF&qp`p` zv`QAca8*Qn)=p9FvAh#k;}W^jFJriP`m0)75v}5R5D!MgvQ88=x(d#~jhH2qY*r~8 zZv2j=5%FB76B_n&kW%WGGuGKS4`<0lr(%X&O&l)l#DYfMNh>rZ$Nqb7ihKc+v*irD zue-$4EuM^s#Z@PDLT)sX^vSU>4=;CPVHemSw?Zo;;_u4cMyIl+>SZoo?ZVJbu}5xB zSIa%zR}rzd8%0&f^~fD6EPignFTkZkMVa!#bP0om(8!LxO|#P&0H*?nuCxlB@OZSb3=F`bRx? fgyJZf6 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%0Dy!50Qvv` z0D$NK0Cg|`0P0`>06Lfe02gqax=}m;000SaNLh0L01FZT01FZU(%pXi0000RbVXQn zQ*UN;cVTj607GSLb9r+hQ*?D?X>TA@Z*OeDr{R1600U)7L_t(oh3(i)Xk1ko#_``t z()a;d+6q!Fq9RyI#Sd_!(4}HYkQS7#R1~zjwdztt5L}h&My(4K)QuGsEuvthy3r~K zw)oY6wlRLRQjIN1Y%;Hlb0@vMxk)FJnUY8!xMc3hIp;qAdCz;^b09&cP`y!#%hN??uGHuDEPdGvHE6gV=!!@mfSYKI`C=uE*EK?Mo5yP)ey6jaURr zq7H5|b``fru{9!g%@~+c54PdiqUlrIjo)Fh!mY$XtSFj3#Dfv>bEV&Pcn4P%O^2~D zBKD`0dLp9HRp%{eHn=aHG7T?aM?`#A^jU|UxTVzR4-7=azLZj0tdU!V&#)F#XkeKP zxD&&81W#7xI*vQBXEA_L54Rk9aAVQbKu_`cH~fRkzer(6XmA;ectF$$N%8+IKi}A|eF&SP0Gt{bSw4X~aFcw}FRS^G{tlY2 zQxw;Ha{7C0iimH^jdi8qO5BHyGGuT2J{P2^;@OSjDns|0nFjlDdqj*h8*1O@Af?nV zC-XIOf?r)sx)vL7eg{E1rOz=K5l5HND(IoAhpvz+5~WoHy$$p!uWh}fG_S{)I;PJ5mw+zPD6pnMGD)Y($$zOOJ; z_XSMI1$bQE1)F0=@NPu>P5j7iiwCgS?jsoGitF+JECsA+_nw3 r6x3C?YIM)`&kyG!w^VfwZmH@&e9C*&3(olA00000NkvXXu0mjfEj9Gi diff --git a/iBox/Resources/Assets.xcassets/AppIcon.appiconset/100.png b/iBox/Resources/Assets.xcassets/AppIcon.appiconset/100.png deleted file mode 100644 index 7b88f3386b4ad78acb32239624fb50b55f10f865..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3464 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 diff --git a/iBox/Resources/Assets.xcassets/AppIcon.appiconset/1024.png b/iBox/Resources/Assets.xcassets/AppIcon.appiconset/1024.png deleted file mode 100644 index a738dda605c9240e0359fa56c2ca1476477c49b9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47451 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 LbWZ1y diff --git a/iBox/Resources/Assets.xcassets/AppIcon.appiconset/114.png b/iBox/Resources/Assets.xcassets/AppIcon.appiconset/114.png deleted file mode 100644 index 3051489f483688189b0058c3b6473a06b5a8bc3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3988 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 O08m!YkS~_Sy!jt+ob*iq diff --git a/iBox/Resources/Assets.xcassets/AppIcon.appiconset/144.png b/iBox/Resources/Assets.xcassets/AppIcon.appiconset/144.png deleted file mode 100644 index 209db6645ce48d91b38637fe3504a472c9fa19c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5166 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 agd|Uzf2j&moBVqK0%}THil5~zL;nYfjjK!m diff --git a/iBox/Resources/Assets.xcassets/AppIcon.appiconset/152.png b/iBox/Resources/Assets.xcassets/AppIcon.appiconset/152.png deleted file mode 100644 index 1d499a1e648db7bb035f9964660a006312f6b5fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5607 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 diff --git a/iBox/Resources/Assets.xcassets/AppIcon.appiconset/180.png b/iBox/Resources/Assets.xcassets/AppIcon.appiconset/180.png deleted file mode 100644 index 5c3c88bafb523a03ee4a29dceb49972647d84091..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6679 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 SxEH4fMd6)_Yz@>b?Ee9@3(9K% diff --git a/iBox/Resources/Assets.xcassets/AppIcon.appiconset/20.png b/iBox/Resources/Assets.xcassets/AppIcon.appiconset/20.png deleted file mode 100644 index 24d309eaa30080c47f9f9d6c70a7cfb1ba9d605c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 622 zcmV-!0+IcRP)Px%C`m*?R5(w)ls#w^Q51#0nVn5`lU490Zq0K@d8Y4(hBuWY;g=`f>TqOu9g0h7s{uIiX-8eH(-rO0pe~}2Xw-{y~ z_nddmn{%I`lv4c1GO9Ne~3#g`-cNl17MHClPt7c zg4Im|$i9TJv#@IoB(}k_BSKhk&gBZVrO82X-a_UhxGSLbyZ}e~z?y>Ql@M)&WCtV` z1EmVJRW1ARWq5H9YU1EIva|CGtXfg%XdP+KoxKaWA?!gu|hw_$TTEN`5}7Uj@$ z1vowgx4I#g09V_MiB(&!rWA>@9D<=6t4{ti|Rcph}!h7Eh?AoLMRNYW|z`XK;1U<4zkCq~Cb z_bh3E9ml0-&R~~K=D#mgxNVf!nNOK|LW-}kYF%IRkyp9rH~7#8)X^}5?f?J)07*qo IM6N<$f(aQEF8}}l diff --git a/iBox/Resources/Assets.xcassets/AppIcon.appiconset/29.png b/iBox/Resources/Assets.xcassets/AppIcon.appiconset/29.png deleted file mode 100644 index a1866dde7d9b567ea65843fc4ac927b20dd3b853..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 941 zcmV;e15*5nP)Px&XGugsR7gwhmRU$tQ5b-~d+#`-j#ijqq@lDBn$aH7N~;us1wB+IEo9L{_7Ef# zSVR;QL|`w1wxC2pLB6CEL{U9RCLt!YFE|gSspT?`Gjk`-oO_!wXPlc*FLhwJbMEqg z|9*ZY5C{bL%S-tW{gWQI;9e1O1u(DC)Uo;=Sbz#%02Bd^u`Iqf0@To4?}3*WAZ<6K zWI{j(MGeu-edh=Gd<|wC0o7?dkF4kjP#sXAy$afD;Y%*$os15xKLHb4A!9S7768Wg z5u6hRYFO#(hL5Mf2HbCf#U+rv26R8DTIkw(4;s$H>Rj+CkXZ`0u~G9NGF10UEBjl) zbqNxZ;n{m=S7Fx`h)W1r?CpoEdms&%mj&(~NIwLL*%GP>jfbw06KSvoTxF0j4&HXc zV`1%fSXmsB^57yg)WGswn34kSZb&~2_ME6$_Y2f;>#O_l^&|K@pr;XR4(RoO>lm5)_{#>)7W9-6$>H0|7tyy--jIlX8b7U>MZ+pxXtvkAk~PLh(zX0&LcQ@V>Ex z@Spe1CZb7bVhU_N2V*AFXoTA15T9&l zsY>mGT}PEa5t3k76zLW7zo!TC&p_tEi z-VSg$A$uLPJ%`RuQo)@SLmP=T=v@gF#eLuwOr8UEXW`CiX~oY=JgW}v4Rv^daxvIPnki@k`gh@salJtFpwB$@ezm5{UEqNQe&=y(TZ8^Qe@YyxOx zsrlSIJHz)P0eyqAZ5G$T_^jcllBoKKgPAGt%@b&>2|K{U2S>9Jm>CkbU$70PE{S^h z$3DbkO$$+z9*et@PiTU7n>k{~hQLgb%y9j~xZ& P00000NkvXXu0mjf&0?fo diff --git a/iBox/Resources/Assets.xcassets/AppIcon.appiconset/40.png b/iBox/Resources/Assets.xcassets/AppIcon.appiconset/40.png deleted file mode 100644 index ff1d8bd9b8f9fc7f523837b9ba579a1b8aec9f4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1334 zcmV-61Px(@JU2LR9Hvtn0-i{Wf;bP=Ubgeozc{0=0{&^)>^GGT~x$CW}{E&!!=rs6-5P& z{Shl%1uZIqSddW-#?Tn-kI2ZPVg%u424gi{1)FYbPO~zn$FKAC#{E9etHA8*62 zT~PiaRILOvbk6u7qfu}=;aCTpdK0c$21Q%Jy+D6&AMVruS|A4ZLEu{$HlRBMk9+_w zPXcX;Rt*RTVeeB=?Sp*4Uk8^yko;gV$4vpC4pC$RPQ41zF)-Zl)gid~aj4k{(FizQ zvstvp+IPX>Jy3TOIKtrc!xfF-%t|TL_5dyR#(#spcfsicmje!-gg*oD=!Z~PKARD1 z&fh)I{3I0R!>Tff2&+@Dcnf4-1w?@a@~}jZv=&Q)J*1I}FV07nMlmy>XH zE!^{#V$rf5nJ3!&bSoU|gzL(ndJ%*S6@j9SkXNG)Wip>wi-{SOO=7)n^g9@A0cRd~ zfu12aJOGgZ)V&N#>Sl+yyA8hH0q#6lUIZ0|5ERlzV9^Hf-!}98xqI1bQ0p!<3B#ws z>4wox7-|D&4#=U0C*bD+Fv5_t5Y}!7Z;o1eY7D-71tvzo;es2Ap&%O~0&pA(*MWZp zM8mMK6x@mRcs_&XX#_wYv~Gj5{V@p;6N>3qhmt|8-B|Ae&MZ4KKW6J5+S;e+SA|#P!AmNuo9Q`ym)O3f=|jHwU)m*?`~}lq`kP zK)>=m@i`H=WT8hq42Xn4d{Z7zw)&eqGG@Af0Y1^P8>U7t7QkF(u6I5U#n;0A_n_~H z0+U?;_1hF9Z98Cc1R_DW{6@IrS?KRp-@CjQ31IIJ%BQN=LPL{c=S&wg-3P%5xc7Ca zc}$H<2h-Z97<=Y3C|;t*n>WMJZ&b2X)y#2-dpgv@rORORUeyQw)C&7vP$68s3Dz|# zAfIoC1G^Qo5AB5O?^1o?M-Qq)$w8}X=Mvz0mBnHUBJj#pa7hJpwLx%P)#_*ns_RvV zW!&vmzyKI0f~Y*frNifljP%vp|?{v0|rcutE9-vRn35vv6G{U!7RVdTV1Co z1K{@P`3_~!l{K*GlMJ)is>@%z2K#ra!fuX9lPOjsO@d`7j+wiO+(o8sM#kk3Q84c) zF8Jp(tl0wfFU9Z1)AB+2czg(2o`#--+En%3IA$T+SJNUL3Z&?-;eFMnnZp;-uuku& zOP-kQi63>zlhD~hn*D)UObqbkK=~~il>Ob>{!U_UW4}07*qoM6N<$g1mlr`~Uy| diff --git a/iBox/Resources/Assets.xcassets/AppIcon.appiconset/50.png b/iBox/Resources/Assets.xcassets/AppIcon.appiconset/50.png deleted file mode 100644 index edd2f937f7e77871b61b5ccf1b4f069ff0b7300a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1715 zcmV;k22A;hP)Px*ZAnByRA@u(nQLs5RT#&AZMSY~w=p&bB5cf%VWI*Gj0EK}G#Ut(8H0gE)DMsd0#3#Fg-b-Eco~aE0*I(w0urZ$7+_hqrWrQPV( zw`E-n*-7?cJLf&;`9J^vb2(?0Kp+s{9vGHEApbKK2O0UF5yBuNgN($<1N|T^KVZ>+ zVzE-nnEY5{`S|uX{Q%^y&hNL6V+0}|6c)Tty%(|9; z3()^!1P>5P5{3J{4Pi>fRW3i z4tjHpXm_uW`&aE&a9>i=GX8#|3T}D9+XnMCLVh9myMnCv{b2i#v5SY{&<3!lL0Td_ zk*9AVK-}QSSMpN1JVLw$Wg8iYCXpV2SHA^3SHO~_Ja4zbsT!zh1)C2XS@6OqV0U&8 z5KkNIc?sOj;Il&R5GWW8ojwIvfTZNZNC6Tu!r2gA*3!M=ZiAM(pm!Sff~N*7b_FES z230qqstJ;kpuHI;6v6m~D)41U@Spz*D$Bt!1Uw#iAQQ$61+M|b1Ic+XyjU?J05V2H zQfkDi(mNxDo@>uR#YS+qDj*uRFd4}j!kVn>>eQv7+n^~k00{zKm#L=MFi!>n0jAHT zWWd~YFsknw)rYinHV&+Wy7Q1S1VrcBF!5etfbLd)dolbDf9p=MS{1vwlVQ;|Jrjnn zFA-uS0Q*Xy@sgrfSn6$r!`AamGi$m5w}Qxe#5h>;VK4!Nu_3awF8&DLZ&q42tNjMK5I*4MntSPu0Z2uy;?`tI>Zi1Z)1jyg{-_j*^o10OTV#O7u%P2 zpMLdoeO{I4Pws&u+tuAeid{U0H38b2;HlM6P^{!+ON@9@WJY8QF|><;%pBkYXr(RTp%+RM8aa z*i%%U(10|;{0%UpWB`DO2gML6R@0V2%QZN*Qvnmhylxnp1BIo^z@xiVo0E{NfJ+}% z_zI*AhhOB%d>-r$#o&MeNzGP1c*UTVe9^YVKAeY@e&zpu{Bg`+zVaK;+QT6QT5=GFn)u{|k04RK|$MU;jzTNro`B zb(WHvNN#1hs@T3RwPxo6sQ(j^)8N+i0Rp1Mh!6Z;Sh52idPZqk*f{$INTb)$0(0Jk znJ+6KM|Z#vTNGQ;KNT#7XWvl)UwH^VdsP9F7#lEY-3Fpxobsls++SY_iH=|kF0qg| zMJ2N8(>go)!-TgTMomz_s!jz1U4X?Mhy-lK=8*KO_1fTZDbGr0 zNwDH`U8d%qVa)-NGmIPKjcWLMt;+lT{SRT0V$Newv>7sUqIwcC4@3hK@(|HnrwUuR zo1i%kf~$;ct?`u@=aF%0YZ))lS6Vb>e) zSkZ45JCNwlit87HK;r7&7&aedBnGF&^^-wH;_BWQHos>W`4_5KJeZ@kpj-d|002ov JPDHLkV1n4V9RUCU diff --git a/iBox/Resources/Assets.xcassets/AppIcon.appiconset/57.png b/iBox/Resources/Assets.xcassets/AppIcon.appiconset/57.png deleted file mode 100644 index 3056ce6bc7bc24ab93437e252fc3ddf927d4b841..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1922 zcmV-|2YvX7P)Px+JV``BRA@u(nR#qfRTRd5Zm6iqyZ3SAo&SuWL@6l3bI&Y@asgij~ z|7hO3_nz;3-`VbHe!t((9sX!>kaq~faVGB&B8f8@XYzmKfw)}5Bg^b5wD6V%{5qO@ z5v{}{MnwZ$Q^e8PHwtn!45_;e*dehK5UFv-y4q54KO|G)X15O1 z=LMS`PVR>MRWPV4Xg#6FY^4xA8X^mc7JxLo{?AS*-3ZB@px`2$^TG>j!Rb;)X%-AK z2ch~Z_~Iq#?}A=;Lvbe|Ptxe7ae zHx#}Do^sHf4Im53;dlu+B`LaK${I*9YG-3c^>U#>vGj)C5D+vry4FSR&tWV<-NlOWmRyf2%Ju+xeoU|10xoK*L|yOb$L5s z$09hh2a?)>#{)yMpkp$4B<>|HJz!6VtOd6wA90wK%q_08bjKqA0&Q6Q7I-T_b13jq zE$Te5Cm-Biu-l>b28??jdJVZfEfo9=-^>SBJMemx+@J0X3F0)PE((*54CuD#_VvN+ zYVxH8kOp&A&juuZC-yYov6(!(E z0Iv^{oX|%)9P=^Gv8O`D2&Du8CJN}41IgC9q2@vA>0N`e0@(5fRF)W$Gl1*0OA2(8 zTTO@Ap@>#A#ge=Fb|#$3V0S3P^*EOX%G;C&)d=`%8k{6{iQ~pCg^oSd`excl3m|Rq z!(uq`9i(QLsx%1|RY$2_I+&WiD)s?2o zL0dl(2DKH?=Ls0SIAr~79;8{vPX7ek7aIL&#O12xuDRLO`N2~UW0pX_r@-d}TkyU% zbmB2H*y&wxX1DTMFqyU-M(7>%(qV)Cd61oJ#AEYAKxmLRGlGR_BD9H7{=!;lb+gZHTGx%F5iEH%?nfJ!Dw9b8IsMx< z1Sthy`c$9vph@6x-700>&?=SsrHxBSx&6Jn7Th&pbEx<;8-@Q2Na<0tpN0-S;I9Kv zS^x>jMxoYJO!a(3#Z~cfC_Dm*^4@64!~vQ8;GUsSUI=IRfg@3|*5)9EK^dur&w^YT zY=N3!-oV?;$B2>g0;!et3DEnn>jNaVhLwsoskt z#7S)?SCOZ9eAaGA?x3a)Ver?_VCw=%%Y>S%Fm)4TJq#jA$;y8pf=?$xN(NM1f$<+e z&T|Tk>?ghHiagcaORTpkNJ%1+BxY<^ax+`Oo$o0o(mKP9a+vZl3>c|mR$}hhHrOx& zQaeIrDGZ+td9OFDzjO*#k5yxpsHIIoinJu2`aA~XmMG@V9fZwuz+0~X3A+-j&n{Pv zC^-#Z&w^_g6>GX0Trgo7^nF~-m|Nz-`NJwf>1VX1T+J&*0qRPJ?^73)Zv|5D^SY&wj1Gi(<1Uc%CqWK$E&WKr-NoZYXoXw(@sWG&e@ zdl>Z2u{0nD@>XOZ&7@-SayKf3TD)V8E=W_l=5>EmkObPq=xr?y$k7McYQUnqapZE1 zt{ttqTO4Gox;KWK$C-?wvs?A3IFqgF-WYBkXEKJ)Zq=jy1>%XYgCX!h6aWAK07*qo IM6N<$f-|mwZ2$lO diff --git a/iBox/Resources/Assets.xcassets/AppIcon.appiconset/58.png b/iBox/Resources/Assets.xcassets/AppIcon.appiconset/58.png deleted file mode 100644 index 6ea7e6564e88bb332103dadc5b9fadb72e32642c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1914 zcmV-=2Zi{FP)Px+G)Y83RA@u(nF(xERTPH5c{81^l+psSC?H}5#2Ao87DWqxz@A>clpZ}bD$L90-eB1?(EeiAwV>!y`9Y!coMx%`0raKUoZfL|w?_mpVXq{1! zoQqpwMv(~6oFfu*sU3`vbd7-A#o%Zb8Afl+6&bJ*0O|!aDBK7qe}NvKKx~|$V5>6r zf#9krha(?AmrO_*1{iCEv4vp*H3Il|4-~9`vjt$wgh7+Q>jBMfEi`k?&ZVGjhxRQX zZ6YN14I6A2K#fC>yAaNN44MbZJ+R{>j9v^aJA=;)HZ3@?=DU|qz`CjMR64|pBAn1+ z7C4fPd911=+#EFnyOIk9c}5^U*meX`dcX^xgPZ`Z02Rm1od(6nA)`C^Y~U_})Zx%F z%i6}(+TIWuH4MUAuGsVx0d|Pd;J^hqkq;wgLAPPSN!XO^;f=6q4y1R2o^7B?Qo{p| z6ve6*8=N`fSP6r&n0*B8-ate%F2JtC|cK%0l=DEM@8myTN zCB^VaJ4kN{F1J#Iw-WB14)N(B=W1v`P1#=m39haKN0MSL#t!F;;ExL+<)Oz27&_zT zteR}*&4FW^Re9>&4%#+@D#Os+CD3XNw8#uuzTpAAv=WMTfjtqtUa;Gsq!M=jqe_me z6h_U5`+5Zq(A=;yzr*@>!I^|!U!Ld$iB9nNK-0ie0?nU>*5exrs8Q$iVrPR3OQG~n z&=L$u$qygwI;|X7B$wI=#x4Q7qn2wLuI+Kb+8ii63z`!WVqj1w&`ha|bW0(r544$7 zEnWT3!8>s9j0P$d7neZEL9iP@C3c4fd-LI9F~mBd^g0a6fxg*+jbzU^uxB|Wrb4Al zNw!}Ha7$?tf=!^kq0Qu)b66-}!2^{g+!f%ekj7C-^U|uCjEb>1?QrZ0oVupW$qXjz zGicsk{a+_TgMxe|SwUp8Df8))1`o9Ymq&dj>zItT9;X7b1FCC_z$wF{vgY%$dz%6yMz z!DBBP_4?*AzBy1a7%_vBJ7N6{h)Y&Mm?c4P26TPZj;dDr$U9zTSY|xBC}h0+^Bb@K z8el&8?1ma71}{_;E3@l7pk9-z2dH81+ZV#Y?;*Z9c!U8n7Atq(!jvC|aOV(nD=UOv zV_@*qdK;7Afc~`s@@7M`*41o=+@nNjpeU>OG7S3=dJGQ}s4f@j!d$RrE}Yommp@k6 zj1V|8=XG`aAUy*zXM#N@a9;Z@TfZ6k$0#QYSBYUTVp5R=5X4-1`8G5kn*^;M3}TRB ziMRK6FTvkFSYuR-NSt!#*Km9*#5Pl=y&hI{UP?7Cjm4a2DY9kbqG_~n(^0GQja8;vnmKZp9Ih0bUJJf00%a~m0`}Wi{bAb5Syr27J$k3z%w%;wIdw+8Fqf9YNR}k4pf4WR&3xz81YfH2MCB2 zuPD}pozxES=4P-9aMWjuo`u45N(HVmn79%i7*IXO`uAb)N=PuSV;WVu5|+4O_A=-; z6g*YR_9gHI8BkRT6-Cf93&t)|M?GO!q`l^KIP|013}JTqHubrvLpJ2_CRm*VNofjv zqXR83gg)b8)Vyjoj^@Ft*HoSf*ye5FjZKDBoxNO1-+Xf4fdjef zFwy8hb!U|O*GlL=LFJ+3=+=b_jGkk1s4j*3`@x{eDo1xMg){rXY368^lIW1PAgv=D z-2%U@0*9Povq*}KXWD49dfzvkJr@qkLh zkW#nSnKu#wAYdK!>sbQTQK_Hi9JT9cnbgqi-GDpZMf{0&%^b6)g9Hj`iL}g8p*p|#?7FZ$Ejac9S!zdGpm~+8=IJ>8VRY- z=GqqL2@R+}vlbT&>vank*0t9O9jHE&uew}>g&>H*`qgOYcQ;`I4I;oM@=6qF6ComE zVMG~?*j6@?iK2`)5h5ZMMwHQrZDkXg=&oV(KZm%&fQe0q-v9sr07*qoM6N<$g6k%B Ax&QzG diff --git a/iBox/Resources/Assets.xcassets/AppIcon.appiconset/60.png b/iBox/Resources/Assets.xcassets/AppIcon.appiconset/60.png deleted file mode 100644 index be3cc60c38449b36ce082393c1dc1b778b609054..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1989 zcmV;$2RitPP)Px+e@R3^RA@u(nt5zgRTRd5Z)Q53F4jt=Ky5`u5hTHo;EEXOWSQYG zL@cnZ?8Hq>pe07om7V(`x67Kfl#Lmnu|H?J*KFTU?ISyYBVn*y(6SMN6)^MyFu%(L zuleqQuc4?5swNHWeldH<0^qQcT^%fp7?1Zf6{u?|l3`1R7xMY0%||;g5i~X277c z191iop6<^yo)JQzDQJ!u;$|MVVw`Wy@y3Kt4ESuO~-!=NjnYN|8UBqUVk zfX$8eECT;7u!XtxoWA)rC?DK^0keZ=LE8aXJqxtw>n3F?H(yF-FxkV^(7bc#j0v5YO z)*@+_t_kLv16P+GVB5r7&~XTkG-`=i5NLtsmGQ%Z?e#6#)})yBNdAc;ESNM8%4DR7J>(S(L!}SK41rJ#y9QkKbnpz)0ggaroeGrMV+xy-8nB7pFB{;im!L-q zltf-nF-Fdb4{|43$_NDfeJ3e9?|pr@DPWT=>Bmuv83At@Oq{EVV;W5N57?ajt6ODiA+HRf{M=qW1e25$*We+$Y_Ov!W#zMQSO8yuZ1iHXm3Nw~L*+3b#Ta9M< z*NyO{&S8_n`2=hBP^@$K%u7_<6koWw$k#^5Jsr+-d4} z->rm}oys_vQ;(i57<(0rm;g<`!}qIHVYKA*Q_tafXIQ}akHWQ!VEm1}B3|qy zDnVvmIqJFl1Lb*TwKc(#DbR6PIk>JPDqz>hp@LrDt$=m&m8~^XS6%^&lEq(_R>J+C zDv8R5+(oc^Gc3J98H4tNaN$gt@}!=c9JOb#!H4NvvX z!!n$RRlI323>~c`|Ng_UeG`ah{!d8SI4wJm+f{x_t{(bR9oH1;<69eX1f(bp9-)es zU9d`enUkt4L6HE7Qremo>rt?_b;yIH_ilw(uI<~01#~E&HYE9J8~g+(W?GZvequ|q z@#yaa{i+T~9>?9o0Dd2aot2|LEM9u?Px;MoC0LRCr$PntN=O{wjOcLzaskRrU|j~e z400Ki83HbYGQ-c+AeTWdgEB*4d>LfgJWrOK$oBgoiy9=xXA79&cxUfhSprBKJlFwI z59F5vPCB9A6>JBO7xJ8be{2D=0FX9*s2y52Ku0;$uLB~=87Ho21fpJOSr3&xF!MnO zWCtXN0n(Zf?t^0+!P^0Q+u)M>VBRti$1(-Uykq~XaO9V;uo@y&P_q`i1sZ?8JKc4R5dyr%8rV3 z1n@%N0cd+1yoKP4LU#yW-2+P-;R|;|Bn)0(dVyx1ePa{sc@eH%1jRlpdWi&K<^xbT zTZOaO;=tt~gS7UX*bKe;Fir$b!mE`WEX_)jWT^fxc*cSL6IClz~RzoDDShJ`aYRlpQ3ira~tF%}q@h2y z0fI-tldmW)toM82Odq`SG5Gz^-v#rogRedUkqCIl5L3g>T|b0_Z$QCh2#27d4$2B4 zBmi15tAx664$NGeOChH9M~rJ-51~%*__cvzw+DhDCDcP<@cCe%2d;k%W_@<_P%xo& zs2N^)2nsbg61G>(f`Cu4REZiyhagY^H4lR);6M&@B+YApLfs0WXulFmi$1ox?d^}D zvmXL}7z#pZHQf3u@C(}#)JB%$Q5fupZL6XCw7NGGf~iH&Pzw?Jo~HmL3s9_tTK;vQ zy-6>`i~w8y8-Tjt*iRuk7~iDI&$7~c+Mu;liM9x8-zRY89nkO{2oGJD)#Mw#05org zmL@2gqSz*)TvrB{SHob~)(;Cn60!w~LB5iBfaIHL6sV~KG+MiG{0FKY!4_ghs1LNm z-V+KS6BZ)4w>$+Ea}tNcfBys9?*)IJdPW=+fELeyiz{LReLloOD#OiKpZI-gv^uE) zWQ;u93au?_<;^AZ?tC30{qby&XMA4h4#M#+@an83D>~E9oLmxC7nMRuK7@6KJ8y%qt_Vu6j<>;=2enI~?4tPZB%xBt17y(u@XzqtMx_nn zt6c_sy4OndVOf32X!c9~78-=1fyAZ?F#do|i1lrfxe}ha5Q8ER79F(dpV*jR1lN8a z=3bLhjg%ZfW<`5CVC(G=3W8rc=V1p!%qk~zSEv2qznLO0(KB&cXS>0q^^q8GL6z=N zY|Sr*#^<1@ENLbs36O}P4-UVj(rv*cRS8d|OB&>$louPI?lVcVC`o|y9Ow8x*zrA8 ztW8vaR{k8OFK`$jBb<_TcHR%I?`fK9;mm0!=^Cr=EX-1l`8 zH^IsMHlfVbLuw{tdSJ$7uBv2#O>q(vRGmpyi1`cj51@0Tx5|c4yE8MoRXG> zDFUQx6bsrk$EInS>A*v#EJ)Gr)B!TKN+&KKJM|$Pd^5h7bHJaBUSW#Rxy#f9Q<$I9 zfX-G%rG1FgblSV0g>7q~q&#;ro22xfGjQ8eaOJAhhI7MKCIbfP;kz`Fzh4K%Ww`}V z?b0uK;ssuyjb0L>ff;SF6fe- z5IrmtfWm`t!(*`cMs=Ss>E(xD?@PLY)~!!Y10?K_L7J5G_rC^tMXKVqs#-5J-2)%| z5eiF{ld{Xv_%tl|N^AfpmG3`ZQTNKI)w-_}F8>DHyh(+ZHHh=Wz&Uv0OKL$Rj77V0 z8z3(PyJ61f;LfJl){bn|h<-G0fnAS6NreJV99r`ym|7DHJ#oJMF#KY?*s=nSzNa-#=F+(=(uP3-fG|jO!~#dMln=JutJq;@(5hd<{OjTwBrJR3 z?ihpmI$`lmu=0sv4C;oTeHr9;VU&QI(*Q|07!9hw6_)>4Z|wl@?|_%qfy{_a`7c?n zybe}vfeJa90h~Sv&##8gHubE@QUbITe+#cy_sNt{H0|#@piqW*6G4Ma`Zif?+B~RU zpal1$ca`W`eUToKm@FoYlCTs89DZAAOQI|$`X<@V%3>dY?0ihPEOs6wy>k&)2g#4a z=0^gO=#gY4xujka?HRQWk}aMB2;_Vn)C4;p7`fFjGnuSZ()vh@z34O{F1?uO)fFqo zxz#xI7CdvC+BeUYIkjluKsT)3u8PVGPPL`q&70F35i*H!zJvQJ`cY3BdA-NF*xEu<^b7260nZ#QPaHtH;aTlQk>Q- z(r1MnIFs!dKz5MEfjAd@GL2Il*$c6_H=EO_Y>P)Px;_(?=TRCr$PoO^7QcNxb&=ho5!>y3gqDXne}JVx>ia;@<E4v-7b%src4f{KqqXiSdQ(Z`k} zhM5*yyaO6H!khbH`Z}064V3G6=CwCpJR& zA!zP~V`Z@PNBZ==1WfetnUzr63FToZu7iv3%$aWH0I(zwgytR4^fW}uA)bJp2jHr2 z!;Hm{Nlf7xaF5nQfUNXh%Td|F3{Epo0mgX1ZGcxxVXD~7J-^o5H9yz&pZaqoM_`S z(6SxE7eO)(MPYdTG`#T+%)Ali-!nWdv)c97weZ>wm~jbQRt?>82!3~D|O$s`0_27qJ&f+0BiGHkgQf~9cz z`(Sc~229*C6@zdU)I0#eB2QW7Az+4G?T6sxdi@}xA%dg0h4 zyJS-hxKa>{!f$Vfv;Tom5qxSARFoQ*RKZ`bbMZHzbh@W3^A0fUCTF&Q{0fiN>{9y= zKr{}!k3u2y(&%0KyJ2c2T>gHeUpDFnAQgq;DKP0CC){;x;~~T3Afra`TeaXT))~M= z_}^-RgQs*55Vz@Ug@vo&!wUv>P3wvWx5Caxp|o6sEFxbw5o)Wl02YHtwHAK07jG_) z0JC*ty9O-LZW7Zpz=UC^+F)OU4g$iKL>xw41YdX(MwMl+0+bF0praX{x(&KJbd;3C zh^Jt74OEX#6MQ53sW^nobUqf8QpuY-c4&avXw|pGNpu*%+A;xCvLX*1Gs185Mjl*P zR<{JM`<5wZ`XsX|Ne#fxN8pWZP*SGZsG@H`3w}vNYhuqOE-8SOL(OWFTBLn!4?(qq z++9NeEbXKeaE1Z0ZZZb%J_M5KOSWxYvgdSDu;&=GMKyqm3;~FB!IJO8q?wtyna$Jw z{VHs^4~j+`y+gCBtQh7@Nn0mf!@40d0c!5=EyHBLD(@S5%gG&J_O#Fc7hd@_oPH~9 zv*x7Y&AL|1dIg{>)+eF~8xjyHfzef&EVJviH9@?qkDD8Y6{jCe`l6;p3Rm>mNdP8% z2xfl?##Co#^#G)E4w%hxB!_zXZfH89PrQdkb`=ry0jMsYz2{>CnrK?z&xFJ(!4+oo zc{5Apu>-uVr9O+l7qDm>Ot=(oTCX+KGTni9ItR=~s(tmadlQTu4~bZoC8Q<0;8m?IZA6w=sd3Fw%O&qs>4-WqgiY1fp&-EM})rB;X zU?X|pM;5~M_ql2}IR~t#EO|of*Vt-^XJgofM8e_P;Ru{>)a99InTztwIbe1wBL%ON zChg5oR64MRINbk;nyI?BT}#R`BP}ZMJ4-Q~1EyreM)!<2;t)V(=^#%T$+h>FhRzA!<$+S4>0N1OAr0| zAHtT^FlM|ikMijXMxgC9EO{8NU7=?TvgaXQ-T=1iaoF)Fj2@>qluws{)7}J&9)NjY z%@e?0+z8tr&TqgzyBe;#!v}0oGFyff6kt+{NH#6$hdh9^ZTc$!du*kLX1|vWmVj>6 zC<&0C`>`!Zz$9Oj9=tqY=Q;gzw(f&~*wxmXC&~A0&Xj?f>265IULwQdgwEbo=b=v} zUT}cLyJ7BaaK%yxh2hXncwvKS1e#W}O(G@vz4|VgA)_(ipMQZ}n;;~1>CHhI=7!ec^seMnuAMfpLH(T4qt6{E;#nP@9 zO$3&~hcHQ)Da`x)|5KTnH)YyBw-$Ckp@$?&0>rINlq?txyL$&ze84bDTuFL*QTXwE zkWQ*huGKJPG^~8Sx1ndDXg>q%uh(sC_1;7j$|h=C0b2FLOfuSZ6n?VE3`q)#VFFB2 zcS=|6fUy%y9cLa+gjzsoJ*le$X+)M*z{;Jvi)%|R0iyG)wiQ;%{RB7}{>puAZD{M* z))TPdGnqP8FbuP9w&Wq0{l!ezIsA91U!FG9Fm879<50Ia(^lU9`u)mY_Z2X^J7M{6 zp!Ukl@!6gyVe5k${K9id6Ul@Xiywr`7HU^HvKRhzzwW0=BhPjW#4ROy3c%Aot${fF z0{nTEo<&N)u(l%d($A7|XX-4STD-muo?D|+mh=c*Fbor(2pi<2W1UbrSp#$)`f(`rGraksO zdl7cI1T58S%QEG#I;U*qEl1laDTF+1*H2;Fx`AuSbRi$Cp7GLF*evdU!y26rUf6Dh zc^goY(fThNvCX$`g}jb%7H+MF=~ufNcw{ZehWFnv82U#$VB;caIj$pLzO;Bm@MUOQ zeF@yPRlBV!7@Q3}asZe}jEPE;Dr~-03%X2`F8C$Wp*FpX<@HcI*V%h$gY0{F4McnM zbkMf0fyN^jekdXbH-4H^v5yeldS1#&L1hhm zaIT4--u-hO?*J1_y!>}WUSaI%q0RY&3%UXfVo7#rMb^AA262) gxHR_}<`S^~0RYc8XmIdY+yDRo07*qoM6N<$g6dJ>0ssI2 diff --git a/iBox/Resources/Assets.xcassets/AppIcon.appiconset/80.png b/iBox/Resources/Assets.xcassets/AppIcon.appiconset/80.png deleted file mode 100644 index 3e16efc292ff12b993ae73722b971771e6d8d78f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2662 zcmV-s3YqnZP)Pxga9G(Foq;fsbCd4icVX=2~vunwGORxic;%T ztfHktJFSeiR!d6#1Ey2yAgBzqwIDNP2DR9VR>cB}I<3Xbv{ony~WVqSaNrnMRsZkUcf!eJwayASp1><9fm1w9AXsd_DH=z7m z=Ckz}G6O$@0A=8&In{4~Pj^Dw4KV#7FwEIu6VrXZy&8tU3uEWP=(|mikvZ3qIe>aX z^;@9vH7F>BUHhTB1}d+07NUOE;eD{@aj2dI9cN(VTo^Uq*=O|^%UpmcW!dpgW>K+PQQe?`?v&*2A=`U|cZ-#f1dHe<@Tf2Txu`G63fR zYV|ekfx1nQHx#Wm3 zT?E6vVDDLdykzGA8X*>_T@9Uwz!OlxM51n281@{8mh&)vI^4R_-lR0Z?LUSi@4>L) zFufA|K9vjNh3*b0oCxJh)i@l^LmdWa4lsCHnQ!mGN-*4W44Q)wYJr=dfGcJW%#^k1 z9(WaAtpR^AlmuXEC3N@Rsr5j`qu?LqI7DXwTFtk96ZnQIg~=s~5M})1Q#jECzHTTi zfjgdsK(V?f)!a~TWp^~e=0(ueVx*c>mcTV-5Ddrql5{E324n8Yh#6-FprkHMZ^Q%4 z&x23Sz(=Q{AOLNRaP54UA-Q1$JShegt-imlf`4s?Atlh+1(Pp@&y*$r*a{jQA+F!&2&QT~Q1DD?O8fgXrrr`Ndn3$Ps?0fAZm7R||BvwZwaRqG^hJHc12C;B!6XHs zyWqqxA$;ESX_km6zls^ZUkj&N)bCN5U^n>kR6r>n zlQ^|8OxFkJYhlax%;$*Yy3cqMv013p}o ztRQf*210f53KZahJlJ2S{z*`g&qRft%`mm zt6Z~3G&dEPUk+u<6ZdVSxM5F$jmM#})-qtzj2pH=xFIpXJRh8CgF|OkAkhL9{}<|j zsj{A}GF50wNf$^P4#B${z&|9G9?30Y!sAP!)LenY0StkE3|unL5=6`gj~E9f;|A;- z(*!6^T*eTAUB89>J0Kj4f4EmxA4%$chVM)Cy+q}9a}|-uUOWok1?rZ2Bq$|4>L}~; zuJ}�xW zLmue(Um-vMO8#c3CC5()%bX+_6%2!g8zC?>tz-?&u{e zA_&P;`p#K^lIlph(A63<8(DMe&wEQr*9K+7NiNCN`~`^%7rKwm7WKVA>Z|XZ1Sk`X zgcXR-&4x=Zhlay&@HO?BtVOMLJb@?sykoC~2{$SzAHNB8|50G9N;LWosiKDTErnP~ zr;NU3nc1uF+yf}967wwJg0*l(bxdmlWy^!Hy$vZ+$OJo@VbU!yf3;GcT){Tjx)cuX zR8;c~byP%O2VaL5mRQaPnqTA`Kt13Y55n9>Vrnrqk^Hb@1-vb(Pl?)^ zluEZiTlTujCq-R`O8wAu8h$f7)`t{!B_Pav2yXgGeBUqs9QJHbJ9paO<|M%O^KjP& znD}J{LnfgobYLeuf3LYcDL%3dDyP7Gf9kog*R{yCx53GOtIc$yHrWK<*%VW@weOE! zfz6Bm4*-fv=KTu3c$eBg5x*opF)ttXZh{vdRk@?6Qob)KhozuET(AM%TOMpl`u_`+%Tz*Te9Wkbn`FAWP(qsxrF~g`-NvR`ptyX+TV|@0>t+&0{JyU!*ettq>*U z`12F$)K)fKvJZ0W UTs@=|Hvj+t07*qoM6N<$f`4)KdjJ3c diff --git a/iBox/Resources/Assets.xcassets/AppIcon.appiconset/87.png b/iBox/Resources/Assets.xcassets/AppIcon.appiconset/87.png deleted file mode 100644 index 1bee41f855b9899c80f421f81763d26f662fb58b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3025 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 GjQbBM$iOWC diff --git a/iBox/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json b/iBox/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json index 4fdf882..13613e3 100644 --- a/iBox/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/iBox/Resources/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,153 +1,8 @@ { "images" : [ { - "filename" : "40.png", - "idiom" : "iphone", - "scale" : "2x", - "size" : "20x20" - }, - { - "filename" : "60.png", - "idiom" : "iphone", - "scale" : "3x", - "size" : "20x20" - }, - { - "filename" : "29.png", - "idiom" : "iphone", - "scale" : "1x", - "size" : "29x29" - }, - { - "filename" : "58.png", - "idiom" : "iphone", - "scale" : "2x", - "size" : "29x29" - }, - { - "filename" : "87.png", - "idiom" : "iphone", - "scale" : "3x", - "size" : "29x29" - }, - { - "filename" : "80.png", - "idiom" : "iphone", - "scale" : "2x", - "size" : "40x40" - }, - { - "filename" : "120.png", - "idiom" : "iphone", - "scale" : "3x", - "size" : "40x40" - }, - { - "filename" : "57.png", - "idiom" : "iphone", - "scale" : "1x", - "size" : "57x57" - }, - { - "filename" : "114.png", - "idiom" : "iphone", - "scale" : "2x", - "size" : "57x57" - }, - { - "filename" : "120.png", - "idiom" : "iphone", - "scale" : "2x", - "size" : "60x60" - }, - { - "filename" : "180.png", - "idiom" : "iphone", - "scale" : "3x", - "size" : "60x60" - }, - { - "filename" : "20.png", - "idiom" : "ipad", - "scale" : "1x", - "size" : "20x20" - }, - { - "filename" : "40.png", - "idiom" : "ipad", - "scale" : "2x", - "size" : "20x20" - }, - { - "filename" : "29.png", - "idiom" : "ipad", - "scale" : "1x", - "size" : "29x29" - }, - { - "filename" : "58.png", - "idiom" : "ipad", - "scale" : "2x", - "size" : "29x29" - }, - { - "filename" : "40.png", - "idiom" : "ipad", - "scale" : "1x", - "size" : "40x40" - }, - { - "filename" : "80.png", - "idiom" : "ipad", - "scale" : "2x", - "size" : "40x40" - }, - { - "filename" : "50.png", - "idiom" : "ipad", - "scale" : "1x", - "size" : "50x50" - }, - { - "filename" : "100.png", - "idiom" : "ipad", - "scale" : "2x", - "size" : "50x50" - }, - { - "filename" : "72.png", - "idiom" : "ipad", - "scale" : "1x", - "size" : "72x72" - }, - { - "filename" : "144.png", - "idiom" : "ipad", - "scale" : "2x", - "size" : "72x72" - }, - { - "filename" : "76.png", - "idiom" : "ipad", - "scale" : "1x", - "size" : "76x76" - }, - { - "filename" : "152.png", - "idiom" : "ipad", - "scale" : "2x", - "size" : "76x76" - }, - { - "filename" : "167.png", - "idiom" : "ipad", - "scale" : "2x", - "size" : "83.5x83.5" - }, - { - "filename" : "1024.png", - "idiom" : "ios-marketing", - "scale" : "1x", + "idiom" : "universal", + "platform" : "ios", "size" : "1024x1024" } ], diff --git a/iBox/Resources/Assets.xcassets/LaunchIcon.imageset/Contents.json b/iBox/Resources/Assets.xcassets/LaunchIcon.imageset/Contents.json deleted file mode 100644 index ed1ff73..0000000 --- a/iBox/Resources/Assets.xcassets/LaunchIcon.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "filename" : "LaunchIcon.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/iBox/Resources/Assets.xcassets/LaunchIcon.imageset/LaunchIcon.png b/iBox/Resources/Assets.xcassets/LaunchIcon.imageset/LaunchIcon.png deleted file mode 100644 index d17824a0719d77607194d4081b2d57819ccfaa10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47803 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
FmnPksAb`9n1mvXR+ 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⪙!$x}pihTVbK%$nZohE-Qj8?g%EBlCkE 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

mm zV!#9HU8GXDZfA9b2dHJphy>dBu15OR%9hQ{phd+02!jsG#Rr{noiLR&wjDG zW#PKa+cp>$cL(@c7$_M=F)lHXk?9UrUQI2`5HX pivRDT|NHsh75M+J0F)2MeP;BuUc>(5{{a3kP}l$f diff --git a/iBox/Resources/Assets.xcassets/Logo/128.imageset/128 1.png b/iBox/Resources/Assets.xcassets/Logo/128.imageset/128 1.png deleted file mode 100644 index 077d76c18344fce066fb9f879587ff94f3e58f46..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7717 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%0DW1XigtH6nYJOby#a+0 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 diff --git a/iBox/Resources/Assets.xcassets/Logo/32.png b/iBox/Resources/Assets.xcassets/Logo/32.png deleted file mode 100644 index 7a1538725118315a4665ccd61787a1981cf64ee8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1196 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 LbWZ1y diff --git a/iBox/Resources/Assets.xcassets/playstore.imageset/Contents.json b/iBox/Resources/Assets.xcassets/playstore.imageset/Contents.json deleted file mode 100644 index 861f456..0000000 --- a/iBox/Resources/Assets.xcassets/playstore.imageset/Contents.json +++ /dev/null @@ -1,21 +0,0 @@ -{ - "images" : [ - { - "filename" : "playstore.png", - "idiom" : "universal", - "scale" : "1x" - }, - { - "idiom" : "universal", - "scale" : "2x" - }, - { - "idiom" : "universal", - "scale" : "3x" - } - ], - "info" : { - "author" : "xcode", - "version" : 1 - } -} diff --git a/iBox/Resources/Assets.xcassets/playstore.imageset/playstore.png b/iBox/Resources/Assets.xcassets/playstore.imageset/playstore.png deleted file mode 100644 index 77b84329bccadd806d247bc9ea5d3947558b2bca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 24441 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%0AAZ+^FR`v_crAA{9sA2 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 - - - - - - - - - - - - - - + + \ No newline at end of file diff --git a/iBox/Sources/AddBookmark/AddBookmarkView.swift b/iBox/Sources/AddBookmark/AddBookmarkView.swift deleted file mode 100644 index e8d7d99..0000000 --- a/iBox/Sources/AddBookmark/AddBookmarkView.swift +++ /dev/null @@ -1,312 +0,0 @@ -// -// AddBookmarkView.swift -// iBox -// -// Created by jiyeon on 1/5/24. -// - -import UIKit -import Combine - -import SkeletonView -import SnapKit - -class AddBookmarkView: UIView { - - var cancellables = Set() - - var onButtonTapped: (() -> Void)? - var onTextChange: ((Bool) -> Void)? - - var selectedFolderName: String? { - didSet { - selectedFolderLabel.text = selectedFolderName - } - } - - // MARK: - UI Components - - private let textFieldView: UIView = UIView().then { - $0.backgroundColor = UIColor.backgroundColor - $0.layer.cornerRadius = 20 - $0.clipsToBounds = true - } - - private let nameTextViewPlaceHolder = UILabel().then { - $0.text = "뢁마크 이름" - $0.font = .cellTitleFont - $0.textColor = .systemGray3 - $0.isSkeletonable = true - $0.isHiddenWhenSkeletonIsActive = true - } - - let nameTextView = UITextView().then { - $0.backgroundColor = .clear - $0.layer.borderWidth = 0 - $0.textContainerInset = UIEdgeInsets(top: 7, left: 0, bottom: 0, right: 0) - $0.font = .cellTitleFont - $0.textColor = .label - $0.isScrollEnabled = true - $0.keyboardType = .default - $0.autocorrectionType = .no - $0.isSkeletonable = true - $0.skeletonTextLineHeight = .fixed(20) - $0.skeletonPaddingInsets = .init(top: 5, left: 0, bottom: 5, right: 0) - } - - private let clearButton = UIButton().then { - $0.setImage(UIImage(systemName: "xmark.circle.fill"), for: .normal) - $0.tintColor = .systemGray3 - $0.isHidden = true - } - - private let separatorView = UIView().then { - $0.backgroundColor = .systemGray3 - } - - private let urlTextViewPlaceHolder = UILabel().then { - $0.text = "URL" - $0.font = .cellTitleFont - $0.textColor = .systemGray3 - $0.isSkeletonable = true - $0.isHiddenWhenSkeletonIsActive = true - } - - let urlTextView = UITextView().then { - $0.backgroundColor = .clear - $0.layer.borderWidth = 0 - $0.textContainerInset = UIEdgeInsets(top: 7, left: 0, bottom: 0, right: 0) - $0.font = .cellTitleFont - $0.textColor = .label - $0.isScrollEnabled = true - $0.keyboardType = .URL - $0.autocorrectionType = .no - $0.isSkeletonable = true - $0.skeletonTextLineHeight = .fixed(20) - $0.skeletonTextNumberOfLines = 2 - $0.skeletonPaddingInsets = .init(top: 5, left: 0, bottom: 5, right: 0) - } - - private let button = UIButton(type: .custom).then { - $0.backgroundColor = UIColor.backgroundColor - $0.layer.cornerRadius = 10 - $0.clipsToBounds = true - $0.titleLabel?.font = .cellTitleFont - $0.isEnabled = true - } - - private let buttonLabel = UILabel().then { - $0.text = "λͺ©λ‘" - $0.font = .cellTitleFont - $0.textColor = .label - } - - let selectedFolderLabel = UILabel().then { - $0.font = .descriptionFont - $0.textColor = .systemGray - $0.textAlignment = .right - } - - private let chevronImageView = UIImageView().then { - let config = UIImage.SymbolConfiguration(pointSize: 15, weight: .medium, scale: .default) - let image = UIImage(systemName: "chevron.forward", withConfiguration: config)?.withRenderingMode(.alwaysTemplate) - $0.image = image - $0.tintColor = .systemGray3 - $0.contentMode = .scaleAspectFit - } - - // MARK: - Initializer - - override init(frame: CGRect) { - super.init(frame: frame) - setupProperty() - setupHierarchy() - setupLayout() - setupBindings() - } - - required init?(coder: NSCoder) { - super.init(coder: coder) - } - - deinit { - AddBookmarkManager.shared.incomingTitle = nil - AddBookmarkManager.shared.incomingData = nil - AddBookmarkManager.shared.incomingFaviconUrl = nil - AddBookmarkManager.shared.incomingError = nil - } - - // MARK: - Setup Methods - - private func setupProperty() { - backgroundColor = .systemGroupedBackground - clearButton.addTarget(self, action: #selector(clearTextView), for: .touchUpInside) - button.addTarget(self, action: #selector(buttonTapped), for: .touchUpInside) - nameTextView.delegate = self - urlTextView.delegate = self - - isSkeletonable = true - } - - private func setupHierarchy() { - addSubview(textFieldView) - addSubview(nameTextView) - addSubview(clearButton) - addSubview(separatorView) - addSubview(urlTextView) - addSubview(nameTextViewPlaceHolder) - addSubview(urlTextViewPlaceHolder) - addSubview(button) - addSubview(buttonLabel) - addSubview(selectedFolderLabel) - addSubview(chevronImageView) - } - - private func setupLayout() { - - textFieldView.snp.makeConstraints { make in - make.top.equalToSuperview().offset(70) - make.height.equalTo(150) - make.leading.equalToSuperview().offset(20) - make.trailing.equalToSuperview().offset(-20) - } - - nameTextView.snp.makeConstraints { make in - make.top.equalTo(textFieldView.snp.top).offset(10) - make.leading.equalTo(textFieldView.snp.leading).offset(15) - make.trailing.equalTo(clearButton.snp.leading) - make.height.equalTo(30) - } - - nameTextViewPlaceHolder.snp.makeConstraints { make in - make.top.equalTo(nameTextView.snp.top).offset(7) - make.leading.equalTo(nameTextView.snp.leading).offset(5) - } - - clearButton.snp.makeConstraints { make in - make.top.equalTo(nameTextView.snp.top).offset(7) - make.trailing.equalTo(textFieldView.snp.trailing).offset(-15) - make.width.height.equalTo(24) - } - - separatorView.snp.makeConstraints { make in - make.top.equalTo(nameTextView.snp.bottom).offset(10) - make.leading.equalTo(nameTextView.snp.leading).offset(5) - make.trailing.equalTo(textFieldView.snp.trailing).offset(-15) - make.height.equalTo(1) - } - - urlTextView.snp.makeConstraints { make in - make.top.equalTo(separatorView.snp.bottom).offset(10) - make.leading.trailing.equalTo(nameTextView) - make.bottom.equalTo(textFieldView.snp.bottom).offset(-10) - } - - urlTextViewPlaceHolder.snp.makeConstraints { make in - make.top.equalTo(urlTextView.snp.top).offset(7) - make.leading.equalTo(urlTextView.snp.leading).offset(5) - } - - button.snp.makeConstraints { make in - make.top.equalTo(textFieldView.snp.bottom).offset(20) - make.leading.equalToSuperview().offset(20) - make.trailing.equalToSuperview().offset(-20) - make.height.equalTo(50) - } - - buttonLabel.snp.makeConstraints { make in - make.leading.equalTo(button.snp.leading).offset(20) - make.centerY.equalTo(button.snp.centerY) - make.height.equalTo(40) - } - - selectedFolderLabel.snp.makeConstraints { make in - make.trailing.equalTo(chevronImageView.snp.leading).offset(-10) - make.centerY.equalTo(button.snp.centerY) - make.height.equalTo(40) - make.width.equalTo(200) - } - - chevronImageView.snp.makeConstraints { make in - make.trailing.equalTo(button.snp.trailing).offset(-20) - make.centerY.equalTo(button.snp.centerY) - make.width.height.equalTo(15) - } - - } - - private func setupBindings() { - AddBookmarkManager.shared.$incomingTitle - .receive(on: DispatchQueue.main) - .sink { [weak self] title in - self?.nameTextView.text = title - self?.nameTextViewPlaceHolder.isHidden = !(title?.isEmpty ?? true) - self?.clearButton.isHidden = title?.isEmpty ?? true - self?.updateTextFieldsFilledState() - } - .store(in: &cancellables) - - AddBookmarkManager.shared.$incomingData - .receive(on: DispatchQueue.main) - .sink { [weak self] url in - self?.urlTextView.text = url - self?.urlTextViewPlaceHolder.isHidden = !(url?.isEmpty ?? true) - self?.updateTextFieldsFilledState() - } - .store(in: &cancellables) - } - - func updateTextFieldsFilledState() { - let isBothTextViewsFilled = !(nameTextView.text?.isEmpty ?? true) && !(urlTextView.text?.isEmpty ?? true) - onTextChange?(isBothTextViewsFilled) - } - - @objc func clearTextView() { - nameTextView.text = "" - textViewDidChange(nameTextView) - nameTextView.becomeFirstResponder() - } - - @objc private func buttonTapped() { - onButtonTapped?() - } - - override func touchesBegan(_ touches: Set, with event: UIEvent?) { - self.endEditing(true) - } -} - -extension AddBookmarkView: UITextViewDelegate { - func textViewDidBeginEditing(_ textView: UITextView) { - let textLength: Int = textView.text.count - textView.selectedRange = NSRange(location: textLength, length: 0) - } - - func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool { - if text == "\n" { - if textView == nameTextView { - urlTextView.becomeFirstResponder() - } else if textView == urlTextView { - textView.resignFirstResponder() - } - return false - } - return true - } - - func textViewDidChange(_ textView: UITextView) { - - let isBothTextViewsFilled = !nameTextView.text.isEmpty && !urlTextView.text.isEmpty - onTextChange?(isBothTextViewsFilled) - - if textView == nameTextView { - nameTextViewPlaceHolder.isHidden = !nameTextView.text.isEmpty - clearButton.isHidden = nameTextView.text.isEmpty - } - - if textView == urlTextView { - urlTextViewPlaceHolder.isHidden = !urlTextView.text.isEmpty - } - - } -} diff --git a/iBox/Sources/AddBookmark/AddBookmarkViewController.swift b/iBox/Sources/AddBookmark/AddBookmarkViewController.swift deleted file mode 100644 index 0388234..0000000 --- a/iBox/Sources/AddBookmark/AddBookmarkViewController.swift +++ /dev/null @@ -1,226 +0,0 @@ -// -// AddBookmarkViewController.swift -// iBox -// -// Created by jiyeon on 1/5/24. -// - -import Combine -import UIKit - -import SkeletonView - -protocol AddBookmarkViewControllerProtocol: AnyObject { - func addFolderDirect(_ folder: Folder) - func addBookmarkDirect(_ bookmark: Bookmark, at folderIndex: Int) -} - -final class AddBookmarkViewController: UIViewController { - weak var delegate: AddBookmarkViewControllerProtocol? - - var cancellables = Set() - - var haveValidInput = false - var selectedFolder: Folder? - var selectedFolderIndex: Int? - var folders = [Folder]() - - let addBookmarkView = AddBookmarkView() - - override func loadView() { - super.loadView() - setupAddBookmarkView() - } - - override func viewWillAppear(_ animated: Bool) { - super.viewWillAppear(animated) - updateSelectedFolder() - addBookmarkView.updateTextFieldsFilledState() - } - - override func viewDidLoad() { - super.viewDidLoad() - setupNavigationBar() - updateSelectedFolder() - addBookmarkView.nameTextView.becomeFirstResponder() - setupBindings() - - view.isSkeletonable = true - } - - private func setupNavigationBar() { - let appearance = UINavigationBarAppearance() - appearance.configureWithTransparentBackground() - appearance.titleTextAttributes = [.font: UIFont.subTitlefont] - - navigationController?.navigationBar.tintColor = .box - navigationController?.navigationBar.standardAppearance = appearance - navigationController?.navigationBar.compactAppearance = appearance - navigationController?.navigationBar.scrollEdgeAppearance = appearance - - title = "μƒˆλ‘œμš΄ 뢁마크" - - navigationItem.leftBarButtonItem = UIBarButtonItem(title: "μ·¨μ†Œ", style: .plain, target: self, action: #selector(cancelButtonTapped)) - navigationItem.rightBarButtonItem = UIBarButtonItem(title: "μΆ”κ°€", style: .plain, target: self, action: #selector(addButtonTapped)) - navigationItem.rightBarButtonItem?.isEnabled = false - - let attributes: [NSAttributedString.Key: Any] = [ - .font: UIFont.barItemFont - ] - navigationItem.leftBarButtonItem?.setTitleTextAttributes(attributes, for: .normal) - navigationItem.rightBarButtonItem?.setTitleTextAttributes(attributes, for: .normal) - navigationItem.rightBarButtonItem?.setTitleTextAttributes(attributes, for: .disabled) - } - - private func setupAddBookmarkView() { - addBookmarkView.onButtonTapped = { [weak self] in - self?.openFolderSelection() - } - addBookmarkView.onTextChange = { [weak self] isEnabled in - self?.haveValidInput = isEnabled - - if let haveValidInput = self?.haveValidInput, - haveValidInput, - let _ = self?.selectedFolder { - self?.navigationItem.rightBarButtonItem?.isEnabled = true - } else { - self?.navigationItem.rightBarButtonItem?.isEnabled = false - } - } - view = addBookmarkView - } - - private func updateSelectedFolder() { - folders = CoreDataManager.shared.getFolders() - let selectedFolderId = UserDefaultsManager.selectedFolderId - - for (index, folder) in folders.enumerated() { - if folder.id == selectedFolderId { - selectedFolder = folder - selectedFolderIndex = index - } - } - - if selectedFolder == nil && !folders.isEmpty { - selectedFolder = folders[0] - selectedFolderIndex = 0 - } - - if let selectedFolder { - addBookmarkView.selectedFolderName = selectedFolder.name - } else { - addBookmarkView.selectedFolderName = "μ„ νƒλœ 폴더가 μ—†μŠ΅λ‹ˆλ‹€." - } - } - - private func setupBindings() { - AddBookmarkManager.shared.$isFetching - .receive(on: DispatchQueue.main) - .sink { [weak self] isFetching in - if isFetching { - self?.view.hideSkeleton() - self?.view.showAnimatedGradientSkeleton() - } else { - self?.view.hideSkeleton() - } - } - .store(in: &cancellables) - - AddBookmarkManager.shared.$incomingError - .receive(on: DispatchQueue.main) - .sink { [weak self] error in - guard error != nil else { return } - let alert = UIAlertController(title: "였λ₯˜", message: "ν•΄λ‹Ή URL을 κ°€μ Έμ˜¬ 수 μ—†μŠ΅λ‹ˆλ‹€", preferredStyle: .alert) - let okAction = UIAlertAction(title: "확인", style: .default) { _ in - AddBookmarkManager.shared.isFetching = false - } - alert.addAction(okAction) - self?.present(alert, animated: true) - } - .store(in: &cancellables) - } - - @objc private func cancelButtonTapped() { - - let isTextFieldsEmpty = addBookmarkView.nameTextView.text?.isEmpty ?? true && addBookmarkView.urlTextView.text?.isEmpty ?? true - - if isTextFieldsEmpty { - self.dismiss(animated: true, completion: nil) - } else { - let alertController = UIAlertController(title: nil, message: "변경사항 폐기", preferredStyle: .alert) - - - let discardAction = UIAlertAction(title: "예", style: .destructive) { [weak self] _ in - self?.dismiss(animated: true, completion: nil) - } - - let cancelAction = UIAlertAction(title: "μ•„λ‹ˆμ˜€", style: .cancel) - - alertController.addAction(discardAction) - alertController.addAction(cancelAction) - - present(alertController, animated: true, completion: nil) - } - } - - @objc private func addButtonTapped() { - guard let name = addBookmarkView.nameTextView.text, !name.isEmpty, - var urlString = addBookmarkView.urlTextView.text, !urlString.isEmpty else { - print("Invalid input") - return - } - - let lowercasedUrlString = urlString.lowercased() - if !lowercasedUrlString.hasPrefix("https://") && !lowercasedUrlString.hasPrefix("http://") { - urlString = "https://" + urlString - } - - var allowedCharacters = CharacterSet.urlQueryAllowed - allowedCharacters.insert("#") - - guard let encodedUrlString = urlString.addingPercentEncoding(withAllowedCharacters: allowedCharacters), - let url = URL(string: encodedUrlString) else { - print("Invalid URL format") - return - } - - let newBookmark = Bookmark(id: UUID(), name: name, url: url) - - if let selectedFolder = selectedFolder, - let selectedFolderIndex = selectedFolderIndex { - CoreDataManager.shared.addBookmark(newBookmark, folderId: selectedFolder.id) - delegate?.addBookmarkDirect(newBookmark, at: selectedFolderIndex) - } else { - print("μ„ νƒλœ 폴더가 μ—†μŠ΅λ‹ˆλ‹€.") - } - - self.dismiss(animated: true, completion: nil) - } - - private func openFolderSelection() { - let folderListViewController = FolderListViewController(folders: folders, selectedId: selectedFolder?.id) - folderListViewController.title = "λͺ©λ‘" - folderListViewController.delegate = self - - navigationController?.pushViewController(folderListViewController, animated: true) - } - -} - -extension AddBookmarkViewController: FolderListViewControllerDelegate { - func addFolder(_ folder: Folder) { - delegate?.addFolderDirect(folder) - } - - func selectFolder(_ folder: Folder, at index: Int) { - selectedFolder = folder - selectedFolderIndex = index - - if haveValidInput { - navigationItem.rightBarButtonItem?.isEnabled = true - } - - addBookmarkView.selectedFolderName = selectedFolder?.name - } - -} diff --git a/iBox/Sources/AddBookmark/FolderListCell.swift b/iBox/Sources/AddBookmark/FolderListCell.swift deleted file mode 100644 index 8e86e22..0000000 --- a/iBox/Sources/AddBookmark/FolderListCell.swift +++ /dev/null @@ -1,88 +0,0 @@ -// -// FolderListCell.swift -// iBox -// -// Created by μ΅œμ’…μ› on 3/7/24. -// - -import UIKit - -class FolderListCell: UITableViewCell { - - static let reuseIdentifier = "ListCell" - - // MARK: - UI Components - - private let folderImageView = UIImageView().then { - $0.image = UIImage(systemName: "folder.fill") - $0.contentMode = .scaleAspectFit - $0.tintColor = .gray - } - - let folderNameLabel = UILabel().then { - $0.textColor = .label - $0.font = .cellTitleFont - } - - private let checkImageView = UIImageView().then { - let config = UIImage.SymbolConfiguration(pointSize: 14, weight: .semibold, scale: .default) - $0.image = UIImage(systemName: "checkmark", withConfiguration: config) - $0.contentMode = .scaleAspectFit - $0.tintColor = .box - $0.isHidden = true - } - - // MARK: - Initializer - - override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { - super.init(style: .default, reuseIdentifier: reuseIdentifier) - setupProperty() - setupHierarchy() - setupLayout() - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - // MARK: - Setup Methods - - private func setupProperty() { - self.backgroundColor = .clear - } - - private func setupHierarchy() { - self.contentView.addSubview(folderImageView) - self.contentView.addSubview(folderNameLabel) - self.contentView.addSubview(checkImageView) - } - - func setupLayout() { - folderImageView.snp.makeConstraints { make in - make.centerY.equalToSuperview() - make.leading.equalToSuperview().offset(20) - make.width.height.equalTo(30) - make.top.greaterThanOrEqualToSuperview().offset(10) - make.bottom.lessThanOrEqualToSuperview().offset(-10) - } - - checkImageView.snp.makeConstraints { make in - make.centerY.equalToSuperview() - make.trailing.equalToSuperview().offset(-20) - } - - folderNameLabel.snp.makeConstraints { make in - make.centerY.equalToSuperview() - make.leading.equalTo(folderImageView.snp.trailing).offset(10) - make.trailing.equalTo(checkImageView.snp.leading).offset(-10) - make.top.greaterThanOrEqualToSuperview().offset(10) - make.bottom.lessThanOrEqualToSuperview().offset(-10) - } - } - - func configureWith(folder: Folder, isSelected: Bool) { - folderNameLabel.text = folder.name - checkImageView.isHidden = !isSelected - } - -} diff --git a/iBox/Sources/AddBookmark/FolderListView.swift b/iBox/Sources/AddBookmark/FolderListView.swift deleted file mode 100644 index 9ea7286..0000000 --- a/iBox/Sources/AddBookmark/FolderListView.swift +++ /dev/null @@ -1,108 +0,0 @@ -// -// FolderListView.swift -// iBox -// -// Created by μ΅œμ’…μ› on 3/7/24. -// - -import UIKit - -protocol FolderListViewDelegate: AnyObject { - func selectFolder(_ folder: Folder, at index: Int) -} - -class FolderListView: UIView { - weak var delegate: FolderListViewDelegate? - - let coreDataManager = CoreDataManager.shared - var folders: [Folder] = [] - var selectedFolderId: UUID? - - // MARK: - UI Components - - private let infoLabel = UILabel().then { - $0.text = "μƒˆλ‘œμš΄ 뢁마크λ₯Ό μΆ”κ°€ν•  폴더λ₯Ό μ„ νƒν•΄μ£Όμ„Έμš”." - $0.font = .barItemFont - $0.textColor = .label - $0.textAlignment = .center - } - - private let tableView = UITableView().then { - $0.backgroundColor = .clear - } - - private let stackView = UIStackView().then { - $0.axis = .vertical - $0.spacing = 20 - } - - // MARK: - Initializer - - override init(frame: CGRect) { - super.init(frame: frame) - setupProperty() - setupHierarchy() - setupLayout() - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - // MARK: - Setup Methods - - func setupProperty() { - backgroundColor = .systemGroupedBackground - setupTableView() - } - - func setupHierarchy() { - addSubview(stackView) - } - - func setupLayout() { - stackView.snp.makeConstraints { make in - make.top.equalTo(self.safeAreaLayoutGuide.snp.top).offset(20) // Adjust as necessary - make.bottom.equalTo(self.safeAreaLayoutGuide.snp.bottom) - make.leading.equalTo(self.snp.leading) - make.trailing.equalTo(self.snp.trailing) - } - - stackView.addArrangedSubview(infoLabel) - stackView.addArrangedSubview(tableView) - } - - func setupTableView() { - self.tableView.dataSource = self - self.tableView.delegate = self - self.tableView.register(FolderListCell.self, forCellReuseIdentifier: FolderListCell.reuseIdentifier) - } - - func reloadFolderList() { - tableView.reloadData() - } -} - -extension FolderListView: UITableViewDataSource { - func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - return folders.count - } - - func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - let cell = tableView.dequeueReusableCell(withIdentifier: FolderListCell.reuseIdentifier, for: indexPath) as! FolderListCell - let folder = folders[indexPath.row] - - let isSelectedFolder = selectedFolderId == folder.id - cell.configureWith(folder: folder, isSelected: isSelectedFolder) - - return cell - } -} - -extension FolderListView: UITableViewDelegate { - func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { - let selectedFolder = folders[indexPath.row] - UserDefaultsManager.selectedFolderId = selectedFolder.id - delegate?.selectFolder(selectedFolder, at: indexPath.row) - } -} diff --git a/iBox/Sources/AddBookmark/FolderListViewController.swift b/iBox/Sources/AddBookmark/FolderListViewController.swift deleted file mode 100644 index 338b853..0000000 --- a/iBox/Sources/AddBookmark/FolderListViewController.swift +++ /dev/null @@ -1,113 +0,0 @@ -// -// FolderListViewController.swift -// iBox -// -// Created by μ΅œμ’…μ› on 3/7/24. -// - -import UIKit - -protocol FolderListViewControllerDelegate: AnyObject { - func selectFolder(_ folder: Folder, at index: Int) - func addFolder(_ folder: Folder) -} - -class FolderListViewController: UIViewController { - weak var delegate: FolderListViewControllerDelegate? - - let folderListView = FolderListView() - - init(folders: [Folder], selectedId: UUID?) { - super.init(nibName: nil, bundle: nil) - setupFolderListView(folders, selectedId: selectedId) - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - override func loadView() { - view = folderListView - } - - override func viewDidLoad() { - super.viewDidLoad() - - setupNavigationBar() - navigationController?.interactivePopGestureRecognizer?.delegate = self - } - - private func setupNavigationBar() { - navigationItem.hidesBackButton = true - let backButton = UIBarButtonItem(image: UIImage(systemName: "chevron.left"), style: .plain, target: self, action: #selector(back)) - let addButton = UIBarButtonItem(barButtonSystemItem: .add, target: self, action: #selector(addFolder)) - navigationItem.leftBarButtonItem = backButton - navigationItem.rightBarButtonItem = addButton - } - - @objc private func back() { - self.navigationController?.popViewController(animated: true) - } - - @objc private func addFolder() { - let controller = UIAlertController(title: "μƒˆλ‘œμš΄ 폴더", message: "이 ν΄λ”μ˜ 이름을 μž…λ ₯ν•˜μ‹­μ‹œμ˜€.", preferredStyle: .alert) - - controller.addTextField { textField in - textField.placeholder = "폴더 이름" - textField.autocorrectionType = .no - textField.spellCheckingType = .no - } - - let cancelAction = UIAlertAction(title: "μ·¨μ†Œ", style: .cancel, handler: nil) - let addAction = UIAlertAction(title: "μΆ”κ°€", style: .default) { [unowned controller, weak self] _ in - guard let textField = controller.textFields?.first, - let folderName = textField.text, !folderName.trimmingCharacters(in: .whitespaces).isEmpty else { return } - - let newFolder = Folder(id: UUID(), name: folderName, bookmarks: []) - CoreDataManager.shared.addFolder(newFolder) - self?.folderListView.folders.append(newFolder) - - self?.folderListView.selectedFolderId = newFolder.id - UserDefaultsManager.selectedFolderId = newFolder.id - - self?.folderListView.reloadFolderList() - self?.delegate?.addFolder(newFolder) - } - - controller.addAction(cancelAction) - controller.addAction(addAction) - - NotificationCenter.default.addObserver(forName: UITextField.textDidChangeNotification, object: controller.textFields?.first, queue: .main) { notification in - if let textField = notification.object as? UITextField, - let text = textField.text, !text.trimmingCharacters(in: .whitespaces).isEmpty { - addAction.isEnabled = true - } else { - addAction.isEnabled = false - } - } - - addAction.isEnabled = false - - present(controller, animated: true) - } - - private func setupFolderListView(_ folders: [Folder], selectedId: UUID?) { - folderListView.delegate = self - folderListView.folders = folders - folderListView.selectedFolderId = selectedId - } -} - -extension FolderListViewController: FolderListViewDelegate { - func selectFolder(_ folder: Folder, at index: Int) { - delegate?.selectFolder(folder, at: index) - self.navigationController?.popViewController(animated: true) - } - -} - -extension FolderListViewController: UIGestureRecognizerDelegate { - func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool { - return true - } -} diff --git a/iBox/Sources/AppDelegate.swift b/iBox/Sources/AppDelegate.swift index f573b9f..1d9e30e 100644 --- a/iBox/Sources/AppDelegate.swift +++ b/iBox/Sources/AppDelegate.swift @@ -5,28 +5,18 @@ // Created by 김찬희 on 2023/12/21. // -import CoreData import UIKit -import WebKit +import CoreData @main class AppDelegate: UIResponder, UIApplicationDelegate { - let versioningHandler: VersioningHandler = VersioningHandler() - func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { - workaroundInitialWebViewDelay() - versioningHandler.checkAppVersion { result in - AppStateManager.shared.versionCheckCompleted = result - } - + + func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { + // Override point for customization after application launch. return true } - - func workaroundInitialWebViewDelay() { - let webView = WKWebView() - webView.loadHTMLString("", baseURL: nil) - } // MARK: UISceneSession Lifecycle @@ -42,5 +32,50 @@ class AppDelegate: UIResponder, UIApplicationDelegate { // Use this method to release any resources that were specific to the discarded scenes, as they will not return. } + // MARK: - Core Data stack + + lazy var persistentContainer: NSPersistentContainer = { + /* + The persistent container for the application. This implementation + creates and returns a container, having loaded the store for the + application to it. This property is optional since there are legitimate + error conditions that could cause the creation of the store to fail. + */ + let container = NSPersistentContainer(name: "iBox") + container.loadPersistentStores(completionHandler: { (storeDescription, error) in + if let error = error as NSError? { + // Replace this implementation with code to handle the error appropriately. + // fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. + + /* + Typical reasons for an error here include: + * The parent directory does not exist, cannot be created, or disallows writing. + * The persistent store is not accessible, due to permissions or data protection when the device is locked. + * The device is out of space. + * The store could not be migrated to the current model version. + Check the error message to determine what the actual problem was. + */ + fatalError("Unresolved error \(error), \(error.userInfo)") + } + }) + return container + }() + + // MARK: - Core Data Saving support + + func saveContext () { + let context = persistentContainer.viewContext + if context.hasChanges { + do { + try context.save() + } catch { + // Replace this implementation with code to handle the error appropriately. + // fatalError() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. + let nserror = error as NSError + fatalError("Unresolved error \(nserror), \(nserror.userInfo)") + } + } } +} + diff --git a/iBox/Sources/Base/BaseViewController.swift b/iBox/Sources/Base/BaseViewController.swift deleted file mode 100644 index b0a872f..0000000 --- a/iBox/Sources/Base/BaseViewController.swift +++ /dev/null @@ -1,238 +0,0 @@ -// -// BaseViewController.swift -// iBox -// -// Created by jiyeon on 1/3/24. -// - -import UIKit - -import SnapKit - -class NavigationBar: UIView { - var backButton = UIButton() - var titleLabel = UILabel() - var addButton = UIButton() - var moreButton = UIButton() - var doneButton = UIButton() -} - -protocol BaseViewControllerProtocol { - func setupNavigationBar() -} - -class BaseViewController: UIViewController, UIGestureRecognizerDelegate { - - let backgroundColor: UIColor = .backgroundColor - let tintColor: UIColor = .label - let titleFont: UIFont = .titleFont - - // MARK: - UI Components - - let statusBar = UIView() - - let navigationBar = NavigationBar().then { - $0.backButton.configuration = .plain() - $0.backButton.configuration?.image = UIImage(systemName: "chevron.left") - $0.backButton.configuration?.preferredSymbolConfigurationForImage = .init(weight: .semibold) - $0.addButton.configuration = .plain() - $0.addButton.configuration?.image = UIImage(systemName: "plus") - $0.addButton.configuration?.preferredSymbolConfigurationForImage = .init(weight: .semibold) - $0.moreButton.configuration = .plain() - $0.moreButton.configuration?.image = UIImage(systemName: "ellipsis.circle") - $0.moreButton.configuration?.preferredSymbolConfigurationForImage = .init(weight: .semibold) - $0.doneButton.configuration = .plain() - $0.doneButton.configuration?.baseForegroundColor = .label - $0.doneButton.configuration?.attributedTitle = AttributedString("μ™„λ£Œ", attributes: AttributeContainer([NSAttributedString.Key.font: UIFont.semiboldLabelFont])) - } - - let contentView: UIView = View() - - // MARK: - Life Cycle - - override func viewDidLoad() { - super.viewDidLoad() - setupHierarchy() - setupLayout() - setupProperty() - } - - // MARK: - Setup Methods - - private func setupProperty() { - view.backgroundColor = .backgroundColor - navigationController?.setNavigationBarHidden(true, animated: false) - navigationController?.interactivePopGestureRecognizer?.delegate = self - - setNavigationBarTintColor(tintColor) - setNavigationBarTitleLabelFont(titleFont) - setNavigationBarBackButtonHidden(true) - setNavigationBarMenuButtonHidden(true) - setNavigationBarDoneButtonHidden(true) - - navigationBar.backButton.addTarget(self, action: #selector(backButtonTapped), for: .touchUpInside) - } - - private func setupHierarchy() { - view.addSubview(statusBar) - view.addSubview(navigationBar) - navigationBar.addSubview(navigationBar.backButton) - navigationBar.addSubview(navigationBar.titleLabel) - navigationBar.addSubview(navigationBar.addButton) - navigationBar.addSubview(navigationBar.moreButton) - navigationBar.addSubview(navigationBar.doneButton) - view.addSubview(contentView) - } - - private func setupLayout() { - statusBar.snp.makeConstraints { make in - make.leading.top.trailing.equalToSuperview() - make.bottom.equalTo(view.safeAreaLayoutGuide.snp.top) - } - - navigationBar.snp.makeConstraints { make in - make.top.equalTo(statusBar.snp.bottom) - make.leading.trailing.equalToSuperview() - make.height.equalTo(60) - } - - navigationBar.backButton.snp.makeConstraints { make in - make.leading.equalToSuperview().inset(20) - make.centerY.equalToSuperview() - make.width.height.equalTo(24) - } - - navigationBar.titleLabel.snp.makeConstraints { make in - make.center.equalToSuperview() - } - - navigationBar.moreButton.snp.makeConstraints { make in - make.trailing.equalToSuperview().inset(20) - make.centerY.equalToSuperview() - make.width.height.equalTo(24) - } - - navigationBar.addButton.snp.makeConstraints { make in - make.trailing.equalTo(navigationBar.moreButton.snp.leading).offset(-20) - make.centerY.equalToSuperview() - make.width.height.equalTo(24) - } - - navigationBar.doneButton.snp.makeConstraints { make in - make.trailing.equalToSuperview().inset(20) - make.centerY.equalToSuperview() - } - - contentView.snp.makeConstraints { make in - make.top.equalTo(statusBar.snp.bottom).offset(60) - make.leading.trailing.equalToSuperview() - make.bottom.equalToSuperview().inset(tabBarController?.tabBar.frame.height ?? 0) - } - } - - // MARK: - BaseViewController - - func setNavigationBarBackgroundColor(_ color: UIColor?) { - statusBar.backgroundColor = color - navigationBar.backgroundColor = color - } - - func setNavigationBarTintColor(_ color: UIColor) { - navigationBar.backButton.tintColor = color - navigationBar.addButton.tintColor = color - navigationBar.moreButton.tintColor = color - } - - func setNavigationBarHidden(_ hidden: Bool) { - navigationBar.isHidden = hidden - - if hidden { - contentView.snp.remakeConstraints { make in - make.top.equalTo(statusBar.snp.bottom) - make.leading.trailing.equalTo(view.safeAreaLayoutGuide) - make.bottom.equalToSuperview() - } - } else { - contentView.snp.remakeConstraints { make in - make.top.equalTo(statusBar.snp.bottom).offset(60) - make.leading.trailing.equalTo(view.safeAreaLayoutGuide) - make.bottom.equalToSuperview() - } - } - } - - func setNavigationBarBackButtonHidden(_ hidden: Bool) { - navigationBar.backButton.isHidden = hidden - - if hidden { - navigationBar.titleLabel.snp.remakeConstraints { make in - make.leading.equalToSuperview().inset(30) - make.centerY.equalToSuperview() - } - } else { - navigationBar.titleLabel.snp.remakeConstraints { make in - make.center.equalToSuperview() - } - } - } - - func setNavigationBarMenuButtonHidden(_ hidden: Bool) { - navigationBar.addButton.isHidden = hidden - navigationBar.moreButton.isHidden = hidden - } - - func setNavigationBarAddButtonHidden(_ hidden: Bool) { - navigationBar.addButton.isHidden = hidden - - if !hidden { - navigationBar.addButton.snp.remakeConstraints { make in - make.trailing.equalToSuperview().inset(20) - make.centerY.equalToSuperview() - make.width.height.equalTo(24) - } - } - } - - func setNavigationBarDoneButtonHidden(_ hidden: Bool) { - navigationBar.doneButton.isHidden = hidden - } - - func setNavigationBarAddButtonAction(_ selector: Selector) { - navigationBar.addButton.addTarget(self, action: selector, for: .touchUpInside) - } - - func setNavigationBarMoreButtonAction(_ selector: Selector) { - navigationBar.moreButton.addTarget(self, action: selector, for: .touchUpInside) - } - - func setNavigationBarDoneButtonAction(_ selector: Selector) { - navigationBar.doneButton.addTarget(self, action: selector, for: .touchUpInside) - } - - func setNavigationBarTitleLabelText(_ text: String?) { - navigationBar.titleLabel.text = text - } - - func setNavigationBarTitleLabelFont(_ font: UIFont?) { - navigationBar.titleLabel.font = font - } - - func setNavigationBarTitleLabelTextColor(_ color: UIColor?) { - navigationBar.titleLabel.textColor = color - } - - // MARK: - Action Functions - - @objc func backButtonTapped() { - navigationController?.popViewController(animated: true) - } - - // MARK: - UIGestureRecognizerDelegate - - func gestureRecognizerShouldBegin(_ gestureRecognizer: UIGestureRecognizer) -> Bool { - guard let navigationController = navigationController else { return false } - // Navigation Stack에 μŒ“μΈ λ·°κ°€ 1개λ₯Ό μ΄ˆκ³Όν•  λ•Œ μŠ€μ™€μ΄ν”„ 제슀처 ν—ˆμš© - return navigationController.viewControllers.count > 1 - } - -} diff --git a/iBox/Sources/Base/BottomSheetViewController.swift b/iBox/Sources/Base/BottomSheetViewController.swift deleted file mode 100644 index 97be2e3..0000000 --- a/iBox/Sources/Base/BottomSheetViewController.swift +++ /dev/null @@ -1,143 +0,0 @@ -// -// BottomSheetViewController.swift -// iBox -// -// Created by jiyeon on 1/5/24. -// - -import UIKit - -import SnapKit - -class BottomSheetViewController: UIViewController { - - var bottomSheetHeight: CGFloat - - // MARK: - UI Components - - let dimmedView = UIView().then { - $0.backgroundColor = .clear - $0.isUserInteractionEnabled = true - } - - let sheetView = View().then { - $0.clipsToBounds = true - $0.layer.cornerRadius = 30 - $0.layer.maskedCorners = [.layerMinXMinYCorner, .layerMaxXMinYCorner] // μ™Όμͺ½ μœ„, 였λ₯Έμͺ½ μœ„ λ‘₯κΈ€κ²Œ - } - - let indicator = UIView().then { - $0.clipsToBounds = true - $0.layer.cornerRadius = 2 - $0.backgroundColor = .darkGray - } - - // MARK: - Initializer - - init(bottomSheetHeight: CGFloat) { - self.bottomSheetHeight = bottomSheetHeight - super.init(nibName: nil, bundle: nil) - modalPresentationStyle = .overFullScreen - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - // MARK: - Life Cycle - - override func viewDidLoad() { - super.viewDidLoad() - setupProperty() - setupHierarchy() - setupLayout() - } - - override func viewDidAppear(_ animated: Bool) { - super.viewDidAppear(animated) - showBottomSheets() - } - - // MARK: - Setup Methods - - private func setupProperty() { - // TapGesture - let dimmedTap = UITapGestureRecognizer(target: self, action: #selector(dimmedViewTapped)) - dimmedView.addGestureRecognizer(dimmedTap) - - // SwipeGesture - let swipeGesture = UISwipeGestureRecognizer(target: self, action: #selector(panGesture)) - swipeGesture.direction = .down - view.addGestureRecognizer(swipeGesture) - } - - private func setupHierarchy() { - view.addSubview(dimmedView) - view.addSubview(sheetView) - sheetView.addSubview(indicator) - } - - private func setupLayout() { - dimmedView.snp.makeConstraints { make in - make.edges.equalToSuperview() - } - - sheetView.snp.makeConstraints { make in - make.top.equalTo(view.snp.bottom) - make.leading.trailing.equalToSuperview() - make.height.equalTo(bottomSheetHeight) - } - - indicator.snp.makeConstraints { make in - make.width.equalTo(40) - make.height.equalTo(4) - make.top.equalToSuperview().inset(10) - make.centerX.equalToSuperview() - } - } - - // MARK: - Action Functions - - @objc private func dimmedViewTapped(_ tapRecognizer: UITapGestureRecognizer) { - hideBottomSheets() - } - - @objc private func panGesture(_ recognizer: UISwipeGestureRecognizer) { - if recognizer.state == .ended { - switch recognizer.direction { - case .down: hideBottomSheets() - default: break - } - } - } - - // MARK: - Bottom Sheet Action - - private func showBottomSheets() { - sheetView.snp.remakeConstraints { make in - make.leading.bottom.trailing.equalToSuperview() - make.height.equalTo(bottomSheetHeight) - } - UIView.animate(withDuration: 0.25, delay: 0, options: .curveEaseIn, animations: { - self.dimmedView.backgroundColor = .dimmedViewColor - self.view.layoutIfNeeded() - }) - } - - private func hideBottomSheets() { - sheetView.snp.remakeConstraints { make in - make.top.equalTo(view.snp.bottom) - make.leading.trailing.equalToSuperview() - make.height.equalTo(bottomSheetHeight) - } - UIView.animate(withDuration: 0.25, delay: 0, options: .curveEaseIn, animations: { - self.dimmedView.backgroundColor = .clear - self.view.layoutIfNeeded() - }) { _ in - if self.presentingViewController != nil { - self.dismiss(animated: false) - } - } - } - -} diff --git a/iBox/Sources/BaseViewController.swift b/iBox/Sources/BaseViewController.swift new file mode 100644 index 0000000..fd38cb5 --- /dev/null +++ b/iBox/Sources/BaseViewController.swift @@ -0,0 +1,18 @@ +// +// BaseViewController.swift +// iBox +// +// Created by jiyeon on 12/26/23. +// + +import UIKit + +class BaseViewController: UIViewController { + + let baseView = View(frame: UIScreen.main.bounds) + + override func viewDidLoad() { + super.viewDidLoad() + view.addSubview(baseView) + } +} diff --git a/iBox/Sources/BoxList/BoxListCell.swift b/iBox/Sources/BoxList/BoxListCell.swift deleted file mode 100644 index b9929b4..0000000 --- a/iBox/Sources/BoxList/BoxListCell.swift +++ /dev/null @@ -1,129 +0,0 @@ -// -// BoxListCell.swift -// iBox -// -// Created by μ΄μ§€ν˜„ on 1/30/24. -// - -import UIKit - -import SnapKit - -class BoxListCell: UITableViewCell { - var viewModel: BoxListCellViewModel? - static let reuseIdentifier = "boxListCell" - - var onDelete: (() -> Void)? - var onEdit: (() -> Void)? - - // MARK: - UI Components - - private let cellImageView = UIImageView().then { - $0.image = UIImage(systemName: "ellipsis.rectangle.fill") - $0.tintColor = .label - $0.contentMode = .scaleAspectFit - } - - private let label = UILabel().then { - $0.font = .cellTitleFont - } - - private let editButton = UIButton().then{ - $0.configuration = .plain() - $0.configuration?.image = UIImage(systemName: "ellipsis.circle")?.withTintColor(.box, renderingMode: .alwaysOriginal) - - $0.showsMenuAsPrimaryAction = true - $0.isHidden = true - } - - private lazy var editAction = UIAction(title: "뢁마크 νŽΈμ§‘", image: UIImage(systemName: "pencil")) {[weak self] _ in - self?.onEdit?() - } - - private lazy var deleteAction = UIAction(title: "μ‚­μ œ", image: UIImage(systemName: "trash"), attributes: .destructive) { [weak self] _ in - self?.onDelete?() - } - - // MARK: - Initializer - - override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { - super.init(style: style, reuseIdentifier: reuseIdentifier) - setupProperty() - setupHierarchy() - setupLayout() - configureEditMenu() - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - override func prepareForReuse() { - viewModel = nil - onDelete = nil - onEdit = nil - } - - // MARK: - Setup Methods - - private func setupProperty() { - backgroundColor = .tableViewBackgroundColor - selectionStyle = .gray - } - - private func setupHierarchy() { - contentView.addSubview(cellImageView) - contentView.addSubview(label) - contentView.addSubview(editButton) - } - - private func setupLayout() { - cellImageView.snp.makeConstraints { make in - make.leading.equalToSuperview().inset(25) - make.top.bottom.equalToSuperview().inset(10) - make.width.equalTo(23) - } - - label.snp.makeConstraints { make in - make.top.bottom.equalToSuperview() - make.trailing.equalToSuperview().inset(25) - make.leading.equalTo(cellImageView.snp.trailing).offset(8) - } - - editButton.snp.makeConstraints { make in - make.width.equalTo(25) - make.top.bottom.equalToSuperview() - make.trailing.equalToSuperview().offset(-10) - } - } - - private func configureEditMenu() { - editButton.menu = UIMenu(options: .displayInline, children: [editAction, deleteAction]) - } - - // MARK: - Bind ViewModel - - func bindViewModel(_ viewModel: BoxListCellViewModel) { - self.viewModel = viewModel - label.text = viewModel.name - } - - func setEditButtonHidden(_ isHidden: Bool) { - editButton.isHidden = isHidden - - if isHidden { - label.snp.remakeConstraints { make in - make.top.bottom.equalToSuperview() - make.trailing.equalToSuperview().inset(25) - make.leading.equalTo(cellImageView.snp.trailing).offset(10) - } - } else { - label.snp.remakeConstraints { make in - make.top.bottom.equalToSuperview() - make.trailing.equalTo(editButton.snp.leading).offset(-5) - make.leading.equalTo(cellImageView.snp.trailing).offset(10) - } - } - } - -} diff --git a/iBox/Sources/BoxList/BoxListCellViewModel.swift b/iBox/Sources/BoxList/BoxListCellViewModel.swift deleted file mode 100644 index 2c6cefc..0000000 --- a/iBox/Sources/BoxList/BoxListCellViewModel.swift +++ /dev/null @@ -1,29 +0,0 @@ -// -// BoxListCellViewModel.swift -// iBox -// -// Created by μ΄μ§€ν˜„ on 1/30/24. -// - -import Foundation - -class BoxListCellViewModel: Identifiable { - var bookmark: Bookmark - - init(bookmark: Bookmark) { - self.bookmark = bookmark - } - - var id: UUID { - bookmark.id - } - - var name: String { - bookmark.name - } - - var url: URL { - bookmark.url - } - -} diff --git a/iBox/Sources/BoxList/BoxListSectionViewModel.swift b/iBox/Sources/BoxList/BoxListSectionViewModel.swift deleted file mode 100644 index bb2d0e9..0000000 --- a/iBox/Sources/BoxList/BoxListSectionViewModel.swift +++ /dev/null @@ -1,74 +0,0 @@ -// -// BoxListSectionViewModel.swift -// iBox -// -// Created by μ΄μ§€ν˜„ on 1/30/24. -// - -import Foundation - -class BoxListSectionViewModel: Identifiable { - var folder: Folder - - var boxListCellViewModels: [BoxListCellViewModel] { - didSet { - folder.bookmarks = boxListCellViewModels.map { - Bookmark(id: $0.id, name: $0.name, url: $0.url) - } - } - } - - init(folder: Folder) { - self.folder = folder - boxListCellViewModels = folder.bookmarks.map { BoxListCellViewModel(bookmark: $0) } - } - - var id: UUID { - folder.id - } - - var name: String { - get { - folder.name - } - set { - folder.name = newValue - } - } - - var isOpened: Bool = false - - - var boxListCellViewModelsWithStatus: [BoxListCellViewModel] { - return isOpened ? boxListCellViewModels : [] - } - - func viewModel(at index: Int) -> BoxListCellViewModel { - return boxListCellViewModels[index] - } - - @discardableResult - func deleteCell(at index: Int) -> BoxListCellViewModel { - let cell = boxListCellViewModels[index] - boxListCellViewModels.remove(at: index) - return cell - } - - func updateCell(at index: Int, bookmark: Bookmark) { - boxListCellViewModels[index].bookmark = bookmark - } - - func insertCell(_ cell: BoxListCellViewModel, at index: Int) { - boxListCellViewModels.insert(cell, at: index) - } - - @discardableResult - func openSectionIfNeeded() -> Bool { - if !isOpened { - isOpened = true - return true - } - return false - } -} - diff --git a/iBox/Sources/BoxList/BoxListView.swift b/iBox/Sources/BoxList/BoxListView.swift deleted file mode 100644 index abbaba0..0000000 --- a/iBox/Sources/BoxList/BoxListView.swift +++ /dev/null @@ -1,525 +0,0 @@ -// -// BoxListView.swift -// iBox -// -// Created by μ΄μ§€ν˜„ on 1/3/24. -// - -import Combine -import UIKit - -import SnapKit - -protocol BoxListViewDelegate: AnyObject { - func didSelectWeb(id: UUID, at url: URL, withName name: String) - func pushViewController(type: EditType) - func pushViewController(url: URL?) - func presentEditBookmarkController(at indexPath: IndexPath) - func deleteFolderinBoxList(at section: Int) - func editFolderNameinBoxList(at section: Int, currentName: String) -} - -class BoxListView: UIView { - - var viewModel: BoxListViewModel? - private var boxListDataSource: BoxListDataSource! - weak var delegate: BoxListViewDelegate? - private var cancellables = Set() - - // MARK: - UI Components - - private let backgroundView = UIView().then { - $0.clipsToBounds = true - $0.layer.cornerRadius = 20 - $0.backgroundColor = .tableViewBackgroundColor - } - - private let tableView = UITableView(frame: .zero, style: .grouped).then { - $0.register(BoxListCell.self, forCellReuseIdentifier: BoxListCell.reuseIdentifier) - - $0.sectionHeaderTopPadding = 0 - $0.clipsToBounds = true - $0.layer.cornerRadius = 20 - $0.backgroundColor = .clear - $0.separatorColor = .clear - $0.rowHeight = 50 - $0.estimatedSectionHeaderHeight = 0 - $0.estimatedSectionFooterHeight = 0 - $0.estimatedRowHeight = 0 - } - - private let emptyStackView = UIStackView().then { - $0.axis = .horizontal - $0.spacing = 10 - $0.isHidden = true - } - - private let emptyLabel = UILabel().then { - $0.text = "폴더가 μ—†μŠ΅λ‹ˆλ‹€" - $0.font = .emptyLabelFont - $0.textColor = .secondaryLabel - $0.textAlignment = .center - } - - private lazy var lightEmptyImages = [ - UIImage(named: "sitting_fox0")?.imageWithColor(.secondaryLabel.resolvedColor(with: .init(userInterfaceStyle: .light))) ?? UIImage(), - UIImage(named: "sitting_fox1")?.imageWithColor(.secondaryLabel.resolvedColor(with: .init(userInterfaceStyle: .light))) ?? UIImage(), - UIImage(named: "sitting_fox2")?.imageWithColor(.secondaryLabel.resolvedColor(with: .init(userInterfaceStyle: .light))) ?? UIImage(), - UIImage(named: "sitting_fox3")?.imageWithColor(.secondaryLabel.resolvedColor(with: .init(userInterfaceStyle: .light))) ?? UIImage() - ] - - private lazy var darkEmptyImages = [ - UIImage(named: "sitting_fox0")?.imageWithColor(.secondaryLabel.resolvedColor(with: .init(userInterfaceStyle: .dark))) ?? UIImage(), - UIImage(named: "sitting_fox1")?.imageWithColor(.secondaryLabel.resolvedColor(with: .init(userInterfaceStyle: .dark))) ?? UIImage(), - UIImage(named: "sitting_fox2")?.imageWithColor(.secondaryLabel.resolvedColor(with: .init(userInterfaceStyle: .dark))) ?? UIImage(), - UIImage(named: "sitting_fox3")?.imageWithColor(.secondaryLabel.resolvedColor(with: .init(userInterfaceStyle: .dark))) ?? UIImage() - ] - - private let emptyImageView = UIImageView().then { - $0.contentMode = .scaleAspectFit - $0.tintColor = .secondaryLabel - $0.animationDuration = 1.5 - } - - // MARK: - Initializer - - override init(frame: CGRect) { - super.init(frame: frame) - setupProperty() - setupHierarchy() - setupLayout() - configureDataSource() - bindViewModel() - subscribeToNotifications() - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - deinit { - NotificationCenter.default.removeObserver(self) - } - - override func traitCollectionDidChange(_ previousTraitCollection: UITraitCollection?) { - super.traitCollectionDidChange(previousTraitCollection) - if #available(iOS 13.0, *), traitCollection.hasDifferentColorAppearance(comparedTo: previousTraitCollection) { - if previousTraitCollection?.userInterfaceStyle == .light { - emptyImageView.animationImages = darkEmptyImages - } else { - emptyImageView.animationImages = lightEmptyImages - } - if !emptyStackView.isHidden { - emptyImageView.startAnimating() - } - } - } - - // MARK: - Setup Methods - - private func setupProperty() { - backgroundColor = .backgroundColor - viewModel = BoxListViewModel() - tableView.delegate = self - - if UITraitCollection.current.userInterfaceStyle == .light { - emptyImageView.animationImages = lightEmptyImages - } else { - emptyImageView.animationImages = darkEmptyImages - } - } - - private func setupHierarchy() { - addSubview(backgroundView) - backgroundView.addSubview(tableView) - backgroundView.addSubview(emptyStackView) - } - - private func setupLayout() { - backgroundView.snp.makeConstraints { make in - make.top.equalTo(safeAreaLayoutGuide).inset(10) - make.leading.trailing.bottom.equalTo(safeAreaLayoutGuide).inset(20) - } - - tableView.snp.makeConstraints { make in - make.top.bottom.equalToSuperview().offset(10) - make.leading.trailing.equalToSuperview() - } - - emptyStackView.snp.makeConstraints { make in - make.center.equalToSuperview() - } - - emptyImageView.snp.makeConstraints { make in - make.width.height.equalTo(30) - } - - emptyStackView.addArrangedSubview(emptyLabel) - emptyStackView.addArrangedSubview(emptyImageView) - - } - - private func configureDataSource() { - boxListDataSource = BoxListDataSource(tableView: tableView) { [weak self] tableView, indexPath, itemIdentifier in - guard let self, let viewModel = self.viewModel else { fatalError() } - guard let cell = tableView.dequeueReusableCell(withIdentifier: BoxListCell.reuseIdentifier, for: indexPath) as? BoxListCell else { fatalError() } - cell.setEditButtonHidden(!viewModel.isEditing) - cell.bindViewModel(viewModel.viewModel(at: indexPath)) - cell.onDelete = { [weak self, weak cell] in - guard let self = self, let cell = cell else { return } - if let currentIndexPath = self.tableView.indexPath(for: cell) { - self.viewModel?.deleteBookmark(at: currentIndexPath) - } - } - cell.onEdit = { [weak self, weak cell] in - guard let self = self, let cell = cell else { return } - if let currentIndexPath = self.tableView.indexPath(for: cell) { - self.delegate?.presentEditBookmarkController(at: currentIndexPath) - } - } - - return cell - } - boxListDataSource.defaultRowAnimation = .top - boxListDataSource.delegate = self - } - - private func applySnapshot(with sections: [BoxListSectionViewModel]) { - var snapshot = NSDiffableDataSourceSnapshot() - snapshot.appendSections(sections.map{ $0.id }) - for section in sections { - snapshot.appendItems(section.boxListCellViewModelsWithStatus.map { $0.id }, toSection: section.id) - } - boxListDataSource.apply(snapshot, animatingDifferences: true) - } - - private func bindViewModel() { - guard let viewModel else { return } - let output = viewModel.transform(input: viewModel.input.eraseToAnyPublisher()) - - output.receive(on: DispatchQueue.main) - .sink { [weak self] event in - switch event { - case .sendBoxList(boxList: let boxList): - self?.applySnapshot(with: boxList) - self?.emptyStackView.isHidden = !boxList.isEmpty - if self?.emptyStackView.isHidden == false { - self?.emptyImageView.startAnimating() - } else { - self?.emptyImageView.stopAnimating() - } - case .editStatus(isEditing: let isEditing): - self?.tableView.setEditing(isEditing, animated: false) - guard let snapshot = self?.boxListDataSource.snapshot() else { return } - self?.boxListDataSource.applySnapshotUsingReloadData(snapshot) - case .reloadSections(idArray: let idArray): - guard var snapshot = self?.boxListDataSource.snapshot() else { return } - snapshot.reloadSections(idArray) - self?.boxListDataSource.apply(snapshot, animatingDifferences: false) - case .reloadRows(idArray: let idArray): - guard var snapshot = self?.boxListDataSource.snapshot() else { return } - snapshot.reloadItems(idArray) - self?.boxListDataSource.apply(snapshot) - case .openCloseFolder(boxList: let boxList, section: let section, isEmpty: let isEmpty): - self?.applySnapshot(with: boxList) - self?.tableView.layoutIfNeeded() - if !isEmpty { - let indexPath = IndexPath(row: NSNotFound, section: section) - self?.tableView.scrollToRow(at: indexPath, at: .top, animated: true) - } - } - }.store(in: &cancellables) - } - - private func subscribeToNotifications() { - NotificationCenter.default.addObserver(self, selector: #selector(dataDidReset), name: .didResetData, object: nil) - } - - @objc private func dataDidReset(notification: NSNotification) { - viewModel?.input.send(.viewDidLoad) - } - -} - -extension BoxListView: UITableViewDelegate { - - public func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? { - let view = UIView() - let line = UIView() - view.addSubview(line) - line.snp.makeConstraints { make in - make.top.bottom.equalToSuperview() - make.leading.trailing.equalToSuperview().inset(15) - } - view.backgroundColor = .tableViewBackgroundColor - line.backgroundColor = .quaternaryLabel - return view - } - - public func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat { - return 0.7 - } - - func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { - return 50 - } - - func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { - return 48 - } - - func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { - guard let viewModel else { return nil } - let button = FolderButton(isOpen: viewModel.boxList[section].isOpened) - button.setFolderName(viewModel.boxList[section].name) - button.tag = section - - // ν„°μΉ˜ν–ˆμ„ λ•Œ - button.addTarget(self, action: #selector(handleOpenClose), for: .touchUpInside) - // 길게 λˆŒλ €μ„ λ•Œ - button.addTarget(self, action: #selector(handleMenu), for: .menuActionTriggered) - - let edit = UIAction(title: "폴더 νŽΈμ§‘", image: UIImage(systemName: "pencil")) { [weak self] _ in - guard let folderName = self?.viewModel?.boxList[section].name else { return } - self?.delegate?.editFolderNameinBoxList(at: section, currentName: folderName) - } - let delete = UIAction(title: "폴더 μ‚­μ œ", image: UIImage(systemName: "trash"), attributes: .destructive) { [weak self] _ in - self?.delegate?.deleteFolderinBoxList(at: section) - } - - button.menu = UIMenu(options: .displayInline, children: [edit, delete]) - - return button - } - - @objc private func handleOpenClose(button: FolderButton) { - guard let viewModel else { return } - viewModel.input.send(.folderTapped(section: button.tag)) - button.toggleStatus() - if UserDefaultsManager.isHaptics { - let generator = UIImpactFeedbackGenerator(style: .light) - generator.prepare() - generator.impactOccurred() - } - } - - @objc private func handleMenu(button: FolderButton) { - if UserDefaultsManager.isHaptics { - let generator = UIImpactFeedbackGenerator(style: .medium) - generator.prepare() - generator.impactOccurred() - } - } - - func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { - guard let cellViewModel = viewModel?.boxList[indexPath.section].boxListCellViewModelsWithStatus[indexPath.row] else { return } - delegate?.didSelectWeb(id: cellViewModel.id, at: cellViewModel.url, withName: cellViewModel.name) - - tableView.deselectRow(at: indexPath, animated: true) - } - - func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? { - // μ•‘μ…˜ μ •μ˜ - let favoriteAction = UIContextualAction(style: .normal, title: "favorite", handler: { [weak self] (action, view, completionHandler) in - self?.viewModel?.input.send(.toggleFavorite(indexPath: indexPath)) - if UserDefaultsManager.isHaptics { - let generator = UIImpactFeedbackGenerator(style: .soft) - generator.prepare() - generator.impactOccurred() - } - completionHandler(true) - }) - favoriteAction.backgroundColor = .box2 - if viewModel?.isFavoriteBookmark(at: indexPath) == true { - favoriteAction.image = UIImage(systemName: "heart.fill") - } else { - favoriteAction.image = UIImage(systemName: "heart") - } - - let shareAction = UIContextualAction(style: .normal, title: "share", handler: {(action, view, completionHandler) in - let cellViewModel = self.viewModel?.viewModel(at: indexPath) - self.delegate?.pushViewController(url: cellViewModel?.url) - if UserDefaultsManager.isHaptics { - let generator = UIImpactFeedbackGenerator(style: .soft) - generator.prepare() - generator.impactOccurred() - } - completionHandler(true) - }) - shareAction.backgroundColor = .box3 - shareAction.image = UIImage(systemName: "square.and.arrow.up") - - let deleteAction = UIContextualAction(style: .normal, title: "delete", handler: {(action, view, completionHandler) in - self.viewModel?.input.send(.deleteBookmark(indexPath: indexPath)) - if UserDefaultsManager.isHaptics { - let generator = UIImpactFeedbackGenerator(style: .soft) - generator.prepare() - generator.impactOccurred() - } - completionHandler(true) - }) - deleteAction.backgroundColor = .systemGray - deleteAction.image = UIImage(systemName: "trash.fill") - - // μŠ€μ™€μ΄ν”„ μ•‘μ…˜ ꡬ성 - let configuration = UISwipeActionsConfiguration(actions: [deleteAction, shareAction, favoriteAction]) - configuration.performsFirstActionWithFullSwipe = false // μ™„μ „νžˆ μŠ€μ™€μ΄ν”„ν–ˆμ„ λ•Œ 첫 번째 μ•‘μ…˜μ΄ μžλ™μœΌλ‘œ μ‹€ν–‰λ˜λŠ” 것을 λ§‰μŒ - - return configuration - } - - func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCell.EditingStyle { - return .none - } - - func tableView(_ tableView: UITableView, shouldIndentWhileEditingRowAt indexPath: IndexPath) -> Bool { - return false - } - - func tableView(_ tableView: UITableView, contextMenuConfigurationForRowAt indexPath: IndexPath, point: CGPoint) -> UIContextMenuConfiguration? { - let configuration = UIContextMenuConfiguration(identifier: indexPath as NSIndexPath, previewProvider: { [weak self] () -> UIViewController? in - guard let self = self else { return nil } - return self.createOrRetrievePreviewController(for: indexPath) - }, actionProvider: { suggestedActions in - return self.makeContextMenu(for: indexPath) - }) - return configuration - } - - private func createOrRetrievePreviewController(for indexPath: IndexPath) -> UIViewController? { - guard let cellViewModel = self.viewModel?.boxList[indexPath.section].boxListCellViewModelsWithStatus[indexPath.row] else { return nil } - let id = cellViewModel.id - let cachedViewController = WebCacheManager.shared.viewControllerForKey(id) - - if let cachedViewController = cachedViewController, cachedViewController.errorViewController?.isHandlingError == nil { - return cachedViewController - } - - if cachedViewController?.errorViewController?.isHandlingError ?? false { - WebCacheManager.shared.removeViewControllerForKey(id) - } - - let newViewController = createWebViewController(with: cellViewModel) - WebCacheManager.shared.cacheData(forKey: id, viewController: newViewController) - return newViewController - } - - private func createWebViewController(with viewModel: BoxListCellViewModel) -> WebViewController { - let viewController = WebViewController() - viewController.selectedWebsite = viewModel.url - viewController.title = viewModel.name - viewController.id = viewModel.id - return viewController - } - - func tableView(_ tableView: UITableView, previewForDismissingContextMenuWithConfiguration configuration: UIContextMenuConfiguration) -> UITargetedPreview? { - guard let indexPath = configuration.identifier as? IndexPath, let cell = tableView.cellForRow(at: indexPath) else { - return nil - } - - let parameters = UIPreviewParameters() - parameters.backgroundColor = .clear - - return UITargetedPreview(view: cell, parameters: parameters) - } - - private func makeContextMenu(for indexPath: IndexPath) -> UIMenu { - let isFavorite = self.viewModel?.isFavoriteBookmark(at: indexPath) ?? false - let favoriteActionTitle = isFavorite ? "즐겨찾기 ν•΄μ œ" : "즐겨찾기둜 등둝" - let favoriteActionImage = UIImage(systemName: isFavorite ? "heart.slash.fill" : "heart.fill") - - let favoriteAction = UIAction(title: favoriteActionTitle, image: favoriteActionImage) { [weak self] action in - self?.viewModel?.input.send(.toggleFavorite(indexPath: indexPath)) - if UserDefaultsManager.isHaptics { - let generator = UIImpactFeedbackGenerator(style: .soft) - generator.prepare() - generator.impactOccurred() - } - } - - favoriteAction.image?.withTintColor(.box2) - - let shareAction = UIAction(title: "κ³΅μœ ν•˜κΈ°", image: UIImage(systemName: "square.and.arrow.up")) { [weak self] action in - guard let self = self, let url = self.viewModel?.boxList[indexPath.section].boxListCellViewModelsWithStatus[indexPath.row].url else { return } - - if UserDefaultsManager.isHaptics { - let generator = UIImpactFeedbackGenerator(style: .soft) - generator.prepare() - generator.impactOccurred() - } - - let activityViewController = UIActivityViewController(activityItems: [url], applicationActivities: nil) - if let viewController = self.delegate as? UIViewController { - viewController.present(activityViewController, animated: true, completion: nil) - } - } - - let editAction = UIAction(title: "뢁마크 νŽΈμ§‘", image: UIImage(systemName: "pencil")) { [weak self] action in - guard let self = self else { return } - - self.delegate?.presentEditBookmarkController(at: indexPath) - - if UserDefaultsManager.isHaptics { - let generator = UIImpactFeedbackGenerator(style: .soft) - generator.prepare() - generator.impactOccurred() - } - } - - let deleteAction = UIAction(title: "μ‚­μ œ", image: UIImage(systemName: "trash"), attributes: .destructive) { [weak self] action in - self?.viewModel?.input.send(.deleteBookmark(indexPath: indexPath)) - if UserDefaultsManager.isHaptics { - let generator = UIImpactFeedbackGenerator(style: .soft) - generator.prepare() - generator.impactOccurred() - } - } - - - - return UIMenu(title: "", children: [favoriteAction, shareAction, editAction, deleteAction]) - } -} - -extension BoxListView: BoxListDataSourceDelegate { - func openFolderIfNeeded(_ folderIndex: Int) { - viewModel?.input.send(.openFolderIfNeeded(folderIndex: folderIndex)) - } - - func moveCell(at sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) { - viewModel?.input.send(.moveBookmark(from: sourceIndexPath, to: destinationIndexPath)) - } - -} - -protocol BoxListDataSourceDelegate: AnyObject { - func moveCell(at sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) - func openFolderIfNeeded(_ folderIndex: Int) -} - -class BoxListDataSource: UITableViewDiffableDataSource { - weak var delegate: BoxListDataSourceDelegate? - - override func tableView(_ tableView: UITableView, moveRowAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) { - delegate?.moveCell(at: sourceIndexPath, to: destinationIndexPath) - - guard let src = itemIdentifier(for: sourceIndexPath), - sourceIndexPath != destinationIndexPath else { return } - - var snap = snapshot() - if let dest = itemIdentifier(for: destinationIndexPath) { - if sourceIndexPath.section == destinationIndexPath.section && sourceIndexPath.row < destinationIndexPath.row { - snap.moveItem(src, afterItem: dest) - } else { - snap.moveItem(src, beforeItem:dest) - } - } else { - snap.deleteItems([src]) - snap.appendItems([src], toSection: snap.sectionIdentifiers[destinationIndexPath.section]) - } - - self.apply(snap, animatingDifferences: false) - - delegate?.openFolderIfNeeded(destinationIndexPath.section) - } -} diff --git a/iBox/Sources/BoxList/BoxListViewController.swift b/iBox/Sources/BoxList/BoxListViewController.swift deleted file mode 100644 index 5c95f7b..0000000 --- a/iBox/Sources/BoxList/BoxListViewController.swift +++ /dev/null @@ -1,303 +0,0 @@ -// -// BoxListViewController.swift -// iBox -// -// Created by μ΄μ§€ν˜„ on 12/27/23. -// - -import UIKit - -import SkeletonView - -class BoxListViewController: BaseViewController, BaseViewControllerProtocol { - - var shouldPresentModalAutomatically: Bool = false { - didSet { - if shouldPresentModalAutomatically { - if let vc = findAddBookmarkViewController() { - if vc.presentedViewController is UIAlertController { - vc.dismiss(animated: false) - } - } else { - dismiss(animated: false) - self.addButtonTapped() - } - shouldPresentModalAutomatically = false - } - } - } - - // MARK: - Life Cycle - - override func viewDidLoad() { - super.viewDidLoad() - setupNavigationBar() - - guard let contentView = contentView as? BoxListView else { return } - contentView.viewModel?.input.send(.viewDidLoad) - contentView.delegate = self - } - - override func viewWillAppear(_ animated: Bool) { - guard let contentView = contentView as? BoxListView else { return } - contentView.viewModel?.input.send(.viewWillAppear) - } - - override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { - super.viewWillTransition(to: size, with: coordinator) - coordinator.animate(alongsideTransition: nil) { _ in - self.dismissPreviewIfNeeded() - } - } - - func dismissPreviewIfNeeded() { - if let previewVC = self.presentedViewController as? WebViewController { - previewVC.dismiss(animated: true, completion: nil) - } - } - - // MARK: - BaseViewControllerProtocol - - func setupNavigationBar() { - setNavigationBarTitleLabelText("42Box") - setNavigationBarMenuButtonHidden(false) - setNavigationBarAddButtonAction(#selector(addButtonTapped)) - setNavigationBarMoreButtonAction(#selector(moreButtonTapped)) - setNavigationBarDoneButtonAction(#selector(doneButtonTapped)) - } - - // MARK: - Action Functions - - @objc private func addButtonTapped() { - let addBookmarkViewController = AddBookmarkViewController() - addBookmarkViewController.delegate = self - - let navigationController = UINavigationController(rootViewController: addBookmarkViewController) - - navigationController.modalPresentationStyle = .pageSheet - present(navigationController, animated: true, completion: nil) - } - - @objc private func moreButtonTapped() { - let editViewController = EditViewController(bottomSheetHeight: 200) - editViewController.delegate = self - present(editViewController, animated: false) - } - - @objc private func doneButtonTapped() { - guard let contentView = contentView as? BoxListView else { return } - contentView.viewModel?.input.send(.toggleEditStatus) - setNavigationBarMenuButtonHidden(false) - setNavigationBarDoneButtonHidden(true) - } - -} - -extension BoxListViewController: AddBookmarkViewControllerProtocol { - func addFolderDirect(_ folder: Folder) { - guard let contentView = contentView as? BoxListView else { return } - contentView.viewModel?.addFolderDirect(folder) - } - - func addBookmarkDirect(_ bookmark: Bookmark, at folderIndex: Int) { - guard let contentView = contentView as? BoxListView else { return } - contentView.viewModel?.addBookmarkDirect(bookmark, at: folderIndex) - if UserDefaultsManager.isHaptics { - let generator = UIImpactFeedbackGenerator(style: .soft) - generator.prepare() - generator.impactOccurred() - } - } - -} - -extension BoxListViewController: BoxListViewDelegate { - func deleteFolderinBoxList(at section: Int) { - recheckDeleteFolder(at: section) - } - - private func recheckDeleteFolder(at section: Int) { - let actionSheetController = UIAlertController(title: nil, message: "λͺ¨λ“  λΆλ§ˆν¬κ°€ μ‚­μ œλ©λ‹ˆλ‹€.", preferredStyle: .alert) - let firstAction = UIAlertAction(title: "폴더 μ‚­μ œ", style: .destructive) {[weak self] _ in - guard let contentView = self?.contentView as? BoxListView else { return } - contentView.viewModel?.deleteFolderDirect(section) - } - let cancelAction = UIAlertAction(title: "μ·¨μ†Œ", style: .cancel) - actionSheetController.addAction(firstAction) - actionSheetController.addAction(cancelAction) - present(actionSheetController, animated: true) - } - - func editFolderNameinBoxList(at section: Int, currentName: String) { - let controller = UIAlertController(title: "폴더 이름 λ³€κ²½", message: nil, preferredStyle: .alert) - - let cancelAction = UIAlertAction(title: "μ·¨μ†Œ", style: .default) { _ in return } - let okAction = UIAlertAction(title: "확인", style: .default) { [weak self] action in - guard let newName = controller.textFields?.first?.text else { return } - guard let contentView = self?.contentView as? BoxListView else { return } - contentView.viewModel?.editFolderDirect(section, name: newName) - } - controller.addAction(cancelAction) - controller.addAction(okAction) - okAction.isEnabled = true - - controller.addTextField() { textField in - NotificationCenter.default.addObserver(forName: UITextField.textDidChangeNotification, object: textField, queue: OperationQueue.main, using: - {_ in - let textCount = textField.text?.trimmingCharacters(in: .whitespacesAndNewlines).count ?? 0 - let textIsNotEmpty = textCount > 0 - - okAction.isEnabled = textIsNotEmpty - - }) - } - controller.textFields?.first?.text = currentName - controller.textFields?.first?.autocorrectionType = .no - controller.textFields?.first?.spellCheckingType = .no - - self.present(controller, animated: true) - } - - func presentEditBookmarkController(at indexPath: IndexPath) { - guard let contentView = contentView as? BoxListView else { return } - - let controller = UIAlertController(title: "뢁마크 νŽΈμ§‘", message: nil, preferredStyle: .alert) - - let cancelAction = UIAlertAction(title: "μ·¨μ†Œ", style: .default) { _ in return } - let okAction = UIAlertAction(title: "확인", style: .default) { [weak self] action in - guard let newName = controller.textFields?.first?.text else { return } - guard let newUrlString = controller.textFields?.last?.text, - let newUrl = URL(string: newUrlString) else { return } - guard let contentView = self?.contentView as? BoxListView else { return } - guard let bookmark = contentView.viewModel?.bookmark(at: indexPath) else { return } - - contentView.viewModel?.editBookmark(at: indexPath, name: newName, url: newUrl) - - WebCacheManager.shared.removeViewControllerForKey(bookmark.id) - } - - controller.addAction(cancelAction) - controller.addAction(okAction) - okAction.isEnabled = true - - controller.addTextField() { textField in - textField.clearButtonMode = .whileEditing - - NotificationCenter.default.addObserver(forName: UITextField.textDidChangeNotification, object: textField, queue: OperationQueue.main, using: - {_ in - let textCount = textField.text?.trimmingCharacters(in: .whitespacesAndNewlines).count ?? 0 - let textIsNotEmpty = textCount > 0 - - okAction.isEnabled = textIsNotEmpty - - }) - } - controller.addTextField() { textField in - textField.clearButtonMode = .whileEditing - - NotificationCenter.default.addObserver(forName: UITextField.textDidChangeNotification, object: textField, queue: OperationQueue.main, using: - {_ in - let textCount = textField.text?.trimmingCharacters(in: .whitespacesAndNewlines).count ?? 0 - let textIsNotEmpty = textCount > 0 - - okAction.isEnabled = textIsNotEmpty - - }) - } - - guard let bookmark = contentView.viewModel?.bookmark(at: indexPath) else { return } - - controller.textFields?.first?.text = bookmark.name - controller.textFields?.first?.autocorrectionType = .no - controller.textFields?.first?.spellCheckingType = .no - - controller.textFields?.last?.text = bookmark.url.absoluteString - controller.textFields?.last?.autocorrectionType = .no - controller.textFields?.last?.spellCheckingType = .no - - self.present(controller, animated: true) - } - - func didSelectWeb(id: UUID, at url: URL, withName name: String) { - let viewController = getOrCreateWebViewController(id: id, url: url, name: name) - navigationController?.pushViewController(viewController, animated: true) - } - - private func getOrCreateWebViewController(id: UUID, url: URL, name: String) -> WebViewController { - let cachedViewController = WebCacheManager.shared.viewControllerForKey(id) - - if let cachedViewController = cachedViewController, cachedViewController.errorViewController?.isHandlingError == nil { - return cachedViewController - } - - if cachedViewController?.errorViewController?.isHandlingError ?? false { - WebCacheManager.shared.removeViewControllerForKey(id) - } - - return createAndCacheWebViewController(id: id, url: url, name: name) - } - - private func createAndCacheWebViewController(id: UUID, url: URL, name: String) -> WebViewController { - let viewController = WebViewController() - viewController.delegate = self - viewController.selectedWebsite = url - viewController.title = name - viewController.id = id - WebCacheManager.shared.cacheData(forKey: id, viewController: viewController) - return viewController - } - - func pushViewController(type: EditType) { - guard let contentView = contentView as? BoxListView else { return } - switch type { - case .folder: - - let editFolderViewController = EditFolderViewController(folders: contentView.viewModel?.folders ?? []) - editFolderViewController.delegate = self - navigationController?.pushViewController(editFolderViewController, animated: true) - case .bookmark: - contentView.viewModel?.input.send(.toggleEditStatus) - setNavigationBarMenuButtonHidden(true) - setNavigationBarDoneButtonHidden(false) - } - } - - func pushViewController(url: URL?) { - guard let url = url else { return } - let activityViewController = UIActivityViewController(activityItems: [url], applicationActivities: nil) - self.present(activityViewController, animated: true) - } - -} - -extension BoxListViewController: EditFolderViewControllerDelegate { - func moveFolder(from: Int, to: Int) { - guard let contentView = contentView as? BoxListView else { return } - contentView.viewModel?.moveFolder(from: from, to: to) - } - - func editFolderName(at row: Int, name: String) { - guard let contentView = contentView as? BoxListView else { return } - contentView.viewModel?.editFolderName(at: row, name: name) - } - - func deleteFolder(at row: Int) { - guard let contentView = contentView as? BoxListView else { return } - contentView.viewModel?.deleteFolder(at: row) - if UserDefaultsManager.isHaptics { - let generator = UIImpactFeedbackGenerator(style: .soft) - generator.prepare() - generator.impactOccurred() - } - } - - func addFolder(_ folder: Folder) { - guard let contentView = contentView as? BoxListView else { return } - contentView.viewModel?.addFolder(folder) - if UserDefaultsManager.isHaptics { - let generator = UIImpactFeedbackGenerator(style: .soft) - generator.prepare() - generator.impactOccurred() - } - } -} diff --git a/iBox/Sources/BoxList/BoxListViewModel.swift b/iBox/Sources/BoxList/BoxListViewModel.swift deleted file mode 100644 index adc72f7..0000000 --- a/iBox/Sources/BoxList/BoxListViewModel.swift +++ /dev/null @@ -1,206 +0,0 @@ -// -// BoxListViewModel.swift -// iBox -// -// Created by μ΄μ§€ν˜„ on 1/30/24. -// - -import Combine -import Foundation - -class BoxListViewModel { - - var boxList = [BoxListSectionViewModel]() - - var folders: [Folder] { - boxList.map{ $0.folder } - } - - var sectionsToReload = Set() - var rowsToReload = Set() - var isEditing = false - var favoriteId: UUID? = nil - - - enum Input { - case toggleEditStatus - case viewDidLoad - case viewWillAppear - case folderTapped(section: Int) - case deleteBookmark(indexPath: IndexPath) - case toggleFavorite(indexPath: IndexPath) - case moveBookmark(from: IndexPath, to: IndexPath) - case openFolderIfNeeded(folderIndex: Int) - } - - enum Output { - case sendBoxList(boxList: [BoxListSectionViewModel]) - case reloadSections(idArray: [BoxListSectionViewModel.ID]) - case reloadRows(idArray: [BoxListCellViewModel.ID]) - case editStatus(isEditing: Bool) - case openCloseFolder(boxList: [BoxListSectionViewModel], section: Int, isEmpty: Bool) - } - - let input = PassthroughSubject() - private let output = PassthroughSubject() - private var cancellables = Set() - - func transform(input: AnyPublisher) -> AnyPublisher { - input.sink { [weak self] event in - guard let self else { return } - switch event { - case .toggleEditStatus: - isEditing.toggle() - output.send(.editStatus(isEditing: isEditing)) - case .viewDidLoad: - let folders = CoreDataManager.shared.getFolders() - boxList = folders.map{ BoxListSectionViewModel(folder: $0) } - favoriteId = UserDefaultsManager.favoriteId - output.send(.sendBoxList(boxList: boxList)) - case .viewWillAppear: - output.send(.sendBoxList(boxList: boxList)) - if !sectionsToReload.isEmpty { - output.send(.reloadSections(idArray: Array(sectionsToReload))) - sectionsToReload.removeAll() - } - case let .folderTapped(section): - boxList[section].isOpened.toggle() - output.send(.openCloseFolder(boxList: boxList, section: section, isEmpty: boxList[section].boxListCellViewModelsWithStatus.isEmpty)) - case let .deleteBookmark(indexPath): - deleteBookmark(at: indexPath) - case let .toggleFavorite(indexPath): - toggleFavorite(at: indexPath) - case .moveBookmark(from: let from, to: let to): - reorderBookmark(srcIndexPath: from, destIndexPath: to) - case .openFolderIfNeeded(folderIndex: let folderIndex): - openFolder(folderIndex) - } - }.store(in: &cancellables) - return output.eraseToAnyPublisher() - } - - func viewModel(at indexPath: IndexPath) -> BoxListCellViewModel { - return boxList[indexPath.section].boxListCellViewModels[indexPath.row] - } - - func isFavoriteBookmark(at indexPath: IndexPath) -> Bool { - if let favoriteId { - if favoriteId == bookmark(at: indexPath).id { - return true - } else { return false } - } else { - return false - } - } - - private func toggleFavorite(at indexPath: IndexPath) { - let bookmark = boxList[indexPath.section].viewModel(at: indexPath.row) - if let prevId = favoriteId { - if prevId == bookmark.id { // μ§€κΈˆ λ“€μ–΄μ˜¨κ²Œ 즐겨찾기면 μ§€μ›Œμ•Ό - WebViewPreloader.shared.setFavoriteUrl(url: nil) - favoriteId = nil - UserDefaultsManager.favoriteId = nil - } else { - WebViewPreloader.shared.setFavoriteUrl(url: bookmark.url) - favoriteId = bookmark.id - } - } else { - WebViewPreloader.shared.setFavoriteUrl(url: bookmark.url) - favoriteId = bookmark.id - } - UserDefaultsManager.favoriteId = favoriteId - } - - func bookmark(at indexPath: IndexPath) -> Bookmark { - return boxList[indexPath.section].viewModel(at: indexPath.row).bookmark - } - - func deleteBookmark(at indexPath: IndexPath) { - let bookmarkId = boxList[indexPath.section].viewModel(at: indexPath.row).id - CoreDataManager.shared.deleteBookmark(id: bookmarkId) - boxList[indexPath.section].deleteCell(at: indexPath.row) - output.send(.sendBoxList(boxList: boxList)) - } - - func editBookmark(at indexPath: IndexPath, name: String, url: URL) { - let bookmarkId = boxList[indexPath.section].viewModel(at: indexPath.row).id - CoreDataManager.shared.updateBookmark(id: bookmarkId, name: name, url: url) - boxList[indexPath.section].updateCell(at: indexPath.row, bookmark: Bookmark(id: bookmarkId, name: name, url: url)) - output.send(.reloadRows(idArray: [bookmarkId])) - } - - func reorderBookmark(srcIndexPath: IndexPath, destIndexPath: IndexPath) { - let mover = boxList[srcIndexPath.section].deleteCell(at: srcIndexPath.row) - boxList[destIndexPath.section].insertCell(mover, at: destIndexPath.row) - - let destFolderId = boxList[destIndexPath.section].id - CoreDataManager.shared.moveBookmark(from: srcIndexPath, to: destIndexPath, srcId: mover.id, destFolderId: destFolderId) - } - - func openFolder(_ folderIndex: Int) { - let destFolderId = boxList[folderIndex].id - if boxList[folderIndex].openSectionIfNeeded() { - output.send(.reloadSections(idArray: [destFolderId])) - output.send(.sendBoxList(boxList: boxList)) - } - } - - func addFolder(_ folder: Folder) { - let boxListSectionViewModel = BoxListSectionViewModel(folder: folder) - boxList.append(boxListSectionViewModel) - } - - func deleteFolder(at row: Int) { - sectionsToReload.remove(boxList[row].id) - boxList.remove(at: row) - for box in boxList { - sectionsToReload.update(with: box.id) - } - } - - func editFolderName(at row: Int, name: String) { - boxList[row].name = name - sectionsToReload.update(with: boxList[row].id) - } - - func moveFolder(from: Int, to: Int) { - let mover = boxList.remove(at: from) - boxList.insert(mover, at: to) - for box in boxList { - sectionsToReload.update(with: box.id) - } - } - - func addFolderDirect(_ folder: Folder) { - let boxListSectionViewModel = BoxListSectionViewModel(folder: folder) - boxList.append(boxListSectionViewModel) - output.send(.sendBoxList(boxList: boxList)) - } - - func addBookmarkDirect(_ bookmark: Bookmark, at index: Int) { - boxList[index].boxListCellViewModels.append(BoxListCellViewModel(bookmark: bookmark)) - output.send(.sendBoxList(boxList: boxList)) - } - - func deleteFolderDirect(_ section: Int) { - let folderId = boxList[section].id - CoreDataManager.shared.deleteFolder(id: folderId) - boxList.remove(at: section) - for box in boxList { - sectionsToReload.update(with: box.id) - } - output.send(.sendBoxList(boxList: boxList)) - output.send(.reloadSections(idArray: Array(sectionsToReload))) - sectionsToReload.removeAll() - } - - func editFolderDirect(_ section: Int, name: String) { - let folderId = boxList[section].id - CoreDataManager.shared.updateFolder(id: folderId, name: name) - boxList[section].name = name - sectionsToReload.update(with: boxList[section].id) - output.send(.reloadSections(idArray: Array(sectionsToReload))) - sectionsToReload.removeAll() - } - -} diff --git a/iBox/Sources/BoxList/Edit/EditCell.swift b/iBox/Sources/BoxList/Edit/EditCell.swift deleted file mode 100644 index 9bb7e56..0000000 --- a/iBox/Sources/BoxList/Edit/EditCell.swift +++ /dev/null @@ -1,72 +0,0 @@ -// -// EditCell.swift -// iBox -// -// Created by jiyeon on 2/29/24. -// - -import UIKit - -import SnapKit - -class EditCell: UITableViewCell { - - static let reuseIdentifier = "EditCell" - - // MARK: - UI Components - - private let iconView = UIImageView().then { - $0.tintColor = .label - } - - private let titleLabel = UILabel().then { - $0.font = .cellTitleFont - $0.textColor = .label - } - - // MARK: - Initializer - - override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { - super.init(style: style, reuseIdentifier: reuseIdentifier) - setupProperty() - setupHierarchy() - setupLayout() - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - // MARK: - Setup Methods - - private func setupProperty() { - selectionStyle = .none - backgroundColor = .clear - } - - private func setupHierarchy() { - addSubview(iconView) - addSubview(titleLabel) - } - - private func setupLayout() { - iconView.snp.makeConstraints { make in - make.width.height.equalTo(20) - make.leading.equalToSuperview().inset(30) - make.centerY.equalToSuperview() - } - - titleLabel.snp.makeConstraints{ make in - make.leading.equalTo(iconView.snp.trailing).offset(20) - make.centerY.equalToSuperview() - } - } - - // MARK: - Bind - - func bind(_ editItem: EditItem) { - iconView.image = UIImage(systemName: editItem.imageString) - titleLabel.text = editItem.title - } - -} diff --git a/iBox/Sources/BoxList/Edit/EditView.swift b/iBox/Sources/BoxList/Edit/EditView.swift deleted file mode 100644 index 5141e4e..0000000 --- a/iBox/Sources/BoxList/Edit/EditView.swift +++ /dev/null @@ -1,87 +0,0 @@ -// -// EditView.swift -// iBox -// -// Created by jiyeon on 2/29/24. -// - -import UIKit - -import SnapKit - -class EditView: UIView { - - var delegate: EditViewDelegate? - - private let editItems = [ - EditItem(type: .folder, imageString: "folder.fill", title: "폴더 관리"), - EditItem(type: .bookmark, imageString: "bookmark.fill", title: "뢁마크 관리") - ] - - // MARK: - UI Components - - let tableView = UITableView().then { - $0.backgroundColor = .clear - $0.register(EditCell.self, forCellReuseIdentifier: EditCell.reuseIdentifier) - $0.separatorStyle = .none - } - - // MARK: - Initializer - - override init(frame: CGRect) { - super.init(frame: frame) - setupProperty() - setupHierarchy() - setupLayout() - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - // MARK: - Setup Methods - - private func setupProperty() { - backgroundColor = .backgroundColor - tableView.delegate = self - tableView.dataSource = self - } - - private func setupHierarchy() { - addSubview(tableView) - } - - private func setupLayout() { - tableView.snp.makeConstraints { make in - make.top.equalToSuperview().inset(40) - make.leading.bottom.trailing.equalToSuperview() - } - } - -} - -extension EditView: UITableViewDelegate { - - func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { - return 55 - } - - func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { - delegate?.pushViewController(type: editItems[indexPath.row].type) - } - -} - -extension EditView: UITableViewDataSource { - - func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - return editItems.count - } - - func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - guard let cell = tableView.dequeueReusableCell(withIdentifier: EditCell.reuseIdentifier) as? EditCell else { return UITableViewCell() } - cell.bind(editItems[indexPath.row]) - return cell - } - -} diff --git a/iBox/Sources/BoxList/Edit/EditViewController.swift b/iBox/Sources/BoxList/Edit/EditViewController.swift deleted file mode 100644 index e3c8e7b..0000000 --- a/iBox/Sources/BoxList/Edit/EditViewController.swift +++ /dev/null @@ -1,34 +0,0 @@ -// -// EditViewController.swift -// iBox -// -// Created by jiyeon on 2/29/24. -// - -import UIKit - -protocol EditViewDelegate { - func pushViewController(type: EditType) -} - -class EditViewController: BottomSheetViewController { - - var delegate: BoxListViewDelegate? - - // MARK: - Life Cycle - - override func viewDidLoad() { - super.viewDidLoad() - sheetView.delegate = self - } - -} - -extension EditViewController: EditViewDelegate { - - func pushViewController(type: EditType) { - delegate?.pushViewController(type: type) - dismiss(animated: false) - } - -} diff --git a/iBox/Sources/BoxList/EditFolder/EditFolderCell.swift b/iBox/Sources/BoxList/EditFolder/EditFolderCell.swift deleted file mode 100644 index 1d5a169..0000000 --- a/iBox/Sources/BoxList/EditFolder/EditFolderCell.swift +++ /dev/null @@ -1,88 +0,0 @@ -// -// FolderCell.swift -// iBox -// -// Created by μ΄μ§€ν˜„ on 3/11/24. -// - -import UIKit - -class EditFolderCell: UITableViewCell { - static let reuserIdentifier = "folderCell" - - var onDelete: (() -> Void)? - var onEdit: (() -> Void)? - - private let containerView = UIView() - - private let folderView = FolderView() - - private let editButton = UIButton().then{ - $0.configuration = .plain() - $0.configuration?.image = UIImage(systemName: "ellipsis.circle")?.withTintColor(.box, renderingMode: .alwaysOriginal) - - $0.showsMenuAsPrimaryAction = true - } - - private lazy var nameEditAction = UIAction(title: "이름 λ³€κ²½", image: UIImage(systemName: "pencil")) { [weak self] _ in - self?.onEdit?() - } - - private lazy var deleteAction = UIAction(title: "μ‚­μ œ", image: UIImage(systemName: "trash"), attributes: .destructive) { [weak self] _ in - self?.onDelete?() - } - - override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { - super.init(style: style, reuseIdentifier: reuseIdentifier) - setupProperty() - setupHierarchy() - setupLayout() - configureEditMenu() - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - override func prepareForReuse() { - onEdit = nil - onDelete = nil - } - - private func setupProperty() { - backgroundColor = .tableViewBackgroundColor - selectionStyle = .none - } - - private func setupHierarchy() { - contentView.addSubview(containerView) - containerView.addSubview(folderView) - containerView.addSubview(editButton) - } - - private func setupLayout() { - containerView.snp.makeConstraints { make in - make.edges.equalToSuperview() - } - - editButton.snp.makeConstraints { make in - make.top.bottom.equalToSuperview() - make.trailing.equalToSuperview().offset(-10) - make.width.equalTo(30) - } - - folderView.snp.makeConstraints { make in - make.top.bottom.leading.equalToSuperview() - make.trailing.equalTo(editButton.snp.leading) - } - } - - private func configureEditMenu() { - editButton.menu = UIMenu(options: .displayInline, children: [nameEditAction, deleteAction]) - } - - func configure(_ name: String) { - folderView.setFolderName(name) - } - -} diff --git a/iBox/Sources/BoxList/EditFolder/EditFolderView.swift b/iBox/Sources/BoxList/EditFolder/EditFolderView.swift deleted file mode 100644 index 554baa6..0000000 --- a/iBox/Sources/BoxList/EditFolder/EditFolderView.swift +++ /dev/null @@ -1,152 +0,0 @@ -// -// EditFolderView.swift -// iBox -// -// Created by jiyeon on 2/29/24. -// - -import UIKit - -protocol EditFolderViewDelegate: AnyObject { - func deleteFolder(at: IndexPath) - func editFolderName(at: IndexPath, name: String) - func moveFolder(from: Int, to: Int) -} - -class EditFolderView: UIView { - weak var delegate: EditFolderViewDelegate? - - var viewModel: EditFolderViewModel? { - didSet { - viewModel?.delegate = self - tableView.reloadData() - } - } - - private let backgroundView = UIView().then { - $0.clipsToBounds = true - $0.layer.cornerRadius = 20 - $0.backgroundColor = .tableViewBackgroundColor - } - - private let tableView = UITableView().then { - $0.register(EditFolderCell.self, forCellReuseIdentifier: EditFolderCell.reuserIdentifier) - - $0.setEditing(true, animated: true) - $0.backgroundColor = .clear - $0.rowHeight = 50 - $0.separatorInset = .init(top: 0, left: 15, bottom: 0, right: 15) - } - - // MARK: - Initializer - - override init(frame: CGRect) { - super.init(frame: frame) - configureTableView() - setupProperty() - setupHierarchy() - setupLayout() - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - // MARK: - Setup Methods - - private func configureTableView() { - tableView.dataSource = self - tableView.delegate = self - } - - private func setupProperty() { - backgroundColor = .backgroundColor - } - - private func setupHierarchy() { - addSubview(backgroundView) - backgroundView.addSubview(tableView) - } - - private func setupLayout() { - backgroundView.snp.makeConstraints { make in - make.top.equalTo(safeAreaLayoutGuide).inset(10) - make.leading.trailing.bottom.equalTo(safeAreaLayoutGuide).inset(20) - } - - tableView.snp.makeConstraints { make in - make.top.bottom.equalToSuperview().offset(10) - make.leading.trailing.equalToSuperview() - } - } - -} - -extension EditFolderView: UITableViewDataSource { - func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - viewModel?.folderCount ?? 0 - } - - func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - guard let viewModel else { fatalError() } - guard let cell = tableView.dequeueReusableCell(withIdentifier: EditFolderCell.reuserIdentifier, for: indexPath) as? EditFolderCell else { fatalError() } - cell.onDelete = { [weak self, weak cell] in - guard let self = self, let cell = cell else { return } - if let currentIndexPath = self.tableView.indexPath(for: cell) { - self.delegate?.deleteFolder(at: currentIndexPath) - } - } - cell.onEdit = { [weak self, weak cell] in - guard let self = self, let cell = cell else { return } - if let currentIndexPath = self.tableView.indexPath(for: cell) { - self.editFolderName(at: currentIndexPath) - } - } - cell.configure(viewModel.folderName(at: indexPath)) - return cell - } - - private func editFolderName(at indexPath: IndexPath) { - guard let viewModel else { return } - delegate?.editFolderName(at: indexPath, name: viewModel.folderName(at: indexPath)) - } - -} - -extension EditFolderView: UITableViewDelegate { - - func tableView(_ tableView: UITableView, editingStyleForRowAt indexPath: IndexPath) -> UITableViewCell.EditingStyle { - return .none - } - - func tableView(_ tableView: UITableView, shouldIndentWhileEditingRowAt indexPath: IndexPath) -> Bool { - return false - } - - func tableView(_ tableView: UITableView, moveRowAt sourceIndexPath: IndexPath, to destinationIndexPath: IndexPath) { - guard let viewModel else { return } - viewModel.reorderFolder(srcIndexPath: sourceIndexPath, destIndexPath: destinationIndexPath) - delegate?.moveFolder(from: sourceIndexPath.row, to: destinationIndexPath.row) - } -} - -extension EditFolderView: EditFolderViewModelDelegate { - func reloadRow(_ indexPath: IndexPath) { - tableView.reloadRows(at: [indexPath], with: .automatic) - } - - func deleteRow(_ indexPath: IndexPath) { - tableView.deleteRows(at: [indexPath], with: .automatic) - } - - func addRow() { - guard let viewModel else { return } - let indexPath = IndexPath(row: viewModel.folderCount - 1, section: 0) - tableView.insertRows(at: [indexPath], with: .automatic) - } - - func reloadTableView() { - tableView.reloadData() - } -} - diff --git a/iBox/Sources/BoxList/EditFolder/EditFolderViewController.swift b/iBox/Sources/BoxList/EditFolder/EditFolderViewController.swift deleted file mode 100644 index a708a8f..0000000 --- a/iBox/Sources/BoxList/EditFolder/EditFolderViewController.swift +++ /dev/null @@ -1,139 +0,0 @@ -// -// EditFolderViewController.swift -// iBox -// -// Created by jiyeon on 2/29/24. -// - -import UIKit - -protocol EditFolderViewControllerDelegate: AnyObject { - func addFolder(_ folder: Folder) - func deleteFolder(at row: Int) - func editFolderName(at row: Int, name: String) - func moveFolder(from: Int, to: Int) -} - -class EditFolderViewController: BaseViewController, BaseViewControllerProtocol { - weak var delegate: EditFolderViewControllerDelegate? - - init(folders: [Folder]) { - super.init(nibName: nil, bundle: nil) - setupEditFolderView(folders) - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - // MARK: - Life Cycle - - override func viewDidLoad() { - super.viewDidLoad() - setupNavigationBar() - } - - // MARK: - BaseNavigationBarViewControllerProtocol - - func setupEditFolderView(_ folders: [Folder]) { - guard let contentView = contentView as? EditFolderView else { return } - let viewModel = EditFolderViewModel(folderList: folders) - contentView.viewModel = viewModel - contentView.delegate = self - } - - func setupNavigationBar() { - setNavigationBarTitleLabelText("폴더 관리") - setNavigationBarTitleLabelFont(.semiboldLabelFont) - setNavigationBarAddButtonHidden(false) - setNavigationBarBackButtonHidden(false) - setNavigationBarAddButtonAction(#selector(addButtonTapped)) - } - - @objc private func addButtonTapped() { - let controller = UIAlertController(title: "μƒˆλ‘œμš΄ 폴더", message: "이 ν΄λ”μ˜ 이름을 μž…λ ₯ν•˜μ‹­μ‹œμ˜€.", preferredStyle: .alert) - - let cancelAction = UIAlertAction(title: "μ·¨μ†Œ", style: .default) { _ in return } - let okAction = UIAlertAction(title: "확인", style: .default) { [weak self] action in - guard let name = controller.textFields?.first?.text else { return } - let folder = Folder(id: UUID(), name: name, bookmarks: []) - guard let contentView = self?.contentView as? EditFolderView else { return } - contentView.viewModel?.addFolder(folder) - self?.delegate?.addFolder(folder) - } - controller.addAction(cancelAction) - controller.addAction(okAction) - okAction.isEnabled = false - - controller.addTextField() { textField in - NotificationCenter.default.addObserver(forName: UITextField.textDidChangeNotification, object: textField, queue: OperationQueue.main, using: - {_ in - let textCount = textField.text?.trimmingCharacters(in: .whitespacesAndNewlines).count ?? 0 - let textIsNotEmpty = textCount > 0 - - okAction.isEnabled = textIsNotEmpty - - }) - } - controller.textFields?.first?.placeholder = "이름" - controller.textFields?.first?.autocorrectionType = .no - controller.textFields?.first?.spellCheckingType = .no - self.present(controller, animated: true) - } - -} - -extension EditFolderViewController: EditFolderViewDelegate { - func moveFolder(from: Int, to: Int) { - delegate?.moveFolder(from: from, to: to) - } - - func deleteFolder(at indexPath: IndexPath) { - recheckDeleteFolder(at: indexPath) - } - - private func recheckDeleteFolder(at indexPath: IndexPath) { - let actionSheetController = UIAlertController(title: nil, message: "λͺ¨λ“  λΆλ§ˆν¬κ°€ μ‚­μ œλ©λ‹ˆλ‹€.", preferredStyle: .alert) - let firstAction = UIAlertAction(title: "폴더 μ‚­μ œ", style: .destructive) {[weak self] _ in - guard let contentView = self?.contentView as? EditFolderView else { return } - contentView.viewModel?.deleteFolder(at: indexPath) - self?.delegate?.deleteFolder(at: indexPath.row) - } - let cancelAction = UIAlertAction(title: "μ·¨μ†Œ", style: .cancel) - actionSheetController.addAction(firstAction) - actionSheetController.addAction(cancelAction) - present(actionSheetController, animated: true) - } - - func editFolderName(at indexPath: IndexPath, name: String) { - let controller = UIAlertController(title: "폴더 이름 λ³€κ²½", message: nil, preferredStyle: .alert) - - let cancelAction = UIAlertAction(title: "μ·¨μ†Œ", style: .default) { _ in return } - let okAction = UIAlertAction(title: "확인", style: .default) { [weak self] action in - guard let newName = controller.textFields?.first?.text else { return } - guard let contentView = self?.contentView as? EditFolderView else { return } - contentView.viewModel?.editFolderName(at: indexPath, name: newName) - self?.delegate?.editFolderName(at: indexPath.row, name: newName) - } - controller.addAction(cancelAction) - controller.addAction(okAction) - okAction.isEnabled = true - - controller.addTextField() { textField in - NotificationCenter.default.addObserver(forName: UITextField.textDidChangeNotification, object: textField, queue: OperationQueue.main, using: - {_ in - let textCount = textField.text?.trimmingCharacters(in: .whitespacesAndNewlines).count ?? 0 - let textIsNotEmpty = textCount > 0 - - okAction.isEnabled = textIsNotEmpty - - }) - } - controller.textFields?.first?.text = name - controller.textFields?.first?.autocorrectionType = .no - controller.textFields?.first?.spellCheckingType = .no - - self.present(controller, animated: true) - } - -} diff --git a/iBox/Sources/BoxList/EditFolder/EditFolderViewModel.swift b/iBox/Sources/BoxList/EditFolder/EditFolderViewModel.swift deleted file mode 100644 index 5ec7149..0000000 --- a/iBox/Sources/BoxList/EditFolder/EditFolderViewModel.swift +++ /dev/null @@ -1,59 +0,0 @@ -// -// EditFolderViewModel.swift -// iBox -// -// Created by μ΄μ§€ν˜„ on 3/11/24. -// - -import Combine -import Foundation - -protocol EditFolderViewModelDelegate: AnyObject { - func reloadRow(_ indexPath: IndexPath) - func deleteRow(_ indexPath: IndexPath) - func reloadTableView() - func addRow() -} - -class EditFolderViewModel { - weak var delegate: EditFolderViewModelDelegate? - var folderList: [Folder] - - private let output = PassthroughSubject() - - init(folderList: [Folder]) { - self.folderList = folderList - } - - var folderCount: Int { - folderList.count - } - - func addFolder(_ folder: Folder) { - CoreDataManager.shared.addFolder(folder) - folderList.append(folder) - delegate?.addRow() - } - - func deleteFolder(at indexPath: IndexPath) { - CoreDataManager.shared.deleteFolder(id: folderList[indexPath.row].id) - folderList.remove(at: indexPath.row) - delegate?.deleteRow(indexPath) - } - - func editFolderName(at indexPath: IndexPath, name: String) { - CoreDataManager.shared.updateFolder(id: folderList[indexPath.row].id, name: name) - folderList[indexPath.row].name = name - delegate?.reloadRow(indexPath) - } - - func folderName(at indexPath: IndexPath) -> String { - return folderList[indexPath.row].name - } - - func reorderFolder(srcIndexPath: IndexPath, destIndexPath: IndexPath) { - let mover = folderList.remove(at: srcIndexPath.row) - folderList.insert(mover, at: destIndexPath.row) - CoreDataManager.shared.moveFolder(from: srcIndexPath.row, to: destIndexPath.row) - } -} diff --git a/iBox/Sources/BoxList/FolderButton.swift b/iBox/Sources/BoxList/FolderButton.swift deleted file mode 100644 index 81f548e..0000000 --- a/iBox/Sources/BoxList/FolderButton.swift +++ /dev/null @@ -1,87 +0,0 @@ -// -// FolderButton.swift -// iBox -// -// Created by μ΄μ§€ν˜„ on 1/4/24. -// - -import UIKit - -import SnapKit - -class FolderButton: UIButton { - - private var isOpen: Bool = true - - // MARK: - UI Components - - private let folderView = FolderView().then { - $0.isUserInteractionEnabled = false - } - - private let openCloseImageView = UIImageView().then { - $0.tintColor = .tertiaryLabel - $0.contentMode = .scaleAspectFit - } - - // MARK: - Initializer - - init(isOpen: Bool) { - self.isOpen = isOpen - super.init(frame: .zero) - setupProperty() - setupHierarchy() - setupLayout() - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - // MARK: - Setup Methods - - private func setupProperty() { - backgroundColor = .tableViewBackgroundColor - let config = UIImage.SymbolConfiguration(pointSize: 15, weight: .medium, scale: .default) - openCloseImageView.image = UIImage(systemName: "chevron.right", withConfiguration: config) - if isOpen { - openCloseImageView.transform = CGAffineTransform(rotationAngle: CGFloat.pi / 2) - } - } - - private func setupHierarchy() { - addSubview(folderView) - addSubview(openCloseImageView) - } - - private func setupLayout() { - openCloseImageView.snp.makeConstraints { make in - make.centerY.equalToSuperview() - make.width.height.equalTo(15) - make.trailing.equalToSuperview().offset(-20) - } - - folderView.snp.makeConstraints { make in - make.top.bottom.leading.equalToSuperview() - make.trailing.equalTo(openCloseImageView.snp.leading) - } - } - - func setFolderName(_ name: String) { - folderView.setFolderName(name) - } - - func toggleStatus() { - isOpen = !isOpen - if isOpen { - UIView.animate(withDuration: 0.25) { [weak self] in - self?.openCloseImageView.transform = CGAffineTransform(rotationAngle: CGFloat.pi / 2) - } - } else { - UIView.animate(withDuration: 0.25) { [weak self] in - self?.openCloseImageView.transform = CGAffineTransform(rotationAngle: 0) - } - } - - } -} diff --git a/iBox/Sources/BoxList/FolderView.swift b/iBox/Sources/BoxList/FolderView.swift deleted file mode 100644 index 37af8c4..0000000 --- a/iBox/Sources/BoxList/FolderView.swift +++ /dev/null @@ -1,63 +0,0 @@ -// -// FolderView.swift -// iBox -// -// Created by μ΄μ§€ν˜„ on 3/11/24. -// - -import UIKit - -class FolderView: UIView { - private let folderImageView = UIImageView().then { - $0.image = UIImage(systemName: "folder.fill") - $0.contentMode = .scaleAspectFit - $0.tintColor = .gray - } - - private let folderNameLabel = UILabel().then { - $0.textColor = .label - $0.font = .boldLabelFont - } - - init() { - super.init(frame: .zero) - setupProperty() - setupHierarchy() - setupLayout() - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - // MARK: - Setup Methods - - private func setupProperty() { - backgroundColor = .tableViewBackgroundColor - } - - private func setupHierarchy() { - addSubview(folderImageView) - addSubview(folderNameLabel) - } - - private func setupLayout() { - folderImageView.snp.makeConstraints { make in - make.centerY.equalToSuperview() - make.width.height.equalTo(25) - make.leading.equalToSuperview().offset(20) - } - - folderNameLabel.snp.makeConstraints { make in - make.centerY.equalToSuperview() - make.leading.equalTo(folderImageView.snp.trailing).offset(10) - make.trailing.equalToSuperview().inset(10) - } - } - - func setFolderName(_ name: String) { - folderNameLabel.text = name - } -} - - diff --git a/iBox/Sources/CustomLaunchScreen/CustomLaunchScreenView.swift b/iBox/Sources/CustomLaunchScreen/CustomLaunchScreenView.swift deleted file mode 100644 index d24fcf1..0000000 --- a/iBox/Sources/CustomLaunchScreen/CustomLaunchScreenView.swift +++ /dev/null @@ -1,79 +0,0 @@ -// -// CustomLaunchScreenView.swift -// iBox -// -// Created by Chan on 3/2/24. -// - -import UIKit - -import SnapKit - -class CustomLaunchScreenView: UIView { - private let logoImageView = UIImageView() - private var imageViews: [UIImageView] = [] - private let images = ["fox_page0", "fox_page1", "fox_page2", "fox_page3", "fox_page4"] - private var timer: Timer? - - - override init(frame: CGRect) { - super.init(frame: frame) - configureUI() - } - - required init?(coder: NSCoder) { - super.init(coder: coder) - configureUI() - } - - private func configureUI() { - backgroundColor = .backgroundColor - logoImageView.image = UIImage(named: "LaunchIcon") - logoImageView.contentMode = .scaleAspectFit - addSubview(logoImageView) - - for imageName in images { - let imageView = UIImageView(image: UIImage(named: imageName)) - imageView.contentMode = .scaleAspectFit - imageView.isHidden = true - imageView.tintColor = .box2 - addSubview(imageView) - imageViews.append(imageView) - } - - logoImageView.snp.makeConstraints { make in - make.center.equalToSuperview() - make.width.height.equalTo(200) - } - - imageViews.forEach { imageView in - imageView.snp.makeConstraints { make in - make.bottom.equalToSuperview().inset(20) - make.left.equalToSuperview().inset(20) - make.width.height.equalTo(32) - } - } - - changeImages() - } - - private func changeImages() { - var currentIndex = 0 - - timer = Timer.scheduledTimer(withTimeInterval: 0.2, repeats: true) { [weak self] timer in - guard let self = self else { return } - - let state = AppStateManager.shared.versionCheckCompleted - if state == .success || state == .later || state == .maxRetryReached { - timer.invalidate() - self.timer = nil - return - } - - self.imageViews.forEach { $0.isHidden = true } - self.imageViews[currentIndex].isHidden = false - - currentIndex = (currentIndex + 1) % self.imageViews.count - } - } -} diff --git a/iBox/Sources/CustomLaunchScreen/CustomLaunchScreenViewController.swift b/iBox/Sources/CustomLaunchScreen/CustomLaunchScreenViewController.swift deleted file mode 100644 index 1c63d5b..0000000 --- a/iBox/Sources/CustomLaunchScreen/CustomLaunchScreenViewController.swift +++ /dev/null @@ -1,93 +0,0 @@ -// -// CustomLaunchScreenViewController.swift -// iBox -// -// Created by Chan on 3/2/24. -// - -import UIKit -import Combine - -class CustomLaunchScreenViewController: UIViewController { - private var customLaunchScreenView: CustomLaunchScreenView! - private var cancellables: Set = [] - private var urlContext: UIOpenURLContext? - - init(urlContext: UIOpenURLContext?) { - self.urlContext = urlContext - super.init(nibName: nil, bundle: nil) - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - override func viewDidLoad() { - super.viewDidLoad() - - configureLaunchScreenView() - observeVersionCheckCompletion() - } - - private func configureLaunchScreenView() { - customLaunchScreenView = CustomLaunchScreenView(frame: self.view.bounds) - self.view.addSubview(customLaunchScreenView) - - customLaunchScreenView.autoresizingMask = [.flexibleWidth, .flexibleHeight] - } - - // MARK: - Custom Update Checker View (μ˜ˆμ •) - private func observeVersionCheckCompletion() { - AppStateManager.shared.$versionCheckCompleted - .receive(on: DispatchQueue.main) - .sink { [weak self] result in - switch result { - case .success, .maxRetryReached, .later: - self?.transitionToNextScreen() - print("App 정상 μ‹€ν–‰") - case .urlError: - print("URL μ—λŸ¬κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.") - case .networkError: - print("λ„€νŠΈμ›Œν¬ μš”μ²­μ— μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€.") - case .decodingError: - print("응닡 디코딩에 μ‹€νŒ¨ν–ˆμŠ΅λ‹ˆλ‹€.") - case .versionOutdated(let mandatoryUpdate, let updateUrl): - if mandatoryUpdate { - print("ν•„μˆ˜ μ—…λ°μ΄νŠΈκ°€ ν•„μš”ν•©λ‹ˆλ‹€. μ—…λ°μ΄νŠΈ URL: \(updateUrl)") - } else { - print("μ—…λ°μ΄νŠΈκ°€ μžˆμŠ΅λ‹ˆλ‹€. μ—…λ°μ΄νŠΈ URL: \(updateUrl)") - } - case .serverError: - print("μ„œλ²„ μ—λŸ¬ λ˜λŠ” 기타 μ—λŸ¬κ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€.") - case .update: - print("μ—…λ°μ΄νŠΈ 클릭") - case .internalSceneError: - print("scene error μˆ˜μ§‘") - case .internalInfoError: - print("info error μˆ˜μ§‘") - case .initial: - self?.startupFlow() - print("init") - } - } - .store(in: &cancellables) - } - - private func startupFlow() { - DefaultData.insertDefaultDataIfNeeded() - } - - private func transitionToNextScreen() { - guard let window = self.view.window else { return } - - let mainViewController = MainTabBarController() - window.rootViewController = mainViewController - - if let urlContext = self.urlContext, - let tabBarController = window.rootViewController as? UITabBarController { - AddBookmarkManager.shared.navigateToAddBookmarkView(from: urlContext.url, in: tabBarController) - } - - UIView.transition(with: window, duration: 0.5, options: .transitionCrossDissolve, animations: {}, completion: nil) - } -} diff --git a/iBox/Sources/Error/ErrorCode.swift b/iBox/Sources/Error/ErrorCode.swift deleted file mode 100644 index 65a90fe..0000000 --- a/iBox/Sources/Error/ErrorCode.swift +++ /dev/null @@ -1,18 +0,0 @@ -// -// ErrorCode.swift -// iBox -// -// Created by Chan on 4/23/24. -// - -import Foundation - -enum ViewErrorCode: Equatable { - case normal - case unknown - case webContentProcessTerminated - case webViewInvalidated - case javaScriptExceptionOccurred - case javaScriptResultTypeIsUnsupported - case networkError(URLError) -} diff --git a/iBox/Sources/Error/ErrorPageView.swift b/iBox/Sources/Error/ErrorPageView.swift deleted file mode 100644 index 8c3836b..0000000 --- a/iBox/Sources/Error/ErrorPageView.swift +++ /dev/null @@ -1,187 +0,0 @@ -// -// ErrorPageView.swift -// iBox -// -// Created by Chan on 4/18/24. -// - -import UIKit - -import SnapKit - -class ErrorPageView: UIView { - private var imageViews: [UIImageView] = [] - private let images = ["fox_page0", "fox_page1", "fox_page2", "fox_page3", "fox_page4"] - var timer: Timer? - - private let backPannelView = UIView().then { - $0.backgroundColor = .backgroundColor - $0.clipsToBounds = true - $0.layer.cornerRadius = 15 - } - - private let problemUrlLabel = UILabel().then { - $0.font = .cellTitleFont - $0.textAlignment = .center - $0.numberOfLines = 0 - $0.lineBreakMode = .byTruncatingTail - } - - private let messageLabel = UILabel().then { - $0.textAlignment = .center - $0.numberOfLines = 0 - $0.text = "ν•΄λ‹Ή μ£Όμ†Œμ—μ„œ λ¬Έμ œκ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€." - $0.font = .boldLabelFont - } - - let closeButton = UIButton().then { - $0.configuration = .plain() - $0.configuration?.attributedTitle = .init( - "λ‹«κΈ°", - attributes: .init([.font: UIFont.boldLabelFont, .foregroundColor: UIColor.white]) - ) - $0.setTitleColor(.white, for: .normal) - $0.backgroundColor = .systemGray - $0.layer.cornerRadius = 10 - $0.addAnimationForStateChange(from: .box, to: .systemGray) - } - - let retryButton = UIButton().then { - $0.configuration = .plain() - $0.configuration?.attributedTitle = .init( - "μƒˆλ‘œκ³ μΉ¨", - attributes: .init([.font: UIFont.boldLabelFont, .foregroundColor: UIColor.white]) - ) - $0.setTitleColor(.white, for: .normal) - $0.backgroundColor = .systemGray - $0.layer.cornerRadius = 10 - $0.addAnimationForStateChange(from: .box, to: .systemGray) - } - - let backButton = UIButton().then { - $0.configuration = .plain() - $0.configuration?.attributedTitle = .init( - "λ‚˜κ°€κΈ°", - attributes: .init([.font: UIFont.boldLabelFont, .foregroundColor: UIColor.white]) - ) - $0.backgroundColor = .box2 - $0.layer.cornerRadius = 10 - $0.addAnimationForStateChange(from: .box, to: .box2) - } - - let stackView = UIStackView().then { - $0.axis = .horizontal - $0.spacing = 20 - } - - override init(frame: CGRect) { - super.init(frame: frame) - setupProperty() - setupHierarchy() - setupAnimation() - setupLayout() - changeImages() - } - - override func willMove(toSuperview newSuperview: UIView?) { - super.willMove(toSuperview: newSuperview) - - if newSuperview == nil { - timer?.invalidate() - timer = nil - } - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - private func setupProperty() { - changeImages() - } - - private func setupHierarchy() { - addSubview(backPannelView) - backPannelView.addSubview(messageLabel) - backPannelView.addSubview(problemUrlLabel) - backPannelView.addSubview(stackView) - stackView.addArrangedSubview(backButton) - stackView.addArrangedSubview(retryButton) - stackView.addArrangedSubview(closeButton) - } - - private func setupAnimation() { - for imageName in images { - let imageView = UIImageView(image: UIImage(named: imageName)) - imageView.contentMode = .scaleAspectFit - imageView.isHidden = true - imageView.tintColor = .box2 - addSubview(imageView) - imageViews.append(imageView) - } - } - - private func setupLayout() { - imageViews.forEach { imageView in - imageView.snp.makeConstraints { make in - make.centerX.equalToSuperview() - make.bottom.equalTo(backPannelView.snp.top).offset(5) - make.width.height.equalTo(38) - } - } - - backPannelView.snp.makeConstraints { make in - make.top.equalToSuperview().inset(100) - make.trailing.leading.equalToSuperview().inset(20) - make.height.equalToSuperview().multipliedBy(0.4) - } - - problemUrlLabel.snp.makeConstraints { make in - make.top.equalToSuperview().inset(20) - make.bottom.equalTo(messageLabel.snp.top).offset(-20) - make.leading.trailing.equalToSuperview().inset(20) - } - - messageLabel.snp.makeConstraints { make in - make.bottom.equalTo(stackView.snp.top).offset(-20) - make.leading.trailing.equalToSuperview().inset(20) - } - - stackView.snp.makeConstraints { make in - make.leading.bottom.trailing.equalToSuperview().inset(20) - } - - [backButton, retryButton, closeButton].forEach { button in - button.snp.makeConstraints { make in - make.height.equalTo(40) - } - } - } - - func configure(with error: Error, url: String) { - problemUrlLabel.text = "\(url)" - print(error.localizedDescription) - } - - private func changeImages() { - var currentIndex = 0 - - timer = Timer.scheduledTimer(withTimeInterval: 0.2, repeats: true) { [weak self] timer in - guard let self = self else { - timer.invalidate() - return - } - - let state = AppStateManager.shared.currentViewErrorState - - if state == .normal { - return - } - - self.imageViews.forEach { $0.isHidden = true } - self.imageViews[currentIndex].isHidden = false - - currentIndex = (currentIndex + 1) % self.imageViews.count - } - } -} diff --git a/iBox/Sources/Error/ErrorPageViewController.swift b/iBox/Sources/Error/ErrorPageViewController.swift deleted file mode 100644 index 0cc570e..0000000 --- a/iBox/Sources/Error/ErrorPageViewController.swift +++ /dev/null @@ -1,154 +0,0 @@ -// -// ErrorPageViewController.swift -// iBox -// -// Created by Chan on 4/18/24. -// - -import UIKit -import WebKit - -protocol ErrorPageControllerDelegate: AnyObject { - func presentErrorPage(_ errorPage: ErrorPageViewController) - func backButton() -} - -protocol WebViewErrorDelegate { - func webView(_ webView: WebView, didFailWithError error: Error, url: URL?) -} - -class ErrorPageViewController: UIViewController { - weak var delegate: ErrorPageControllerDelegate? - var webView: WebView? - var isHandlingError = false - - let slideInPresentationManager = SlideInPresentationManager() - - init(webView: WebView) { - super.init(nibName: nil, bundle: nil) - self.webView = webView - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - override func loadView() { - self.view = ErrorPageView() - } - - override func viewDidLoad() { - super.viewDidLoad() - setupProperty() - setupPresentation() - } - - override func viewWillDisappear(_ animated: Bool) { - resetErrorHandling() - } - - private func setupProperty() { - if let errorPageView = view as? ErrorPageView { - errorPageView.retryButton.addTarget(self, action: #selector(retryButtonTapped), for: .touchUpInside) - errorPageView.closeButton.addTarget(self, action: #selector(closeButtonTapped), for: .touchUpInside) - errorPageView.backButton.addTarget(self, action: #selector(backButtonTapped), for: .touchUpInside) - } - } - - func setupPresentation() { - self.modalPresentationStyle = .custom - self.transitioningDelegate = slideInPresentationManager - } - - func configureWithError(_ error: Error, url: String) { - if let errorPageView = view as? ErrorPageView { - errorPageView.configure(with: error, url: url) - } - } - - @objc private func retryButtonTapped() { - webView?.retryLoading() - } - - @objc private func closeButtonTapped() { - dismiss(animated: true) - } - - @objc func backButtonTapped() { - self.dismiss(animated: true) { - self.delegate?.backButton() - } - } - - func handleError(_ error: Error, _ url: URL?) { - guard !isHandlingError else { return } - isHandlingError = true - - if presentedViewController != nil { - dismiss(animated: true) { - self.configureWithError(error, url: url?.absoluteString ?? "") - self.delegate?.presentErrorPage(self) - } - } else { - configureWithError(error, url: url?.absoluteString ?? "") - delegate?.presentErrorPage(self) - } - } - - func resetErrorHandling() { - isHandlingError = false - } - - private func convertErrorToViewErrorCode(_ error: Error) -> ViewErrorCode { - if let wkError = error as? WKError { - switch wkError.code { - case .webContentProcessTerminated: - return .webContentProcessTerminated - case .webViewInvalidated: - return .webViewInvalidated - case .javaScriptExceptionOccurred: - return .javaScriptExceptionOccurred - case .javaScriptResultTypeIsUnsupported: - return .javaScriptResultTypeIsUnsupported - default: - return .unknown - } - } else if let urlError = error as? URLError { - return .networkError(urlError) - } - - return .unknown - } - - private func handleViewError(_ error: ViewErrorCode) { - switch error { - case .normal: - print("OK.") - case .unknown: - print("Unknown error occurred in the view.") - case .webContentProcessTerminated: - print("Web content process has been terminated unexpectedly.") - case .webViewInvalidated: - print("The web view has been invalidated.") - case .javaScriptExceptionOccurred: - print("A JavaScript exception occurred.") - case .javaScriptResultTypeIsUnsupported: - print("JavaScript returned a result type that is not supported.") - case .networkError(let urlError): - print("Network error occurred: \(urlError.localizedDescription)") - } - - AppStateManager.shared.updateViewError(error) - } -} - -extension ErrorPageViewController: WebViewErrorDelegate { - - func webView(_ webView: WebView, didFailWithError error: Error, url: URL?) { - handleError(error, url) - - let viewErrorCode = convertErrorToViewErrorCode(error) - handleViewError(viewErrorCode) - } - -} diff --git a/iBox/Sources/Extension/Notification+Extension.swift b/iBox/Sources/Extension/Notification+Extension.swift deleted file mode 100644 index fbe5b65..0000000 --- a/iBox/Sources/Extension/Notification+Extension.swift +++ /dev/null @@ -1,15 +0,0 @@ -// -// Notification+Extension.swift -// iBox -// -// Created by jiyeon on 4/11/24. -// - -import Foundation - -extension Notification.Name { - - static let didResetData = Notification.Name("didResetData") - static let didAddBookmark = Notification.Name("didAddBookmark") - -} diff --git a/iBox/Sources/Extension/UIButton+Extension.swift b/iBox/Sources/Extension/UIButton+Extension.swift deleted file mode 100644 index 16dee87..0000000 --- a/iBox/Sources/Extension/UIButton+Extension.swift +++ /dev/null @@ -1,55 +0,0 @@ -// -// UIButton+Extension.swift -// iBox -// -// Created by Chan on 4/25/24. -// - -import UIKit -import ObjectiveC - -private var touchDownColorKey: UInt8 = 0 -private var touchUpColorKey: UInt8 = 0 - -extension UIButton { - var touchDownColor: UIColor? { - get { - return objc_getAssociatedObject(self, &touchDownColorKey) as? UIColor - } - set { - objc_setAssociatedObject(self, &touchDownColorKey, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - } - - var touchUpColor: UIColor? { - get { - return objc_getAssociatedObject(self, &touchUpColorKey) as? UIColor - } - set { - objc_setAssociatedObject(self, &touchUpColorKey, newValue, .OBJC_ASSOCIATION_RETAIN_NONATOMIC) - } - } - - func addAnimationForStateChange(from: UIColor, to: UIColor) { - self.touchDownColor = from - self.touchUpColor = to - addTarget(self, action: #selector(animateOnTouchDown), for: .touchDown) - addTarget(self, action: #selector(animateOnTouchUp), for: [.touchUpInside, .touchUpOutside, .touchCancel]) - } - - @objc private func animateOnTouchDown() { - if let color = touchDownColor { - UIView.animate(withDuration: 0.3) { - self.backgroundColor = color - } - } - } - - @objc private func animateOnTouchUp() { - if let color = touchUpColor { - UIView.animate(withDuration: 0.3) { - self.backgroundColor = color - } - } - } -} diff --git a/iBox/Sources/Extension/UIColor+Extension.swift b/iBox/Sources/Extension/UIColor+Extension.swift deleted file mode 100644 index 2a5fc3f..0000000 --- a/iBox/Sources/Extension/UIColor+Extension.swift +++ /dev/null @@ -1,43 +0,0 @@ -// -// UIColor+Extension.swift -// iBox -// -// Created by jiyeon on 1/3/24. -// - -import UIKit - -extension UIColor { - - convenience init(hex: UInt, alpha: CGFloat = 1.0) { - self.init( - red: CGFloat((hex & 0xFF0000) >> 16) / 255.0, - green: CGFloat((hex & 0x00FF00) >> 8) / 255.0, - blue: CGFloat(hex & 0x0000FF) / 255.0, - alpha: CGFloat(alpha) - ) - } - - private static func color(light: UIColor, dark: UIColor) -> UIColor { - return UIColor { traitCollection in - switch traitCollection.userInterfaceStyle { - case .dark: - return dark - default: - return light - } - } - } - - static let box = UIColor(hex: 0xFF7F29) - static let box2 = UIColor(hex: 0xFF9548) - static let box3 = UIColor(hex: 0xFFDC6E) - static let boxWithOpacity = UIColor(hex: 0xFF7F29, alpha: 0.7) - static let box2WithOpacity = UIColor(hex: 0xFF9548, alpha: 0.7) - static let tableViewBackgroundColor = color(light: .systemGroupedBackground, dark: .systemGray4) - static let folderGray = color(light: .systemGray3, dark: .systemGray2) - static let webIconColor = color(light: .black, dark: .systemGray) - static let dimmedViewColor = UIColor.black.withAlphaComponent(0.75) - static let backgroundColor = color(light: .white, dark: UIColor(hex: 0x242424)) - static let invertBackgroundColor = color(light: UIColor(hex: 0x242424), dark: .white) -} diff --git a/iBox/Sources/Extension/UIFont+Extension.swift b/iBox/Sources/Extension/UIFont+Extension.swift deleted file mode 100644 index cdca19a..0000000 --- a/iBox/Sources/Extension/UIFont+Extension.swift +++ /dev/null @@ -1,23 +0,0 @@ -// -// UIFont+Extension.swift -// iBox -// -// Created by jiyeon on 3/26/24. -// - -import UIKit - -extension UIFont { - - static let titleFont = UIFont.systemFont(ofSize: 20.0, weight: .bold) - static let subTitlefont = UIFont.systemFont(ofSize: 16.0, weight: .semibold) - static let barItemFont = UIFont.systemFont(ofSize: 14.5, weight: .semibold) - static let labelFont = UIFont.systemFont(ofSize: 16.0) - static let semiboldLabelFont = UIFont.systemFont(ofSize: 16.0, weight: .semibold) - static let boldLabelFont = UIFont.systemFont(ofSize: 14.5, weight: .bold) - static let cellTitleFont = UIFont.systemFont(ofSize: 14.5) - static let cellDescriptionFont = UIFont.systemFont(ofSize: 12.0, weight: .regular) - static let descriptionFont = UIFont.systemFont(ofSize: 12.5) - static let refreshControlFont = UIFont.boldSystemFont(ofSize: 11.0) - static let emptyLabelFont = UIFont.systemFont(ofSize: 15.0, weight: .regular) -} diff --git a/iBox/Sources/Extension/UIImage+Extension.swift b/iBox/Sources/Extension/UIImage+Extension.swift deleted file mode 100644 index 1b7e640..0000000 --- a/iBox/Sources/Extension/UIImage+Extension.swift +++ /dev/null @@ -1,27 +0,0 @@ -// -// UIImage+Extension.swift -// iBox -// -// Created by μ΄μ§€ν˜„ on 4/11/24. -// - -import UIKit - -extension UIImage { - func imageWithColor(_ color: UIColor) -> UIImage? { - UIGraphicsBeginImageContextWithOptions(self.size, false, self.scale); - guard let context = UIGraphicsGetCurrentContext(), let cgImage = self.cgImage else { return nil } - - context.translateBy(x: 0, y: self.size.height) - context.scaleBy(x: 1.0, y: -1.0); - context.setBlendMode(.normal) - let rect = CGRect(x: 0, y: 0, width: size.width, height: size.height) - context.clip(to: rect, mask: cgImage) - color.setFill() - context.fill(rect) - let newImage = UIGraphicsGetImageFromCurrentImageContext() - UIGraphicsEndImageContext(); - - return newImage - } -} diff --git a/iBox/Sources/Extension/UIView+Extension.swift b/iBox/Sources/Extension/UIView+Extension.swift deleted file mode 100644 index e7f584c..0000000 --- a/iBox/Sources/Extension/UIView+Extension.swift +++ /dev/null @@ -1,54 +0,0 @@ -// -// UIView+Extension.swift -// iBox -// -// Created by jiyeon on 1/3/24. -// - -import UIKit - -protocol Then {} - -extension Then where Self: AnyObject { - - func then(block: (Self) -> Void) -> Self { - block(self) - return self - } - -} - -extension UIView: Then {} - -extension UIView { - - func toUserInterfaceStyle(_ theme: Theme) -> UIUserInterfaceStyle { - switch theme { - case .light: return UIUserInterfaceStyle.light - case .dark: return UIUserInterfaceStyle.dark - case .system: return UIUserInterfaceStyle.unspecified - } - } - - func roundCorners(_ corners: UIRectCorner, radius: CGFloat) { - DispatchQueue.main.async { // ν™•μ‹€νžˆ 메인 μŠ€λ ˆλ“œμ—μ„œ μ‹€ν–‰λ˜λ„λ‘ κ°•μ œ - let path = UIBezierPath(roundedRect: self.bounds, byRoundingCorners: corners, cornerRadii: CGSize(width: radius, height: radius)) - let mask = CAShapeLayer() - mask.path = path.cgPath - mask.frame = self.bounds - self.layer.mask = mask - } - } - - // MARK: - λ·° 계측 ꡬ쑰 log - func printViewHierarchy(level: Int = 0) { - let padding = String(repeating: " ", count: level * 2) - let viewInfo = "\(padding)\(type(of: self)) - Frame: \(self.frame)" - print(viewInfo) - - for subview in self.subviews { - subview.printViewHierarchy(level: level + 1) - } - } - -} diff --git a/iBox/Sources/Extension/UIViewController+Extension.swift b/iBox/Sources/Extension/UIViewController+Extension.swift deleted file mode 100644 index 71a9797..0000000 --- a/iBox/Sources/Extension/UIViewController+Extension.swift +++ /dev/null @@ -1,30 +0,0 @@ -// -// UIViewController+Extension.swift -// iBox -// -// Created by Chan on 4/16/24. -// - -import UIKit - -extension UIViewController { - func findMainTabBarController() -> UITabBarController? { - var responder: UIResponder? = self - while let nextResponder = responder?.next { - if let viewController = nextResponder as? UITabBarController { - return viewController - } - responder = nextResponder - } - return nil - } - - func findAddBookmarkViewController() -> AddBookmarkViewController? { - if let navigationController = presentedViewController as? UINavigationController, - let vc = navigationController.topViewController as? AddBookmarkViewController { - return vc - } - return nil - } - -} diff --git a/iBox/Sources/Favorite/FavoriteView.swift b/iBox/Sources/Favorite/FavoriteView.swift deleted file mode 100644 index fd475f3..0000000 --- a/iBox/Sources/Favorite/FavoriteView.swift +++ /dev/null @@ -1,68 +0,0 @@ -// -// FavoriteView.swift -// iBox -// -// Created by μ΄μ§€ν˜„ on 1/18/24. -// - -import UIKit -import WebKit - -import SnapKit - -class FavoriteView: UIView { - - var webView: WebView? - - // MARK: - Initializer - - override init(frame: CGRect) { - super.init(frame: frame) - setupProperty() - setupHierarchy() - setupLayout() - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - override func layoutSubviews() { - super.layoutSubviews() - webView?.setupRefreshControl() - } - - // MARK: - Setup Methods - - private func setupProperty() { - backgroundColor = .backgroundColor - - loadFavoriteWeb() - webView = WebViewPreloader.shared.getFavoriteView() - } - - private func setupHierarchy() { - guard let webView else { return } - addSubview(webView) - } - - private func setupLayout() { - guard let webView else { return } - webView.snp.makeConstraints { make in - make.edges.equalToSuperview() - } - } - - private func loadFavoriteWeb() { - let favoriteId = UserDefaultsManager.favoriteId - var favoriteUrl: URL? = nil - if let favoriteId { - favoriteUrl = CoreDataManager.shared.getBookmarkUrl(favoriteId) - if favoriteUrl == nil { - UserDefaultsManager.favoriteId = nil - } - } - WebViewPreloader.shared.preloadFavoriteView(url: favoriteUrl) - } - -} diff --git a/iBox/Sources/Favorite/FavoriteViewController.swift b/iBox/Sources/Favorite/FavoriteViewController.swift deleted file mode 100644 index 237813c..0000000 --- a/iBox/Sources/Favorite/FavoriteViewController.swift +++ /dev/null @@ -1,44 +0,0 @@ -// -// FavoriteViewController.swift -// iBox -// -// Created by μ΄μ§€ν˜„ on 12/27/23. -// - -import UIKit - -class FavoriteViewController: BaseViewController, BaseViewControllerProtocol { - - var delegate: AddBookmarkViewControllerProtocol? - - // MARK: - Life Cycle - - override func viewDidLoad() { - super.viewDidLoad() - setupNavigationBar() - - guard let contentView = contentView as? FavoriteView else { return } - contentView.webView?.delegate = self - } - - // MARK: - BaseViewControllerProtocol - - func setupNavigationBar() { - setNavigationBarHidden(true) - } - -} - -extension FavoriteViewController: WebViewDelegate { - - func pushAddBookMarkViewController(url: URL) { - let encodingURL = url.absoluteString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) ?? "" - - if let iBoxUrl = URL(string: "iBox://url?data=" + encodingURL) { - if let tabBarController = findMainTabBarController() { - AddBookmarkManager.shared.navigateToAddBookmarkView(from: iBoxUrl, in: tabBarController) - } - } - } - -} diff --git a/iBox/Sources/Initializer/DefaultData.swift b/iBox/Sources/Initializer/DefaultData.swift deleted file mode 100644 index 4cc8522..0000000 --- a/iBox/Sources/Initializer/DefaultData.swift +++ /dev/null @@ -1,50 +0,0 @@ -// -// DefaultData.swift -// iBox -// -// Created by Chan on 4/17/24. -// - -import Foundation - - -class DefaultData { - - static func insertDefaultDataIfNeeded(_ isReset: Bool = false, completion: (() -> Void)? = nil) { - let isDefaultDataInserted = UserDefaultsManager.isDefaultDataInserted - if !isDefaultDataInserted || isReset { - fetchDefaultData { defaultFolders in - DispatchQueue.main.async { - CoreDataManager.shared.deleteAllFolders() - CoreDataManager.shared.addInitialFolders(defaultFolders) - UserDefaultsManager.isDefaultDataInserted = true - completion?() - } - } - } - } - - static func fetchDefaultData(completion: @escaping ([Folder]) -> Void) { - let localDic: [String : String] = ["Seoul" : "default-kr", "default" : "default"] - let cityName = "Seoul" // μΆ”ν›„ global μ˜ˆμ • - let local = localDic[cityName] ?? "default" - - let url = URL(string: "https://raw.githubusercontent.com/42Box/versioning/main/\(local).json")! - URLSession.shared.dataTask(with: url) { data, response, error in - guard let data = data, error == nil else { - print("Error fetching default data: \(String(describing: error))") - completion(DefaultDataLoader.defaultData) - return - } - - do { - let folderData = try JSONDecoder().decode(FolderData.self, from: data) - let folders = [Folder(id: UUID(), name: "42 \(cityName)", bookmarks: folderData.list.map { Bookmark(id: UUID(), name: $0.name, url: URL(string: $0.url)!) })] - completion(folders) - } catch { - print("Error decoding JSON: \(error)") - completion(DefaultDataLoader.defaultData) - } - }.resume() - } -} diff --git a/iBox/Sources/Initializer/DefaultDataModel.swift b/iBox/Sources/Initializer/DefaultDataModel.swift deleted file mode 100644 index 7a3bb89..0000000 --- a/iBox/Sources/Initializer/DefaultDataModel.swift +++ /dev/null @@ -1,31 +0,0 @@ -// -// DefaultDataModel.swift -// iBox -// -// Created by Chan on 4/17/24. -// - -import Foundation - - -struct FolderData: Codable { - var list: [BookmarkData] -} - -struct BookmarkData: Codable { - var name: String - var url: String -} - -struct DefaultDataLoader { - static let defaultData = [ - Folder(id: UUID(), name: "42 폴더", bookmarks: [ - Bookmark(id: UUID(), name: "42 Intra", url: URL(string: "https://profile.intra.42.fr/")!), - Bookmark(id: UUID(), name: "42Where", url: URL(string: "https://www.where42.kr/")! ), - Bookmark(id: UUID(), name: "42Stat", url: URL(string: "https://stat.42seoul.kr/")!), - Bookmark(id: UUID(), name: "μ§‘ν˜„μ „", url: URL(string: "https://42library.kr/")!), - Bookmark(id: UUID(), name: "42gg", url: URL(string: "https://gg.42seoul.kr/")!), - Bookmark(id: UUID(), name: "24HANE", url: URL(string: "https://24hoursarenotenough.42seoul.kr/")!) - ]) - ] -} diff --git a/iBox/Sources/Main/MainTabBarController.swift b/iBox/Sources/Main/MainTabBarController.swift deleted file mode 100644 index f1b8329..0000000 --- a/iBox/Sources/Main/MainTabBarController.swift +++ /dev/null @@ -1,66 +0,0 @@ -// -// MainTabBarController.swift -// iBox -// -// Created by μ΄μ§€ν˜„ on 12/27/23. -// - -import UIKit - -class MainTabBarController: UITabBarController { - - var previousTabIndex = 0 - - // MARK: - Life Cycle - - override func viewDidLoad() { - super.viewDidLoad() - delegate = self - view.backgroundColor = .backgroundColor - - setupTabBar() - setupTabBarAppearance() - } - - // MARK: - Setup Methods - - private func setupTabBar() { - viewControllers = [ - setupViewController(viewController: BoxListViewController(), image: UIImage(systemName: "square.grid.2x2.fill")), - setupViewController(viewController: FavoriteViewController(), image: UIImage(systemName: "heart.fill")), - setupViewController(viewController: SettingsViewController(), image: UIImage(systemName: "gearshape.fill")) - ] - tabBar.tintColor = .box - tabBar.backgroundColor = .backgroundColor - selectedIndex = UserDefaultsManager.homeTabIndex - } - - private func setupViewController(viewController: UIViewController, image: UIImage?) -> UIViewController { - viewController.tabBarItem.title = "" - viewController.tabBarItem.image = image - return UINavigationController(rootViewController: viewController) - } - - private func setupTabBarAppearance() { - let appearance = UITabBarItem.appearance() - appearance.setTitleTextAttributes([NSAttributedString.Key.foregroundColor: UIColor.clear], for: .normal) - appearance.setTitleTextAttributes([NSAttributedString.Key.foregroundColor: UIColor.clear], for: .selected) - } - -} - -extension MainTabBarController: UITabBarControllerDelegate { - - func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) { - if UserDefaultsManager.isHaptics { - let generator = UIImpactFeedbackGenerator(style: .light) - generator.prepare() - generator.impactOccurred() - } - if tabBarController.selectedIndex == 1 && previousTabIndex == 1 { - WebViewPreloader.shared.resetFavoriteView() - } - previousTabIndex = tabBarController.selectedIndex - } - -} diff --git a/iBox/Sources/MainView.swift b/iBox/Sources/MainView.swift new file mode 100644 index 0000000..9d37b15 --- /dev/null +++ b/iBox/Sources/MainView.swift @@ -0,0 +1,46 @@ +// +// MainView.swift +// iBox +// +// Created by jiyeon on 12/26/23. +// + +import UIKit + +import SnapKit + +class MainView: UIView { + + // MARK: - UI + + var label: UILabel = { + let label = UILabel() + label.text = "μ˜ˆμ‹œμž…λ‹ˆλ‹Ή" + label.textColor = .black + return label + }() + + // MARK: - init + + override init(frame: CGRect) { + super.init(frame: frame) + configureUI() + } + + required init?(coder: NSCoder) { + fatalError("init(coder:) has not been implemented") + } + + // MARK: - configure UI + + func configureUI() { + backgroundColor = .systemBackground + + addSubview(label) + + label.snp.makeConstraints { + $0.center.equalToSuperview() + } + } + +} diff --git a/iBox/Sources/MainViewController.swift b/iBox/Sources/MainViewController.swift new file mode 100644 index 0000000..ee81407 --- /dev/null +++ b/iBox/Sources/MainViewController.swift @@ -0,0 +1,18 @@ +// +// MainViewController.swift +// iBox +// +// Created by jiyeon on 12/26/23. +// + +import UIKit + +class MainViewController: BaseViewController { + + // MARK: - life cycle + + override func viewDidLoad() { + super.viewDidLoad() + } + +} diff --git a/iBox/Sources/Model/Bookmark.swift b/iBox/Sources/Model/Bookmark.swift deleted file mode 100644 index 260beb0..0000000 --- a/iBox/Sources/Model/Bookmark.swift +++ /dev/null @@ -1,14 +0,0 @@ -// -// Bookmark.swift -// iBox -// -// Created by μ΄μ§€ν˜„ on 1/30/24. -// - -import Foundation - -struct Bookmark: Codable { - let id: UUID - var name: String - var url: URL -} diff --git a/iBox/Sources/Model/BookmarkError.swift b/iBox/Sources/Model/BookmarkError.swift deleted file mode 100644 index 0128173..0000000 --- a/iBox/Sources/Model/BookmarkError.swift +++ /dev/null @@ -1,14 +0,0 @@ -// -// BookmarkError.swift -// iBox -// -// Created by μ΄μ§€ν˜„ on 4/21/24. -// - -import Foundation - -enum BookmarkError { - case htmlError - case decodeError - case parseError -} diff --git a/iBox/Sources/Model/EditItem.swift b/iBox/Sources/Model/EditItem.swift deleted file mode 100644 index 83f5689..0000000 --- a/iBox/Sources/Model/EditItem.swift +++ /dev/null @@ -1,19 +0,0 @@ -// -// EditItem.swift -// iBox -// -// Created by jiyeon on 2/29/24. -// - -import Foundation - -enum EditType { - case folder - case bookmark -} - -struct EditItem { - var type: EditType - var imageString: String - var title: String -} diff --git a/iBox/Sources/Model/Folder.swift b/iBox/Sources/Model/Folder.swift deleted file mode 100644 index b13d1b8..0000000 --- a/iBox/Sources/Model/Folder.swift +++ /dev/null @@ -1,15 +0,0 @@ -// -// Folder.swift -// iBox -// -// Created by μ΄μ§€ν˜„ on 1/4/24. -// - -import Foundation - -struct Folder: Codable { - let id: UUID - var name: String - var bookmarks: [Bookmark] -} - diff --git a/iBox/Sources/Model/HomeTabType.swift b/iBox/Sources/Model/HomeTabType.swift deleted file mode 100644 index 2d7bb4c..0000000 --- a/iBox/Sources/Model/HomeTabType.swift +++ /dev/null @@ -1,20 +0,0 @@ -// -// HomeTabType.swift -// iBox -// -// Created by jiyeon on 2/22/24. -// - -import Foundation - -enum HomeTabType: CaseIterable { - case boxList - case favorite - - func toString() -> String { - switch self { - case .boxList: "뢁마크 λͺ©λ‘" - case .favorite: "즐겨찾기" - } - } -} diff --git a/iBox/Sources/Model/Metadata.swift b/iBox/Sources/Model/Metadata.swift deleted file mode 100644 index 8f95deb..0000000 --- a/iBox/Sources/Model/Metadata.swift +++ /dev/null @@ -1,12 +0,0 @@ -// -// Metadata.swift -// iBoxShareExtension -// -// Created by 김찬희 on 2024/03/14. -// - -struct Metadata { - var title: String? - var faviconUrl: String? - var url: String? -} diff --git a/iBox/Sources/Model/SettingsItem.swift b/iBox/Sources/Model/SettingsItem.swift deleted file mode 100644 index 36f3981..0000000 --- a/iBox/Sources/Model/SettingsItem.swift +++ /dev/null @@ -1,33 +0,0 @@ -// -// SettingsItem.swift -// iBox -// -// Created by jiyeon on 1/3/24. -// - -import Foundation - -enum SettingsType { - case theme - case homeTab - case haptics - case reset - case guide - - func toString() -> String { - switch self { - case .theme: "ν…Œλ§ˆ" - case .homeTab: "μ‹œμž‘ ν™”λ©΄" - case .haptics: "진동" - case .reset: "데이터 μ΄ˆκΈ°ν™”" - case .guide: "μ•± μ†Œκ°œ" - } - } - -} - -struct SettingsItem { - var type: SettingsType - var description: String? - var flag: Bool? -} diff --git a/iBox/Sources/Model/Theme.swift b/iBox/Sources/Model/Theme.swift deleted file mode 100644 index aceb433..0000000 --- a/iBox/Sources/Model/Theme.swift +++ /dev/null @@ -1,30 +0,0 @@ -// -// Theme.swift -// iBox -// -// Created by jiyeon on 1/4/24. -// - -import UIKit - -enum Theme: Codable, CaseIterable { - case light - case dark - case system - - func toString() -> String { - switch self { - case .light: "라이트 λͺ¨λ“œ" - case .dark: "닀크 λͺ¨λ“œ" - case .system: "μ‹œμŠ€ν…œ μ„€μ • λͺ¨λ“œ" - } - } - - func toImageString() -> String { - switch self { - case .light: "circle" - case .dark: "circle.fill" - case .system: "circle.righthalf.filled" - } - } -} diff --git a/iBox/Sources/Model/VersionInfo.swift b/iBox/Sources/Model/VersionInfo.swift deleted file mode 100644 index 1f83182..0000000 --- a/iBox/Sources/Model/VersionInfo.swift +++ /dev/null @@ -1,23 +0,0 @@ -// -// Versioning.swift -// iBox -// -// Created by Chan on 2/29/24. -// - -// MARK: - VersionInfo -struct VersionInfo: Codable { - let version: [Version] - let url: URLClass -} - -// MARK: - URLClass -struct URLClass: Codable { - let storeUrl: String -} - -// MARK: - Version -struct Version: Codable { - let id: Int - let latestVersion, minRequiredVersion: String -} diff --git a/iBox/Sources/SceneDelegate.swift b/iBox/Sources/SceneDelegate.swift index 6672167..f820efc 100644 --- a/iBox/Sources/SceneDelegate.swift +++ b/iBox/Sources/SceneDelegate.swift @@ -10,26 +10,19 @@ import UIKit class SceneDelegate: UIResponder, UIWindowSceneDelegate { var window: UIWindow? - func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { guard let windowScene = (scene as? UIWindowScene) else { return } window = UIWindow(frame: windowScene.coordinateSpace.bounds) window?.windowScene = windowScene - - window?.overrideUserInterfaceStyle = window?.toUserInterfaceStyle(UserDefaultsManager.theme) ?? .unspecified - window?.rootViewController = CustomLaunchScreenViewController(urlContext: connectionOptions.urlContexts.first) - window?.makeKeyAndVisible() + let mainViewController = MainViewController() - } - - func scene(_ scene: UIScene, openURLContexts URLContexts: Set) { - if let urlContext = URLContexts.first, - let tabBarController = window?.rootViewController as? UITabBarController { - AddBookmarkManager.shared.navigateToAddBookmarkView(from: urlContext.url, in: tabBarController) - } + let navigationController = UINavigationController(rootViewController: mainViewController) + + window?.rootViewController = navigationController // 루트 뷰컨트둀러 μ„€μ • + window?.makeKeyAndVisible() // μœˆλ„μš°λ₯Ό 화면에 λ³΄μ—¬μ€Œ } func sceneDidDisconnect(_ scene: UIScene) { @@ -60,7 +53,9 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { // to restore the scene back to its current state. // Save changes in the application's managed object context when the application transitions to the background. + (UIApplication.shared.delegate as? AppDelegate)?.saveContext() } } + diff --git a/iBox/Sources/Settings/Guide/GuideView.swift b/iBox/Sources/Settings/Guide/GuideView.swift deleted file mode 100644 index 7162049..0000000 --- a/iBox/Sources/Settings/Guide/GuideView.swift +++ /dev/null @@ -1,68 +0,0 @@ -// -// GuideView.swift -// iBox -// -// Created by jiyeon on 4/22/24. -// - -import UIKit -import WebKit - -import SnapKit - -class GuideView: UIView { - - var guideUrl: URL? { - didSet { - loadWebsite() - } - } - - // MARK: - UI Components - - private let webView: WKWebView - - // MARK: - Initializer - - override init(frame: CGRect) { - let config = WKWebViewConfiguration() - config.allowsInlineMediaPlayback = true - - webView = WKWebView(frame: .zero, configuration: config) - super.init(frame: frame) - - setupHierarchy() - setupLayout() - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - deinit { - webView.stopLoading() - webView.isOpaque = false - } - - // MARK: - Setup Methods - - private func setupHierarchy() { - addSubview(webView) - } - - private func setupLayout() { - webView.snp.makeConstraints { make in - make.top.equalTo(self.safeAreaLayoutGuide.snp.topMargin) - make.bottom.equalTo(self.safeAreaLayoutGuide.snp.bottomMargin) - make.leading.equalTo(self.safeAreaLayoutGuide.snp.leadingMargin) - make.trailing.equalTo(self.safeAreaLayoutGuide.snp.trailingMargin) - } - } - - private func loadWebsite() { - guard let url = guideUrl else { return } - webView.load(URLRequest(url: url)) - webView.allowsBackForwardNavigationGestures = true - } - -} diff --git a/iBox/Sources/Settings/Guide/GuideViewController.swift b/iBox/Sources/Settings/Guide/GuideViewController.swift deleted file mode 100644 index bc393b5..0000000 --- a/iBox/Sources/Settings/Guide/GuideViewController.swift +++ /dev/null @@ -1,30 +0,0 @@ -// -// GuideViewController.swift -// iBox -// -// Created by jiyeon on 4/22/24. -// - -import UIKit - -class GuideViewController: BaseViewController, BaseViewControllerProtocol { - - // MARK: - Life Cycle - - override func viewDidLoad() { - super.viewDidLoad() - setupNavigationBar() - - guard let contentView = contentView as? GuideView else { return } - contentView.guideUrl = URL(string: "https://github.com/42Box/iOS/tree/develop?tab=readme-ov-file#%EF%B8%8F%EF%B8%8F-introduction") - } - - // MARK: - BaseViewControllerProtocol - - func setupNavigationBar() { - setNavigationBarTitleLabelText("μ•± μ†Œκ°œ") - setNavigationBarTitleLabelFont(.subTitlefont) - setNavigationBarBackButtonHidden(false) - } - -} diff --git a/iBox/Sources/Settings/HomeTab/HomeTabSelectorCell.swift b/iBox/Sources/Settings/HomeTab/HomeTabSelectorCell.swift deleted file mode 100644 index f22df25..0000000 --- a/iBox/Sources/Settings/HomeTab/HomeTabSelectorCell.swift +++ /dev/null @@ -1,74 +0,0 @@ -// -// HomeTabSelectorCell.swift -// iBox -// -// Created by jiyeon on 2/22/24. -// - -import UIKit - -import SnapKit - -class HomeTabSelectorCell: UITableViewCell { - - static let reuseIdentifier = "MainTabCell" - - // MARK: - UI Components - - let titleLabel = UILabel().then { - $0.font = .cellTitleFont - } - - let selectButton = UIButton().then { - $0.configuration = .plain() - } - - // MARK: - Initializer - - override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { - super.init(style: style, reuseIdentifier: reuseIdentifier) - setupProperty() - setupHierarchy() - setupLayout() - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - // MARK: - Setup Methods - - private func setupProperty() { - backgroundColor = .clear - selectionStyle = .none - } - - private func setupHierarchy() { - addSubview(titleLabel) - addSubview(selectButton) - } - - private func setupLayout() { - titleLabel.snp.makeConstraints { make in - make.leading.equalToSuperview().inset(20) - make.centerY.equalToSuperview() - } - - selectButton.snp.makeConstraints { make in - make.trailing.equalToSuperview().inset(20) - make.centerY.equalToSuperview() - make.width.height.equalTo(20) - } - } - - func setupSelectButton(_ selected: Bool) { - if selected { - selectButton.configuration?.image = UIImage(systemName: "circle.inset.filled") - selectButton.tintColor = .box2 - } else { - selectButton.configuration?.image = UIImage(systemName: "circle") - selectButton.tintColor = .gray - } - } - -} diff --git a/iBox/Sources/Settings/HomeTab/HomeTabSelectorView.swift b/iBox/Sources/Settings/HomeTab/HomeTabSelectorView.swift deleted file mode 100644 index c8ba4df..0000000 --- a/iBox/Sources/Settings/HomeTab/HomeTabSelectorView.swift +++ /dev/null @@ -1,95 +0,0 @@ -// -// HomeTabSelectorView.swift -// iBox -// -// Created by jiyeon on 2/22/24. -// - -import Combine -import UIKit - -class HomeTabSelectorView: UIView { - - private var viewModel: HomeTabSelectorViewModel? - private var cancellables = Set() - - // MARK: - UI Components - - let tableView = UITableView().then { - $0.separatorStyle = .none - $0.register(HomeTabSelectorCell.self, forCellReuseIdentifier: HomeTabSelectorCell.reuseIdentifier) - $0.backgroundColor = .clear - } - - // MARK: - Initializer - - override init(frame: CGRect) { - super.init(frame: frame) - setupProperty() - setupHierarchy() - setupLayout() - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - // MARK: - Setup Methods - - private func setupProperty() { - tableView.delegate = self - tableView.dataSource = self - } - - private func setupHierarchy() { - addSubview(tableView) - } - - private func setupLayout() { - tableView.snp.makeConstraints { make in - make.edges.equalToSuperview() - } - } - - // MARK: - Bind ViewModel - - func bindViewModel(_ viewModel: HomeTabSelectorViewModel) { - self.viewModel = viewModel - viewModel.$selectedIndex - .receive(on: RunLoop.main) - .sink { [weak self] selectedIndex in - UserDefaultsManager.homeTabIndex = selectedIndex - self?.tableView.reloadData() - }.store(in: &cancellables) - } - -} - -extension HomeTabSelectorView: UITableViewDelegate { - - func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { - return 55 - } - - func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { - guard let viewModel = viewModel else { return } - viewModel.selectedIndex = indexPath.row - } - -} - -extension HomeTabSelectorView: UITableViewDataSource { - - func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - return HomeTabType.allCases.count - } - - func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - guard let viewModel = viewModel, - let cell = tableView.dequeueReusableCell(withIdentifier: HomeTabSelectorCell.reuseIdentifier) as? HomeTabSelectorCell else { return UITableViewCell() } - cell.titleLabel.text = HomeTabType.allCases[indexPath.row].toString() - cell.setupSelectButton(viewModel.selectedIndex == indexPath.row) - return cell - } - -} diff --git a/iBox/Sources/Settings/HomeTab/HomeTabSelectorViewController.swift b/iBox/Sources/Settings/HomeTab/HomeTabSelectorViewController.swift deleted file mode 100644 index b22096a..0000000 --- a/iBox/Sources/Settings/HomeTab/HomeTabSelectorViewController.swift +++ /dev/null @@ -1,32 +0,0 @@ -// -// HomeTabSelectorViewwController.swift -// iBox -// -// Created by jiyeon on 2/22/24. -// - -import UIKit - -class HomeTabSelectorViewController: BaseViewController, BaseViewControllerProtocol { - - private let viewModel = HomeTabSelectorViewModel() - - // MARK: - Life Cycle - - override func viewDidLoad() { - super.viewDidLoad() - setupNavigationBar() - - guard let contentView = contentView as? HomeTabSelectorView else { return } - contentView.bindViewModel(viewModel) - } - - // MARK: - BaseViewControllerProtocol - - func setupNavigationBar() { - setNavigationBarTitleLabelText("μ‹œμž‘ ν™”λ©΄ μ„€μ •ν•˜κΈ°") - setNavigationBarTitleLabelFont(.subTitlefont) - setNavigationBarBackButtonHidden(false) - } - -} diff --git a/iBox/Sources/Settings/HomeTab/HomeTabSelectorViewModel.swift b/iBox/Sources/Settings/HomeTab/HomeTabSelectorViewModel.swift deleted file mode 100644 index 6a49529..0000000 --- a/iBox/Sources/Settings/HomeTab/HomeTabSelectorViewModel.swift +++ /dev/null @@ -1,15 +0,0 @@ -// -// HomeTabSelectorViewModel.swift -// iBox -// -// Created by jiyeon on 2/22/24. -// - -import Combine -import Foundation - -class HomeTabSelectorViewModel { - - @Published var selectedIndex: Int = UserDefaultsManager.homeTabIndex - -} diff --git a/iBox/Sources/Settings/Reset/ResetSuccessView.swift b/iBox/Sources/Settings/Reset/ResetSuccessView.swift deleted file mode 100644 index c72685d..0000000 --- a/iBox/Sources/Settings/Reset/ResetSuccessView.swift +++ /dev/null @@ -1,99 +0,0 @@ -// -// ResetSuccessView.swift -// iBox -// -// Created by Chan on 4/17/24. -// - -import UIKit - -import SnapKit - -protocol ResetSuccessViewDelegate: AnyObject { - func didCompleteReset() -} - -class ResetSuccessView: UIView { - - weak var delegate: ResetSuccessViewDelegate? - - private let checkMarkImageView = UIImageView().then { - $0.image = UIImage(systemName: "checkmark") - $0.contentMode = .scaleAspectFit - $0.tintColor = .box2 - } - - private let label = UILabel().then { - $0.text = "μ΄ˆκΈ°ν™” 성곡" - $0.textColor = .invertBackgroundColor - $0.textAlignment = .center - $0.font = UIFont.systemFont(ofSize: 16) - } - - private let stackView = UIStackView().then { - $0.axis = .vertical - $0.spacing = 10 - $0.alignment = .center - $0.distribution = .equalSpacing - } - - private let backPannelView = UIView().then { - $0.backgroundColor = .backgroundColor - $0.layer.cornerRadius = 20 - $0.clipsToBounds = true - } - - override init(frame: CGRect) { - super.init(frame: frame) - setupView() - animateView() - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - private func setupView() { - self.alpha = 0 - self.backgroundColor = UIColor.invertBackgroundColor.withAlphaComponent(0.35) - self.addSubview(backPannelView) - backPannelView.addSubview(stackView) - - stackView.addArrangedSubview(checkMarkImageView) - stackView.addArrangedSubview(label) - - backPannelView.snp.makeConstraints { make in - make.width.height.equalTo(200) - make.center.equalToSuperview() - } - - stackView.snp.makeConstraints { make in - make.center.equalToSuperview() - } - - checkMarkImageView.snp.makeConstraints { make in - make.width.height.equalTo(50) - } - } - - private func animateView() { - UIView.animate(withDuration: 0.5, animations: { - self.alpha = 1.0 - }) { _ in - UIView.animate(withDuration: 0.5) { - self.backPannelView.alpha = 1.0 - } - - UIView.animate(withDuration: 0.5, delay: 2, options: []) { - self.backPannelView.alpha = 0.0 - } completion: { _ in - UIView.animate(withDuration: 0.5, animations: { - self.alpha = 0.0 - }) { _ in - self.removeFromSuperview() - self.delegate?.didCompleteReset() - } - } - } - } -} diff --git a/iBox/Sources/Settings/Reset/ResetView.swift b/iBox/Sources/Settings/Reset/ResetView.swift deleted file mode 100644 index 303f22f..0000000 --- a/iBox/Sources/Settings/Reset/ResetView.swift +++ /dev/null @@ -1,73 +0,0 @@ -// -// ResetView.swift -// iBox -// -// Created by jiyeon on 3/14/24. -// - -import UIKit - -import SnapKit - -class ResetView: UIView { - - var delegate: ResetViewDelegate? - - // MARK: - UI Components - - let label = UILabel().then { - $0.text = "κ²½κ³ : 이 μž‘μ—…μ„ μ§„ν–‰ν•˜λ©΄ μ €μž₯ν•˜μ‹  λͺ¨λ“  폴더 및 뢁마크 정보가 영ꡬ적으둜 μ‚­μ œλ˜κ³  κΈ°λ³Έκ°’μœΌλ‘œ μ΄ˆκΈ°ν™”λ©λ‹ˆλ‹€. μ§„ν–‰ν•˜κΈ° 전에 μ€‘μš”ν•œ 정보가 μ—†λŠ”μ§€ λ‹€μ‹œ ν•œλ²ˆ 확인해 μ£Όμ‹œκΈ° λ°”λžλ‹ˆλ‹€." - $0.numberOfLines = 0 - $0.font = .descriptionFont - } - - let resetButton = UIButton().then { - $0.configuration = .plain() - $0.configuration?.attributedTitle = .init("μ΄ˆκΈ°ν™”", attributes: .init([.font: UIFont.boldLabelFont])) - $0.tintColor = .white - $0.backgroundColor = .box - $0.clipsToBounds = true - $0.layer.cornerRadius = 5 - } - - // MARK: - Initializer - - override init(frame: CGRect) { - super.init(frame: frame) - setupProperty() - setupHierarchy() - setupLayout() - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - // MARK: - Setup Methods - - private func setupProperty() { - resetButton.addTarget(self, action: #selector(handleResetButtonTap), for: .touchUpInside) - } - - private func setupHierarchy() { - addSubview(label) - addSubview(resetButton) - } - - private func setupLayout() { - label.snp.makeConstraints { make in - make.top.leading.trailing.equalToSuperview().inset(20) - } - - resetButton.snp.makeConstraints { make in - make.top.equalTo(label.snp.bottom).offset(20) - make.trailing.leading.equalToSuperview().inset(20) - make.height.equalTo(44) - } - } - - @objc private func handleResetButtonTap() { - delegate?.showAlert() - } - -} diff --git a/iBox/Sources/Settings/Reset/ResetViewController.swift b/iBox/Sources/Settings/Reset/ResetViewController.swift deleted file mode 100644 index c5e10bc..0000000 --- a/iBox/Sources/Settings/Reset/ResetViewController.swift +++ /dev/null @@ -1,96 +0,0 @@ -// -// ResetViewController.swift -// iBox -// -// Created by jiyeon on 3/14/24. -// - -import UIKit - -protocol ResetViewDelegate { - func showAlert() -} - -class ResetViewController: BaseViewController, BaseViewControllerProtocol { - - // MARK: - Life Cycle - - override func viewDidLoad() { - super.viewDidLoad() - setupNavigationBar() - - guard let contentView = contentView as? ResetView else { return } - contentView.delegate = self - } - - // MARK: - BaseViewControllerProtocol - - func setupNavigationBar() { - setNavigationBarTitleLabelText("데이터 μ΄ˆκΈ°ν™”") - setNavigationBarTitleLabelFont(.subTitlefont) - setNavigationBarBackButtonHidden(false) - } - -} - -extension ResetViewController: ResetViewDelegate { - - func showAlert() { - let alertController = UIAlertController(title: "κ²½κ³ ", message: "이 μž‘μ—…μ€ 되돌릴 수 μ—†μŠ΅λ‹ˆλ‹€. κ³„μ†ν•˜λ €λ©΄ \"iBox\"라고 μž…λ ₯ν•΄ μ£Όμ„Έμš”.", preferredStyle: .alert) - - let cancelAction = UIAlertAction(title: "μ·¨μ†Œ", style: .cancel, handler: nil) - alertController.addAction(cancelAction) - - let confirmAction = UIAlertAction(title: "확인", style: .default) { [weak self] _ in - guard let self = self else { return } - if let textField = alertController.textFields?.first, let text = textField.text, text == "iBox" { - self.resetData() - } else { - self.showAlert() - } - } - - confirmAction.isEnabled = false - confirmAction.setValue(UIColor.red, forKey: "titleTextColor") - - alertController.addAction(confirmAction) - - alertController.addTextField() { textField in - NotificationCenter.default.addObserver(forName: UITextField.textDidChangeNotification, object: textField, queue: OperationQueue.main, using: - {_ in - let isTextMatch = textField.text?.trimmingCharacters(in: .whitespacesAndNewlines) == "iBox" - - confirmAction.isEnabled = isTextMatch - }) - - } - - self.present(alertController, animated: true, completion: nil) - } - - private func resetData() { - DefaultData.insertDefaultDataIfNeeded(true) { - UserDefaultsManager.favoriteId = nil - WebViewPreloader.shared.setFavoriteUrl(url: nil) - NotificationCenter.default.post(name: .didResetData, object: nil) - DispatchQueue.main.async { - let successView = ResetSuccessView(frame: self.view.bounds) - successView.delegate = self - self.view.addSubview(successView) - successView.snp.makeConstraints { make in - make.edges.equalToSuperview() - } - } - } - } -} - -// MARK: - ResetSuccessView - -extension ResetViewController: ResetSuccessViewDelegate { - - func didCompleteReset() { - self.navigationController?.popViewController(animated: true) - } - -} diff --git a/iBox/Sources/Settings/SettingsCellViewModel.swift b/iBox/Sources/Settings/SettingsCellViewModel.swift deleted file mode 100644 index bd39065..0000000 --- a/iBox/Sources/Settings/SettingsCellViewModel.swift +++ /dev/null @@ -1,30 +0,0 @@ -// -// SettingsCellViewModel.swift -// iBox -// -// Created by jiyeon on 2/22/24. -// - -import Foundation - -class SettingsCellViewModel { - - let settingsItem: SettingsItem - - init(_ settingsItem: SettingsItem) { - self.settingsItem = settingsItem - } - - var title: String { - settingsItem.type.toString() - } - - var flag: Bool? { - settingsItem.flag - } - - var description: String? { - settingsItem.description - } - -} diff --git a/iBox/Sources/Settings/SettingsItemCell.swift b/iBox/Sources/Settings/SettingsItemCell.swift deleted file mode 100644 index f3a239c..0000000 --- a/iBox/Sources/Settings/SettingsItemCell.swift +++ /dev/null @@ -1,110 +0,0 @@ -// -// SettingsItemCell.swift -// iBox -// -// Created by jiyeon on 1/3/24. -// - -import UIKit - -import SnapKit - -class SettingsItemCell: UITableViewCell { - - static let reuseIdentifier = "SettingsItemCell" - private var viewModel: SettingsCellViewModel? - - // MARK: - UI Components - - let titleLabel = UILabel().then { - $0.font = .cellTitleFont - } - - let descriptionLabel = UILabel().then { - $0.font = .cellDescriptionFont - $0.textColor = .gray - } - - let switchControl = UISwitch().then { - $0.onTintColor = .box2 - } - - let chevronButton = UIButton().then { - $0.configuration = .plain() - $0.configuration?.image = UIImage(systemName: "chevron.right") - $0.configuration?.preferredSymbolConfigurationForImage = .init(pointSize: 10, weight: .bold) - $0.tintColor = .systemGray3 - $0.isUserInteractionEnabled = false - } - - // MARK: - Initializer - - override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { - super.init(style: style, reuseIdentifier: reuseIdentifier) - setupProperty() - setupHierarchy() - setupLayout() - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - // MARK: - Setup Methods - - private func setupProperty() { - backgroundColor = .clear - selectionStyle = .none - } - - private func setupHierarchy() { - contentView.addSubview(titleLabel) - contentView.addSubview(switchControl) - contentView.addSubview(descriptionLabel) - contentView.addSubview(chevronButton) - } - - private func setupLayout() { - titleLabel.snp.makeConstraints { make in - make.leading.equalToSuperview().inset(20) - make.centerY.equalToSuperview() - } - - switchControl.snp.makeConstraints { make in - make.trailing.equalToSuperview().inset(30) - make.centerY.equalToSuperview() - } - - descriptionLabel.snp.makeConstraints { make in - make.trailing.equalToSuperview().inset(30) - make.centerY.equalToSuperview() - } - - chevronButton.snp.makeConstraints { make in - make.trailing.equalToSuperview().inset(20) - make.centerY.equalToSuperview() - } - } - - // MARK: - Bind ViewModel - - func bindViewModel(_ viewModel: SettingsCellViewModel) { - self.viewModel = viewModel - titleLabel.text = viewModel.title - - descriptionLabel.isHidden = true - switchControl.isHidden = true - chevronButton.isHidden = true - - if let description = viewModel.description { - descriptionLabel.text = description - descriptionLabel.isHidden = false - } else if let flag = viewModel.flag { - switchControl.isOn = flag - switchControl.isHidden = false - } else { - chevronButton.isHidden = false - } - } - -} diff --git a/iBox/Sources/Settings/SettingsSectionViewModel.swift b/iBox/Sources/Settings/SettingsSectionViewModel.swift deleted file mode 100644 index 63efe2f..0000000 --- a/iBox/Sources/Settings/SettingsSectionViewModel.swift +++ /dev/null @@ -1,18 +0,0 @@ -// -// SettingsSectionViewModel.swift -// iBox -// -// Created by jiyeon on 2/22/24. -// - -import Foundation - -class SettingsSectionViewModel { - - let cellViewModels: [SettingsCellViewModel] - - init(cellViewModels: [SettingsCellViewModel]) { - self.cellViewModels = cellViewModels - } - -} diff --git a/iBox/Sources/Settings/SettingsView.swift b/iBox/Sources/Settings/SettingsView.swift deleted file mode 100644 index 24a151b..0000000 --- a/iBox/Sources/Settings/SettingsView.swift +++ /dev/null @@ -1,131 +0,0 @@ -// -// SettingsView.swift -// iBox -// -// Created by jiyeon on 1/3/24. -// - -import Combine -import UIKit - -final class SettingsView: UIView { - - var delegate: SettingsViewDelegate? - private var viewModel: SettingsViewModel? - private var cancellables = Set() - - // MARK: - UI Components - - let tableView = UITableView().then { - $0.register(SettingsItemCell.self, forCellReuseIdentifier: SettingsItemCell.reuseIdentifier) - $0.separatorStyle = .none - $0.sectionHeaderTopPadding = 0 - $0.backgroundColor = .clear - } - - // MARK: - Initializer - - override init(frame: CGRect) { - super.init(frame: frame) - setupProperty() - setupHierarchy() - setupLayout() - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - // MARK: - Setup Methods - - private func setupProperty() { - tableView.delegate = self - tableView.dataSource = self - } - - private func setupHierarchy() { - addSubview(tableView) - } - - private func setupLayout() { - tableView.snp.makeConstraints { make in - make.edges.equalToSuperview() - } - } - - // MARK: - Bind ViewModel - - func bindViewModel(_ viewModel: SettingsViewModel) { - self.viewModel = viewModel - viewModel.transform(input: viewModel.input.eraseToAnyPublisher()) - .receive(on: RunLoop.main) - .sink { [weak self] event in - switch event { - case .updateSectionViewModels: - self?.tableView.reloadData() - } - }.store(in: &cancellables) - } - - // MARK: - Action Functions - - @objc private func handleHapticsSwitchTap(_ controlSwitch: UISwitch) { - guard let viewModel = viewModel else { return } - viewModel.input.send(.setHaptics(controlSwitch.isOn)) - } - -} - -extension SettingsView: UITableViewDelegate { - - func numberOfSections(in tableView: UITableView) -> Int { - guard let viewModel = viewModel else { return 0 } - return viewModel.sectionViewModels.count - } - - func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { - let headerView = UIView() - headerView.backgroundColor = .backgroundColor - return headerView - } - - func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { - return 20 - } - - func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { - return 55 - } - - func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { - guard let viewModel = viewModel else { return } - let settingsItem = viewModel.sectionViewModels[indexPath.section].cellViewModels[indexPath.row].settingsItem - if (settingsItem.type != SettingsType.haptics) { - delegate?.pushViewController(settingsItem.type) - } - } - -} - -extension SettingsView: UITableViewDataSource { - - func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - guard let viewModel = viewModel else { return 0 } - return viewModel.sectionViewModels[section].cellViewModels.count - } - - func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - guard let viewModel = viewModel, - let cell = tableView.dequeueReusableCell(withIdentifier: SettingsItemCell.reuseIdentifier) - as? SettingsItemCell else { return UITableViewCell() } - let cellViewModel = viewModel.sectionViewModels[indexPath.section].cellViewModels[indexPath.row] - cell.bindViewModel(cellViewModel) - let settingsType = cellViewModel.settingsItem.type - if settingsType == .haptics { - cell.switchControl.removeTarget(nil, action: nil, for: .valueChanged) - cell.switchControl.addTarget(self, action: #selector(handleHapticsSwitchTap), for: .valueChanged) - } - return cell - } - -} diff --git a/iBox/Sources/Settings/SettingsViewController.swift b/iBox/Sources/Settings/SettingsViewController.swift deleted file mode 100644 index 13ff56e..0000000 --- a/iBox/Sources/Settings/SettingsViewController.swift +++ /dev/null @@ -1,63 +0,0 @@ -// -// SettingsViewController.swift -// iBox -// -// Created by μ΄μ§€ν˜„ on 12/27/23. -// - -import UIKit - -protocol SettingsViewDelegate { - func pushViewController(_ type: SettingsType) - func pushViewController(_ viewController: UIViewController) -} - -final class SettingsViewController: BaseViewController, BaseViewControllerProtocol { - - private let viewModel = SettingsViewModel() - - // MARK: - Life Cycle - - override func viewDidLoad() { - super.viewDidLoad() - setupNavigationBar() - - guard let contentView = contentView as? SettingsView else { return } - contentView.delegate = self - contentView.bindViewModel(viewModel) - } - - override func viewWillAppear(_ animated: Bool) { - super.viewWillAppear(animated) - viewModel.input.send(.viewWillAppear) - } - - // MARK: - BaseViewControllerProtocol - - func setupNavigationBar() { - setNavigationBarTitleLabelText("μ„€μ •") - } - -} - -extension SettingsViewController: SettingsViewDelegate { - - func pushViewController(_ type: SettingsType) { - switch type { - case .theme: - navigationController?.pushViewController(ThemeViewController(), animated: true) - case .homeTab: - navigationController?.pushViewController(HomeTabSelectorViewController(), animated: true) - case .reset: - navigationController?.pushViewController(ResetViewController(), animated: true) - case .guide: - navigationController?.pushViewController(GuideViewController(), animated: true) - default: break - } - } - - func pushViewController(_ viewController: UIViewController) { - navigationController?.pushViewController(viewController, animated: true) - } - -} diff --git a/iBox/Sources/Settings/SettingsViewModel.swift b/iBox/Sources/Settings/SettingsViewModel.swift deleted file mode 100644 index e70e9ec..0000000 --- a/iBox/Sources/Settings/SettingsViewModel.swift +++ /dev/null @@ -1,55 +0,0 @@ -// -// SettingsViewModel.swift -// iBox -// -// Created by jiyeon on 2/22/24. -// - -import Combine -import Foundation - -class SettingsViewModel { - - enum Input { - case viewWillAppear - case setHaptics(_ isOn: Bool) - } - - enum Output { - case updateSectionViewModels - } - - // MARK: - Properties - - let input = PassthroughSubject() - private let output = PassthroughSubject() - private var cancellables = Set() - var sectionViewModels = [SettingsSectionViewModel]() - - func transform(input: AnyPublisher) -> AnyPublisher { - input.sink { [weak self] event in - switch event { - case .viewWillAppear: - self?.sectionViewModels.removeAll() - self?.updateSectionViewModels() - self?.output.send(.updateSectionViewModels) - case let .setHaptics(isOn): - UserDefaultsManager.isHaptics = isOn - } - }.store(in: &cancellables) - return output.eraseToAnyPublisher() - } - - private func updateSectionViewModels() { - sectionViewModels.append(SettingsSectionViewModel(cellViewModels: [ - SettingsCellViewModel(SettingsItem(type: .theme, description: UserDefaultsManager.theme.toString())), - SettingsCellViewModel(SettingsItem(type: .homeTab, description: HomeTabType.allCases[UserDefaultsManager.homeTabIndex].toString())), - SettingsCellViewModel(SettingsItem(type: .haptics, flag: UserDefaultsManager.isHaptics)) - ])) - sectionViewModels.append(SettingsSectionViewModel(cellViewModels: [ - SettingsCellViewModel(SettingsItem(type: .reset)), - SettingsCellViewModel(SettingsItem(type: .guide)) - ])) - } - -} diff --git a/iBox/Sources/Settings/Theme/ThemeCell.swift b/iBox/Sources/Settings/Theme/ThemeCell.swift deleted file mode 100644 index 4a4c9fe..0000000 --- a/iBox/Sources/Settings/Theme/ThemeCell.swift +++ /dev/null @@ -1,88 +0,0 @@ -// -// ThemeCell.swift -// iBox -// -// Created by jiyeon on 1/3/24. -// - -import UIKit - -class ThemeCell: UITableViewCell { - - static let reuseIdentifier = "ThemeCell" - - // MARK: - UI Components - - let themeImageView = UIImageView().then { - $0.tintColor = .label - } - - let titleLabel = UILabel().then { - $0.font = .cellTitleFont - } - - let selectButton = UIButton().then { - $0.configuration = .plain() - } - - // MARK: - Initializer - - override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) { - super.init(style: style, reuseIdentifier: reuseIdentifier) - setupProperty() - setupHierarchy() - setupLayout() - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - // MARK: - Setup Methods - - private func setupProperty() { - backgroundColor = .clear - selectionStyle = .none - } - - private func setupHierarchy() { - addSubview(themeImageView) - addSubview(titleLabel) - addSubview(selectButton) - } - - private func setupLayout() { - themeImageView.snp.makeConstraints { make in - make.leading.equalToSuperview().inset(20) - make.centerY.equalToSuperview() - make.width.height.equalTo(23) - } - - titleLabel.snp.makeConstraints { make in - make.leading.equalTo(themeImageView.snp.trailing).offset(10) - make.centerY.equalToSuperview() - } - - selectButton.snp.makeConstraints { make in - make.trailing.equalToSuperview().inset(20) - make.centerY.equalToSuperview() - make.width.height.equalTo(20) - } - } - - func bind(_ theme: Theme) { - titleLabel.text = theme.toString() - themeImageView.image = UIImage(systemName: theme.toImageString()) - } - - func setupSelectButton(_ selected: Bool) { - if selected { - selectButton.configuration?.image = UIImage(systemName: "circle.inset.filled") - selectButton.tintColor = .box2 - } else { - selectButton.configuration?.image = UIImage(systemName: "circle") - selectButton.tintColor = .gray - } - } - -} diff --git a/iBox/Sources/Settings/Theme/ThemeView.swift b/iBox/Sources/Settings/Theme/ThemeView.swift deleted file mode 100644 index 3b68fb9..0000000 --- a/iBox/Sources/Settings/Theme/ThemeView.swift +++ /dev/null @@ -1,102 +0,0 @@ -// -// ThemeView.swift -// iBox -// -// Created by jiyeon on 1/3/24. -// - -import Combine -import UIKit - -import SnapKit - -class ThemeView: UIView { - - private var viewModel: ThemeViewModel? - private var cancellables = Set() - - // MARK: - UI Components - - let tableView = UITableView().then { - $0.register(ThemeCell.self, forCellReuseIdentifier: ThemeCell.reuseIdentifier) - $0.separatorStyle = .none - $0.sectionHeaderTopPadding = 0 - $0.backgroundColor = .clear - } - - // MARK: - Initializer - - override init(frame: CGRect) { - super.init(frame: frame) - setupProperty() - setupHierarchy() - setupLayout() - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - // MARK: - Setup Methods - - private func setupProperty() { - tableView.delegate = self - tableView.dataSource = self - } - - private func setupHierarchy() { - addSubview(tableView) - } - - private func setupLayout() { - tableView.snp.makeConstraints { make in - make.edges.equalToSuperview() - } - } - - // MARK: - Bind ViewModel - - func bineViewModel(_ viewModel: ThemeViewModel) { - self.viewModel = viewModel - viewModel.$selectedIndex - .receive(on: RunLoop.main) - .sink { [weak self] selectedIndex in - guard let window = self?.window else { return } - UserDefaultsManager.theme = Theme.allCases[selectedIndex] - window.overrideUserInterfaceStyle = self?.toUserInterfaceStyle(UserDefaultsManager.theme) ?? .unspecified - self?.tableView.reloadData() - }.store(in: &cancellables) - } - -} - -extension ThemeView: UITableViewDelegate { - - func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { - return 55 - } - - func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { - guard let viewModel = viewModel else { return } - viewModel.selectedIndex = indexPath.row - } - -} - -extension ThemeView: UITableViewDataSource { - - func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { - return Theme.allCases.count - } - - func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { - guard let viewModel = viewModel, - let cell = tableView.dequeueReusableCell(withIdentifier: ThemeCell.reuseIdentifier) - as? ThemeCell else { return UITableViewCell() } - let theme = Theme.allCases[indexPath.row] - cell.bind(theme) - cell.setupSelectButton(viewModel.selectedIndex == indexPath.row) - return cell - } - -} diff --git a/iBox/Sources/Settings/Theme/ThemeViewController.swift b/iBox/Sources/Settings/Theme/ThemeViewController.swift deleted file mode 100644 index 463805f..0000000 --- a/iBox/Sources/Settings/Theme/ThemeViewController.swift +++ /dev/null @@ -1,32 +0,0 @@ -// -// ThemeViewController.swift -// iBox -// -// Created by jiyeon on 1/3/24. -// - -import UIKit - -class ThemeViewController: BaseViewController, BaseViewControllerProtocol { - - private let viewModel = ThemeViewModel() - - // MARK: - Life Cycle - - override func viewDidLoad() { - super.viewDidLoad() - setupNavigationBar() - - guard let contentView = contentView as? ThemeView else { return } - contentView.bineViewModel(viewModel) - } - - // MARK: - BaseViewControllerProtocol - - func setupNavigationBar() { - setNavigationBarTitleLabelText("닀크 λͺ¨λ“œ μ„€μ •") - setNavigationBarTitleLabelFont(.subTitlefont) - setNavigationBarBackButtonHidden(false) - } - -} diff --git a/iBox/Sources/Settings/Theme/ThemeViewModel.swift b/iBox/Sources/Settings/Theme/ThemeViewModel.swift deleted file mode 100644 index 95aabb2..0000000 --- a/iBox/Sources/Settings/Theme/ThemeViewModel.swift +++ /dev/null @@ -1,23 +0,0 @@ -// -// ThemeViewModel.swift -// iBox -// -// Created by jiyeon on 2/22/24. -// - -import Combine -import Foundation - -class ThemeViewModel { - - @Published var selectedIndex: Int - - init() { - switch UserDefaultsManager.theme { - case .light: selectedIndex = 0 - case .dark: selectedIndex = 1 - case .system: selectedIndex = 2 - } - } - -} diff --git a/iBox/Sources/Shared/AddBookmarkManager.swift b/iBox/Sources/Shared/AddBookmarkManager.swift deleted file mode 100644 index fbb7f70..0000000 --- a/iBox/Sources/Shared/AddBookmarkManager.swift +++ /dev/null @@ -1,105 +0,0 @@ -// -// URLDataManager.swift -// iBox -// -// Created by μ΅œμ’…μ› on 3/5/24. -// - -import UIKit - -import SwiftSoup - -class AddBookmarkManager { - static let shared = AddBookmarkManager() - - @Published var isFetching: Bool = false - @Published var incomingTitle: String? - @Published var incomingData: String? - @Published var incomingFaviconUrl: String? - @Published var incomingError: BookmarkError? - - private init() {} - - private func update(with data: (title: String?, data: String?, faviconUrl: String?)) { - DispatchQueue.main.async { - self.isFetching = false - self.incomingTitle = data.title?.removingPercentEncoding - self.incomingData = data.data?.removingPercentEncoding - self.incomingFaviconUrl = data.faviconUrl?.removingPercentEncoding - } - } - - private func parseHTML(_ html: String, _ url: URL) { - do { - let doc = try SwiftSoup.parse(html) - let title = try doc.title() - let faviconLink = try doc.select("link[rel='icon']").first()?.attr("href") - - self.update(with: (title: title, data: url.absoluteString, faviconUrl: faviconLink)) - } catch { - self.incomingError = .parseError - } - } - - private func extractDataParameter(from url: URL) -> String? { - let urlString = url.absoluteString - - guard let range = urlString.range(of: "url?data=") else { - return nil - } - - let dataParameter = urlString[range.upperBound...] - return String(dataParameter).removingPercentEncoding - } - - private func fetchWebsiteDetails(from url: URL) { - let task = URLSession.shared.dataTask(with: url) { [weak self] data, response, error in - guard let data = data, error == nil else { - self?.incomingError = .htmlError - return - } - - let encodingName = (response as? HTTPURLResponse)?.textEncodingName ?? "utf-8" - let encoding = String.Encoding(rawValue: CFStringConvertEncodingToNSStringEncoding(CFStringConvertIANACharSetNameToEncoding(encodingName as CFString))) - - guard let html = String(data: data, encoding: encoding) else { - self?.incomingError = .decodeError - return - } - - self?.parseHTML(html, url) - } - task.resume() - } - - func navigateToAddBookmarkView(from url: URL, in tabBarController: UITabBarController) { - guard url.scheme == "iBox", let urlString = extractDataParameter(from: url) else { return } - - incomingTitle = nil - incomingData = nil - incomingFaviconUrl = nil - isFetching = true - - - if urlString.hasPrefix("http://") { - update(with: (nil, urlString, nil)) - } else { - guard let url = URL(string: urlString) else { - isFetching = false - return - } - fetchWebsiteDetails(from: url) - } - - tabBarController.selectedIndex = 0 - - DispatchQueue.main.async { - guard let navigationController = tabBarController.selectedViewController as? UINavigationController, - let boxListViewController = navigationController.viewControllers.first as? BoxListViewController else { - return - } - boxListViewController.shouldPresentModalAutomatically = true - } - } - -} diff --git a/iBox/Sources/Shared/Animator/FullSizePresentationController.swift b/iBox/Sources/Shared/Animator/FullSizePresentationController.swift deleted file mode 100644 index 8693cab..0000000 --- a/iBox/Sources/Shared/Animator/FullSizePresentationController.swift +++ /dev/null @@ -1,37 +0,0 @@ -// -// FullSizePresentationController.swift -// iBox -// -// Created by Chan on 4/24/24. -// - -import UIKit - -class FullSizePresentationController: UIPresentationController { - private var dimmingView: UIView! - - override func containerViewDidLayoutSubviews() { - super.containerViewDidLayoutSubviews() - - dimmingView.frame = containerView?.bounds ?? CGRect.zero - presentedView?.frame = frameOfPresentedViewInContainerView - } - - override func presentationTransitionWillBegin() { - guard let containerView = containerView else { return } - - dimmingView = UIView(frame: containerView.bounds) - dimmingView.backgroundColor = UIColor(white: 0.0, alpha: 0.4) - dimmingView.autoresizingMask = [.flexibleWidth, .flexibleHeight] - - containerView.addSubview(dimmingView) - containerView.sendSubviewToBack(dimmingView) - - super.presentationTransitionWillBegin() - } - - override var frameOfPresentedViewInContainerView: CGRect { - guard let containerView = containerView else { return .zero } - return CGRect(x: 0, y: 0, width: containerView.bounds.width, height: containerView.bounds.height) - } -} diff --git a/iBox/Sources/Shared/Animator/SlideInPresentationAnimator.swift b/iBox/Sources/Shared/Animator/SlideInPresentationAnimator.swift deleted file mode 100644 index f003178..0000000 --- a/iBox/Sources/Shared/Animator/SlideInPresentationAnimator.swift +++ /dev/null @@ -1,46 +0,0 @@ -// -// SlideInPresentationAnimator.swift -// iBox -// -// Created by Chan on 4/24/24. -// - -import UIKit - -class SlideInPresentationAnimator: NSObject, UIViewControllerAnimatedTransitioning { - let isPresentation: Bool - - init(isPresentation: Bool) { - self.isPresentation = isPresentation - super.init() - } - - func transitionDuration(using transitionContext: UIViewControllerContextTransitioning?) -> TimeInterval { - return 0.3 - } - - func animateTransition(using transitionContext: UIViewControllerContextTransitioning) { - let key = isPresentation ? UITransitionContextViewControllerKey.to : UITransitionContextViewControllerKey.from - guard let controller = transitionContext.viewController(forKey: key) else { return } - - if isPresentation { - transitionContext.containerView.addSubview(controller.view) - } - - let presentedFrame = transitionContext.finalFrame(for: controller) - var dismissedFrame = presentedFrame - dismissedFrame.origin.y = -presentedFrame.height - - let initialFrame = isPresentation ? dismissedFrame : presentedFrame - let finalFrame = isPresentation ? presentedFrame : dismissedFrame - - controller.view.frame = initialFrame - UIView.animate( - withDuration: transitionDuration(using: transitionContext), - animations: { - controller.view.frame = finalFrame - }, completion: { finished in - transitionContext.completeTransition(finished) - }) - } -} diff --git a/iBox/Sources/Shared/AppStateManager.swift b/iBox/Sources/Shared/AppStateManager.swift deleted file mode 100644 index 10f8b22..0000000 --- a/iBox/Sources/Shared/AppStateManager.swift +++ /dev/null @@ -1,19 +0,0 @@ -// -// AppStateManager.swift -// iBox -// -// Created by Chan on 3/2/24. -// - -import Combine - -class AppStateManager { - static let shared = AppStateManager() - - @Published var versionCheckCompleted: VersionCheckCode = .initial - var currentViewErrorState: ViewErrorCode = .normal - - func updateViewError(_ error: ViewErrorCode) { - currentViewErrorState = error - } -} diff --git a/iBox/Sources/Shared/CoreDataManager.swift b/iBox/Sources/Shared/CoreDataManager.swift deleted file mode 100644 index 28ef1c2..0000000 --- a/iBox/Sources/Shared/CoreDataManager.swift +++ /dev/null @@ -1,333 +0,0 @@ -// -// CoreDataManager.swift -// iBox -// -// Created by μ΄μ§€ν˜„ on 2/9/24. -// - -import CoreData -import Foundation - -class CoreDataManager { - static let shared = CoreDataManager() - - lazy var persistentContainer = { - let container = NSPersistentContainer(name: "iBox") - - container.loadPersistentStores { _, error in - if let error { - fatalError(error.localizedDescription) - } - } - - return container - }() - - private init() {} - - private var lastFolderOrder: Int64 = 0 - private var lastBookmarkOrder = [UUID: Int64]() - - private func save() { - guard persistentContainer.viewContext.hasChanges else { return } - do { - try persistentContainer.viewContext.save() - } catch { - print("Fail to save the context:", error.localizedDescription) - } - } -} - -// 폴더 κ΄€λ ¨ -extension CoreDataManager { - func addInitialFolders(_ folders: [Folder]) { - let context = persistentContainer.viewContext - - for folder in folders { - let newFolder = FolderEntity(context: context) - newFolder.id = folder.id - newFolder.name = folder.name - newFolder.order = lastFolderOrder - lastFolderOrder += 1 - let bookmarks = NSMutableOrderedSet() - lastBookmarkOrder[folder.id] = 0 - for bookmark in folder.bookmarks { - let newBookmark = BookmarkEntity(context: context) - newBookmark.id = bookmark.id - newBookmark.name = bookmark.name - newBookmark.url = bookmark.url - newBookmark.order = lastBookmarkOrder[folder.id] ?? 0 - lastBookmarkOrder[folder.id] = (lastBookmarkOrder[folder.id] ?? 0) + 1 - bookmarks.add(newBookmark) - } - newFolder.bookmarks = bookmarks - } - save() - } - - func addFolder(_ folder: Folder) { - let context = persistentContainer.viewContext - let newFolder = FolderEntity(context: context) - newFolder.id = folder.id - newFolder.name = folder.name - newFolder.order = lastFolderOrder - lastFolderOrder += 1 - let bookmarks = NSMutableOrderedSet() - lastBookmarkOrder[folder.id] = 0 - for bookmark in folder.bookmarks { - let newBookmark = BookmarkEntity(context: context) - newBookmark.id = bookmark.id - newBookmark.name = bookmark.name - newBookmark.url = bookmark.url - newBookmark.order = lastBookmarkOrder[folder.id] ?? 0 - lastBookmarkOrder[folder.id] = (lastBookmarkOrder[folder.id] ?? 0) + 1 - bookmarks.add(newBookmark) - } - newFolder.bookmarks = bookmarks - save() - } - - private func getFolderEntity(id: UUID) -> FolderEntity? { - let context = persistentContainer.viewContext - - let fetchRequest = FolderEntity.fetchRequest() - fetchRequest.predicate = NSPredicate(format: "id == %@", id as NSUUID) - - do { - let results = try context.fetch(fetchRequest) - return results.first - } catch { - print(error.localizedDescription) - return nil - } - } - - private func getAllFolderEntity() -> [FolderEntity] { - let context = persistentContainer.viewContext - - let fetchRequest = FolderEntity.fetchRequest() - let sortDescriptor = NSSortDescriptor(key: "order", ascending: true) - fetchRequest.sortDescriptors = [sortDescriptor] - - do { - return try context.fetch(fetchRequest) - } catch { - print(error.localizedDescription) - return [] - } - } - - func getFolders() -> [Folder] { - let folderEntities = getAllFolderEntity() - var folders = [Folder]() - - lastFolderOrder = (folderEntities.last?.order ?? -1) + 1 - for folderEntity in folderEntities { - let bookmarkEntities = (folderEntity.bookmarks?.array as? [BookmarkEntity] ?? []).sorted { - $0.order < $1.order - } - guard let folderId = folderEntity.id else { return [] } - lastBookmarkOrder[folderId] = (bookmarkEntities.last?.order ?? -1) + 1 - let bookmarks = bookmarkEntities.map{ Bookmark(id: $0.id ?? UUID(), name: $0.name ?? "" , url: $0.url ?? URL(string: "")!) } - folders.append(Folder(id: folderEntity.id ?? UUID(), name: folderEntity.name ?? "", bookmarks: bookmarks)) - } - - return folders - } - - func deleteFolder(id: UUID) { - let context = persistentContainer.viewContext - - guard let folder = getFolderEntity(id: id) else { return } - let deletedOrder = folder.order - context.delete(folder) - - let subsequentFolderEntities = getAllFolderEntity().filter{ $0.order > deletedOrder } - for folderEntity in subsequentFolderEntities { - folderEntity.order -= 1 - } - lastFolderOrder -= 1 - save() - } - - func deleteAllFolders() { - let context = persistentContainer.viewContext - - let folders = getAllFolderEntity() - for folder in folders { - context.delete(folder) - } - save() - } - - func updateFolder(id: UUID, name: String) { - guard let folder = getFolderEntity(id: id) else { return } - folder.name = name - save() - } - - func moveFolder(from source: Int, to destination: Int) { - let folderEntities = getAllFolderEntity() - - if source < destination { - var startIndex = source + 1 - let endIndex = destination - var startOrder = folderEntities[source].order - while startIndex <= endIndex { - folderEntities[startIndex].order = startOrder - startOrder += 1 - startIndex += 1 - } - folderEntities[source].order = startOrder - } else if destination < source { - var startIndex = destination - let endIndex = source - 1 - var startOrder = folderEntities[destination].order + 1 - let newOrder = folderEntities[destination].order - while startIndex <= endIndex { - folderEntities[startIndex].order = startOrder - startOrder += 1 - startIndex += 1 - } - folderEntities[source].order = newOrder - } - save() - } - -} - -// 뢁마크 κ΄€λ ¨ -extension CoreDataManager { - - func getBookmarkUrl(_ bookmarkId: UUID) -> URL? { - let entity = getBookmarkEntity(id: bookmarkId) - if let entity { - return entity.url - } else { - return nil - } - } - - func addBookmark(_ bookmark: Bookmark, folderId: UUID) { - let context = persistentContainer.viewContext - - guard let folder = getFolderEntity(id: folderId) else { return } - let newBookmark = BookmarkEntity(context: context) - newBookmark.id = bookmark.id - newBookmark.name = bookmark.name - newBookmark.url = bookmark.url - guard let folderId = folder.id else { return } - newBookmark.order = lastBookmarkOrder[folderId] ?? 0 - lastBookmarkOrder[folderId] = (lastBookmarkOrder[folderId] ?? 0) + 1 - newBookmark.folder = folder - save() - } - - func updateBookmark(id: UUID, name: String, url: URL) { - guard let bookmark = getBookmarkEntity(id: id) else { return } - bookmark.name = name - bookmark.url = url - save() - } - - private func getBookmarkEntity(id: UUID) -> BookmarkEntity? { - let context = persistentContainer.viewContext - - let fetchRequest = BookmarkEntity.fetchRequest() - fetchRequest.predicate = NSPredicate(format: "id == %@", id as NSUUID) - - do { - let results = try context.fetch(fetchRequest) - return results.first - } catch { - print(error.localizedDescription) - return nil - } - } - - func deleteBookmark(id: UUID) { - let context = persistentContainer.viewContext - - guard let bookmark = getBookmarkEntity(id: id) else { return } - let deletedOrder = bookmark.order - context.delete(bookmark) - - guard let folderId = bookmark.folder?.id else { return } - let subsequentBookmarkEntities = getAllBookmarkEntity(in: folderId).filter{ $0.order > deletedOrder } - for bookmarkEntity in subsequentBookmarkEntities { - bookmarkEntity.order -= 1 - } - lastBookmarkOrder[folderId] = (lastBookmarkOrder[folderId] ?? 1) - 1 - save() - } - - private func getAllBookmarkEntity(in folderId: UUID) -> [BookmarkEntity] { - let context = persistentContainer.viewContext - - guard let folder = getFolderEntity(id: folderId) else { return [] } - let fetchRequest = BookmarkEntity.fetchRequest() - let sortDescriptor = NSSortDescriptor(key: "order", ascending: true) - fetchRequest.predicate = NSPredicate(format: "folder == %@", folder) - fetchRequest.sortDescriptors = [sortDescriptor] - - do { - return try context.fetch(fetchRequest) - } catch { - print(error.localizedDescription) - return [] - } - } - - func deleteAllBookmarks(folderId: UUID) { - let context = persistentContainer.viewContext - - let bookmarks = getAllBookmarkEntity(in: folderId) - for bookmark in bookmarks { - context.delete(bookmark) - } - save() - } - - func moveBookmark(from source: IndexPath, to destination: IndexPath, srcId: UUID, destFolderId: UUID) { - if source.section == destination.section { - moveWithinSameFolder(from: source.row, to: destination.row, bookmarkId: srcId, folderId: destFolderId) - } else { - moveToDifferentFolder(from: source, to: destination, bookmarkId: srcId, destFolderId: destFolderId) - } - save() - } - - private func moveWithinSameFolder(from sourceIndex: Int, to destinationIndex: Int, bookmarkId: UUID, folderId: UUID) { - var bookmarks = getAllBookmarkEntity(in: folderId) - let movingBookmark = bookmarks.remove(at: sourceIndex) - - let adjustedDestinationIndex = sourceIndex < destinationIndex ? destinationIndex - 1 : destinationIndex - - bookmarks.insert(movingBookmark, at: adjustedDestinationIndex) - - for (index, bookmark) in bookmarks.enumerated() { - bookmark.order = Int64(index) - } - } - - private func moveToDifferentFolder(from source: IndexPath, to destination: IndexPath, bookmarkId: UUID, destFolderId: UUID) { - guard let movingBookmark = getBookmarkEntity(id: bookmarkId), - let srcFolder = movingBookmark.folder, - let srcFolderId = srcFolder.id else { return } - let srcBookmarks = getAllBookmarkEntity(in: srcFolderId) - let destBookmarks = getAllBookmarkEntity(in: destFolderId) - let destFolder = getFolderEntity(id: destFolderId) - - for bookmark in srcBookmarks where bookmark.order > movingBookmark.order { - bookmark.order -= 1 - } - - movingBookmark.folder = destFolder - movingBookmark.order = Int64(destination.row) - for bookmark in destBookmarks where bookmark.order >= movingBookmark.order { - bookmark.order += 1 - } - } - -} - diff --git a/iBox/Sources/Shared/NetworkManager.swift b/iBox/Sources/Shared/NetworkManager.swift deleted file mode 100644 index f05ac09..0000000 --- a/iBox/Sources/Shared/NetworkManager.swift +++ /dev/null @@ -1,42 +0,0 @@ -// -// NetworkManager.swift -// iBox -// -// Created by Chan on 4/2/24. -// - -import Foundation - -class NetworkManager { - static let shared = NetworkManager() - - private init() {} - - func fetchModel(from urlString: String, modelType: T.Type, completion: @escaping (Result) -> Void) { - guard let url = URL(string: urlString) else { - completion(.failure(NSError(domain: "NetworkManager", code: -1, userInfo: [NSLocalizedDescriptionKey: "Invalid URL"]))) - return - } - - let task = URLSession.shared.dataTask(with: url) { data, response, error in - if let error = error { - completion(.failure(error)) - return - } - - guard let data = data else { - completion(.failure(NSError(domain: "NetworkManager", code: -2, userInfo: [NSLocalizedDescriptionKey: "No data received"]))) - return - } - - do { - let model = try JSONDecoder().decode(modelType, from: data) - completion(.success(model)) - } catch { - completion(.failure(error)) - } - } - - task.resume() - } -} diff --git a/iBox/Sources/Shared/SlideInPresentationManager.swift b/iBox/Sources/Shared/SlideInPresentationManager.swift deleted file mode 100644 index 6e51d0f..0000000 --- a/iBox/Sources/Shared/SlideInPresentationManager.swift +++ /dev/null @@ -1,22 +0,0 @@ -// -// SlideInPresentationManager.swift -// iBox -// -// Created by Chan on 4/23/24. -// - -import UIKit - -class SlideInPresentationManager: NSObject, UIViewControllerTransitioningDelegate { - func presentationController(forPresented presented: UIViewController, presenting: UIViewController?, source: UIViewController) -> UIPresentationController? { - return FullSizePresentationController(presentedViewController: presented, presenting: presenting) - } - - func animationController(forPresented presented: UIViewController, presenting: UIViewController, source: UIViewController) -> UIViewControllerAnimatedTransitioning? { - return SlideInPresentationAnimator(isPresentation: true) - } - - func animationController(forDismissed dismissed: UIViewController) -> UIViewControllerAnimatedTransitioning? { - return SlideInPresentationAnimator(isPresentation: false) - } -} diff --git a/iBox/Sources/Shared/UserDefaultsManager.swift b/iBox/Sources/Shared/UserDefaultsManager.swift deleted file mode 100644 index 36c58bb..0000000 --- a/iBox/Sources/Shared/UserDefaultsManager.swift +++ /dev/null @@ -1,60 +0,0 @@ -// -// UserDefaultsManager.swift -// iBox -// -// Created by jiyeon on 1/8/24. -// - -import Foundation - -final class UserDefaultsManager { - - @UserDefaultsData(key: "theme", defaultValue: Theme.system) - static var theme: Theme - - @UserDefaultsData(key: "favoriteId", defaultValue: nil) - static var favoriteId: UUID? - - @UserDefaultsData(key: "homeTabIndex", defaultValue: 0) - static var homeTabIndex: Int - - @UserDefaultsData(key: "isDefaultDataInserted", defaultValue: false) - static var isDefaultDataInserted: Bool - - @UserDefaultsData(key: "isHaptics", defaultValue: true) - static var isHaptics: Bool - - @UserDefaultsData(key: "selectedFolderId", defaultValue: nil) - static var selectedFolderId: UUID? - -} - -@propertyWrapper -struct UserDefaultsData { - let key: String - let defaultValue: Value - var container: UserDefaults = .standard - - var wrappedValue: Value { - get { - guard let data = container.object(forKey: key) as? Data else { - return defaultValue - } - do { - let value = try JSONDecoder().decode(Value.self, from: data) - return value - } catch { - print("Error decoding UserDefaults data for key \(key): \(error)") - return defaultValue - } - } - set { - do { - let data = try JSONEncoder().encode(newValue) - container.set(data, forKey: key) - } catch { - print("Error encoding UserDefaults data for key \(key): \(error)") - } - } - } -} diff --git a/iBox/Sources/Shared/WebCacheManager.swift b/iBox/Sources/Shared/WebCacheManager.swift deleted file mode 100644 index c3123d3..0000000 --- a/iBox/Sources/Shared/WebCacheManager.swift +++ /dev/null @@ -1,49 +0,0 @@ -// -// WebCacheManager.swift -// iBox -// -// Created by jiyeon on 3/26/24. -// - -import UIKit - -class WebCacheManager { - - static let shared = WebCacheManager() - - private let cache = NSCache() - - private init() {} - - func cacheData(forKey uuid: UUID, viewController: WebViewController) { - let wrapper = UUIDWrapper(uuid: uuid) - cache.setObject(viewController, forKey: wrapper) - } - - func viewControllerForKey(_ uuid: UUID) -> WebViewController? { - let wrapper = UUIDWrapper(uuid: uuid) - return cache.object(forKey: wrapper) - } - - func removeViewControllerForKey(_ uuid: UUID) { - let wrapper = UUIDWrapper(uuid: uuid) - cache.removeObject(forKey: wrapper) - } -} - -class UUIDWrapper: NSObject { - let uuid: UUID - - init(uuid: UUID) { - self.uuid = uuid - } - - override func isEqual(_ object: Any?) -> Bool { - guard let other = object as? UUIDWrapper else { return false } - return uuid == other.uuid - } - - override var hash: Int { - return uuid.hashValue - } -} diff --git a/iBox/Sources/Shared/WebViewPreloader.swift b/iBox/Sources/Shared/WebViewPreloader.swift deleted file mode 100644 index 734c0df..0000000 --- a/iBox/Sources/Shared/WebViewPreloader.swift +++ /dev/null @@ -1,48 +0,0 @@ -// -// WebViewPreloader.swift -// iBox -// -// Created by μ΄μ§€ν˜„ on 1/18/24. -// - -import Foundation -import WebKit - -class WebViewPreloader { - static let shared = WebViewPreloader() - private var favoriteView: (url: URL, webView: WebView)? - private var defaultUrl = URL(string: "https://profile.intra.42.fr/")! - - private init() {} - - func preloadFavoriteView(url: URL?) { - let webView = WebView() - webView.isOpaque = false - webView.selectedWebsite = url ?? defaultUrl - favoriteView = (url ?? defaultUrl, webView) - } - - func getFavoriteView() -> WebView? { - return favoriteView?.webView - } - - func resetFavoriteView() { - guard let favoriteView else { return } - favoriteView.webView.selectedWebsite = favoriteView.url - } - - func setFavoriteUrl(url: URL?) { - if let favoriteView { - if url == favoriteView.url || - (url == nil && favoriteView.url == defaultUrl ) { - return - } else { - self.favoriteView?.url = url ?? defaultUrl - resetFavoriteView() - } - } else { - preloadFavoriteView(url: url) - } - } - -} diff --git a/iBox/Sources/Versioning/VersionCheckCode.swift b/iBox/Sources/Versioning/VersionCheckCode.swift deleted file mode 100644 index 37b250e..0000000 --- a/iBox/Sources/Versioning/VersionCheckCode.swift +++ /dev/null @@ -1,21 +0,0 @@ -// -// VersionCheckCode.swift -// iBox -// -// Created by Chan on 3/2/24. -// - -enum VersionCheckCode: Equatable { - case initial // μ΄ˆκΈ°κ°’ - case success // 성곡 - case later // λ‚˜μ€‘μ— (ab testing code) - case update // μ—…λ°μ΄νŠΈ (ab testing code) - case urlError // URL κ΄€λ ¨ μ—λŸ¬ - case networkError // λ„€νŠΈμ›Œν¬ μš”μ²­ μ‹€νŒ¨ - case decodingError // λ””μ½”λ”© μ‹€νŒ¨ - case versionOutdated(mandatoryUpdate: Bool, updateUrl: String) // 버전이 ꡬ버전일 λ•Œ - case serverError // μ„œλ²„ μ—λŸ¬ λ˜λŠ” 기타 μ—λŸ¬ - case internalSceneError // λ‚΄λΆ€ 씬 μ—λŸ¬ - case internalInfoError // λ‚΄λΆ€ 인포 μ—λŸ¬ - case maxRetryReached // μ΅œλŒ€ μž¬μ‹œλ„ 횟수 도달 -} diff --git a/iBox/Sources/Versioning/VersioningHandler.swift b/iBox/Sources/Versioning/VersioningHandler.swift deleted file mode 100644 index cccde8f..0000000 --- a/iBox/Sources/Versioning/VersioningHandler.swift +++ /dev/null @@ -1,83 +0,0 @@ -// -// VersioningHandler.swift -// iBox -// -// Created by Chan on 3/2/24. -// - -import UIKit - -class VersioningHandler { - - func checkAppVersion(retryCount: Int = 0, completion: @escaping (VersionCheckCode) -> Void) { - let maxRetryCount = 3 - let urlString = "https://raw.githubusercontent.com/42Box/versioning/main/db.json" - - NetworkManager.shared.fetchModel(from: urlString, modelType: VersionInfo.self) { result in - switch result { - case .success(let versionInfo): - guard let latestVersion = versionInfo.version.first?.latestVersion, - let minRequiredVersion = versionInfo.version.first?.minRequiredVersion else { - completion(.urlError) - return - } - - self.compareVersion(latestVersion: latestVersion, minRequiredVersion: minRequiredVersion, storeURL: versionInfo.url.storeUrl, completion: completion) - - case .failure(let error): - print("Error: \(error.localizedDescription)") - - if retryCount < maxRetryCount { - DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { - self.checkAppVersion(retryCount: retryCount + 1, completion: completion) - } - } else { - completion(.maxRetryReached) - } - } - } - } - - func compareVersion(latestVersion: String, minRequiredVersion: String, storeURL: String, completion: @escaping (VersionCheckCode) -> Void) { - guard let appVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String else { - completion(.internalInfoError) - return - } - - if appVersion.compare(minRequiredVersion, options: .numeric) == .orderedAscending { - showAlertForUpdate(storeURL: storeURL, isMandatory: true, completion: completion) - } else if appVersion.compare(latestVersion, options: .numeric) == .orderedAscending { - showAlertForUpdate(storeURL: storeURL, isMandatory: false, completion: completion) - } else { - completion(.success) - } - } - - func showAlertForUpdate(storeURL: String, isMandatory: Bool, completion: @escaping (VersionCheckCode) -> Void) { - DispatchQueue.main.async { - guard let windowScene = UIApplication.shared.connectedScenes.first(where: { $0 is UIWindowScene }) as? UIWindowScene, - let rootViewController = windowScene.windows.first(where: { $0.isKeyWindow })?.rootViewController else { - completion(.internalSceneError) - return - } - - let message = isMandatory ? "μƒˆλ‘œμš΄ 버전이 ν•„μš”ν•©λ‹ˆλ‹€. μ—…λ°μ΄νŠΈ ν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ?" : "μƒˆλ‘œμš΄ 버전이 μžˆμŠ΅λ‹ˆλ‹€. μ—…λ°μ΄νŠΈ ν•˜μ‹œκ² μŠ΅λ‹ˆκΉŒ?" - let alert = UIAlertController(title: "μ—…λ°μ΄νŠΈ μ•Œλ¦Ό", message: message, preferredStyle: .alert) - - alert.addAction(UIAlertAction(title: "μ—…λ°μ΄νŠΈ", style: .default, handler: { _ in - if let url = URL(string: storeURL), UIApplication.shared.canOpenURL(url) { - UIApplication.shared.open(url) - completion(.update) - } - })) - - if !isMandatory { - alert.addAction(UIAlertAction(title: "λ‚˜μ€‘μ—", style: .cancel, handler: { _ in - completion(.later) - })) - } - - rootViewController.present(alert, animated: true) - } - } -} diff --git a/iBox/Sources/Web/RefreshControl.swift b/iBox/Sources/Web/RefreshControl.swift deleted file mode 100644 index 6f1a80f..0000000 --- a/iBox/Sources/Web/RefreshControl.swift +++ /dev/null @@ -1,119 +0,0 @@ -// -// RefreshControl.swift -// iBox -// -// Created by jiyeon on 4/4/24. -// - -import UIKit - -import SnapKit - -enum RefreshControlType { - case addBookmark - case refresh - case back -} - -class RefreshControl: UIView { - - var currentType: RefreshControlType? - - // MARK: - UI Components - - let addBookmarkButton = UIButton().then { - $0.configuration = .plain() - $0.tintColor = .label - $0.configuration?.image = UIImage(systemName: "bookmark.circle") - $0.configuration?.imagePadding = 10 - $0.configuration?.imagePlacement = .top - $0.configuration?.preferredSymbolConfigurationForImage = .init(pointSize: 20.0) - $0.configuration?.attributedTitle = AttributedString("뢁마크 μΆ”κ°€", attributes: AttributeContainer([NSAttributedString.Key.font: UIFont.refreshControlFont])) - $0.layer.cornerRadius = 15 - } - - let refreshButton = UIButton().then { - $0.configuration = .plain() - $0.tintColor = .label - $0.configuration?.image = UIImage(systemName: "arrow.clockwise.circle") - $0.configuration?.imagePadding = 10 - $0.configuration?.imagePlacement = .top - $0.configuration?.preferredSymbolConfigurationForImage = .init(pointSize: 20.0) - $0.configuration?.attributedTitle = AttributedString("μƒˆλ‘œκ³ μΉ¨", attributes: AttributeContainer([NSAttributedString.Key.font: UIFont.refreshControlFont])) - $0.layer.cornerRadius = 15 - } - - let backButton = UIButton().then { - $0.configuration = .plain() - $0.tintColor = .label - $0.configuration?.image = UIImage(systemName: "arrowshape.turn.up.backward.circle") - $0.configuration?.imagePadding = 10 - $0.configuration?.imagePlacement = .top - $0.configuration?.preferredSymbolConfigurationForImage = .init(pointSize: 20.0) - $0.configuration?.attributedTitle = AttributedString("처음으둜 이동", attributes: AttributeContainer([NSAttributedString.Key.font: UIFont.refreshControlFont])) - $0.layer.cornerRadius = 15 - } - - let stackView = UIStackView().then { - $0.axis = .horizontal - $0.distribution = .fillEqually - $0.spacing = 20 - } - - - // MARK: - Initializer - - override init(frame: CGRect) { - super.init(frame: frame) - setupProperty() - setupHierarchy() - setupLayout() - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - // MAKR: - Setup Methods - - private func setupProperty() { - backgroundColor = .backgroundColor - isUserInteractionEnabled = true - } - - private func setupHierarchy() { - addSubview(stackView) - stackView.addArrangedSubview(addBookmarkButton) - stackView.addArrangedSubview(refreshButton) - stackView.addArrangedSubview(backButton) - } - - private func setupLayout() { - stackView.snp.makeConstraints { make in - make.leading.bottom.trailing.equalToSuperview().inset(20) - } - } - - func setSelected(_ type: RefreshControlType) { - if type == currentType { return } - currentType = type - clear() - switch type { - case .addBookmark: addBookmarkButton.backgroundColor = .tableViewBackgroundColor - case .refresh: refreshButton.backgroundColor = .tableViewBackgroundColor - case .back: backButton.backgroundColor = .tableViewBackgroundColor - } - if UserDefaultsManager.isHaptics { - let generator = UIImpactFeedbackGenerator(style: .light) - generator.prepare() - generator.impactOccurred() - } - } - - func clear() { - [addBookmarkButton, refreshButton, backButton].forEach { button in - button.backgroundColor = .clear - } - } - -} diff --git a/iBox/Sources/Web/WebView.swift b/iBox/Sources/Web/WebView.swift deleted file mode 100644 index 760425d..0000000 --- a/iBox/Sources/Web/WebView.swift +++ /dev/null @@ -1,233 +0,0 @@ -// -// WebView.swift -// iBox -// -// Created by μ΄μ§€ν˜„ on 1/4/24. -// - -import UIKit -import WebKit - -import SnapKit - -class WebView: UIView { - - var delegate: WebViewDelegate? - var errorDelegate: WebViewErrorDelegate? - var lastRequestedURL: URL? - - private var progressObserver: NSKeyValueObservation? - - var selectedWebsite: URL? { - didSet { - loadWebsite() - } - } - - private var refreshControlHeight: CGFloat = 120.0 - private var isActive = false - - // MARK: - UI Components - - - private let webView: WKWebView - - private let progressView = UIProgressView().then { - $0.progressViewStyle = .bar - $0.tintColor = .box2 - $0.sizeToFit() - } - - private var refreshControl: RefreshControl? - - // MARK: - Initializer - - override init(frame: CGRect) { - let config = WKWebViewConfiguration() - config.allowsInlineMediaPlayback = true - - webView = WKWebView(frame: .zero, configuration: config) - super.init(frame: frame) - - setupProperty() - setupHierarchy() - setupLayout() - } - - required init?(coder: NSCoder) { - fatalError("init(coder:) has not been implemented") - } - - deinit { - progressObserver?.invalidate() - webView.stopLoading() - webView.isOpaque = false - webView.navigationDelegate = nil - webView.scrollView.delegate = nil - } - - // MARK: - Setup Methods - - private func setupProperty() { - backgroundColor = .backgroundColor - webView.navigationDelegate = self - webView.uiDelegate = self - progressObserver = webView.observe(\.estimatedProgress, options: .new) { [weak self] webView, _ in - self?.progressView.setProgress(Float(webView.estimatedProgress), animated: true) - } - } - - private func setupHierarchy() { - addSubview(webView) - addSubview(progressView) - } - - private func setupLayout() { - webView.snp.makeConstraints { make in - make.top.equalTo(self.safeAreaLayoutGuide.snp.topMargin) - make.bottom.equalTo(self.safeAreaLayoutGuide.snp.bottomMargin) - make.leading.equalTo(self.safeAreaLayoutGuide.snp.leadingMargin) - make.trailing.equalTo(self.safeAreaLayoutGuide.snp.trailingMargin) - } - - progressView.snp.makeConstraints { make in - make.top.equalTo(self.safeAreaLayoutGuide.snp.topMargin) - make.leading.trailing.equalToSuperview() - } - } - - func setupRefreshControl() { - // pan gesture - let panGestureRecognizer = UIPanGestureRecognizer(target: self, action: #selector(handleSwipe)) - panGestureRecognizer.delegate = self // UIGestureRecognizerDelegate - addGestureRecognizer(panGestureRecognizer) - // refresh control - let refreshControl = RefreshControl(frame: .init(x: 0, y: -frame.size.height, width: frame.size.width, height: frame.size.height)) - webView.scrollView.addSubview(refreshControl) - webView.scrollView.backgroundColor = .backgroundColor - webView.scrollView.delegate = self // UIScrollViewDelegate - self.refreshControl = refreshControl - } - - private func loadWebsite() { - guard let url = selectedWebsite else { return } - webView.load(URLRequest(url: url)) - webView.allowsBackForwardNavigationGestures = true - } - - @objc func handleSwipe(_ gesture: UIPanGestureRecognizer) { - guard isActive, let refreshControl = refreshControl else { return } - - let translation = gesture.translation(in: self) - if gesture.state == .changed { - if abs(translation.x) > 60.0 { - if translation.x > 0 { // 였λ₯Έμͺ½ μŠ€μ™€μ΄ν”„ : 처음 뢁마크둜 λŒμ•„κ°€κΈ° - refreshControl.setSelected(.back) - } else { // μ™Όμͺ½ μŠ€μ™€μ΄ν”„ : ν˜„μž¬ 링크 뢁마크 μΆ”κ°€ - refreshControl.setSelected(.addBookmark) - } - } else { // μ•„λž˜ : μƒˆλ‘œκ³ μΉ¨ - refreshControl.setSelected(.refresh) - } - } else if gesture.state == .ended { // μ‚¬μš©μžμ˜ ν„°μΉ˜κ°€ 끝났을 λ•Œ - switch refreshControl.currentType { - case .addBookmark: - guard let url = webView.url else { return } - delegate?.pushAddBookMarkViewController(url: url) - case .refresh: - self.webView.reload() - case .back: - loadWebsite() - case .none: break - } - // 제슀처 μ™„λ£Œ ν›„ μ΄ˆκΈ°ν™” - DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { - refreshControl.clear() - } - } - // 제슀처 μ΄ˆκΈ°ν™” - if gesture.state == .ended || gesture.state == .cancelled { - gesture.setTranslation(CGPoint.zero, in: self) - refreshControl.currentType = nil - } - } - -} - -extension WebView: WKNavigationDelegate { - - func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) { - // λ‘œλ”© μ‹œμž‘ μ‹œ ν”„λ‘œκ·Έλ ˆμŠ€ λ°”λ₯Ό 보여주고 진행λ₯  μ΄ˆκΈ°ν™” - progressView.isHidden = false - progressView.setProgress(0.0, animated: false) - } - - func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { - progressView.setProgress(1.0, animated: true) - // μ•½κ°„μ˜ λ”œλ ˆμ΄ ν›„ ν”„λ‘œκ·Έλ ˆμŠ€ λ°”λ₯Ό μˆ¨κΉ€ - DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { - self.progressView.isHidden = true - } - } - - func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) { - - // λ§ˆμ§€λ§‰μœΌλ‘œ μ‹œλ„ν•œ navigation url - lastRequestedURL = navigationAction.request.url - - // "μƒˆ 창으둜 μ—΄κΈ°" 링크 WebView λ‚΄μ—μ„œ μ—΄κΈ° - if navigationAction.targetFrame == nil { - webView.load(navigationAction.request) - } - decisionHandler(.allow) - } - - func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) { - // 초기 λ‘œλ“œμ‹œ μ—λŸ¬ λ°œμƒ - errorDelegate?.webView(self, didFailWithError: error, url: selectedWebsite) - } - - func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) { - // λ„€λΉ„κ²Œμ΄μ…˜ 쀑 μ—λŸ¬ λ°œμƒ μ‹œ - if let lastURL = lastRequestedURL { - errorDelegate?.webView(self, didFailWithError: error, url: lastURL) - } else { - // lastRequestedURL이 nil인 경우 λŒ€λΉ„ - errorDelegate?.webView(self, didFailWithError: error, url: nil) - } - } - - func retryLoading() { - webView.reload() - } -} - -extension WebView: UIScrollViewDelegate { - - func scrollViewDidScroll(_ scrollView: UIScrollView) { - if scrollView.contentOffset.y < -refreshControlHeight { - isActive = true - } else { - isActive = false - } - } - -} - -extension WebView: UIGestureRecognizerDelegate { - - func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool { - // λ‹€λ₯Έ 제슀처 인식기와 λ™μ‹œμ— μΈμ‹λ˜λ„λ‘ ν—ˆμš© - return true - } - -} - -extension WebView: WKUIDelegate { - func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? { - if navigationAction.targetFrame == nil { - webView.load(navigationAction.request) - } - return nil - } -} diff --git a/iBox/Sources/Web/WebViewController.swift b/iBox/Sources/Web/WebViewController.swift deleted file mode 100644 index b872a1a..0000000 --- a/iBox/Sources/Web/WebViewController.swift +++ /dev/null @@ -1,99 +0,0 @@ -// -// WebViewController.swift -// iBox -// -// Created by μ΄μ§€ν˜„ on 1/4/24. -// - -import UIKit -import WebKit - -protocol WebViewDelegate { - func pushAddBookMarkViewController(url: URL) -} - -class WebViewController: BaseViewController, BaseViewControllerProtocol { - var id: UUID? - var slideInPresentationManager = SlideInPresentationManager() - var errorViewController: ErrorPageViewController? - var delegate: AddBookmarkViewControllerProtocol? - var selectedWebsite: URL? - - // MARK: - Life Cycle - - override func viewDidLoad() { - super.viewDidLoad() - - setupNavigationBar() - setupView() - setupDelegate() - } - - override func viewDidLayoutSubviews() { - super.viewDidLayoutSubviews() - guard let contentView = contentView as? WebView else { return } - contentView.setupRefreshControl() - } - - override func viewWillDisappear(_ animated: Bool) { - super.viewWillDisappear(animated) - - if ((isMovingFromParent || isBeingDismissed) && AppStateManager.shared.currentViewErrorState != .normal){ - if let id = self.id { - WebCacheManager.shared.removeViewControllerForKey(id) - } - } - } - - deinit { - AppStateManager.shared.currentViewErrorState = .normal - errorViewController = nil - } - - // MARK: - BaseViewControllerProtocol - - func setupNavigationBar() { - setNavigationBarHidden(true) - } - - func setupDelegate() { - guard let contentView = contentView as? WebView else { return } - contentView.delegate = self - contentView.selectedWebsite = selectedWebsite - - errorViewController = ErrorPageViewController(webView: contentView) - contentView.errorDelegate = errorViewController - errorViewController?.delegate = self - } - - func setupView() { - view.backgroundColor = .backgroundColor - } -} - -extension WebViewController: WebViewDelegate { - - func pushAddBookMarkViewController(url: URL) { - let encodingURL = url.absoluteString.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) ?? "" - - if let iBoxUrl = URL(string: "iBox://url?data=" + encodingURL) { - if let tabBarController = findMainTabBarController() { - AddBookmarkManager.shared.navigateToAddBookmarkView(from: iBoxUrl, in: tabBarController) - } - } - } -} - -extension WebViewController: ErrorPageControllerDelegate { - func presentErrorPage(_ errorPage: ErrorPageViewController) { - self.present(errorPage, animated: true, completion: nil) - } - - func backButton() { - if let navController = navigationController { - navController.popViewController(animated: true) - } else { - dismiss(animated: true) - } - } -}

&iOAoHv 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 diff --git a/iBox/Resources/Assets.xcassets/Logo/1024.png b/iBox/Resources/Assets.xcassets/Logo/1024.png deleted file mode 100644 index 83ffffa3bbea51c68799b95c215ef63a5b64a824..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 193380 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�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