diff --git a/Projects/App/Project.swift b/Projects/App/Project.swift
index 6463ea14..bb8e9516 100644
--- a/Projects/App/Project.swift
+++ b/Projects/App/Project.swift
@@ -22,7 +22,8 @@ let project = Project.makeModule(
.SPM.FirebaseCrashlytics,
.SPM.FirebaseMessaging,
.SPM.Nuke,
- .SPM.NukeUI
+ .SPM.NukeUI,
+ .SPM.ADS
],
resources: ["Resources/**"],
infoPlist: .extendingDefault(with: [
diff --git a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/100.png b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/100.png
index 883e7df9..0bb342a7 100644
Binary files a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/100.png and b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/100.png differ
diff --git a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/1024.png b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/1024.png
index a9760a02..e6b9e9e9 100644
Binary files a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/1024.png and b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/1024.png differ
diff --git a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/114.png b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/114.png
index bdffc4d0..aeb93e97 100644
Binary files a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/114.png and b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/114.png differ
diff --git a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/120.png b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/120.png
index 543b15a5..c508f3c8 100644
Binary files a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/120.png and b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/120.png differ
diff --git a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/128.png b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/128.png
index f75c5692..1cd9e428 100644
Binary files a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/128.png and b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/128.png differ
diff --git a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/144.png b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/144.png
index 351ebe93..db247bc9 100644
Binary files a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/144.png and b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/144.png differ
diff --git a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/152.png b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/152.png
index 69e6668c..0f417359 100644
Binary files a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/152.png and b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/152.png differ
diff --git a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/16.png b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/16.png
index 5cc79dd5..c46e46e8 100644
Binary files a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/16.png and b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/16.png differ
diff --git a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/167.png b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/167.png
index 3756e34c..8ab2d5ee 100644
Binary files a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/167.png and b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/167.png differ
diff --git a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/172.png b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/172.png
index f08998f2..c15cc948 100644
Binary files a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/172.png and b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/172.png differ
diff --git a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/180.png b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/180.png
index 5a093199..1c03ad85 100644
Binary files a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/180.png and b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/180.png differ
diff --git a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/196.png b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/196.png
index 00b41ce4..f5f5a80f 100644
Binary files a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/196.png and b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/196.png differ
diff --git a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/20.png b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/20.png
index 60325741..51160b2a 100644
Binary files a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/20.png and b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/20.png differ
diff --git a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/216.png b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/216.png
index 869b1e28..8c9fe971 100644
Binary files a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/216.png and b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/216.png differ
diff --git a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/256.png b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/256.png
index 87c13abc..798ab761 100644
Binary files a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/256.png and b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/256.png differ
diff --git a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/29.png b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/29.png
index 6d2e0fda..463d1513 100644
Binary files a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/29.png and b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/29.png differ
diff --git a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/32.png b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/32.png
index 2e77af96..4e758e37 100644
Binary files a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/32.png and b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/32.png differ
diff --git a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/40.png b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/40.png
index 8aa2285b..9effd8dd 100644
Binary files a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/40.png and b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/40.png differ
diff --git a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/48.png b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/48.png
index f04c07fe..1490a4d7 100644
Binary files a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/48.png and b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/48.png differ
diff --git a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/50.png b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/50.png
index 08440bc7..62d77a5b 100644
Binary files a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/50.png and b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/50.png differ
diff --git a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/512.png b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/512.png
index 69f5bf0e..02fb3ede 100644
Binary files a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/512.png and b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/512.png differ
diff --git a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/55.png b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/55.png
index 114fe542..b557fd9b 100644
Binary files a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/55.png and b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/55.png differ
diff --git a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/57.png b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/57.png
index 139572e1..4b505e95 100644
Binary files a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/57.png and b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/57.png differ
diff --git a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/58.png b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/58.png
index e4c97b04..2bb7f47a 100644
Binary files a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/58.png and b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/58.png differ
diff --git a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/60.png b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/60.png
index bb6ff8f8..e4d16340 100644
Binary files a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/60.png and b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/60.png differ
diff --git a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/64.png b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/64.png
index 05636a19..381cd7cc 100644
Binary files a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/64.png and b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/64.png differ
diff --git a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/66.png b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/66.png
index c7767ed1..76577ef2 100644
Binary files a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/66.png and b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/66.png differ
diff --git a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/72.png b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/72.png
index 01cba409..ca86625e 100644
Binary files a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/72.png and b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/72.png differ
diff --git a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/76.png b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/76.png
index 5125fca0..4c8718b1 100644
Binary files a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/76.png and b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/76.png differ
diff --git a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/80.png b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/80.png
index 1a9e0b7b..3ab86e5f 100644
Binary files a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/80.png and b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/80.png differ
diff --git a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/87.png b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/87.png
index ea9a252b..d8c1ed0d 100644
Binary files a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/87.png and b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/87.png differ
diff --git a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/88.png b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/88.png
index 327c639e..7df1e584 100644
Binary files a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/88.png and b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/88.png differ
diff --git a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/92.png b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/92.png
index b69c2fca..c7e9dec5 100644
Binary files a/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/92.png and b/Projects/App/Resources/Assets.xcassets/AppIcon.appiconset/92.png differ
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/AddImoji.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Icon/AddImoji.imageset/Contents.json
deleted file mode 100644
index e3379559..00000000
--- a/Projects/App/Resources/Assets.xcassets/Icon/AddImoji.imageset/Contents.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "images" : [
- {
- "filename" : "c.svg",
- "idiom" : "universal",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "scale" : "2x"
- },
- {
- "idiom" : "universal",
- "scale" : "3x"
- }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/Angry.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Icon/Angry.imageset/Contents.json
deleted file mode 100644
index b01a6174..00000000
--- a/Projects/App/Resources/Assets.xcassets/Icon/Angry.imageset/Contents.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "images" : [
- {
- "filename" : "ic_angry.png",
- "idiom" : "universal",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "scale" : "2x"
- },
- {
- "idiom" : "universal",
- "scale" : "3x"
- }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/BookMark.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Icon/BookMark.imageset/Contents.json
deleted file mode 100644
index 3654463d..00000000
--- a/Projects/App/Resources/Assets.xcassets/Icon/BookMark.imageset/Contents.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "images" : [
- {
- "filename" : "Bookmark.svg",
- "idiom" : "universal",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "scale" : "2x"
- },
- {
- "idiom" : "universal",
- "scale" : "3x"
- }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/BookMark_none.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Icon/BookMark_none.imageset/Contents.json
deleted file mode 100644
index 2fe716ef..00000000
--- a/Projects/App/Resources/Assets.xcassets/Icon/BookMark_none.imageset/Contents.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "images" : [
- {
- "filename" : "bookmark_none.svg",
- "idiom" : "universal",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "scale" : "2x"
- },
- {
- "idiom" : "universal",
- "scale" : "3x"
- }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/BookMark_tabbar.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Icon/BookMark_tabbar.imageset/Contents.json
deleted file mode 100644
index 07d938d7..00000000
--- a/Projects/App/Resources/Assets.xcassets/Icon/BookMark_tabbar.imageset/Contents.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "images" : [
- {
- "filename" : "BookmarkTabbar.svg",
- "idiom" : "universal",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "scale" : "2x"
- },
- {
- "idiom" : "universal",
- "scale" : "3x"
- }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/Chat.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Icon/Chat.imageset/Contents.json
deleted file mode 100644
index e5824db9..00000000
--- a/Projects/App/Resources/Assets.xcassets/Icon/Chat.imageset/Contents.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "images" : [
- {
- "filename" : "Chat.svg",
- "idiom" : "universal",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "scale" : "2x"
- },
- {
- "idiom" : "universal",
- "scale" : "3x"
- }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/ClickedBookmark.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Icon/ClickedBookmark.imageset/Contents.json
deleted file mode 100644
index d5575e64..00000000
--- a/Projects/App/Resources/Assets.xcassets/Icon/ClickedBookmark.imageset/Contents.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "images" : [
- {
- "filename" : "ClickedBookmark.svg",
- "idiom" : "universal",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "scale" : "2x"
- },
- {
- "idiom" : "universal",
- "scale" : "3x"
- }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/Copy.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Icon/Copy.imageset/Contents.json
deleted file mode 100644
index d23ca394..00000000
--- a/Projects/App/Resources/Assets.xcassets/Icon/Copy.imageset/Contents.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "images" : [
- {
- "filename" : "Copy.svg",
- "idiom" : "universal",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "scale" : "2x"
- },
- {
- "idiom" : "universal",
- "scale" : "3x"
- }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/Download.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Icon/Download.imageset/Contents.json
deleted file mode 100644
index 831ebc97..00000000
--- a/Projects/App/Resources/Assets.xcassets/Icon/Download.imageset/Contents.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "images" : [
- {
- "filename" : "ic_downlaod.svg",
- "idiom" : "universal",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "scale" : "2x"
- },
- {
- "idiom" : "universal",
- "scale" : "3x"
- }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/File.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Icon/File.imageset/Contents.json
deleted file mode 100644
index 6408fa6a..00000000
--- a/Projects/App/Resources/Assets.xcassets/Icon/File.imageset/Contents.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "images" : [
- {
- "filename" : "AppIcon.svg",
- "idiom" : "universal",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "scale" : "2x"
- },
- {
- "idiom" : "universal",
- "scale" : "3x"
- }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/Hide.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Icon/Hide.imageset/Contents.json
deleted file mode 100644
index e0d69548..00000000
--- a/Projects/App/Resources/Assets.xcassets/Icon/Hide.imageset/Contents.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "images" : [
- {
- "filename" : "Hide.svg",
- "idiom" : "universal",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "scale" : "2x"
- },
- {
- "idiom" : "universal",
- "scale" : "3x"
- }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/Home.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Icon/Home.imageset/Contents.json
deleted file mode 100644
index 5f69a357..00000000
--- a/Projects/App/Resources/Assets.xcassets/Icon/Home.imageset/Contents.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "images" : [
- {
- "filename" : "Home.svg",
- "idiom" : "universal",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "scale" : "2x"
- },
- {
- "idiom" : "universal",
- "scale" : "3x"
- }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/Home_none.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Icon/Home_none.imageset/Contents.json
deleted file mode 100644
index b0bb2f9d..00000000
--- a/Projects/App/Resources/Assets.xcassets/Icon/Home_none.imageset/Contents.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "images" : [
- {
- "filename" : "home_none.svg",
- "idiom" : "universal",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "scale" : "2x"
- },
- {
- "idiom" : "universal",
- "scale" : "3x"
- }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/Image.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Icon/Image.imageset/Contents.json
deleted file mode 100644
index 946ba7dd..00000000
--- a/Projects/App/Resources/Assets.xcassets/Icon/Image.imageset/Contents.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "images" : [
- {
- "filename" : "Image.svg",
- "idiom" : "universal",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "scale" : "2x"
- },
- {
- "idiom" : "universal",
- "scale" : "3x"
- }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/LoudSpeaker.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Icon/LoudSpeaker.imageset/Contents.json
deleted file mode 100644
index 83405cc9..00000000
--- a/Projects/App/Resources/Assets.xcassets/Icon/LoudSpeaker.imageset/Contents.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "images" : [
- {
- "filename" : "LoudSpeaker.svg",
- "idiom" : "universal",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "scale" : "2x"
- },
- {
- "idiom" : "universal",
- "scale" : "3x"
- }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/Ok.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Icon/Ok.imageset/Contents.json
deleted file mode 100644
index b7c3d0fc..00000000
--- a/Projects/App/Resources/Assets.xcassets/Icon/Ok.imageset/Contents.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "images" : [
- {
- "filename" : "ic_okay.png",
- "idiom" : "universal",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "scale" : "2x"
- },
- {
- "idiom" : "universal",
- "scale" : "3x"
- }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/Profile.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Icon/Profile.imageset/Contents.json
deleted file mode 100644
index 3ad7797b..00000000
--- a/Projects/App/Resources/Assets.xcassets/Icon/Profile.imageset/Contents.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "images" : [
- {
- "filename" : "Profile.svg",
- "idiom" : "universal",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "scale" : "2x"
- },
- {
- "idiom" : "universal",
- "scale" : "3x"
- }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/Profile_none.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Icon/Profile_none.imageset/Contents.json
deleted file mode 100644
index 24a312be..00000000
--- a/Projects/App/Resources/Assets.xcassets/Icon/Profile_none.imageset/Contents.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "images" : [
- {
- "filename" : "profile_none.svg",
- "idiom" : "universal",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "scale" : "2x"
- },
- {
- "idiom" : "universal",
- "scale" : "3x"
- }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/Roundbutton.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Icon/Roundbutton.imageset/Contents.json
deleted file mode 100644
index 8d071dae..00000000
--- a/Projects/App/Resources/Assets.xcassets/Icon/Roundbutton.imageset/Contents.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "images" : [
- {
- "filename" : "ic_round-detail.svg",
- "idiom" : "universal",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "scale" : "2x"
- },
- {
- "idiom" : "universal",
- "scale" : "3x"
- }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/Sad.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Icon/Sad.imageset/Contents.json
deleted file mode 100644
index 21176713..00000000
--- a/Projects/App/Resources/Assets.xcassets/Icon/Sad.imageset/Contents.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "images" : [
- {
- "filename" : "ic_sad.png",
- "idiom" : "universal",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "scale" : "2x"
- },
- {
- "idiom" : "universal",
- "scale" : "3x"
- }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/Send.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Icon/Send.imageset/Contents.json
deleted file mode 100644
index 62a7f824..00000000
--- a/Projects/App/Resources/Assets.xcassets/Icon/Send.imageset/Contents.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "images" : [
- {
- "filename" : "Send.svg",
- "idiom" : "universal",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "scale" : "2x"
- },
- {
- "idiom" : "universal",
- "scale" : "3x"
- }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/Show.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Icon/Show.imageset/Contents.json
deleted file mode 100644
index e3c0794e..00000000
--- a/Projects/App/Resources/Assets.xcassets/Icon/Show.imageset/Contents.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "images" : [
- {
- "filename" : "Show.svg",
- "idiom" : "universal",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "scale" : "2x"
- },
- {
- "idiom" : "universal",
- "scale" : "3x"
- }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/Speaker.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Icon/Speaker.imageset/Contents.json
deleted file mode 100644
index 960cbdd9..00000000
--- a/Projects/App/Resources/Assets.xcassets/Icon/Speaker.imageset/Contents.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "images" : [
- {
- "filename" : "Group 217.svg",
- "idiom" : "universal",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "scale" : "2x"
- },
- {
- "idiom" : "universal",
- "scale" : "3x"
- }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/XMark.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Icon/XMark.imageset/Contents.json
deleted file mode 100644
index e5ac8095..00000000
--- a/Projects/App/Resources/Assets.xcassets/Icon/XMark.imageset/Contents.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "images" : [
- {
- "filename" : "XMark.svg",
- "idiom" : "universal",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "scale" : "2x"
- },
- {
- "idiom" : "universal",
- "scale" : "3x"
- }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/funny.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Icon/funny.imageset/Contents.json
deleted file mode 100644
index fa7d95bc..00000000
--- a/Projects/App/Resources/Assets.xcassets/Icon/funny.imageset/Contents.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "images" : [
- {
- "filename" : "ic_laugh.png",
- "idiom" : "universal",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "scale" : "2x"
- },
- {
- "idiom" : "universal",
- "scale" : "3x"
- }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/heart.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Icon/heart.imageset/Contents.json
deleted file mode 100644
index 72787c87..00000000
--- a/Projects/App/Resources/Assets.xcassets/Icon/heart.imageset/Contents.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "images" : [
- {
- "filename" : "ic_love.png",
- "idiom" : "universal",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "scale" : "2x"
- },
- {
- "idiom" : "universal",
- "scale" : "3x"
- }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/Projects/App/Resources/Assets.xcassets/Image/AlimoIcon.imageset/AlimoIcon.svg b/Projects/App/Resources/Assets.xcassets/Image/AlimoIcon.imageset/AlimoIcon.svg
new file mode 100644
index 00000000..99442027
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Image/AlimoIcon.imageset/AlimoIcon.svg
@@ -0,0 +1,16 @@
+
diff --git a/Projects/App/Resources/Assets.xcassets/Image/AlimoIcon.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Image/AlimoIcon.imageset/Contents.json
new file mode 100644
index 00000000..20f5d882
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Image/AlimoIcon.imageset/Contents.json
@@ -0,0 +1,15 @@
+{
+ "images" : [
+ {
+ "filename" : "AlimoIcon.svg",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "preserves-vector-representation" : true
+ }
+}
diff --git a/Projects/App/Resources/Assets.xcassets/Image/AlimoLogo.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Image/AlimoLogo.imageset/Contents.json
new file mode 100644
index 00000000..4b2b2a36
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Image/AlimoLogo.imageset/Contents.json
@@ -0,0 +1,15 @@
+{
+ "images" : [
+ {
+ "filename" : "Logo.svg",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "preserves-vector-representation" : true
+ }
+}
diff --git a/Projects/App/Resources/Assets.xcassets/Image/AlimoLogo.imageset/Logo.svg b/Projects/App/Resources/Assets.xcassets/Image/AlimoLogo.imageset/Logo.svg
new file mode 100644
index 00000000..20416fbd
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Image/AlimoLogo.imageset/Logo.svg
@@ -0,0 +1,8 @@
+
diff --git a/Projects/App/Resources/Assets.xcassets/Image/DarkParent.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Image/DarkParent.imageset/Contents.json
deleted file mode 100644
index ead735d6..00000000
--- a/Projects/App/Resources/Assets.xcassets/Image/DarkParent.imageset/Contents.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "images" : [
- {
- "idiom" : "universal",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "scale" : "2x"
- },
- {
- "filename" : "DarkParent.svg",
- "idiom" : "universal",
- "scale" : "3x"
- }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/Projects/App/Resources/Assets.xcassets/Image/DarkStudent.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Image/DarkStudent.imageset/Contents.json
deleted file mode 100644
index f8244409..00000000
--- a/Projects/App/Resources/Assets.xcassets/Image/DarkStudent.imageset/Contents.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "images" : [
- {
- "idiom" : "universal",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "scale" : "2x"
- },
- {
- "filename" : "DarkStudent.svg",
- "idiom" : "universal",
- "scale" : "3x"
- }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/Projects/App/Resources/Assets.xcassets/Image/DisabledParent.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Image/DisabledParent.imageset/Contents.json
new file mode 100644
index 00000000..6f7d0fb5
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Image/DisabledParent.imageset/Contents.json
@@ -0,0 +1,15 @@
+{
+ "images" : [
+ {
+ "filename" : "enabled=false-1.svg",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "preserves-vector-representation" : true
+ }
+}
diff --git a/Projects/App/Resources/Assets.xcassets/Image/DisabledParent.imageset/enabled=false-1.svg b/Projects/App/Resources/Assets.xcassets/Image/DisabledParent.imageset/enabled=false-1.svg
new file mode 100644
index 00000000..01d32c3e
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Image/DisabledParent.imageset/enabled=false-1.svg
@@ -0,0 +1,83 @@
+
diff --git a/Projects/App/Resources/Assets.xcassets/Image/DisabledStudent.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Image/DisabledStudent.imageset/Contents.json
new file mode 100644
index 00000000..4e45f04f
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Image/DisabledStudent.imageset/Contents.json
@@ -0,0 +1,15 @@
+{
+ "images" : [
+ {
+ "filename" : "enabled=false.svg",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "preserves-vector-representation" : true
+ }
+}
diff --git a/Projects/App/Resources/Assets.xcassets/Image/DisabledStudent.imageset/enabled=false.svg b/Projects/App/Resources/Assets.xcassets/Image/DisabledStudent.imageset/enabled=false.svg
new file mode 100644
index 00000000..9598c446
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Image/DisabledStudent.imageset/enabled=false.svg
@@ -0,0 +1,16 @@
+
diff --git a/Projects/App/Resources/Assets.xcassets/Image/DisabledTeacher.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Image/DisabledTeacher.imageset/Contents.json
new file mode 100644
index 00000000..6a01651b
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Image/DisabledTeacher.imageset/Contents.json
@@ -0,0 +1,15 @@
+{
+ "images" : [
+ {
+ "filename" : "enabled=false-2.svg",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "preserves-vector-representation" : true
+ }
+}
diff --git a/Projects/App/Resources/Assets.xcassets/Image/DisabledTeacher.imageset/enabled=false-2.svg b/Projects/App/Resources/Assets.xcassets/Image/DisabledTeacher.imageset/enabled=false-2.svg
new file mode 100644
index 00000000..07211eb8
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Image/DisabledTeacher.imageset/enabled=false-2.svg
@@ -0,0 +1,25 @@
+
diff --git a/Projects/App/Resources/Assets.xcassets/Image/Dummy.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Image/Dummy.imageset/Contents.json
deleted file mode 100644
index a813ab12..00000000
--- a/Projects/App/Resources/Assets.xcassets/Image/Dummy.imageset/Contents.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "images" : [
- {
- "filename" : "Dummy.png",
- "idiom" : "universal",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "scale" : "2x"
- },
- {
- "idiom" : "universal",
- "scale" : "3x"
- }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/Projects/App/Resources/Assets.xcassets/Image/EnabledParent.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Image/EnabledParent.imageset/Contents.json
new file mode 100644
index 00000000..3acd2cd7
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Image/EnabledParent.imageset/Contents.json
@@ -0,0 +1,15 @@
+{
+ "images" : [
+ {
+ "filename" : "enabled=true-1.svg",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "preserves-vector-representation" : true
+ }
+}
diff --git a/Projects/App/Resources/Assets.xcassets/Image/EnabledParent.imageset/enabled=true-1.svg b/Projects/App/Resources/Assets.xcassets/Image/EnabledParent.imageset/enabled=true-1.svg
new file mode 100644
index 00000000..ec912a3c
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Image/EnabledParent.imageset/enabled=true-1.svg
@@ -0,0 +1,83 @@
+
diff --git a/Projects/App/Resources/Assets.xcassets/Image/EnabledStudent.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Image/EnabledStudent.imageset/Contents.json
new file mode 100644
index 00000000..e251f0be
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Image/EnabledStudent.imageset/Contents.json
@@ -0,0 +1,15 @@
+{
+ "images" : [
+ {
+ "filename" : "enabled=true.svg",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "preserves-vector-representation" : true
+ }
+}
diff --git a/Projects/App/Resources/Assets.xcassets/Image/EnabledStudent.imageset/enabled=true.svg b/Projects/App/Resources/Assets.xcassets/Image/EnabledStudent.imageset/enabled=true.svg
new file mode 100644
index 00000000..a2d7f63c
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Image/EnabledStudent.imageset/enabled=true.svg
@@ -0,0 +1,16 @@
+
diff --git a/Projects/App/Resources/Assets.xcassets/Image/EnabledTeacher.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Image/EnabledTeacher.imageset/Contents.json
new file mode 100644
index 00000000..8155cccb
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Image/EnabledTeacher.imageset/Contents.json
@@ -0,0 +1,15 @@
+{
+ "images" : [
+ {
+ "filename" : "enabled=true-2.svg",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "preserves-vector-representation" : true
+ }
+}
diff --git a/Projects/App/Resources/Assets.xcassets/Image/EnabledTeacher.imageset/enabled=true-2.svg b/Projects/App/Resources/Assets.xcassets/Image/EnabledTeacher.imageset/enabled=true-2.svg
new file mode 100644
index 00000000..8715b180
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Image/EnabledTeacher.imageset/enabled=true-2.svg
@@ -0,0 +1,25 @@
+
diff --git a/Projects/App/Resources/Assets.xcassets/Image/LightParent.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Image/LightParent.imageset/Contents.json
deleted file mode 100644
index 8067ff87..00000000
--- a/Projects/App/Resources/Assets.xcassets/Image/LightParent.imageset/Contents.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "images" : [
- {
- "idiom" : "universal",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "scale" : "2x"
- },
- {
- "filename" : "LightParent.svg",
- "idiom" : "universal",
- "scale" : "3x"
- }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/Projects/App/Resources/Assets.xcassets/Image/LightStudent.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Image/LightStudent.imageset/Contents.json
deleted file mode 100644
index 5b1b137d..00000000
--- a/Projects/App/Resources/Assets.xcassets/Image/LightStudent.imageset/Contents.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "images" : [
- {
- "idiom" : "universal",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "scale" : "2x"
- },
- {
- "filename" : "LightStudent.svg",
- "idiom" : "universal",
- "scale" : "3x"
- }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/Projects/App/Resources/Assets.xcassets/Image/NoBookMark.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Image/NoBookMark.imageset/Contents.json
deleted file mode 100644
index a769fff3..00000000
--- a/Projects/App/Resources/Assets.xcassets/Image/NoBookMark.imageset/Contents.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "images" : [
- {
- "filename" : "undraw_code_thinking_re_gka2(1) 1.svg",
- "idiom" : "universal",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "scale" : "2x"
- },
- {
- "idiom" : "universal",
- "scale" : "3x"
- }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/Projects/App/Resources/Assets.xcassets/Image/NoNotice.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Image/NoNotice.imageset/Contents.json
deleted file mode 100644
index 714899cd..00000000
--- a/Projects/App/Resources/Assets.xcassets/Image/NoNotice.imageset/Contents.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "images" : [
- {
- "filename" : "undraw_online_re_x00h 1.svg",
- "idiom" : "universal",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "scale" : "2x"
- },
- {
- "idiom" : "universal",
- "scale" : "3x"
- }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/Projects/App/Resources/Assets.xcassets/Image/ProfileImage.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Image/ProfileImage.imageset/Contents.json
deleted file mode 100644
index b74d7352..00000000
--- a/Projects/App/Resources/Assets.xcassets/Image/ProfileImage.imageset/Contents.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "images" : [
- {
- "filename" : "ProfileImage.svg",
- "idiom" : "universal",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "scale" : "2x"
- },
- {
- "idiom" : "universal",
- "scale" : "3x"
- }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/Projects/App/Resources/Assets.xcassets/Image/Screen.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Image/Screen.imageset/Contents.json
deleted file mode 100644
index 31c21843..00000000
--- a/Projects/App/Resources/Assets.xcassets/Image/Screen.imageset/Contents.json
+++ /dev/null
@@ -1,21 +0,0 @@
-{
- "images" : [
- {
- "idiom" : "universal",
- "scale" : "1x"
- },
- {
- "idiom" : "universal",
- "scale" : "2x"
- },
- {
- "filename" : "Screen.svg",
- "idiom" : "universal",
- "scale" : "3x"
- }
- ],
- "info" : {
- "author" : "xcode",
- "version" : 1
- }
-}
diff --git a/Projects/App/Resources/Assets.xcassets/Old Icon/AddImoji.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Old Icon/AddImoji.imageset/Contents.json
new file mode 100644
index 00000000..95bceee1
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Old Icon/AddImoji.imageset/Contents.json
@@ -0,0 +1,15 @@
+{
+ "images" : [
+ {
+ "filename" : "c.svg",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "preserves-vector-representation" : true
+ }
+}
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/AddImoji.imageset/c.svg b/Projects/App/Resources/Assets.xcassets/Old Icon/AddImoji.imageset/c.svg
similarity index 100%
rename from Projects/App/Resources/Assets.xcassets/Icon/AddImoji.imageset/c.svg
rename to Projects/App/Resources/Assets.xcassets/Old Icon/AddImoji.imageset/c.svg
diff --git a/Projects/App/Resources/Assets.xcassets/Old Icon/Angry.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Old Icon/Angry.imageset/Contents.json
new file mode 100644
index 00000000..41464be6
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Old Icon/Angry.imageset/Contents.json
@@ -0,0 +1,15 @@
+{
+ "images" : [
+ {
+ "filename" : "ic_angry.png",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "preserves-vector-representation" : true
+ }
+}
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/Angry.imageset/ic_angry.png b/Projects/App/Resources/Assets.xcassets/Old Icon/Angry.imageset/ic_angry.png
similarity index 100%
rename from Projects/App/Resources/Assets.xcassets/Icon/Angry.imageset/ic_angry.png
rename to Projects/App/Resources/Assets.xcassets/Old Icon/Angry.imageset/ic_angry.png
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/BookMark.imageset/Bookmark.svg b/Projects/App/Resources/Assets.xcassets/Old Icon/Bookmark.imageset/Bookmark.svg
similarity index 100%
rename from Projects/App/Resources/Assets.xcassets/Icon/BookMark.imageset/Bookmark.svg
rename to Projects/App/Resources/Assets.xcassets/Old Icon/Bookmark.imageset/Bookmark.svg
diff --git a/Projects/App/Resources/Assets.xcassets/Old Icon/Bookmark.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Old Icon/Bookmark.imageset/Contents.json
new file mode 100644
index 00000000..c84876b0
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Old Icon/Bookmark.imageset/Contents.json
@@ -0,0 +1,15 @@
+{
+ "images" : [
+ {
+ "filename" : "Bookmark.svg",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "preserves-vector-representation" : true
+ }
+}
diff --git a/Projects/App/Resources/Assets.xcassets/Old Icon/BookmarkNone.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Old Icon/BookmarkNone.imageset/Contents.json
new file mode 100644
index 00000000..a3c765d4
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Old Icon/BookmarkNone.imageset/Contents.json
@@ -0,0 +1,15 @@
+{
+ "images" : [
+ {
+ "filename" : "bookmark_none.svg",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "preserves-vector-representation" : true
+ }
+}
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/BookMark_none.imageset/bookmark_none.svg b/Projects/App/Resources/Assets.xcassets/Old Icon/BookmarkNone.imageset/bookmark_none.svg
similarity index 100%
rename from Projects/App/Resources/Assets.xcassets/Icon/BookMark_none.imageset/bookmark_none.svg
rename to Projects/App/Resources/Assets.xcassets/Old Icon/BookmarkNone.imageset/bookmark_none.svg
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/BookMark_tabbar.imageset/BookmarkTabbar.svg b/Projects/App/Resources/Assets.xcassets/Old Icon/BookmarkTabbar.imageset/BookmarkTabbar.svg
similarity index 100%
rename from Projects/App/Resources/Assets.xcassets/Icon/BookMark_tabbar.imageset/BookmarkTabbar.svg
rename to Projects/App/Resources/Assets.xcassets/Old Icon/BookmarkTabbar.imageset/BookmarkTabbar.svg
diff --git a/Projects/App/Resources/Assets.xcassets/Old Icon/BookmarkTabbar.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Old Icon/BookmarkTabbar.imageset/Contents.json
new file mode 100644
index 00000000..a154e136
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Old Icon/BookmarkTabbar.imageset/Contents.json
@@ -0,0 +1,15 @@
+{
+ "images" : [
+ {
+ "filename" : "BookmarkTabbar.svg",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "preserves-vector-representation" : true
+ }
+}
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/Chat.imageset/Chat.svg b/Projects/App/Resources/Assets.xcassets/Old Icon/Chat.imageset/Chat.svg
similarity index 100%
rename from Projects/App/Resources/Assets.xcassets/Icon/Chat.imageset/Chat.svg
rename to Projects/App/Resources/Assets.xcassets/Old Icon/Chat.imageset/Chat.svg
diff --git a/Projects/App/Resources/Assets.xcassets/Old Icon/Chat.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Old Icon/Chat.imageset/Contents.json
new file mode 100644
index 00000000..cb85785e
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Old Icon/Chat.imageset/Contents.json
@@ -0,0 +1,15 @@
+{
+ "images" : [
+ {
+ "filename" : "Chat.svg",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "preserves-vector-representation" : true
+ }
+}
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/ClickedBookmark.imageset/ClickedBookmark.svg b/Projects/App/Resources/Assets.xcassets/Old Icon/ClickedBookmark.imageset/ClickedBookmark.svg
similarity index 100%
rename from Projects/App/Resources/Assets.xcassets/Icon/ClickedBookmark.imageset/ClickedBookmark.svg
rename to Projects/App/Resources/Assets.xcassets/Old Icon/ClickedBookmark.imageset/ClickedBookmark.svg
diff --git a/Projects/App/Resources/Assets.xcassets/Old Icon/ClickedBookmark.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Old Icon/ClickedBookmark.imageset/Contents.json
new file mode 100644
index 00000000..d0c4c9a6
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Old Icon/ClickedBookmark.imageset/Contents.json
@@ -0,0 +1,15 @@
+{
+ "images" : [
+ {
+ "filename" : "ClickedBookmark.svg",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "preserves-vector-representation" : true
+ }
+}
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/Contents.json b/Projects/App/Resources/Assets.xcassets/Old Icon/Contents.json
similarity index 100%
rename from Projects/App/Resources/Assets.xcassets/Icon/Contents.json
rename to Projects/App/Resources/Assets.xcassets/Old Icon/Contents.json
diff --git a/Projects/App/Resources/Assets.xcassets/Old Icon/Copy.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Old Icon/Copy.imageset/Contents.json
new file mode 100644
index 00000000..f594e9b3
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Old Icon/Copy.imageset/Contents.json
@@ -0,0 +1,15 @@
+{
+ "images" : [
+ {
+ "filename" : "Copy.svg",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "preserves-vector-representation" : true
+ }
+}
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/Copy.imageset/Copy.svg b/Projects/App/Resources/Assets.xcassets/Old Icon/Copy.imageset/Copy.svg
similarity index 100%
rename from Projects/App/Resources/Assets.xcassets/Icon/Copy.imageset/Copy.svg
rename to Projects/App/Resources/Assets.xcassets/Old Icon/Copy.imageset/Copy.svg
diff --git a/Projects/App/Resources/Assets.xcassets/Old Icon/Download.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Old Icon/Download.imageset/Contents.json
new file mode 100644
index 00000000..5ed2885b
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Old Icon/Download.imageset/Contents.json
@@ -0,0 +1,15 @@
+{
+ "images" : [
+ {
+ "filename" : "ic_downlaod.svg",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "preserves-vector-representation" : true
+ }
+}
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/Download.imageset/ic_downlaod.svg b/Projects/App/Resources/Assets.xcassets/Old Icon/Download.imageset/ic_downlaod.svg
similarity index 100%
rename from Projects/App/Resources/Assets.xcassets/Icon/Download.imageset/ic_downlaod.svg
rename to Projects/App/Resources/Assets.xcassets/Old Icon/Download.imageset/ic_downlaod.svg
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/File.imageset/AppIcon.svg b/Projects/App/Resources/Assets.xcassets/Old Icon/File.imageset/AppIcon.svg
similarity index 100%
rename from Projects/App/Resources/Assets.xcassets/Icon/File.imageset/AppIcon.svg
rename to Projects/App/Resources/Assets.xcassets/Old Icon/File.imageset/AppIcon.svg
diff --git a/Projects/App/Resources/Assets.xcassets/Old Icon/File.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Old Icon/File.imageset/Contents.json
new file mode 100644
index 00000000..b4660797
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Old Icon/File.imageset/Contents.json
@@ -0,0 +1,15 @@
+{
+ "images" : [
+ {
+ "filename" : "AppIcon.svg",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "preserves-vector-representation" : true
+ }
+}
diff --git a/Projects/App/Resources/Assets.xcassets/Old Icon/Funny.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Old Icon/Funny.imageset/Contents.json
new file mode 100644
index 00000000..0d548fe9
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Old Icon/Funny.imageset/Contents.json
@@ -0,0 +1,15 @@
+{
+ "images" : [
+ {
+ "filename" : "ic_laugh.png",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "preserves-vector-representation" : true
+ }
+}
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/funny.imageset/ic_laugh.png b/Projects/App/Resources/Assets.xcassets/Old Icon/Funny.imageset/ic_laugh.png
similarity index 100%
rename from Projects/App/Resources/Assets.xcassets/Icon/funny.imageset/ic_laugh.png
rename to Projects/App/Resources/Assets.xcassets/Old Icon/Funny.imageset/ic_laugh.png
diff --git a/Projects/App/Resources/Assets.xcassets/Old Icon/Heart.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Old Icon/Heart.imageset/Contents.json
new file mode 100644
index 00000000..fa842298
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Old Icon/Heart.imageset/Contents.json
@@ -0,0 +1,15 @@
+{
+ "images" : [
+ {
+ "filename" : "ic_love.png",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "preserves-vector-representation" : true
+ }
+}
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/heart.imageset/ic_love.png b/Projects/App/Resources/Assets.xcassets/Old Icon/Heart.imageset/ic_love.png
similarity index 100%
rename from Projects/App/Resources/Assets.xcassets/Icon/heart.imageset/ic_love.png
rename to Projects/App/Resources/Assets.xcassets/Old Icon/Heart.imageset/ic_love.png
diff --git a/Projects/App/Resources/Assets.xcassets/Old Icon/Hide.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Old Icon/Hide.imageset/Contents.json
new file mode 100644
index 00000000..473399c5
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Old Icon/Hide.imageset/Contents.json
@@ -0,0 +1,15 @@
+{
+ "images" : [
+ {
+ "filename" : "Hide.svg",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "preserves-vector-representation" : true
+ }
+}
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/Hide.imageset/Hide.svg b/Projects/App/Resources/Assets.xcassets/Old Icon/Hide.imageset/Hide.svg
similarity index 100%
rename from Projects/App/Resources/Assets.xcassets/Icon/Hide.imageset/Hide.svg
rename to Projects/App/Resources/Assets.xcassets/Old Icon/Hide.imageset/Hide.svg
diff --git a/Projects/App/Resources/Assets.xcassets/Old Icon/Home.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Old Icon/Home.imageset/Contents.json
new file mode 100644
index 00000000..7e889a66
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Old Icon/Home.imageset/Contents.json
@@ -0,0 +1,15 @@
+{
+ "images" : [
+ {
+ "filename" : "Home.svg",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "preserves-vector-representation" : true
+ }
+}
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/Home.imageset/Home.svg b/Projects/App/Resources/Assets.xcassets/Old Icon/Home.imageset/Home.svg
similarity index 100%
rename from Projects/App/Resources/Assets.xcassets/Icon/Home.imageset/Home.svg
rename to Projects/App/Resources/Assets.xcassets/Old Icon/Home.imageset/Home.svg
diff --git a/Projects/App/Resources/Assets.xcassets/Old Icon/HomeNone.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Old Icon/HomeNone.imageset/Contents.json
new file mode 100644
index 00000000..a2f968b1
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Old Icon/HomeNone.imageset/Contents.json
@@ -0,0 +1,15 @@
+{
+ "images" : [
+ {
+ "filename" : "home_none.svg",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "preserves-vector-representation" : true
+ }
+}
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/Home_none.imageset/home_none.svg b/Projects/App/Resources/Assets.xcassets/Old Icon/HomeNone.imageset/home_none.svg
similarity index 100%
rename from Projects/App/Resources/Assets.xcassets/Icon/Home_none.imageset/home_none.svg
rename to Projects/App/Resources/Assets.xcassets/Old Icon/HomeNone.imageset/home_none.svg
diff --git a/Projects/App/Resources/Assets.xcassets/Old Icon/Image.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Old Icon/Image.imageset/Contents.json
new file mode 100644
index 00000000..a6215a8d
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Old Icon/Image.imageset/Contents.json
@@ -0,0 +1,15 @@
+{
+ "images" : [
+ {
+ "filename" : "Image.svg",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "preserves-vector-representation" : true
+ }
+}
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/Image.imageset/Image.svg b/Projects/App/Resources/Assets.xcassets/Old Icon/Image.imageset/Image.svg
similarity index 100%
rename from Projects/App/Resources/Assets.xcassets/Icon/Image.imageset/Image.svg
rename to Projects/App/Resources/Assets.xcassets/Old Icon/Image.imageset/Image.svg
diff --git a/Projects/App/Resources/Assets.xcassets/Old Icon/LoudSpeaker.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Old Icon/LoudSpeaker.imageset/Contents.json
new file mode 100644
index 00000000..b0401d1a
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Old Icon/LoudSpeaker.imageset/Contents.json
@@ -0,0 +1,15 @@
+{
+ "images" : [
+ {
+ "filename" : "LoudSpeaker.svg",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "preserves-vector-representation" : true
+ }
+}
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/LoudSpeaker.imageset/LoudSpeaker.svg b/Projects/App/Resources/Assets.xcassets/Old Icon/LoudSpeaker.imageset/LoudSpeaker.svg
similarity index 100%
rename from Projects/App/Resources/Assets.xcassets/Icon/LoudSpeaker.imageset/LoudSpeaker.svg
rename to Projects/App/Resources/Assets.xcassets/Old Icon/LoudSpeaker.imageset/LoudSpeaker.svg
diff --git a/Projects/App/Resources/Assets.xcassets/Old Icon/Ok.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Old Icon/Ok.imageset/Contents.json
new file mode 100644
index 00000000..ff4d98d9
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Old Icon/Ok.imageset/Contents.json
@@ -0,0 +1,15 @@
+{
+ "images" : [
+ {
+ "filename" : "ic_okay.png",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "preserves-vector-representation" : true
+ }
+}
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/Ok.imageset/ic_okay.png b/Projects/App/Resources/Assets.xcassets/Old Icon/Ok.imageset/ic_okay.png
similarity index 100%
rename from Projects/App/Resources/Assets.xcassets/Icon/Ok.imageset/ic_okay.png
rename to Projects/App/Resources/Assets.xcassets/Old Icon/Ok.imageset/ic_okay.png
diff --git a/Projects/App/Resources/Assets.xcassets/Old Icon/Profile.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Old Icon/Profile.imageset/Contents.json
new file mode 100644
index 00000000..ba0de987
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Old Icon/Profile.imageset/Contents.json
@@ -0,0 +1,15 @@
+{
+ "images" : [
+ {
+ "filename" : "Profile.svg",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "preserves-vector-representation" : true
+ }
+}
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/Profile.imageset/Profile.svg b/Projects/App/Resources/Assets.xcassets/Old Icon/Profile.imageset/Profile.svg
similarity index 100%
rename from Projects/App/Resources/Assets.xcassets/Icon/Profile.imageset/Profile.svg
rename to Projects/App/Resources/Assets.xcassets/Old Icon/Profile.imageset/Profile.svg
diff --git a/Projects/App/Resources/Assets.xcassets/Old Icon/ProfileNone.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Old Icon/ProfileNone.imageset/Contents.json
new file mode 100644
index 00000000..2541b32d
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Old Icon/ProfileNone.imageset/Contents.json
@@ -0,0 +1,15 @@
+{
+ "images" : [
+ {
+ "filename" : "profile_none.svg",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "preserves-vector-representation" : true
+ }
+}
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/Profile_none.imageset/profile_none.svg b/Projects/App/Resources/Assets.xcassets/Old Icon/ProfileNone.imageset/profile_none.svg
similarity index 100%
rename from Projects/App/Resources/Assets.xcassets/Icon/Profile_none.imageset/profile_none.svg
rename to Projects/App/Resources/Assets.xcassets/Old Icon/ProfileNone.imageset/profile_none.svg
diff --git a/Projects/App/Resources/Assets.xcassets/Old Icon/Roundbutton.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Old Icon/Roundbutton.imageset/Contents.json
new file mode 100644
index 00000000..d3943002
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Old Icon/Roundbutton.imageset/Contents.json
@@ -0,0 +1,15 @@
+{
+ "images" : [
+ {
+ "filename" : "ic_round-detail.svg",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "preserves-vector-representation" : true
+ }
+}
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/Roundbutton.imageset/ic_round-detail.svg b/Projects/App/Resources/Assets.xcassets/Old Icon/Roundbutton.imageset/ic_round-detail.svg
similarity index 100%
rename from Projects/App/Resources/Assets.xcassets/Icon/Roundbutton.imageset/ic_round-detail.svg
rename to Projects/App/Resources/Assets.xcassets/Old Icon/Roundbutton.imageset/ic_round-detail.svg
diff --git a/Projects/App/Resources/Assets.xcassets/Old Icon/Sad.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Old Icon/Sad.imageset/Contents.json
new file mode 100644
index 00000000..f24f8bac
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Old Icon/Sad.imageset/Contents.json
@@ -0,0 +1,15 @@
+{
+ "images" : [
+ {
+ "filename" : "ic_sad.png",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "preserves-vector-representation" : true
+ }
+}
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/Sad.imageset/ic_sad.png b/Projects/App/Resources/Assets.xcassets/Old Icon/Sad.imageset/ic_sad.png
similarity index 100%
rename from Projects/App/Resources/Assets.xcassets/Icon/Sad.imageset/ic_sad.png
rename to Projects/App/Resources/Assets.xcassets/Old Icon/Sad.imageset/ic_sad.png
diff --git a/Projects/App/Resources/Assets.xcassets/Old Icon/Send.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Old Icon/Send.imageset/Contents.json
new file mode 100644
index 00000000..184e06d6
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Old Icon/Send.imageset/Contents.json
@@ -0,0 +1,15 @@
+{
+ "images" : [
+ {
+ "filename" : "Send.svg",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "preserves-vector-representation" : true
+ }
+}
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/Send.imageset/Send.svg b/Projects/App/Resources/Assets.xcassets/Old Icon/Send.imageset/Send.svg
similarity index 100%
rename from Projects/App/Resources/Assets.xcassets/Icon/Send.imageset/Send.svg
rename to Projects/App/Resources/Assets.xcassets/Old Icon/Send.imageset/Send.svg
diff --git a/Projects/App/Resources/Assets.xcassets/Old Icon/Show.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Old Icon/Show.imageset/Contents.json
new file mode 100644
index 00000000..10cd3092
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Old Icon/Show.imageset/Contents.json
@@ -0,0 +1,15 @@
+{
+ "images" : [
+ {
+ "filename" : "Show.svg",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "preserves-vector-representation" : true
+ }
+}
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/Show.imageset/Show.svg b/Projects/App/Resources/Assets.xcassets/Old Icon/Show.imageset/Show.svg
similarity index 100%
rename from Projects/App/Resources/Assets.xcassets/Icon/Show.imageset/Show.svg
rename to Projects/App/Resources/Assets.xcassets/Old Icon/Show.imageset/Show.svg
diff --git a/Projects/App/Resources/Assets.xcassets/Old Icon/Speaker.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Old Icon/Speaker.imageset/Contents.json
new file mode 100644
index 00000000..b448fc7b
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Old Icon/Speaker.imageset/Contents.json
@@ -0,0 +1,15 @@
+{
+ "images" : [
+ {
+ "filename" : "Group 217.svg",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "preserves-vector-representation" : true
+ }
+}
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/Speaker.imageset/Group 217.svg b/Projects/App/Resources/Assets.xcassets/Old Icon/Speaker.imageset/Group 217.svg
similarity index 100%
rename from Projects/App/Resources/Assets.xcassets/Icon/Speaker.imageset/Group 217.svg
rename to Projects/App/Resources/Assets.xcassets/Old Icon/Speaker.imageset/Group 217.svg
diff --git a/Projects/App/Resources/Assets.xcassets/Old Icon/XMark.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Old Icon/XMark.imageset/Contents.json
new file mode 100644
index 00000000..1d4a31eb
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Old Icon/XMark.imageset/Contents.json
@@ -0,0 +1,15 @@
+{
+ "images" : [
+ {
+ "filename" : "XMark.svg",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "preserves-vector-representation" : true
+ }
+}
diff --git a/Projects/App/Resources/Assets.xcassets/Icon/XMark.imageset/XMark.svg b/Projects/App/Resources/Assets.xcassets/Old Icon/XMark.imageset/XMark.svg
similarity index 100%
rename from Projects/App/Resources/Assets.xcassets/Icon/XMark.imageset/XMark.svg
rename to Projects/App/Resources/Assets.xcassets/Old Icon/XMark.imageset/XMark.svg
diff --git a/Projects/App/Resources/Assets.xcassets/AccentColor.colorset/Contents.json b/Projects/App/Resources/Assets.xcassets/Old Image/Contents.json
similarity index 51%
rename from Projects/App/Resources/Assets.xcassets/AccentColor.colorset/Contents.json
rename to Projects/App/Resources/Assets.xcassets/Old Image/Contents.json
index eb878970..73c00596 100644
--- a/Projects/App/Resources/Assets.xcassets/AccentColor.colorset/Contents.json
+++ b/Projects/App/Resources/Assets.xcassets/Old Image/Contents.json
@@ -1,9 +1,4 @@
{
- "colors" : [
- {
- "idiom" : "universal"
- }
- ],
"info" : {
"author" : "xcode",
"version" : 1
diff --git a/Projects/App/Resources/Assets.xcassets/Old Image/DarkParent.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Old Image/DarkParent.imageset/Contents.json
new file mode 100644
index 00000000..91e84e7f
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Old Image/DarkParent.imageset/Contents.json
@@ -0,0 +1,15 @@
+{
+ "images" : [
+ {
+ "filename" : "DarkParent 1.svg",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "preserves-vector-representation" : true
+ }
+}
diff --git a/Projects/App/Resources/Assets.xcassets/Image/DarkParent.imageset/DarkParent.svg b/Projects/App/Resources/Assets.xcassets/Old Image/DarkParent.imageset/DarkParent 1.svg
similarity index 100%
rename from Projects/App/Resources/Assets.xcassets/Image/DarkParent.imageset/DarkParent.svg
rename to Projects/App/Resources/Assets.xcassets/Old Image/DarkParent.imageset/DarkParent 1.svg
diff --git a/Projects/App/Resources/Assets.xcassets/Old Image/DarkStudent.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Old Image/DarkStudent.imageset/Contents.json
new file mode 100644
index 00000000..f9a3a57c
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Old Image/DarkStudent.imageset/Contents.json
@@ -0,0 +1,15 @@
+{
+ "images" : [
+ {
+ "filename" : "DarkStudent.svg",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "preserves-vector-representation" : true
+ }
+}
diff --git a/Projects/App/Resources/Assets.xcassets/Image/DarkStudent.imageset/DarkStudent.svg b/Projects/App/Resources/Assets.xcassets/Old Image/DarkStudent.imageset/DarkStudent.svg
similarity index 100%
rename from Projects/App/Resources/Assets.xcassets/Image/DarkStudent.imageset/DarkStudent.svg
rename to Projects/App/Resources/Assets.xcassets/Old Image/DarkStudent.imageset/DarkStudent.svg
diff --git a/Projects/App/Resources/Assets.xcassets/Old Image/Dummy.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Old Image/Dummy.imageset/Contents.json
new file mode 100644
index 00000000..fce2ad7c
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Old Image/Dummy.imageset/Contents.json
@@ -0,0 +1,15 @@
+{
+ "images" : [
+ {
+ "filename" : "Dummy.png",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "preserves-vector-representation" : true
+ }
+}
diff --git a/Projects/App/Resources/Assets.xcassets/Image/Dummy.imageset/Dummy.png b/Projects/App/Resources/Assets.xcassets/Old Image/Dummy.imageset/Dummy.png
similarity index 100%
rename from Projects/App/Resources/Assets.xcassets/Image/Dummy.imageset/Dummy.png
rename to Projects/App/Resources/Assets.xcassets/Old Image/Dummy.imageset/Dummy.png
diff --git a/Projects/App/Resources/Assets.xcassets/Old Image/LightParent.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Old Image/LightParent.imageset/Contents.json
new file mode 100644
index 00000000..0c0fe64e
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Old Image/LightParent.imageset/Contents.json
@@ -0,0 +1,15 @@
+{
+ "images" : [
+ {
+ "filename" : "LightParent.svg",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "preserves-vector-representation" : true
+ }
+}
diff --git a/Projects/App/Resources/Assets.xcassets/Image/LightParent.imageset/LightParent.svg b/Projects/App/Resources/Assets.xcassets/Old Image/LightParent.imageset/LightParent.svg
similarity index 100%
rename from Projects/App/Resources/Assets.xcassets/Image/LightParent.imageset/LightParent.svg
rename to Projects/App/Resources/Assets.xcassets/Old Image/LightParent.imageset/LightParent.svg
diff --git a/Projects/App/Resources/Assets.xcassets/Old Image/LightStudent.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Old Image/LightStudent.imageset/Contents.json
new file mode 100644
index 00000000..5bc797a9
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Old Image/LightStudent.imageset/Contents.json
@@ -0,0 +1,15 @@
+{
+ "images" : [
+ {
+ "filename" : "LightStudent.svg",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "preserves-vector-representation" : true
+ }
+}
diff --git a/Projects/App/Resources/Assets.xcassets/Image/LightStudent.imageset/LightStudent.svg b/Projects/App/Resources/Assets.xcassets/Old Image/LightStudent.imageset/LightStudent.svg
similarity index 100%
rename from Projects/App/Resources/Assets.xcassets/Image/LightStudent.imageset/LightStudent.svg
rename to Projects/App/Resources/Assets.xcassets/Old Image/LightStudent.imageset/LightStudent.svg
diff --git a/Projects/App/Resources/Assets.xcassets/Old Image/NoBookMark.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Old Image/NoBookMark.imageset/Contents.json
new file mode 100644
index 00000000..9e9f8aa8
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Old Image/NoBookMark.imageset/Contents.json
@@ -0,0 +1,15 @@
+{
+ "images" : [
+ {
+ "filename" : "undraw_code_thinking_re_gka2(1) 1.svg",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "preserves-vector-representation" : true
+ }
+}
diff --git a/Projects/App/Resources/Assets.xcassets/Image/NoBookMark.imageset/undraw_code_thinking_re_gka2(1) 1.svg b/Projects/App/Resources/Assets.xcassets/Old Image/NoBookMark.imageset/undraw_code_thinking_re_gka2(1) 1.svg
similarity index 100%
rename from Projects/App/Resources/Assets.xcassets/Image/NoBookMark.imageset/undraw_code_thinking_re_gka2(1) 1.svg
rename to Projects/App/Resources/Assets.xcassets/Old Image/NoBookMark.imageset/undraw_code_thinking_re_gka2(1) 1.svg
diff --git a/Projects/App/Resources/Assets.xcassets/Old Image/NoNotice.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Old Image/NoNotice.imageset/Contents.json
new file mode 100644
index 00000000..a5ba8667
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Old Image/NoNotice.imageset/Contents.json
@@ -0,0 +1,15 @@
+{
+ "images" : [
+ {
+ "filename" : "undraw_online_re_x00h 1.svg",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "preserves-vector-representation" : true
+ }
+}
diff --git a/Projects/App/Resources/Assets.xcassets/Image/NoNotice.imageset/undraw_online_re_x00h 1.svg b/Projects/App/Resources/Assets.xcassets/Old Image/NoNotice.imageset/undraw_online_re_x00h 1.svg
similarity index 100%
rename from Projects/App/Resources/Assets.xcassets/Image/NoNotice.imageset/undraw_online_re_x00h 1.svg
rename to Projects/App/Resources/Assets.xcassets/Old Image/NoNotice.imageset/undraw_online_re_x00h 1.svg
diff --git a/Projects/App/Resources/Assets.xcassets/Old Image/ProfileImage.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Old Image/ProfileImage.imageset/Contents.json
new file mode 100644
index 00000000..1543ec9e
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Old Image/ProfileImage.imageset/Contents.json
@@ -0,0 +1,15 @@
+{
+ "images" : [
+ {
+ "filename" : "ProfileImage.svg",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "preserves-vector-representation" : true
+ }
+}
diff --git a/Projects/App/Resources/Assets.xcassets/Image/ProfileImage.imageset/ProfileImage.svg b/Projects/App/Resources/Assets.xcassets/Old Image/ProfileImage.imageset/ProfileImage.svg
similarity index 100%
rename from Projects/App/Resources/Assets.xcassets/Image/ProfileImage.imageset/ProfileImage.svg
rename to Projects/App/Resources/Assets.xcassets/Old Image/ProfileImage.imageset/ProfileImage.svg
diff --git a/Projects/App/Resources/Assets.xcassets/Old Image/Screen.imageset/Contents.json b/Projects/App/Resources/Assets.xcassets/Old Image/Screen.imageset/Contents.json
new file mode 100644
index 00000000..84a97c91
--- /dev/null
+++ b/Projects/App/Resources/Assets.xcassets/Old Image/Screen.imageset/Contents.json
@@ -0,0 +1,15 @@
+{
+ "images" : [
+ {
+ "filename" : "Screen.svg",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ },
+ "properties" : {
+ "preserves-vector-representation" : true
+ }
+}
diff --git a/Projects/App/Resources/Assets.xcassets/Image/Screen.imageset/Screen.svg b/Projects/App/Resources/Assets.xcassets/Old Image/Screen.imageset/Screen.svg
similarity index 100%
rename from Projects/App/Resources/Assets.xcassets/Image/Screen.imageset/Screen.svg
rename to Projects/App/Resources/Assets.xcassets/Old Image/Screen.imageset/Screen.svg
diff --git a/Projects/App/Sources/Application/AlimoApp.swift b/Projects/App/Sources/Application/AlimoApp.swift
index 8a2deada..7f1bbddc 100644
--- a/Projects/App/Sources/Application/AlimoApp.swift
+++ b/Projects/App/Sources/Application/AlimoApp.swift
@@ -1,4 +1,6 @@
import SwiftUI
+import ADS
+import Foundation
@main
struct AlimoApp: App {
@@ -12,6 +14,7 @@ struct AlimoApp: App {
.environmentObject(DialogManager())
.environmentObject(DownloadManager())
.environmentObject(AppState())
+ .environmentObject(ColorProvider(isDarkTheme: UserDefaults.standard.bool(forKey: "isDarkTheme")))
}
}
}
@@ -21,6 +24,7 @@ private struct ContentView: View {
@EnvironmentObject var tokenManager: TokenManager
@EnvironmentObject var dm: DialogManager
+ @EnvironmentObject private var colorProvider: ColorProvider
@State var opacity = 1.0
var body: some View {
@@ -49,6 +53,15 @@ private struct ContentView: View {
opacity = 0
}
}
+ handleRefreshControl(isDarkTheme: colorProvider.isDarkTheme)
}
+ .onChange(of: colorProvider.isDarkTheme) {
+ handleRefreshControl(isDarkTheme: $0)
+ }
+ }
+
+ func handleRefreshControl(isDarkTheme: Bool) {
+ let tintColor = isDarkTheme ? AlimoColor.Color.primary60.darkColor : .black
+ UIRefreshControl.appearance().tintColor = UIColor(tintColor)
}
}
diff --git a/Projects/App/Sources/Application/Foundation/AppState.swift b/Projects/App/Sources/Application/Foundation/AppState.swift
index 715c61b3..769128bc 100644
--- a/Projects/App/Sources/Application/Foundation/AppState.swift
+++ b/Projects/App/Sources/Application/Foundation/AppState.swift
@@ -12,13 +12,18 @@ final class AppState: ObservableObject {
}
}
}
+ @Published var refreshFailure = false
@MainActor
func fetchMember() {
Task {
- member = try await MemberService.live.getMemberInfo()
- guard let member else { return }
- isAlarmOn = !member.isOffAlarm
+ do {
+ member = try await MemberService.live.getMemberInfo()
+ guard let member else { return }
+ isAlarmOn = !member.isOffAlarm
+ } catch AuthError.refreshFailure {
+ refreshFailure = true
+ } catch {}
}
}
diff --git a/Projects/App/Sources/Data/Emoji/Model/Domain/Emoji.swift b/Projects/App/Sources/Data/Emoji/Model/Domain/Emoji.swift
index f7f12e4e..d64d3b80 100644
--- a/Projects/App/Sources/Data/Emoji/Model/Domain/Emoji.swift
+++ b/Projects/App/Sources/Data/Emoji/Model/Domain/Emoji.swift
@@ -5,6 +5,7 @@
// Created by dgsw8th71 on 2/27/24.
// Copyright © 2024 b8nd. All rights reserved.
//
+import ADS
struct Emoji: Hashable {
var emojiType: EmojiType?
diff --git a/Projects/App/Sources/Data/Emoji/Model/Domain/EmojiType.swift b/Projects/App/Sources/Data/Emoji/Model/Domain/EmojiType.swift
index 7d492833..ba5861b5 100644
--- a/Projects/App/Sources/Data/Emoji/Model/Domain/EmojiType.swift
+++ b/Projects/App/Sources/Data/Emoji/Model/Domain/EmojiType.swift
@@ -1,36 +1,30 @@
+//import Foundation
+//import SwiftUI
+////APP
//
-// EmojiType.swift
-// App
-//
-// Created by dgsw8th71 on 2/27/24.
-// Copyright © 2024 b8nd. All rights reserved.
-//
-
-import Foundation
-
-enum EmojiType: String, CaseIterable {
- case okay = "OKAY"
- case love = "LOVE"
- case laugh = "LAUGH"
- case sad = "SAD"
- case angry = "ANGRY"
-
- static func fromString(_ str: String?) -> EmojiType? {
- for emojiType in EmojiType.allCases {
- if emojiType.rawValue == str {
- return emojiType
- }
- }
- return nil
- }
-
- var image: String {
- switch self {
- case .okay: "Ok"
- case .love: "heart"
- case .laugh: "funny"
- case .sad: "Sad"
- case .angry: "Angry"
- }
- }
-}
+//enum EmojiType: String, CaseIterable {
+// case okay = "OKAY"
+// case love = "LOVE"
+// case laugh = "LAUGH"
+// case sad = "SAD"
+// case angry = "ANGRY"
+//
+// static func fromString(_ str: String?) -> EmojiType? {
+// for emojiType in EmojiType.allCases {
+// if emojiType.rawValue == str {
+// return emojiType
+// }
+// }
+// return nil
+// }
+//
+// var image: Image {
+// switch self {
+// case .okay: Image(.ok)
+// case .love: Image(.heart)
+// case .laugh: Image(.funny)
+// case .sad: Image(.sad)
+// case .angry: Image(.angry)
+// }
+// }
+//}
diff --git a/Projects/App/Sources/Data/Emoji/Model/Response/EmojiResponse.swift b/Projects/App/Sources/Data/Emoji/Model/Response/EmojiResponse.swift
index 83b7c87a..39dd3fcb 100644
--- a/Projects/App/Sources/Data/Emoji/Model/Response/EmojiResponse.swift
+++ b/Projects/App/Sources/Data/Emoji/Model/Response/EmojiResponse.swift
@@ -6,6 +6,8 @@
// Copyright © 2024 b8nd. All rights reserved.
//
+import ADS
+
struct EmojiResponse: Decodable {
let emojiName: String
let count: Int
diff --git a/Projects/App/Sources/Data/Foundation/AuthError.swift b/Projects/App/Sources/Data/Foundation/AuthError.swift
new file mode 100644
index 00000000..c26b0a9c
--- /dev/null
+++ b/Projects/App/Sources/Data/Foundation/AuthError.swift
@@ -0,0 +1,3 @@
+enum AuthError: Error {
+ case refreshFailure
+}
diff --git a/Projects/App/Sources/Data/Foundation/Interceptor/DefaultInterceptor.swift b/Projects/App/Sources/Data/Foundation/Interceptor/DefaultInterceptor.swift
index cbfdd7e3..8a5ffc6e 100644
--- a/Projects/App/Sources/Data/Foundation/Interceptor/DefaultInterceptor.swift
+++ b/Projects/App/Sources/Data/Foundation/Interceptor/DefaultInterceptor.swift
@@ -1,11 +1,3 @@
-//
-// DefaultInterceptor.swift
-// App
-//
-// Created by dgsw8th71 on 2/9/24.
-// Copyright © 2024 b8nd. All rights reserved.
-//
-
import Alamofire
import Foundation
@@ -48,8 +40,7 @@ class DefaultInterceptor: RequestInterceptor {
authCache.saveToken(response.data.accessToken, to: .accessToken)
completion(.retry)
} catch {
- print("-- lost session --")
- completion(.doNotRetryWithError(error))
+ completion(.doNotRetryWithError(AuthError.refreshFailure))
}
}
}
diff --git a/Projects/App/Sources/Data/Notification/Model/Domain/Notification.swift b/Projects/App/Sources/Data/Notification/Model/Domain/Notification.swift
index 7a002d17..0ede41d8 100644
--- a/Projects/App/Sources/Data/Notification/Model/Domain/Notification.swift
+++ b/Projects/App/Sources/Data/Notification/Model/Domain/Notification.swift
@@ -7,6 +7,7 @@
//
import Foundation
+import ADS
struct Notification: Hashable {
var uuidString = UUID().uuidString
diff --git a/Projects/App/Sources/Data/Notification/Model/Domain/NotificationRead.swift b/Projects/App/Sources/Data/Notification/Model/Domain/NotificationRead.swift
index 011a22a2..e91afc74 100644
--- a/Projects/App/Sources/Data/Notification/Model/Domain/NotificationRead.swift
+++ b/Projects/App/Sources/Data/Notification/Model/Domain/NotificationRead.swift
@@ -7,6 +7,7 @@
//
import Foundation
+import ADS
struct NotificationRead: Hashable {
var notificationId: Int
diff --git a/Projects/App/Sources/Data/Notification/Model/Response/NotificationLoadResponse.swift b/Projects/App/Sources/Data/Notification/Model/Response/NotificationLoadResponse.swift
index 3f9067c3..9acdb643 100644
--- a/Projects/App/Sources/Data/Notification/Model/Response/NotificationLoadResponse.swift
+++ b/Projects/App/Sources/Data/Notification/Model/Response/NotificationLoadResponse.swift
@@ -7,6 +7,7 @@
//
import Foundation
+import ADS
struct NotificationLoadResponse: Decodable {
let notificationId: Int
diff --git a/Projects/App/Sources/Data/Notification/Model/Response/NotificationReadResponse.swift b/Projects/App/Sources/Data/Notification/Model/Response/NotificationReadResponse.swift
index d300511a..4b19c326 100644
--- a/Projects/App/Sources/Data/Notification/Model/Response/NotificationReadResponse.swift
+++ b/Projects/App/Sources/Data/Notification/Model/Response/NotificationReadResponse.swift
@@ -7,6 +7,7 @@
//
import Foundation
+import ADS
struct NotificationReadResponse: Decodable {
let notificationId: Int
diff --git a/Projects/App/Sources/UI/Component/Menu/AlimoEmojMenu.swift b/Projects/App/Sources/UI/Component/Menu/AlimoEmojMenu.swift
index 0db9dc05..22a7bf70 100644
--- a/Projects/App/Sources/UI/Component/Menu/AlimoEmojMenu.swift
+++ b/Projects/App/Sources/UI/Component/Menu/AlimoEmojMenu.swift
@@ -7,6 +7,7 @@
//
import SwiftUI
+import ADS
struct AlimoEmojiMenu: View where Content: View {
@@ -48,7 +49,7 @@ struct AlimoEmojiMenu: View where Content: View {
}
.padding()
.background(Color.white)
- .cornerRadius(8)
+ .cornerRadius(8, corners: .allCorners)
.onTapGesture {
withAnimation {
showMenu = false
@@ -60,7 +61,7 @@ struct AlimoEmojiMenu: View where Content: View {
showMenu = false
}
} label: {
- Image("XMark")
+ Image(.xMark)
.resizable()
.renderingMode(.template)
.frame(width: 32, height: 32)
@@ -98,12 +99,12 @@ struct Menus: View {
showMenu = false
}
} label: {
- Image(emoji.image)
+ emoji.image
.resizable()
.frame(width: 28, height: 28)
}
.background(backgroundColor)
- .cornerRadius(4)
+ .cornerRadius(4, corners: .allCorners)
}
}
}
diff --git a/Projects/App/Sources/UI/Component/Shimmer/View+shimmer.swift b/Projects/App/Sources/UI/Component/Shimmer/View+shimmer.swift
deleted file mode 100644
index d617c530..00000000
--- a/Projects/App/Sources/UI/Component/Shimmer/View+shimmer.swift
+++ /dev/null
@@ -1,13 +0,0 @@
-import SwiftUI
-
-public extension View {
-
- @ViewBuilder
- func shimmer(_ condition: Bool = true) -> some View {
- if condition {
- AlimoShimmer { self }
- } else {
- self
- }
- }
-}
diff --git a/Projects/App/Sources/UI/Component/TextField/AlimoTextField.swift b/Projects/App/Sources/UI/Component/TextField/AlimoTextField.swift
index 03962a4e..7929a81f 100644
--- a/Projects/App/Sources/UI/Component/TextField/AlimoTextField.swift
+++ b/Projects/App/Sources/UI/Component/TextField/AlimoTextField.swift
@@ -91,7 +91,7 @@ struct AlimoTextFieldStyle: TextFieldStyle {
switch type {
case .none(let hasXMark):
if hasXMark && !text.isEmpty {
- Image(Asset.xMark)
+ Image(.xMark)
.resizable()
.renderingMode(.template)
.frame(width: 32, height: 32)
@@ -101,7 +101,7 @@ struct AlimoTextFieldStyle: TextFieldStyle {
}
}
case .password:
- Image(isHide ? Asset.hide : Asset.show)
+ Image(isHide ? .hide : .show)
.resizable()
.renderingMode(.template)
.frame(width: 28, height: 28)
diff --git a/Projects/App/Sources/UI/Component/Theme/RoundedCornerExt.swift b/Projects/App/Sources/UI/Component/Theme/RoundedCornerExt.swift
deleted file mode 100644
index 10d54c76..00000000
--- a/Projects/App/Sources/UI/Component/Theme/RoundedCornerExt.swift
+++ /dev/null
@@ -1,16 +0,0 @@
-//
-// RoundedCornerExt.swift
-// App
-//
-// Created by dgsw8th61 on 1/8/24.
-// Copyright © 2024 b8nd. All rights reserved.
-//
-
-
-import SwiftUI
-
-extension View {
- func cornerRadius(_ radius: CGFloat, corners: UIRectCorner) -> some View {
- clipShape( RoundedCorner(radius: radius, corners: corners) )
- }
-}
diff --git a/Projects/App/Sources/UI/Feature/Main/Bookmark/BookmarkView.swift b/Projects/App/Sources/UI/Feature/Main/Bookmark/BookmarkView.swift
index bfa53428..80ec9b56 100644
--- a/Projects/App/Sources/UI/Feature/Main/Bookmark/BookmarkView.swift
+++ b/Projects/App/Sources/UI/Feature/Main/Bookmark/BookmarkView.swift
@@ -8,10 +8,12 @@
import Foundation
import SwiftUI
+import ADS
struct BookmarkView: View {
@StateObject var vm: BookmarkViewModel
+ @EnvironmentObject var tm: TokenManager
@State private var scrollViewOffset: CGFloat = 0 {
didSet {
@@ -24,57 +26,68 @@ struct BookmarkView: View {
var hasPost: Bool = true
var body: some View {
- GeometryReader { geo in
- ScrollView(showsIndicators: false) {
- VStack(spacing: 0) {
- AlimoLogoBar()
- switch vm.flow {
- case .fetching:
- LazyVStack(spacing: 0) {
- ForEach(0..<4, id: \.self) { _ in
- NotificationCellShimmer()
- }
- }
- .shimmer()
- case .success:
- LazyVStack(spacing: 0) {
- ForEach(vm.notificationList, id: \.uuidString) { notification in
- VStack(spacing: 0) {
- NotificationCeil(notification: notification, onClickEmoji: { emoji in
- Task {
- await vm.patchEmoji(emoji: emoji, notificationId: notification.notificationId)
- }
- }, onClickBookmark: {
- Task {
- await vm.patchBookmark(notificationId: notification.notificationId)
- }
- }, vm: NotificationDetailViewModel(notificationId: notification.notificationId))
- Divider()
- .foregroundStyle(Color.gray100)
+ ZStack{
+ GeometryReader { geo in
+ ScrollView(showsIndicators: false) {
+ VStack(spacing: 0) {
+ AlimoLogoBar()
+ switch vm.flow {
+ case .fetching:
+ LazyVStack(spacing: 0) {
+ ForEach(0..<4, id: \.self) { _ in
+ NotificationCellShimmer()
}
- .onAppear {
- guard let index = vm.notificationList.firstIndex(where: { $0.notificationId == notification.notificationId }) else { return }
-
- if index % pagingInterval == (pagingInterval - 1) && index / pagingInterval == (vm.notificationList.count - 1) / pagingInterval {
- Task {
- await vm.fetchNotifications(isNew: false)
+ }
+ .shimmer()
+ case .success:
+ LazyVStack(spacing: 0) {
+ ForEach(Array(vm.notificationList.enumerated()), id: \.element.uuidString) { index, notification in
+ VStack(spacing: 0) {
+ BookMarkCeil(notification: notification, onClickEmoji: {emoji in
+ Task{
+ await vm.patchEmoji(emoji:emoji,notificationId:notification.notificationId)
+ }
+ }, onClickBookmark: {
+ Task{
+ await vm.patchBookmark(notificationId:notification.notificationId)
+ }
+ }, vm: NotificationDetailViewModel(notificationId: notification.notificationId), homeVm: HomeViewModel(),bookMarkVm: BookmarkViewModel(),
+ callCount: index)
+ // NotificationCeil(notification: notification, onClickEmoji: { emoji in
+ // Task {
+ // await vm.patchEmoji(emoji: emoji, notificationId: notification.notificationId)
+ // }
+ // }, onClickBookmark: {
+ // Task {
+ // await vm.patchBookmark(notificationId: notification.notificationId)
+ // }
+ // }, vm: NotificationDetailViewModel(notificationId: notification.notificationId), homeVm: HomeViewModel())
+
+ }
+ .onAppear {
+ guard let index = vm.notificationList.firstIndex(where: { $0.notificationId == notification.notificationId }) else { return }
+
+ if index % pagingInterval == (pagingInterval - 1) && index / pagingInterval == (vm.notificationList.count - 1) / pagingInterval {
+ Task {
+ await vm.fetchNotifications(isNew: false)
+ }
}
}
}
}
+ .padding(.bottom, 100)
+ case .failure:
+ Image(.noNotice)
+ .padding(.top, 115)
+ Text("북마크를 불러올 수 없어요")
+ .font(.subtitle)
+ .foregroundStyle(Color.gray500)
+ .padding(.top, 32)
+
}
- .padding(.bottom, 100)
- case .failure:
- Image(AppAsset.Assets.noNotice.name)
- .padding(.top, 115)
- Text("북마크를 불러올 수 없어요")
- .font(.subtitle)
- .foregroundStyle(Color.gray500)
- .padding(.top, 32)
-
}
}
-
+ .alimoBackground(AlimoColor.Background.normal)
.background(
GeometryReader {
Color.clear.preference(key: ViewOffsetKey.self,
@@ -87,7 +100,7 @@ struct BookmarkView: View {
.overlay {
if .success == vm.flow && vm.notificationList.isEmpty {
VStack(spacing: 32) {
- Image("NoBookMark")
+ Image(.noBookMark)
.resizable()
.frame(width: 117, height: 158)
Text("아직 북마크가 없어요")
@@ -109,5 +122,11 @@ struct BookmarkView: View {
vm.flow = .fetching
await vm.fetchNotifications(isNew: true)
}
+ .onChange(of: vm.refreshFailure) {
+ if $0 {
+ tm.accessToken = ""
+ tm.refreshToken = ""
+ }
+ }
}
}
diff --git a/Projects/App/Sources/UI/Feature/Main/Bookmark/BookmarkViewModel.swift b/Projects/App/Sources/UI/Feature/Main/Bookmark/BookmarkViewModel.swift
index 06143907..b5e3098a 100644
--- a/Projects/App/Sources/UI/Feature/Main/Bookmark/BookmarkViewModel.swift
+++ b/Projects/App/Sources/UI/Feature/Main/Bookmark/BookmarkViewModel.swift
@@ -7,6 +7,7 @@
//
import Foundation
+import ADS
@MainActor
class BookmarkViewModel: ObservableObject {
@@ -26,15 +27,16 @@ class BookmarkViewModel: ObservableObject {
case failure
}
@Published var flow: FetchFlow = .fetching
+ @Published var refreshFailure = false
- func fetchNotifications(isNew: Bool) async {
+ func fetchNotifications(isNew: Bool, category: String? = nil) async {
flow = .fetching
do {
let nextPage = isNew ? 1 : page + 1
print("HomeVM - fetching notifications... nextPage: \(nextPage)")
let request = PageRequest(page: nextPage, size: pagingInterval)
- let notifications = try await bookmarkService.getBookmarkByCategory(category: "null", pageRequest: request)
+ let notifications = try await bookmarkService.getBookmarkByCategory(category: category ?? "null", pageRequest: request)
dump(notifications)
if isNew {
notificationList = notifications
@@ -46,6 +48,8 @@ class BookmarkViewModel: ObservableObject {
page = nextPage
}
flow = .success
+ } catch AuthError.refreshFailure {
+ refreshFailure = true
} catch {
notificationList = []
page = 1
@@ -54,6 +58,7 @@ class BookmarkViewModel: ObservableObject {
}
}
+
func patchBookmark(notificationId: Int) async {
do {
diff --git a/Projects/App/Sources/UI/Feature/Main/Home/Component/BookMarkCeil.swift b/Projects/App/Sources/UI/Feature/Main/Home/Component/BookMarkCeil.swift
new file mode 100644
index 00000000..e605d74e
--- /dev/null
+++ b/Projects/App/Sources/UI/Feature/Main/Home/Component/BookMarkCeil.swift
@@ -0,0 +1,98 @@
+//
+// BookMarkCeil.swift
+// App
+//
+// Created by dgsw8th61 on 7/30/24.
+// Copyright © 2024 b1nd. All rights reserved.
+//
+
+import SwiftUI
+import ADS
+
+struct BookMarkCeil: View {
+ var notification: Notification
+ var onClickEmoji: (EmojiType) -> Void
+ var onClickBookmark: () -> Void
+ @State var showDialog = false
+ @StateObject var vm: NotificationDetailViewModel
+ @StateObject var homeVm: HomeViewModel
+ @StateObject var bookMarkVm: BookmarkViewModel
+ @EnvironmentObject var downloadManager: DownloadManager
+ @State private var matchedCategories: [[String]] = []
+ @State private var callCount: Int
+
+ init(notification: Notification,
+ onClickEmoji: @escaping (EmojiType) -> Void,
+ onClickBookmark: @escaping () -> Void,
+ vm:NotificationDetailViewModel,
+ homeVm: HomeViewModel,
+ bookMarkVm: BookmarkViewModel,
+ callCount: Int
+ ) {
+ self.notification = notification
+ self.onClickEmoji = onClickEmoji
+ self.onClickBookmark = onClickBookmark
+ self._vm = StateObject(wrappedValue: vm)
+ self._homeVm = StateObject(wrappedValue: homeVm)
+ self._bookMarkVm = StateObject(wrappedValue: bookMarkVm)
+ self.callCount = callCount
+ }
+ var body: some View {
+ HStack(spacing: 0) {
+ let categoryToShow = callCount < matchedCategories.count ? matchedCategories[callCount] : []
+ VStack(alignment: .leading, spacing: 0) {
+ NavigationLink {
+ NotificationDetailView(vm: NotificationDetailViewModel(notificationId: notification.notificationId), homeVm: HomeViewModel(), onClickBookmark: {
+ Task {
+ await vm.patchBookmark()
+ }
+ }, onClickEmoji: { emoji in
+ Task {
+ await homeVm.patchEmoji(emoji: emoji, notificationId: notification.notificationId)
+ }
+ })
+ } label: {
+ HStack(alignment: .top) {
+ AlimoBookMark(isSelected: notification.isBookMarked,
+ bookmarkAction: {onClickBookmark()},
+ title: notification.title,
+ content: notification.content,
+ date: formattedDate(notification.createdAt),
+ category: categoryToShow)
+ }
+ }
+ }
+ }
+ .padding(.leading, 12)
+ .padding(.top, 20)
+ .padding(.trailing, 16)
+ .padding(.bottom, 12)
+ .task {
+ await vm.fetchNotification()
+ await homeVm.fetchCategoryList()
+ await fetchCategories()
+ }
+ }
+ private func fetchCategories() async {
+
+ for category in homeVm.category {
+ await bookMarkVm.fetchNotifications(isNew: true, category: category)
+
+ for notification in bookMarkVm.notificationList {
+ if self.notification.notificationId == notification.notificationId {
+ let categoryArray = [category]
+ if !matchedCategories.contains(where: { $0.first == category }) {
+ matchedCategories.append(categoryArray)
+ }
+ }
+ }
+ }
+ }
+
+ private func formattedDate(_ date: Date) -> String {
+ let dateFormatter = DateFormatter()
+ dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss" // 원하는 형식으로 설정
+ return dateFormatter.string(from: date)
+ }
+
+}
diff --git a/Projects/App/Sources/UI/Feature/Main/Home/Component/EmojiContainer.swift b/Projects/App/Sources/UI/Feature/Main/Home/Component/EmojiContainer.swift
index 4a722dac..42739803 100644
--- a/Projects/App/Sources/UI/Feature/Main/Home/Component/EmojiContainer.swift
+++ b/Projects/App/Sources/UI/Feature/Main/Home/Component/EmojiContainer.swift
@@ -1,11 +1,4 @@
-//
-// Emoji.swift
-// App
-//
-// Created by dgsw8th61 on 1/7/24.
-// Copyright © 2024 b8nd. All rights reserved.
-//
-
+import ADS
import SwiftUI
struct EmojiContainer: View {
@@ -19,7 +12,7 @@ struct EmojiContainer: View {
Rectangle()
.foregroundColor(.gray100)
.frame(width: 300, height: 35)
- .cornerRadius(5)
+ .cornerRadius(5, corners: .allCorners)
HStack {
ForEach(emojies, id: \.self) { emoji in
@@ -35,13 +28,13 @@ struct EmojiContainer: View {
}
}
- func emojiImage(image: String, num: Int, isSelected: Bool) -> some View {
+ func emojiImage(image: Image, num: Int, isSelected: Bool) -> some View {
HStack {
- Image(image)
+ image
.resizable()
.aspectRatio(contentMode: .fill)
.frame(width: 20, height: 20)
- .cornerRadius(5)
+ .cornerRadius(5, corners: .allCorners)
.padding(2)
.opacity(isSelected ? 1.0 : 0.5)
diff --git a/Projects/App/Sources/UI/Feature/Main/Home/Component/FileCeil.swift b/Projects/App/Sources/UI/Feature/Main/Home/Component/FileCeil.swift
index 9a62606b..89610394 100644
--- a/Projects/App/Sources/UI/Feature/Main/Home/Component/FileCeil.swift
+++ b/Projects/App/Sources/UI/Feature/Main/Home/Component/FileCeil.swift
@@ -8,6 +8,7 @@
import Foundation
import SwiftUI
+import ADS
struct FileCeil: View {
@@ -41,7 +42,7 @@ struct FileCeil: View {
let fileSize = generateTextBasedOnFileSize(fileSizeInBytes: Double(file.fileSize))
HStack(spacing: 0) {
- Image("File")
+ Image(.file)
.resizable()
.frame(width: 28, height: 28)
VStack(alignment: .leading, spacing: 0) {
@@ -60,14 +61,14 @@ struct FileCeil: View {
Button {
onClickDownload()
} label: {
- Image("Download")
+ Image(.download)
.resizable()
.frame(width: 24, height: 24)
}
}
.padding(12)
.background(Color.gray100)
- .cornerRadius(8)
+ .cornerRadius(8, corners: .allCorners)
}
func generateTextBasedOnFileSize(fileSizeInBytes: Double) -> (Double, FileVolume) {
diff --git a/Projects/App/Sources/UI/Feature/Main/Home/Component/IconCeil.swift b/Projects/App/Sources/UI/Feature/Main/Home/Component/IconCeil.swift
index 90e27ee1..45dc748c 100644
--- a/Projects/App/Sources/UI/Feature/Main/Home/Component/IconCeil.swift
+++ b/Projects/App/Sources/UI/Feature/Main/Home/Component/IconCeil.swift
@@ -8,6 +8,7 @@
import Foundation
import SwiftUI
+import ADS
struct IconCeil: View {
@@ -24,11 +25,11 @@ struct IconCeil: View {
onClickEmoji($0)
} content: {
if let emoji = emoji {
- Image(emoji.image)
+ emoji.image
.resizable()
.frame(width: 28, height: 28)
} else {
- Image("AddImoji")
+ Image(.addImoji)
.resizable()
.frame(width: 28, height: 28)
}
@@ -41,12 +42,12 @@ struct IconCeil: View {
onClickBookmark()
} label: {
if isBookmarked {
- Image(AppAsset.Assets.clickedBookmark.name)
+ Image(.clickedBookmark)
.resizable()
.aspectRatio(contentMode: .fill)
.frame(width: 28, height: 28)
} else {
- Image(AppAsset.Assets.bookmark.name)
+ Image(.bookmark)
.resizable()
.renderingMode(.template)
.foregroundStyle(Color.gray500)
diff --git a/Projects/App/Sources/UI/Feature/Main/Home/Component/ImageCeil.swift b/Projects/App/Sources/UI/Feature/Main/Home/Component/ImageCeil.swift
index a9ab7bbb..ec09c1c3 100644
--- a/Projects/App/Sources/UI/Feature/Main/Home/Component/ImageCeil.swift
+++ b/Projects/App/Sources/UI/Feature/Main/Home/Component/ImageCeil.swift
@@ -7,6 +7,7 @@
//
import SwiftUI
+import ADS
struct ImageCeil: View {
@@ -20,7 +21,7 @@ struct ImageCeil: View {
PreviewImageView( imageUrls: images.map { $0.fileUrl }, name: name, Info: info,onClickDownload:onClickDownload)
} label: {
HStack(spacing: 0) {
- Image("Image")
+ Image(.image)
.resizable()
.frame(width: 28, height: 28)
VStack(alignment: .leading, spacing: 0) {
@@ -36,14 +37,14 @@ struct ImageCeil: View {
Button {
onClickDownload()
} label: {
- Image("Download")
+ Image(.download)
.resizable()
.frame(width: 24, height: 24)
}
}
.padding(12)
.background(Color.gray100)
- .cornerRadius(8)
+ .cornerRadius(8, corners: .allCorners)
}
}
}
diff --git a/Projects/App/Sources/UI/Feature/Main/Home/Component/Notice.swift b/Projects/App/Sources/UI/Feature/Main/Home/Component/Notice.swift
index 9aeb8d37..18a7734c 100644
--- a/Projects/App/Sources/UI/Feature/Main/Home/Component/Notice.swift
+++ b/Projects/App/Sources/UI/Feature/Main/Home/Component/Notice.swift
@@ -8,24 +8,35 @@
import Foundation
import SwiftUI
-
+import ADS
struct Notice: View {
+ @StateObject var vm: NotificationDetailViewModel
+ @StateObject var homeVm: HomeViewModel
var notificationspeaketitle: Text
var memberID: Text
var notificationId: Int
var body : some View {
NavigationLink {
- NotificationDetailView(vm: NotificationDetailViewModel(notificationId: notificationId))
+ NotificationDetailView(vm: NotificationDetailViewModel(notificationId: notificationId), homeVm: HomeViewModel(), onClickBookmark: {
+ Task {
+ await homeVm.patchBookmark(notificationId: vm.notification?.notificationId ?? 0)
+ await vm.fetchNotification()
+ }
+ }, onClickEmoji: { emoji in
+ Task {
+ await homeVm.patchEmoji(emoji: emoji, notificationId: notificationId)
+ }
+ })
} label: {
ZStack {
Rectangle()
.foregroundColor(.main100)
.frame(maxWidth: .infinity, minHeight: 36)
- .cornerRadius(5)
+ .cornerRadius(5, corners: .allCorners)
HStack {
- Image(Asset.loudSpeaker)
+ Image(.loudSpeaker)
.renderingMode(.template)
.foregroundStyle(Color.main300)
diff --git a/Projects/App/Sources/UI/Feature/Main/Home/Component/NotificationCeil.swift b/Projects/App/Sources/UI/Feature/Main/Home/Component/NotificationCeil.swift
index a642f4f8..113cbc06 100644
--- a/Projects/App/Sources/UI/Feature/Main/Home/Component/NotificationCeil.swift
+++ b/Projects/App/Sources/UI/Feature/Main/Home/Component/NotificationCeil.swift
@@ -8,6 +8,7 @@
import Foundation
import SwiftUI
+import ADS
struct NotificationCeil: View {
enum Dialog {
@@ -21,16 +22,20 @@ struct NotificationCeil: View {
@State var showDialog = false
@State var dialog = Dialog.file
@StateObject var vm: NotificationDetailViewModel
+ @StateObject var homeVm: HomeViewModel
@EnvironmentObject var downloadManager: DownloadManager
init(notification: Notification,
onClickEmoji: @escaping (EmojiType) -> Void,
onClickBookmark: @escaping () -> Void,
- vm:NotificationDetailViewModel) {
+ vm:NotificationDetailViewModel,
+ homeVm: HomeViewModel
+ ) {
self.notification = notification
self.onClickEmoji = onClickEmoji
self.onClickBookmark = onClickBookmark
self._vm = StateObject(wrappedValue: vm)
+ self._homeVm = StateObject(wrappedValue: homeVm)
}
@ViewBuilder
@@ -94,43 +99,72 @@ struct NotificationCeil: View {
var body: some View {
HStack(spacing: 0) {
- avatar
VStack(alignment: .leading, spacing: 0) {
NavigationLink {
- NotificationDetailView(vm: NotificationDetailViewModel(notificationId: notification.notificationId))
+ NotificationDetailView(vm: NotificationDetailViewModel(notificationId: notification.notificationId), homeVm: HomeViewModel(), onClickBookmark: {
+ Task {
+ // await vm.patchBookmark(notificationId: vm.notification?.notificationId)
+ await vm.patchBookmark()
+ }
+ }, onClickEmoji: { emoji in
+ Task {
+ await homeVm.patchEmoji(emoji: emoji, notificationId: notification.notificationId)
+ }
+ })
} label: {
- VStack(alignment: .leading, spacing: 0) {
- profile
- content
- .padding(.top, 12)
- VStack(spacing: 8) {
- if !(vm.notification?.files.isEmpty ?? true) {
- downloads
- }
- if let images = vm.notification?.images {
- VStack(spacing: 8) {
- if !images.isEmpty {
- ImageCeil(images: vm.notification?.images ?? [], info: (vm.notification?.createdAt.ymdText)!, name: vm.notification?.name ?? "") {
- // TODO: Download images
- Task {
- await vm.downloadImages(images: vm.notification?.images ?? []) { images in
- images.forEach {
- downloadManager.saveImageToPhotos(image: $0)
- }
+ HStack(alignment: .top) {
+ AlimoNotification(
+ notification.title,
+ user: notification.name,
+ content: notification.content,
+ isSelected: notification.isBookMarked,
+ date: notification.createdAt,
+ addEmojiAction: {emoji in
+ onClickEmoji(emoji)
+ },
+ bookmarkAction: {
+ onClickBookmark()
+ },
+ files: {
+ var fileInfoArray: [FileInfo] = []
+
+ if let files = vm.notification?.files, !files.isEmpty {
+ fileInfoArray.append(contentsOf: files.map { file in
+ FileInfo(title: file.fileName, type: .image(byte: file.fileSize)) {}
+ })
+ }
+
+ if let images = vm.notification?.images, !images.isEmpty {
+ fileInfoArray.append(FileInfo(title: images[0].fileName, type: .file(count: vm.notification?.images.count ?? 0)) {
+ Task {
+ await vm.downloadImages(images: vm.notification?.images ?? []) { images in
+ images.forEach {
+ downloadManager.saveImageToPhotos(image: $0)
}
- dialog = .image
- showDialog = true
}
}
- }
+ dialog = .image
+ showDialog = true
+ })
}
- }
- }
+
+ return fileInfoArray
+ }(),
+ fileDestination: {
+ PreviewImageView( imageUrls: (vm.notification?.images ?? []).compactMap { ($0 as? ImageOrFile)?.fileUrl },
+ name: vm.notification?.name ?? "",
+ Info: (vm.notification?.createdAt.ymdText)!,
+ onClickDownload:{})
+ },
+ hasEmoji: true,
+ emoji: notification.emoji ?? nil
+ )
}
+ .truncationMode(.tail)
+ .fixedSize(horizontal: false, vertical: true)
+ .multilineTextAlignment(.leading)
}
- info
}
- .padding(.leading, 8)
}
.padding(.leading, 12)
.padding(.top, 20)
@@ -149,6 +183,64 @@ struct NotificationCeil: View {
dismissButton: .default(Text("닫기")))
}
}
+
+
+ // HStack(spacing: 0) {
+ // avatar
+ // VStack(alignment: .leading, spacing: 0) {
+ // NavigationLink {
+ // NotificationDetailView(vm: NotificationDetailViewModel(notificationId: notification.notificationId))
+ // } label: {
+ // VStack(alignment: .leading, spacing: 0) {
+ // profile
+ // content
+ // .padding(.top, 12)
+ // VStack(spacing: 8) {
+ // if !(vm.notification?.files.isEmpty ?? true) {
+ // downloads
+ // }
+ // if let images = vm.notification?.images {
+ // VStack(spacing: 8) {
+ // if !images.isEmpty {
+ // ImageCeil(images: vm.notification?.images ?? [], info: (vm.notification?.createdAt.ymdText)!, name: vm.notification?.name ?? "") {
+ // // TODO: Download images
+ // Task {
+ // await vm.downloadImages(images: vm.notification?.images ?? []) { images in
+ // images.forEach {
+ // downloadManager.saveImageToPhotos(image: $0)
+ // }
+ // }
+ // dialog = .image
+ // showDialog = true
+ // }
+ // }
+ // }
+ // }
+ // }
+ // }
+ // }
+ // }
+ // info
+ // }
+ // .padding(.leading, 8)
+ // }
+ // .padding(.leading, 12)
+ // .padding(.top, 20)
+ // .padding(.trailing, 16)
+ // .padding(.bottom, 12)
+ // .task {
+ // await vm.fetchNotification()
+ // }
+ // .alert(isPresented: $showDialog) {
+ // switch dialog {
+ // case .file:
+ // Alert(title: Text("파일 다운로드 성공"),
+ // dismissButton: .default(Text("닫기")))
+ // case .image:
+ // Alert(title: Text("이미지 다운로드 성공"),
+ // dismissButton: .default(Text("닫기")))
+ // }
+ // }
}
+
}
-
diff --git a/Projects/App/Sources/UI/Feature/Main/Home/HomeView.swift b/Projects/App/Sources/UI/Feature/Main/Home/HomeView.swift
index b12c0ebe..49b81664 100644
--- a/Projects/App/Sources/UI/Feature/Main/Home/HomeView.swift
+++ b/Projects/App/Sources/UI/Feature/Main/Home/HomeView.swift
@@ -8,10 +8,12 @@
import Foundation
import SwiftUI
+import ADS
struct HomeView: View {
@ObservedObject var vm: HomeViewModel
+ @EnvironmentObject var tm: TokenManager
@State var reader: ScrollViewProxy?
@State private var scrollViewOffset: CGFloat = 0 {
@@ -47,69 +49,73 @@ struct HomeView: View {
.padding(.horizontal, 16)
.padding(.vertical, 12)
.frame(maxWidth: .infinity)
- .background(Color.white)
+ .alimoBackground(AlimoColor.Background.normal)
.clipShape(RoundedCorner(radius: 8, corners: [.bottomLeft, .bottomRight]))
.showShadow(show: isSelectorReached)
}
var body: some View {
- ScrollViewReader { reader in
- ScrollView(showsIndicators: false) {
- VStack(spacing: 0) {
- AlimoLogoBar()
- .id("top")
- if let loudSpeaker = vm.loudSpeaker {
- Notice( notificationspeaketitle: Text(loudSpeaker.title), memberID: Text(loudSpeaker.name), notificationId: loudSpeaker.notificationId)
- }
-
- LazyVStack(spacing: 0, pinnedViews: [.sectionHeaders]) {
- Section(header: categorySelector) {
- switch vm.flow {
- case .fetching:
- LazyVStack(spacing: 0) {
- ForEach(0..<4, id: \.self) { _ in
- NotificationCellShimmer()
+ ZStack{
+ ScrollViewReader { reader in
+ ScrollView(showsIndicators: false) {
+ VStack(spacing: 0) {
+ AlimoLogoBar()
+ .id("top")
+ if let loudSpeaker = vm.loudSpeaker {
+ Notice(vm: NotificationDetailViewModel(notificationId: loudSpeaker.notificationId),homeVm: HomeViewModel(), notificationspeaketitle: Text(loudSpeaker.title), memberID: Text(loudSpeaker.name), notificationId: loudSpeaker.notificationId)
+ }
+
+ LazyVStack(spacing: 0, pinnedViews: [.sectionHeaders]) {
+ Section(header: categorySelector) {
+ switch vm.flow {
+ case .fetching:
+ LazyVStack(spacing: 0) {
+ ForEach(0..<4, id: \.self) { _ in
+ NotificationCellShimmer()
+ }
}
- }
- case .success:
- LazyVStack(spacing: 0) {
- ForEach(vm.notificationList, id: \.uuidString) { notification in
- VStack(spacing: 0) {
- NotificationCeil(notification: notification, onClickEmoji: { emoji in
- Task {
- await vm.patchEmoji(emoji: emoji, notificationId: notification.notificationId)
- }
- }, onClickBookmark: {
- Task {
- await vm.patchBookmark(notificationId: notification.notificationId)
+ case .success:
+ LazyVStack(spacing: 0) {
+ ForEach(vm.notificationList, id: \.uuidString) { notification in
+ VStack(spacing: 0) {
+ NotificationCeil(notification: notification, onClickEmoji: { emoji in
+ Task {
+ await vm.patchEmoji(emoji: emoji, notificationId: notification.notificationId)
+ }
+ }, onClickBookmark: {
+ Task {
+ await vm.patchBookmark(notificationId: notification.notificationId)
+ }
+ }, vm: NotificationDetailViewModel(notificationId: notification.notificationId), homeVm: HomeViewModel())
+
+ Divider()
+ .foregroundStyle(Color.gray100)
+ }
+ .task {
+ guard let index = vm.notificationList.firstIndex(where: { $0.notificationId == notification.notificationId }) else { return }
+
+ if index % pagingInterval == (pagingInterval - 1) && index / pagingInterval == (vm.notificationList.count - 1) / pagingInterval {
+ await vm.fetchNotifications(isNew: false)
}
- }, vm: NotificationDetailViewModel(notificationId: notification.notificationId))
-
- Divider()
- .foregroundStyle(Color.gray100)
- }
- .task {
- guard let index = vm.notificationList.firstIndex(where: { $0.notificationId == notification.notificationId }) else { return }
-
- if index % pagingInterval == (pagingInterval - 1) && index / pagingInterval == (vm.notificationList.count - 1) / pagingInterval {
- await vm.fetchNotifications(isNew: false)
}
}
}
+ .lineLimit(3)
+ .padding(.bottom, 100)
+ case .failure:
+ Image(.noNotice)
+ .padding(.top, 115)
+ Text("공지를 불러올 수 없어요")
+ .font(.subtitle)
+ .foregroundStyle(Color.gray500)
+ .padding(.top, 32)
}
- .padding(.bottom, 100)
- case .failure:
- Image(AppAsset.Assets.noNotice.name)
- .padding(.top, 115)
- Text("공지를 불러올 수 없어요")
- .font(.subtitle)
- .foregroundStyle(Color.gray500)
- .padding(.top, 32)
}
}
+ .shimmer(vm.flow == .fetching)
}
- .shimmer(vm.flow == .fetching)
}
+ .alimoBackground(AlimoColor.Background.normal)
.background(
GeometryReader {
Color.clear.preference(key: ViewOffsetKey.self,
@@ -132,9 +138,24 @@ struct HomeView: View {
}
.task {
vm.flow = .fetching
- await vm.fetchCategoryList()
- await vm.fetchLoudSpeaker()
- await vm.fetchNotifications(isNew: true)
+
+ await withTaskGroup(of: Void.self) { group in
+ group.addTask {
+ await vm.fetchCategoryList()
+ }
+ group.addTask {
+ await vm.fetchLoudSpeaker()
+ }
+ group.addTask {
+ await vm.fetchNotifications(isNew: true)
+ }
+ }
+ }
+ }
+ .onChange(of: vm.refreshFailure) {
+ if $0 {
+ tm.accessToken = ""
+ tm.refreshToken = ""
}
}
}
diff --git a/Projects/App/Sources/UI/Feature/Main/Home/HomeViewModel.swift b/Projects/App/Sources/UI/Feature/Main/Home/HomeViewModel.swift
index aab89e2e..0f1bef49 100644
--- a/Projects/App/Sources/UI/Feature/Main/Home/HomeViewModel.swift
+++ b/Projects/App/Sources/UI/Feature/Main/Home/HomeViewModel.swift
@@ -10,6 +10,7 @@ import Foundation
import SwiftUI
import AlamofireImage
import Alamofire
+import ADS
@MainActor
class HomeViewModel: ObservableObject {
@@ -23,7 +24,7 @@ class HomeViewModel: ObservableObject {
@Published var loudSpeaker: LoudSpeaker? = nil
@Published var notificationList: [Notification] = []
@Published var page = 1
-
+ @Published var refreshFailure = false
@Published var selectedIndex = -1 {
didSet {
Task {
@@ -78,6 +79,8 @@ class HomeViewModel: ObservableObject {
page = nextPage
}
flow = .success
+ } catch AuthError.refreshFailure {
+ refreshFailure = true
} catch {
notificationList = []
page = 1
diff --git a/Projects/App/Sources/UI/Feature/Main/MainView.swift b/Projects/App/Sources/UI/Feature/Main/MainView.swift
index 5682efe2..c2bb6145 100644
--- a/Projects/App/Sources/UI/Feature/Main/MainView.swift
+++ b/Projects/App/Sources/UI/Feature/Main/MainView.swift
@@ -8,33 +8,37 @@
import Foundation
import SwiftUI
+import ADS
struct MainView: View {
- @State private var selectedTab = BottomNavigationType.home
+ @State private var selectedTab = BottomTabType.Home
@StateObject private var profileVM = ProfileViewModel()
@StateObject private var homeVM = HomeViewModel()
@StateObject private var bookmarkVM = BookmarkViewModel()
@EnvironmentObject private var appState: AppState
+ @EnvironmentObject private var tm: TokenManager
var body: some View {
NavigationStack {
ZStack {
switch selectedTab {
- case .home: HomeView(vm: homeVM)
- case .bookmark: BookmarkView(vm: bookmarkVM)
- case .my: ProfileView(vm: profileVM)
+ case .Home:
+ HomeView(vm: homeVM)
+ case .Bookmark:
+ BookmarkView(vm: bookmarkVM)
+ case .Profile:
+ ProfileView(vm: profileVM)
}
+
GeometryReader { reader in
ZStack(alignment: .bottom) {
- BottomNavigation(selectedTab: $selectedTab)
- VStack {
- Color.white
- .frame(height: reader.safeAreaInsets.top, alignment: .top)
- Spacer()
- Color.white
- .frame(height: reader.safeAreaInsets.bottom, alignment: .bottom)
+ AlimoBottomTabBar(selectedTab: selectedTab, onTap: { newTab in
+ selectedTab = newTab
+ }) {
+ EmptyView()
}
+ .padding(.bottom, reader.safeAreaInsets.bottom)
.ignoresSafeArea()
}
}
@@ -44,5 +48,18 @@ struct MainView: View {
endTextEditing()
appState.fetchMember()
}
+ .onChange(of: appState.refreshFailure) { newValue in
+ if newValue {
+ tm.accessToken = ""
+ tm.refreshToken = ""
+ appState.refreshFailure = false
+ }
+ }
}
}
+
+#Preview {
+ MainView()
+ .environmentObject(AppState())
+ .environmentObject(TokenManager())
+}
diff --git a/Projects/App/Sources/UI/Feature/Main/Navigation/BottomNavigationCeil.swift b/Projects/App/Sources/UI/Feature/Main/Navigation/BottomNavigationCeil.swift
index e26c09c5..e1f55905 100644
--- a/Projects/App/Sources/UI/Feature/Main/Navigation/BottomNavigationCeil.swift
+++ b/Projects/App/Sources/UI/Feature/Main/Navigation/BottomNavigationCeil.swift
@@ -27,7 +27,7 @@ struct BottomNavigationCeil: View {
let textColor: Color = isSelected ? .main900 : .gray500
VStack {
- Image(type.image)
+ type.image
.renderingMode(.template)
.resizable()
.frame(width: 28, height: 28)
diff --git a/Projects/App/Sources/UI/Feature/Main/Navigation/BottomNavigationType.swift b/Projects/App/Sources/UI/Feature/Main/Navigation/BottomNavigationType.swift
index b6f65594..55ae86ec 100644
--- a/Projects/App/Sources/UI/Feature/Main/Navigation/BottomNavigationType.swift
+++ b/Projects/App/Sources/UI/Feature/Main/Navigation/BottomNavigationType.swift
@@ -1,12 +1,5 @@
-//
-// BottomNavigationType.swift
-// App
-//
-// Created by dgsw8th71 on 2/25/24.
-// Copyright © 2024 b8nd. All rights reserved.
-//
-
import Foundation
+import SwiftUI
enum BottomNavigationType: CaseIterable {
case home
@@ -21,11 +14,11 @@ enum BottomNavigationType: CaseIterable {
}
}
- var image: String {
+ var image: Image {
switch self {
- case .home: "Home"
- case .bookmark: "BookMark_tabbar"
- case .my: "Profile"
+ case .home: Image(.home)
+ case .bookmark: Image(.bookmarkTabbar)
+ case .my: Image(.profile)
}
}
}
diff --git a/Projects/App/Sources/UI/Feature/Main/NotificationDetail/Component/CommentCeil.swift b/Projects/App/Sources/UI/Feature/Main/NotificationDetail/Component/CommentCeil.swift
index 05f602c4..477400a6 100644
--- a/Projects/App/Sources/UI/Feature/Main/NotificationDetail/Component/CommentCeil.swift
+++ b/Projects/App/Sources/UI/Feature/Main/NotificationDetail/Component/CommentCeil.swift
@@ -8,6 +8,7 @@
import Foundation
import SwiftUI
+import ADS
struct CommentCeil: View {
@@ -30,62 +31,65 @@ struct CommentCeil: View {
var body: some View {
VStack(spacing: 0) {
- HStack(alignment: .top, spacing: 12) {
- AlimoAsyncAvatar(comment.profileImage, type: .small)
-
- VStack(alignment: .leading, spacing: 0) {
- HStack {
- Text("\(comment.commentor)")
- .font(.label)
- .bold()
- Spacer()
-
- if isMe {
- Menu {
- Button("삭제하기", role: .destructive) {
- showDeleting = true
- }
- } label: {
- Image("Roundbutton")
- .resizable()
- .foregroundStyle(Color.gray500)
- .frame(width: 20, height: 20)
- }
- .alert("정말 댓글을 삭제 하시겠습니까?", isPresented: $showDeleting) {
- Button("취소", role: .cancel) {}
- Button("삭제", role: .destructive) {
- deleteComment()
- }
-
- } message: {
- Text("댓글을 삭제 하겠습니까?")
- }
- }
- }
- Text(LocalizedStringKey(comment.content))
- .applyOpenURL()
- .font(.label)
- .foregroundStyle(Color.black)
- .lineSpacing(4)
- .padding(.top, 2)
- HStack(spacing: 8) {
- Text(comment.createdAt.ymdText)
- .foregroundStyle(Color.gray500)
- .font(.caption)
-
- Button {
- onClickSubComment()
- } label: {
- Text("답글달기")
- .font(.caption)
- .foregroundColor(.gray500)
- }
- }
- .padding(.top, 4)
- }
- Spacer()
+ AlimoComment(comment.commentor, type: .comment , date: comment.createdAt.ymdText, content: comment.content) {
+ onClickSubComment()
}
- .padding(.top, 8)
+// HStack(alignment: .top, spacing: 12) {
+// AlimoAsyncAvatar(comment.profileImage, type: .small)
+//
+// VStack(alignment: .leading, spacing: 0) {
+// HStack {
+// Text("\(comment.commentor)")
+// .font(.label)
+// .bold()
+// Spacer()
+//
+// if isMe {
+// Menu {
+// Button("삭제하기", role: .destructive) {
+// showDeleting = true
+// }
+// } label: {
+// Image(.roundbutton)
+// .resizable()
+// .foregroundStyle(Color.gray500)
+// .frame(width: 20, height: 20)
+// }
+// .alert("정말 댓글을 삭제 하시겠습니까?", isPresented: $showDeleting) {
+// Button("취소", role: .cancel) {}
+// Button("삭제", role: .destructive) {
+// deleteComment()
+// }
+//
+// } message: {
+// Text("댓글을 삭제 하겠습니까?")
+// }
+// }
+// }
+// Text(LocalizedStringKey(comment.content))
+// .applyOpenURL()
+// .font(.label)
+// .foregroundStyle(Color.black)
+// .lineSpacing(4)
+// .padding(.top, 2)
+// HStack(spacing: 8) {
+// Text(comment.createdAt.ymdText)
+// .foregroundStyle(Color.gray500)
+// .font(.caption)
+//
+// Button {
+// onClickSubComment()
+// } label: {
+// Text("답글달기")
+// .font(.caption)
+// .foregroundColor(.gray500)
+// }
+// }
+// .padding(.top, 4)
+// }
+// Spacer()
+// }
+// .padding(.top, 8)
}
}
}
diff --git a/Projects/App/Sources/UI/Feature/Main/NotificationDetail/Component/SubCommentCeil.swift b/Projects/App/Sources/UI/Feature/Main/NotificationDetail/Component/SubCommentCeil.swift
index ac612da6..694cc1d4 100644
--- a/Projects/App/Sources/UI/Feature/Main/NotificationDetail/Component/SubCommentCeil.swift
+++ b/Projects/App/Sources/UI/Feature/Main/NotificationDetail/Component/SubCommentCeil.swift
@@ -8,6 +8,7 @@
import Foundation
import SwiftUI
+import ADS
struct SubCommentCeil: View {
@@ -28,53 +29,54 @@ struct SubCommentCeil: View {
var body: some View {
VStack(spacing: 0) {
- HStack(alignment: .top, spacing: 12) {
- AlimoAsyncAvatar(comment.profileImage, type: .small)
-
- VStack(alignment: .leading, spacing: 0) {
- HStack {
- Text("\(comment.commentor)")
- .font(.label)
- .bold()
- Spacer()
- if isMe {
- Menu {
- Button("삭제하기", role: .destructive) {
- showDeleting = true
- }
- } label: {
- Image("Roundbutton")
- .resizable()
- .foregroundStyle(Color.gray500)
- .frame(width: 20, height: 20)
- }
- .alert("정말 댓글을 삭제 하시겠습니까?", isPresented: $showDeleting) {
- Button("취소", role: .cancel) {}
- Button("삭제", role: .destructive) {
- deleteSubComment()
- }
- } message: {
- Text("댓글을 삭제 하겠습니까?")
- }
- }
- }
-
- Text(LocalizedStringKey(comment.content))
- .applyOpenURL()
- .foregroundStyle(Color.black)
- .font(.label)
- .lineSpacing(4)
- .padding(.top, 2)
- HStack(spacing: 8) {
- Text(comment.createdAt.ymdText)
- .foregroundStyle(Color.gray500)
- .font(.caption)
- }
- .padding(.top, 4)
- }
- Spacer()
- }
- .padding(.top, 8)
+ AlimoComment(comment.commentor, type: .subcomment , date: comment.createdAt.ymdText, content: comment.content) {}
+ // HStack(alignment: .top, spacing: 12) {
+// AlimoAsyncAvatar(comment.profileImage, type: .small)
+//
+// VStack(alignment: .leading, spacing: 0) {
+// HStack {
+// Text("\(comment.commentor)")
+// .font(.label)
+// .bold()
+// Spacer()
+// if isMe {
+// Menu {
+// Button("삭제하기", role: .destructive) {
+// showDeleting = true
+// }
+// } label: {
+// Image(.roundbutton)
+// .resizable()
+// .foregroundStyle(Color.gray500)
+// .frame(width: 20, height: 20)
+// }
+// .alert("정말 댓글을 삭제 하시겠습니까?", isPresented: $showDeleting) {
+// Button("취소", role: .cancel) {}
+// Button("삭제", role: .destructive) {
+// deleteSubComment()
+// }
+// } message: {
+// Text("댓글을 삭제 하겠습니까?")
+// }
+// }
+// }
+//
+// Text(LocalizedStringKey(comment.content))
+// .applyOpenURL()
+// .foregroundStyle(Color.black)
+// .font(.label)
+// .lineSpacing(4)
+// .padding(.top, 2)
+// HStack(spacing: 8) {
+// Text(comment.createdAt.ymdText)
+// .foregroundStyle(Color.gray500)
+// .font(.caption)
+// }
+// .padding(.top, 4)
+// }
+// Spacer()
+// }
+// .padding(.top, 8)
}
}
}
diff --git a/Projects/App/Sources/UI/Feature/Main/NotificationDetail/NotificationDetailView.swift b/Projects/App/Sources/UI/Feature/Main/NotificationDetail/NotificationDetailView.swift
index 4f8135cd..dd2bfd99 100644
--- a/Projects/App/Sources/UI/Feature/Main/NotificationDetail/NotificationDetailView.swift
+++ b/Projects/App/Sources/UI/Feature/Main/NotificationDetail/NotificationDetailView.swift
@@ -8,6 +8,7 @@
import Foundation
import SwiftUI
+import ADS
fileprivate let dummyComment = [
(UUID(), "ㅎㅇ", []),
@@ -35,10 +36,13 @@ struct NotificationDetailView: View {
@EnvironmentObject var downloadManager: DownloadManager
@EnvironmentObject private var appState: AppState
@StateObject var vm: NotificationDetailViewModel
+ @StateObject var homeVm: HomeViewModel
@FocusState private var commentInputState: Field?
@State var showDialog = false
@State var dialog = Dialog.file
@State var reader: ScrollViewProxy?
+ var onClickBookmark: () -> Void
+ var onClickEmoji: (EmojiType) -> Void
@ViewBuilder
private var avatar: some View {
@@ -109,39 +113,98 @@ struct NotificationDetailView: View {
@ViewBuilder
private var notificationContainer: some View {
HStack(spacing: 0) {
- avatar
VStack(alignment: .leading, spacing: 0) {
- profile
- content
- .padding(.top, 12)
- VStack(spacing: 8) {
- if !(vm.notification?.files.isEmpty ?? true) {
- downloads
- }
- if let images = vm.notification?.images {
- VStack(spacing: 8) {
- if !images.isEmpty {
- ImageCeil(images: vm.notification?.images ?? [], info: (vm.notification?.createdAt.ymdText)!, name: vm.notification?.name ?? "") {
-
- Task {
- await vm.downloadImages(images: vm.notification?.images ?? []) { images in
- images.forEach {
- downloadManager.saveImageToPhotos(image: $0)
+ HStack(alignment: .top) {
+ AlimoNotification(
+ vm.notification!.title,
+ user: vm.notification!.name,
+ content: vm.notification!.content,
+ isSelected: vm.notification!.isBookMarked,
+ date: vm.notification!.createdAt,
+ addEmojiAction: {emoji in
+ onClickEmoji(emoji)
+ },
+ bookmarkAction: {
+ Task {
+ await homeVm.patchBookmark(notificationId: vm.notification?.notificationId ?? 0)
+ await vm.fetchNotification()
+ }
+ },
+ files: {
+ var fileInfoArray: [FileInfo] = []
+
+ if let files = vm.notification?.files, !files.isEmpty {
+ fileInfoArray.append(contentsOf: files.map { file in
+ FileInfo(title: file.fileName, type: .image(byte: file.fileSize)) {}
+ })
+ }
+
+ if let images = vm.notification?.images, !images.isEmpty {
+ fileInfoArray.append(FileInfo(title: images[0].fileName, type: .file(count: vm.notification?.images.count ?? 0)) {
+ Task {
+ await vm.downloadImages(images: vm.notification?.images ?? []) { images in
+ images.forEach {
+ downloadManager.saveImageToPhotos(image: $0)
+ }
}
}
dialog = .image
showDialog = true
- }
+ })
}
- }
- }
+
+ return fileInfoArray
+ }(),
+ fileDestination: {
+ PreviewImageView( imageUrls: (vm.notification?.images ?? []).compactMap { ($0 as? ImageOrFile)?.fileUrl },
+ name: vm.notification?.name ?? "",
+ Info: (vm.notification?.createdAt.ymdText)!,
+ onClickDownload:{})
+ },
+ hasEmoji: true,
+ emoji: vm.notification?.emoji ?? nil
+ )
}
+ .truncationMode(.tail)
+ .fixedSize(horizontal: false, vertical: true)
+ .multilineTextAlignment(.leading)
}
- info
- .padding(.top, 12)
}
- .padding(.leading, 8)
- }
+
+// HStack(spacing: 0) {
+// avatar
+// VStack(alignment: .leading, spacing: 0) {
+// profile
+// content
+// .padding(.top, 12)
+// VStack(spacing: 8) {
+// if !(vm.notification?.files.isEmpty ?? true) {
+// downloads
+// }
+// if let images = vm.notification?.images {
+// VStack(spacing: 8) {
+// if !images.isEmpty {
+// ImageCeil(images: vm.notification?.images ?? [], info: (vm.notification?.createdAt.ymdText)!, name: vm.notification?.name ?? "") {
+//
+// Task {
+// await vm.downloadImages(images: vm.notification?.images ?? []) { images in
+// images.forEach {
+// downloadManager.saveImageToPhotos(image: $0)
+// }
+// }
+// dialog = .image
+// showDialog = true
+// }
+// }
+// }
+// }
+// }
+// }
+// info
+// .padding(.top, 12)
+// }
+// .padding(.leading, 8)
+// }
}
@ViewBuilder
@@ -180,7 +243,7 @@ struct NotificationDetailView: View {
await vm.fetchNotification()
}
}
- .padding(.leading, 44 + 12)
+// .padding(.leading, 44 + 12)
let radius: CGFloat = 3
let height: CGFloat = 62 + len * 20 + radius
@@ -223,7 +286,7 @@ struct NotificationDetailView: View {
}
} label: {
let imojiColor: Color = isCommentEmpty ? .gray300 : .gray700
- Image("Send")
+ Image(.send)
.resizable()
.renderingMode(.template)
.foregroundStyle(imojiColor)
@@ -260,12 +323,12 @@ struct NotificationDetailView: View {
.padding(.trailing, 16)
Divider()
.padding(.top, 16)
- EmojiContainer(selectedEmoji: vm.selectedEmoji, emojies: vm.emojies) { emoji in
- Task {
- await vm.patchEmoji(emoji: emoji)
- }
- }
- .padding(.top, 16)
+// EmojiContainer(selectedEmoji: vm.selectedEmoji, emojies: vm.emojies) { emoji in
+// Task {
+// await vm.patchEmoji(emoji: emoji)
+// }
+// }
+// .padding(.top, 16)
comment
.padding(.top, 16)
Spacer()
@@ -305,8 +368,15 @@ struct NotificationDetailView: View {
}
.task {
vm.flow = .fetching
- await vm.fetchEmojies()
- await vm.fetchNotification()
+
+ await withTaskGroup(of: Void.self) { group in
+ group.addTask {
+ await vm.fetchEmojies()
+ }
+ group.addTask {
+ await vm.fetchNotification()
+ }
+ }
}
.alert(isPresented: $showDialog) {
switch dialog {
diff --git a/Projects/App/Sources/UI/Feature/Main/NotificationDetail/NotificationDetailViewModel.swift b/Projects/App/Sources/UI/Feature/Main/NotificationDetail/NotificationDetailViewModel.swift
index 09b8a1c5..f3ecac9e 100644
--- a/Projects/App/Sources/UI/Feature/Main/NotificationDetail/NotificationDetailViewModel.swift
+++ b/Projects/App/Sources/UI/Feature/Main/NotificationDetail/NotificationDetailViewModel.swift
@@ -8,6 +8,7 @@
import Foundation
import UIKit
+import ADS
fileprivate let emojiService = EmojiService.live
fileprivate let notificationService = NotificationService.live
diff --git a/Projects/App/Sources/UI/Feature/Main/NotificationDetail/PreviewImageView.swift b/Projects/App/Sources/UI/Feature/Main/NotificationDetail/PreviewImageView.swift
index 2b9f26ba..2e9537d4 100644
--- a/Projects/App/Sources/UI/Feature/Main/NotificationDetail/PreviewImageView.swift
+++ b/Projects/App/Sources/UI/Feature/Main/NotificationDetail/PreviewImageView.swift
@@ -87,7 +87,7 @@ struct PreviewImageView: View {
onClickDownload()
showDialog = true
} label: {
- Image("Download")
+ Image(.download)
.resizable()
.frame(width: 24, height: 24)
diff --git a/Projects/App/Sources/UI/Feature/Onboarding/LaunchScreen/LaunchScreenView.swift b/Projects/App/Sources/UI/Feature/Onboarding/LaunchScreen/LaunchScreenView.swift
index 329f9bc8..03da62e7 100644
--- a/Projects/App/Sources/UI/Feature/Onboarding/LaunchScreen/LaunchScreenView.swift
+++ b/Projects/App/Sources/UI/Feature/Onboarding/LaunchScreen/LaunchScreenView.swift
@@ -10,16 +10,13 @@ import SwiftUI
struct LaunchScreenView: View {
var body: some View {
- ZStack {
+ ZStack(alignment: .center) {
Color.main500
.ignoresSafeArea()
- VStack(alignment: .center, spacing: 0) {
- AlimoLogo(type: .white)
- Text("대소고의 모든 소식")
- .font(.body)
- .foregroundStyle(Color.main900)
- }
+ Image(.alimoIcon)
+ .resizable()
+ .frame(width: 180, height: 180)
}
}
}
diff --git a/Projects/App/Sources/UI/Feature/Onboarding/Onboarding/OnboardingFirstView.swift b/Projects/App/Sources/UI/Feature/Onboarding/Onboarding/OnboardingFirstView.swift
index 91613f9f..d2eaa41b 100644
--- a/Projects/App/Sources/UI/Feature/Onboarding/Onboarding/OnboardingFirstView.swift
+++ b/Projects/App/Sources/UI/Feature/Onboarding/Onboarding/OnboardingFirstView.swift
@@ -32,7 +32,7 @@ struct OnboardingFirstView: View {
Button {
showEasterEgg = true
} label: {
- Image(Asset.screen)
+ Image(.screen)
}
Spacer()
NavigationLink {
diff --git a/Projects/App/Sources/UI/Util/TextExt.swift b/Projects/App/Sources/UI/Util/TextExt.swift
deleted file mode 100644
index 7eb8b08d..00000000
--- a/Projects/App/Sources/UI/Util/TextExt.swift
+++ /dev/null
@@ -1,10 +0,0 @@
-import SwiftUI
-
-public extension Text {
- func applyOpenURL() -> some View {
- self
- .environment(\.openURL, OpenURLAction { url in
- return .systemAction
- })
- }
-}
diff --git a/Projects/App/Sources/UI/Util/ViewExt.swift b/Projects/App/Sources/UI/Util/ViewExt.swift
index b689fcc3..c40f028a 100644
--- a/Projects/App/Sources/UI/Util/ViewExt.swift
+++ b/Projects/App/Sources/UI/Util/ViewExt.swift
@@ -16,22 +16,6 @@ struct AlimoAnimationButton: ButtonStyle {
}
}
-public extension View {
-
- func addPressAnimation(_ isPressed: Bool) -> some View {
- self
- .opacity(isPressed ? 0.64 : 1)
- .scaleEffect(isPressed ? 0.96 : 1)
- .animation(.easeOut, value: 1)
- .disabled(isPressed)
- }
-
- func applyAnimation() -> some View {
- self
- .buttonStyle(AlimoAnimationButton())
- }
-}
-
extension View {
func alimoToolbar(_ title: String,
imageColor: Color = .black,
@@ -66,48 +50,6 @@ extension UINavigationController: UIGestureRecognizerDelegate {
}
}
-public extension View {
- func toLeading() -> some View {
- HStack {
- self
- Spacer()
- }
- }
-
- func toTrailing() -> some View {
- HStack {
- Spacer()
- self
- }
- }
-
- func toTop() -> some View {
- VStack {
- self
- Spacer()
- }
- }
-
- func toBottom() -> some View {
- VStack {
- Spacer()
- self
- }
- }
-
- func toCenter() -> some View {
- VStack {
- Spacer()
- HStack {
- Spacer()
- self
- Spacer()
- }
- Spacer()
- }
- }
-}
-
extension View {
func endTextEditing() {
UIApplication.shared.sendAction(
diff --git a/Tuist/Dependencies.swift b/Tuist/Dependencies.swift
index 7f2dbc81..3a3f1016 100644
--- a/Tuist/Dependencies.swift
+++ b/Tuist/Dependencies.swift
@@ -12,7 +12,8 @@ let dependencies = Dependencies(
.remote(url: "https://github.com/CSolanaM/SkeletonUI.git", requirement: .exact("2.0.1")),
.remote(url: "https://github.com/apple/swift-crypto.git", requirement: .upToNextMajor(from: "3.0.0")),
.remote(url: "https://github.com/firebase/firebase-ios-sdk", requirement: .exact("10.19.0")),
- .remote(url: "https://github.com/kean/Nuke.git", requirement: .exact("12.5"))
+ .remote(url: "https://github.com/google/GoogleUtilities.git", requirement: .exact("7.13.2")),
+ .remote(url: "https://github.com/Team-B1ND/ads-ios.git", requirement: .exact("0.2.1")),
]
),
platforms: [.iOS]
diff --git a/Tuist/ProjectDescriptionHelpers/Dependency+SPM.swift b/Tuist/ProjectDescriptionHelpers/Dependency+SPM.swift
index f9c25715..0107d87d 100644
--- a/Tuist/ProjectDescriptionHelpers/Dependency+SPM.swift
+++ b/Tuist/ProjectDescriptionHelpers/Dependency+SPM.swift
@@ -14,4 +14,5 @@ public extension TargetDependency.SPM {
static let FirebaseMessaging = TargetDependency.external(name: "FirebaseMessaging")
static let Nuke = TargetDependency.external(name: "Nuke")
static let NukeUI = TargetDependency.external(name: "NukeUI")
+ static let ADS = TargetDependency.external(name: "ADS")
}
diff --git a/Tuist/ProjectDescriptionHelpers/Project+Templates.swift b/Tuist/ProjectDescriptionHelpers/Project+Templates.swift
index 95aecdfd..29f1adc8 100644
--- a/Tuist/ProjectDescriptionHelpers/Project+Templates.swift
+++ b/Tuist/ProjectDescriptionHelpers/Project+Templates.swift
@@ -17,7 +17,6 @@ public extension Project {
var baseSettings = SettingsDictionary()
.debugInformationFormat(.dwarfWithDsym)
let settings: Settings = .settings(
- base: ["DEVELOPMENT_TEAM": "\(teamId)"],
configurations: [
.debug(name: .debug, settings: baseSettings),
.release(name: .release, settings: baseSettings)