diff --git a/Projects/App/Project.swift b/Projects/App/Project.swift index 26dfc010..ef75512a 100644 --- a/Projects/App/Project.swift +++ b/Projects/App/Project.swift @@ -18,6 +18,24 @@ let project = Project( ] ), targets: [ + .init( + name: "WidgetExtension", + platform: .iOS, + product: .appExtension, + bundleId: "com.yapp.moneymong.WidgetExtension", + infoPlist: .extendingDefault(with: [ + "CFBundleDisplayName": "$(PRODUCT_NAME)", + "NSExtension": [ + "NSExtensionPointIdentifier": "com.apple.widgetkit-extension", + ], + ]), + sources: "WidgetExtension/Sources/**", + resources: "WidgetExtension/Resources/**", + entitlements: "WidgetExtension/Resources/WidgetExtension.entitlements", + dependencies: [ + .project(target: "DesignSystem", path: .relativeToRoot("Projects/Shared/DesignSystem")) + ] + ), Target( name: "Moneymong", platform: .iOS, @@ -63,7 +81,8 @@ let project = Project( entitlements: "Resources/App.entitlements", dependencies: [ .project(target: "SignFeature", path: .relativeToRoot("Projects/Feature/Sign")), - .project(target: "MainFeature", path: .relativeToRoot("Projects/Feature/Main")) + .project(target: "MainFeature", path: .relativeToRoot("Projects/Feature/Main")), + .target(name: "WidgetExtension") ], settings: .settings( base: .init() diff --git a/Projects/App/Resources/App.entitlements b/Projects/App/Resources/App.entitlements index a812db50..4ea3fcaa 100644 --- a/Projects/App/Resources/App.entitlements +++ b/Projects/App/Resources/App.entitlements @@ -6,5 +6,9 @@ Default + com.apple.security.application-groups + + group.moneymong + diff --git a/Projects/App/Sources/AppDelegate.swift b/Projects/App/Sources/AppDelegate.swift index b7f683cd..159cabf7 100644 --- a/Projects/App/Sources/AppDelegate.swift +++ b/Projects/App/Sources/AppDelegate.swift @@ -11,7 +11,6 @@ class AppDelegate: UIResponder, UIApplicationDelegate { _ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? ) -> Bool { - //URLSessionProxyDelegate.enableAutomaticRegistration() FirebaseManager.shared.initSDK() KakaoAuthManager.shared.initSDK() return true diff --git a/Projects/App/Sources/SceneDelegate.swift b/Projects/App/Sources/SceneDelegate.swift index 385088eb..0f7927a0 100644 --- a/Projects/App/Sources/SceneDelegate.swift +++ b/Projects/App/Sources/SceneDelegate.swift @@ -19,11 +19,18 @@ class SceneDelegate: UIResponder, UIWindowSceneDelegate { self.appCoordinator = AppCoordinator(navigationController: navigationController) appCoordinator?.start(animated: false) + + self.scene(scene, openURLContexts: connectionOptions.urlContexts) } func scene(_ scene: UIScene, openURLContexts URLContexts: Set) { guard let url = URLContexts.first?.url else { return } - KakaoAuthManager.shared.openURL(url) + + if url.absoluteString.contains("widget://") { + DeepLinkManager.setDestination(url.absoluteString) + } else { + KakaoAuthManager.shared.openURL(url) + } } func sceneDidDisconnect(_ scene: UIScene) {} diff --git a/Projects/App/WidgetExtension/Resources/WidgetExtension-Info.plist b/Projects/App/WidgetExtension/Resources/WidgetExtension-Info.plist new file mode 100644 index 00000000..3cc95de1 --- /dev/null +++ b/Projects/App/WidgetExtension/Resources/WidgetExtension-Info.plist @@ -0,0 +1,29 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + $(PRODUCT_NAME) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + XPC! + CFBundleShortVersionString + 1.0 + CFBundleVersion + 1 + NSExtension + + NSExtensionPointIdentifier + com.apple.widgetkit-extension + + + diff --git a/Projects/App/Moneymong.entitlements b/Projects/App/WidgetExtension/Resources/WidgetExtension.entitlements similarity index 70% rename from Projects/App/Moneymong.entitlements rename to Projects/App/WidgetExtension/Resources/WidgetExtension.entitlements index a812db50..036c6e5e 100644 --- a/Projects/App/Moneymong.entitlements +++ b/Projects/App/WidgetExtension/Resources/WidgetExtension.entitlements @@ -2,9 +2,9 @@ - com.apple.developer.applesignin + com.apple.security.application-groups - Default + group.moneymong diff --git a/Projects/App/WidgetExtension/Sources/Model/AgencyEntry.swift b/Projects/App/WidgetExtension/Sources/Model/AgencyEntry.swift new file mode 100644 index 00000000..a971d344 --- /dev/null +++ b/Projects/App/WidgetExtension/Sources/Model/AgencyEntry.swift @@ -0,0 +1,50 @@ +import WidgetKit + +struct AgencyEntry: TimelineEntry { + let date: Date + let name: String + let amount: Int +} + +struct AgencyProvider: TimelineProvider { + func placeholder(in context: Context) -> AgencyEntry { + AgencyEntry( + date: Date(), + name: "머니몽 대학", + amount: 10000 + ) + } + + func getSnapshot(in context: Context, completion: @escaping (AgencyEntry) -> ()) { + let entry = AgencyEntry( + date: Date(), + name: "머니몽 대학", + amount: 10000 + ) + completion(entry) + } + + func getTimeline(in context: Context, completion: @escaping (Timeline) -> ()) { + let entry: AgencyEntry + if let dic = UserDefaults(suiteName: "group.moneymong")?.dictionary(forKey: "test"), + let name = dic["name"] as? String, + let amount = dic["total"] as? Int { + + entry = AgencyEntry( + date: .now, + name: name, + amount: amount + ) + + } else { + entry = AgencyEntry( + date: .now, + name: "", + amount: 0 + ) + } + let nextUpdate = Calendar.current.date(byAdding: .hour, value: 1, to: .now) + let timeline = Timeline(entries: [entry], policy: .after(nextUpdate!)) + completion(timeline) + } +} diff --git a/Projects/App/WidgetExtension/Sources/Model/OCREntry.swift b/Projects/App/WidgetExtension/Sources/Model/OCREntry.swift new file mode 100644 index 00000000..c9db6881 --- /dev/null +++ b/Projects/App/WidgetExtension/Sources/Model/OCREntry.swift @@ -0,0 +1,21 @@ +import WidgetKit + +struct OCREntry: TimelineEntry { + let date: Date +} + +struct OCRProvider: TimelineProvider { + func placeholder(in context: Context) -> OCREntry { + OCREntry(date: Date()) + } + + func getSnapshot(in context: Context, completion: @escaping (OCREntry) -> ()) { + let entry = OCREntry(date: Date()) + completion(entry) + } + + func getTimeline(in context: Context, completion: @escaping (Timeline) -> ()) { + let timeline = Timeline(entries: [OCREntry(date: .now)], policy: .never) + completion(timeline) + } +} diff --git a/Projects/App/WidgetExtension/Sources/Widgets/MainWidget.swift b/Projects/App/WidgetExtension/Sources/Widgets/MainWidget.swift new file mode 100644 index 00000000..3c6b9b60 --- /dev/null +++ b/Projects/App/WidgetExtension/Sources/Widgets/MainWidget.swift @@ -0,0 +1,80 @@ +import WidgetKit +import SwiftUI +import DesignSystem + +struct MainWidget: Widget { + private let kind: String = "MainWidget" + + var body: some WidgetConfiguration { + StaticConfiguration(kind: kind, provider: AgencyProvider()) { entry in + MainWidgetEntryView(entry: entry) + } + .supportedFamilies([.systemMedium]) + .configurationDisplayName("회비 내역 등록") + .description("등록할 회비 내역을 바로 입력할 수 있어요") + } +} + +struct MainWidgetEntryView: View { + var entry: AgencyProvider.Entry + + + var body: some View { + VStack { + Link(destination: URL(string: "widget://CreateLedger")!) { + HStack(alignment: .center) { + Text("\(entry.name)에 오늘 사용한 금액 입력") + .bold() + .font(.system(size: 16)) + .foregroundStyle(Color(uiColor: Colors.Gray._6)) + .frame(height: 24) + .frame(maxWidth: .infinity) + .padding(.leading, 16) + .padding(.vertical, 18) + Image(uiImage: Images.mongCoin!) + .padding(.trailing, 16) + } + .background(Color.white) + .cornerRadius(12) + } + + Spacer() + HStack { + Link(destination: URL(string: "widget://OCR")!) { + HStack { + Spacer() + Text("영수증 스캔") + .bold() + .font(.system(size: 16)) + .foregroundStyle(Color(uiColor: Colors.Gray._5)) + Spacer() + } + } + + Divider() + .background(Color(uiColor: Colors.Gray._5)) + Link(destination: URL(string: "widget://LedgerDetail")!) { + HStack { + Spacer() + Text("회비 내역 확인") + .bold() + .font(.system(size: 16)) + .foregroundStyle(Color(uiColor: Colors.Gray._5)) + Spacer() + } + } + } + .frame(height: 24) + Spacer() + } + .containerBackground(for: .widget) { + Color(uiColor: Colors.Gray._1) + } + } +} + +#Preview(as: .systemMedium, widget: { + MainWidget() +}, timeline: { + AgencyEntry(date: .now, name: "머니몽", amount: 1000) +}) diff --git a/Projects/App/WidgetExtension/Sources/Widgets/OCRWidget.swift b/Projects/App/WidgetExtension/Sources/Widgets/OCRWidget.swift new file mode 100644 index 00000000..1f14d728 --- /dev/null +++ b/Projects/App/WidgetExtension/Sources/Widgets/OCRWidget.swift @@ -0,0 +1,40 @@ +import WidgetKit +import SwiftUI + +import DesignSystem + +struct OCRWidget: Widget { + private let kind: String = "OCRWidget" + + var body: some WidgetConfiguration { + StaticConfiguration(kind: kind, provider: OCRProvider()) { entry in + OCRWidgetEntryView() + } + .supportedFamilies([.systemSmall]) + .configurationDisplayName("회비 내역 스캔") + .description("영수증 스캔으로 빠르게 회비 내역을 기록해보세요") + } +} + +struct OCRWidgetEntryView: View { + var body: some View { + VStack { + if let image = Images.scanCircle { + Image(uiImage: image) + .resizable() + .frame(width: 80, height: 80) + } + + Spacer() + + Text("영수증 스캔하기") + .foregroundColor(Color(uiColor: Colors.Gray._8)) + .font(.system(size: 16, weight: .bold)) + } + .padding(.vertical, 20) + .widgetURL(URL(string: "widget://OCR")) + .containerBackground(for: .widget) { + Color(uiColor: Colors.Gray._1) + } + } +} diff --git a/Projects/App/WidgetExtension/Sources/Widgets/SecondWidget.swift b/Projects/App/WidgetExtension/Sources/Widgets/SecondWidget.swift new file mode 100644 index 00000000..a59bb96e --- /dev/null +++ b/Projects/App/WidgetExtension/Sources/Widgets/SecondWidget.swift @@ -0,0 +1,83 @@ +import WidgetKit +import SwiftUI + +import DesignSystem + +struct SecondWidget: Widget { + private let kind: String = "SecondWidget" + + var body: some WidgetConfiguration { + StaticConfiguration(kind: kind, provider: AgencyProvider()) { entry in + SecondWidgetEntryView(entry: entry) + } + .supportedFamilies([.systemMedium]) + .configurationDisplayName("내 장부") + .description("장부에 돈이 얼마 남앗는지 바로 확인할 수 있어요") + } +} + +struct SecondWidgetEntryView: View { + var entry: AgencyProvider.Entry + + var body: some View { + VStack { + HStack(alignment: .top, spacing: 0) { + VStack(alignment: .leading, spacing: 4) { + Text("\(entry.name)에 이만큼 남았어요") + .font(.system(size: 12, weight: .semibold)) + .foregroundColor(Color(uiColor: Colors.Gray._6)) + .frame(height: 18) + + Text("\(entry.amount)원") + .font(.system(size: 28, weight: .bold)) + .foregroundColor(Color(uiColor: Colors.Gray._10)) + .frame(height: 26) + } + + Spacer() + + Image(uiImage: Images.mongLedger!) + .resizable() + .aspectRatio(contentMode: .fit) + .frame(width: 98) + .offset(y: -10) + } + + HStack(spacing: 10) { + Link(destination: URL(string: "widget://OCR")!) { + Text("영수증 스캔") + .font(.system(size: 12, weight: .bold)) + .foregroundColor(Color(uiColor: Colors.White._1)) + .frame(height: 18) + .frame(maxWidth: .infinity) + .padding(10) + .background(Color(uiColor: Colors.Blue._4)) + .cornerRadius(10) + } + + Link(destination: URL(string: "widget://LedgerDetail")!) { + Text("회비 내역 확인") + .font(.system(size: 12, weight: .bold)) + .foregroundColor(Color(uiColor: Colors.Blue._4)) + .frame(height: 18) + .frame(maxWidth: .infinity) + .padding(10) + .background(Color(uiColor: Colors.Blue._1)) + .cornerRadius(10) + } + } + } + .padding(.horizontal, 10) + .padding(.vertical, 20) + .containerBackground(for: .widget) { + Color(uiColor: Colors.Gray._1) + } + } +} + +#Preview(as: .systemMedium) { + SecondWidget() +} timeline: { + AgencyEntry(date: .now, name: "머니몽", amount: 100000) + AgencyEntry(date: .now, name: "머니몽2", amount: 120000) +} diff --git a/Projects/App/WidgetExtension/Sources/Widgets/Widgets.swift b/Projects/App/WidgetExtension/Sources/Widgets/Widgets.swift new file mode 100644 index 00000000..78c42b15 --- /dev/null +++ b/Projects/App/WidgetExtension/Sources/Widgets/Widgets.swift @@ -0,0 +1,12 @@ +import SwiftUI +import WidgetKit + +@main +struct Widgets: WidgetBundle { + @WidgetBundleBuilder + var body: some Widget { + MainWidget() + SecondWidget() + OCRWidget() + } +} diff --git a/Projects/Core/Core/Sources/DeepLinkManager.swift b/Projects/Core/Core/Sources/DeepLinkManager.swift new file mode 100644 index 00000000..500d9621 --- /dev/null +++ b/Projects/Core/Core/Sources/DeepLinkManager.swift @@ -0,0 +1,18 @@ +import Foundation + +public struct DeepLinkManager { + + public static var destination: String? + + // OCR, CreateLedger, LedgerDetail + public static func setDestination(_ urlString: String) { + let query = urlString.replacingOccurrences(of: "widget://", with: "") + destination = query + + NotificationCenter.default.post(name: .init("deeplink"), object: nil, userInfo: ["query": query]) + } + + public static func clear() { + destination = nil + } +} diff --git a/Projects/Core/Core/Sources/Network/APIs/LedgerAPI/Repository/LedgerRepository.swift b/Projects/Core/Core/Sources/Network/APIs/LedgerAPI/Repository/LedgerRepository.swift index e1e38b70..f2c42ed4 100644 --- a/Projects/Core/Core/Sources/Network/APIs/LedgerAPI/Repository/LedgerRepository.swift +++ b/Projects/Core/Core/Sources/Network/APIs/LedgerAPI/Repository/LedgerRepository.swift @@ -1,4 +1,5 @@ import Foundation +import WidgetKit public protocol LedgerRepositoryInterface { @@ -128,7 +129,17 @@ public final class LedgerRepository: LedgerRepositoryInterface { } else { targetType = LedgerAPI.ledgerFilterList(id: id, param: request) } - return try await networkManager.request(target: targetType, of: LedgerListResponseDTO.self).toEntity + + let result = try await networkManager.request(target: targetType, of: LedgerListResponseDTO.self) + + let dic:[String: Any] = [ + "name" : "머니몽 소속", + "total" : result.totalBalance + ] + + UserDefaults(suiteName: "group.moneymong")?.set(dic, forKey: "test") + WidgetCenter.shared.reloadAllTimelines() + return result.toEntity } public func fetchLedgerDetail(id: Int) async throws -> LedgerDetail { diff --git a/Projects/Feature/Base/Sources/Coordinator/Coordinator.swift b/Projects/Feature/Base/Sources/Coordinator/Coordinator.swift index 3431b030..de2dbe03 100644 --- a/Projects/Feature/Base/Sources/Coordinator/Coordinator.swift +++ b/Projects/Feature/Base/Sources/Coordinator/Coordinator.swift @@ -6,6 +6,7 @@ public enum Scene { case login // 로그인화면 case ledger // 장부화면 case createManualLedger(Int) // 운영비 등록화면 + case createOCRLedger(Int) // OCR 스캔화면 case agency // 소속화면 } diff --git a/Projects/Feature/Base/Sources/NSNotificationName+.swift b/Projects/Feature/Base/Sources/NSNotificationName+.swift index 273bcc6d..5ac57fbb 100644 --- a/Projects/Feature/Base/Sources/NSNotificationName+.swift +++ b/Projects/Feature/Base/Sources/NSNotificationName+.swift @@ -3,4 +3,5 @@ import Foundation public extension NSNotification.Name { static let tabBarHidden = NSNotification.Name("tabBarHidden") // toggle Tab static let presentManualCreater = NSNotification.Name("presentManualCreater") // 동아리 운영비 등록화면 present + static let presentOCRCreater = NSNotification.Name("presentOCRCreater") // 동아리 운영비 OCR 스캔화면 present } diff --git a/Projects/Feature/Ledger/Sources/Scene/Ledger/LedgerVC.swift b/Projects/Feature/Ledger/Sources/Scene/Ledger/LedgerVC.swift index af2b113e..ca9de933 100644 --- a/Projects/Feature/Ledger/Sources/Scene/Ledger/LedgerVC.swift +++ b/Projects/Feature/Ledger/Sources/Scene/Ledger/LedgerVC.swift @@ -52,10 +52,6 @@ public final class LedgerVC: BaseVC, View { ) } - public override func setupUI() { - super.setupUI() - } - public override func setupConstraints() { super.setupConstraints() view.addSubview(emptyView) diff --git a/Projects/Feature/Ledger/Sources/Scene/Ledger/TabItems/Ledger/LedgerTabVC.swift b/Projects/Feature/Ledger/Sources/Scene/Ledger/TabItems/Ledger/LedgerTabVC.swift index fbe2d141..b60bbf02 100644 --- a/Projects/Feature/Ledger/Sources/Scene/Ledger/TabItems/Ledger/LedgerTabVC.swift +++ b/Projects/Feature/Ledger/Sources/Scene/Ledger/TabItems/Ledger/LedgerTabVC.swift @@ -117,6 +117,14 @@ final class LedgerTabVC: BaseVC, View { } .disposed(by: disposeBag) + NotificationCenter.default.rx.notification(.presentOCRCreater) + .compactMap { $0.userInfo?["id"] as? Int } + .observe(on: MainScheduler.instance) + .bind(with: self) { owner, id in + owner.coordinator?.present(.createOCRLedger(id)) + } + .disposed(by: disposeBag) + dateRangeView.rx.tapGesture .map { _ in Reactor.Action.didTapDateRangeView } .bind(to: reactor.action) diff --git a/Projects/Feature/Main/Sources/MainDIContainer.swift b/Projects/Feature/Main/Sources/MainDIContainer.swift index 60d515de..1ffeb99d 100644 --- a/Projects/Feature/Main/Sources/MainDIContainer.swift +++ b/Projects/Feature/Main/Sources/MainDIContainer.swift @@ -39,7 +39,8 @@ public final class MainDIContainer { } func mainTab(with coordinator: Coordinator) -> MainTapViewController { - let tabVC = MainTapViewController() + let tabVC = MainTapViewController(agencyID: localStorage.selectedAgency) + tabVC.coordinator = coordinator tabVC.setViewControllers( [agencyTab(with: coordinator), ledgerTab(with: coordinator), diff --git a/Projects/Feature/Main/Sources/MainTabBarCoordinator.swift b/Projects/Feature/Main/Sources/MainTabBarCoordinator.swift index 90362007..a4796ecd 100644 --- a/Projects/Feature/Main/Sources/MainTabBarCoordinator.swift +++ b/Projects/Feature/Main/Sources/MainTabBarCoordinator.swift @@ -32,6 +32,10 @@ public final class MainTabBarCoordinator: Coordinator { case let .createManualLedger(agencyID): // 장부 이동 & tabBarController?.selectedIndex = 1 NotificationCenter.default.post(name: .presentManualCreater, object: nil, userInfo: ["id": agencyID]) + case let .createOCRLedger(agencyID): + tabBarController?.selectedIndex = 1 + NotificationCenter.default.post(name: .presentOCRCreater, object: nil, userInfo: ["id": agencyID]) + case .agency: // 소속으로 이동 tabBarController?.selectedIndex = 0 } diff --git a/Projects/Feature/Main/Sources/MainTapViewController.swift b/Projects/Feature/Main/Sources/MainTapViewController.swift index d5fea6f5..4275c479 100644 --- a/Projects/Feature/Main/Sources/MainTapViewController.swift +++ b/Projects/Feature/Main/Sources/MainTapViewController.swift @@ -1,14 +1,18 @@ import UIKit import BaseFeature +import Core import DesignSystem import RxSwift public final class MainTapViewController: UITabBarController { private let disposeBag = DisposeBag() + weak var coordinator: Coordinator? + private let agencyID: Int? - public init() { + public init(agencyID: Int?) { + self.agencyID = agencyID super.init(nibName: nil, bundle: nil) } @@ -26,6 +30,7 @@ public final class MainTapViewController: UITabBarController { setupTabBar() bind() + observeNotification() } private func setupTabBar() { @@ -58,4 +63,30 @@ public final class MainTapViewController: UITabBarController { }) .disposed(by: disposeBag) } + + private func observeNotification() { + NotificationCenter.default.rx + .notification(.init("deeplink")) + .compactMap { $0.userInfo?["query"] as? String } + .bind(with: self) { owner, query in + guard let agencyID = owner.agencyID else { return } + + switch query { + case "OCR": + owner.coordinator?.move(to: .createOCRLedger(agencyID)) + case "CreateLedger": + owner.coordinator?.move(to: .createManualLedger(agencyID)) + case "LedgerDetail": + owner.coordinator?.move(to: .ledger) + default: break + } + + DeepLinkManager.clear(); + } + .disposed(by: disposeBag) + + if let destination = DeepLinkManager.destination { + NotificationCenter.default.post(name: .init("deeplink"), object: nil, userInfo: ["query": destination]) + } + } } diff --git a/Projects/Shared/DesignSystem/Resources/Image/Icon.xcassets/MoneyMong/mong.coin.imageset/Contents.json b/Projects/Shared/DesignSystem/Resources/Image/Icon.xcassets/MoneyMong/mong.coin.imageset/Contents.json new file mode 100644 index 00000000..367283bb --- /dev/null +++ b/Projects/Shared/DesignSystem/Resources/Image/Icon.xcassets/MoneyMong/mong.coin.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "money mong coin_front view 1.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "money mong coin_front view 1@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "money mong coin_front view 1@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/Shared/DesignSystem/Resources/Image/Icon.xcassets/MoneyMong/mong.coin.imageset/money mong coin_front view 1.png b/Projects/Shared/DesignSystem/Resources/Image/Icon.xcassets/MoneyMong/mong.coin.imageset/money mong coin_front view 1.png new file mode 100644 index 00000000..0546b8c9 Binary files /dev/null and b/Projects/Shared/DesignSystem/Resources/Image/Icon.xcassets/MoneyMong/mong.coin.imageset/money mong coin_front view 1.png differ diff --git a/Projects/Shared/DesignSystem/Resources/Image/Icon.xcassets/MoneyMong/mong.coin.imageset/money mong coin_front view 1@2x.png b/Projects/Shared/DesignSystem/Resources/Image/Icon.xcassets/MoneyMong/mong.coin.imageset/money mong coin_front view 1@2x.png new file mode 100644 index 00000000..fe00aba6 Binary files /dev/null and b/Projects/Shared/DesignSystem/Resources/Image/Icon.xcassets/MoneyMong/mong.coin.imageset/money mong coin_front view 1@2x.png differ diff --git a/Projects/Shared/DesignSystem/Resources/Image/Icon.xcassets/MoneyMong/mong.coin.imageset/money mong coin_front view 1@3x.png b/Projects/Shared/DesignSystem/Resources/Image/Icon.xcassets/MoneyMong/mong.coin.imageset/money mong coin_front view 1@3x.png new file mode 100644 index 00000000..f4266c2b Binary files /dev/null and b/Projects/Shared/DesignSystem/Resources/Image/Icon.xcassets/MoneyMong/mong.coin.imageset/money mong coin_front view 1@3x.png differ diff --git a/Projects/Shared/DesignSystem/Resources/Image/Icon.xcassets/OCR/scan.circle.gray.imageset/Contents.json b/Projects/Shared/DesignSystem/Resources/Image/Icon.xcassets/OCR/scan.circle.gray.imageset/Contents.json new file mode 100644 index 00000000..22b0d085 --- /dev/null +++ b/Projects/Shared/DesignSystem/Resources/Image/Icon.xcassets/OCR/scan.circle.gray.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Group 360156.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Group 360156@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Group 360156@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/Projects/Shared/DesignSystem/Resources/Image/Icon.xcassets/OCR/scan.circle.gray.imageset/Group 360156.png b/Projects/Shared/DesignSystem/Resources/Image/Icon.xcassets/OCR/scan.circle.gray.imageset/Group 360156.png new file mode 100644 index 00000000..9504583b Binary files /dev/null and b/Projects/Shared/DesignSystem/Resources/Image/Icon.xcassets/OCR/scan.circle.gray.imageset/Group 360156.png differ diff --git a/Projects/Shared/DesignSystem/Resources/Image/Icon.xcassets/OCR/scan.circle.gray.imageset/Group 360156@2x.png b/Projects/Shared/DesignSystem/Resources/Image/Icon.xcassets/OCR/scan.circle.gray.imageset/Group 360156@2x.png new file mode 100644 index 00000000..d7ef5787 Binary files /dev/null and b/Projects/Shared/DesignSystem/Resources/Image/Icon.xcassets/OCR/scan.circle.gray.imageset/Group 360156@2x.png differ diff --git a/Projects/Shared/DesignSystem/Resources/Image/Icon.xcassets/OCR/scan.circle.gray.imageset/Group 360156@3x.png b/Projects/Shared/DesignSystem/Resources/Image/Icon.xcassets/OCR/scan.circle.gray.imageset/Group 360156@3x.png new file mode 100644 index 00000000..60eeed38 Binary files /dev/null and b/Projects/Shared/DesignSystem/Resources/Image/Icon.xcassets/OCR/scan.circle.gray.imageset/Group 360156@3x.png differ diff --git a/Projects/Shared/DesignSystem/Sources/Utils/Images.swift b/Projects/Shared/DesignSystem/Sources/Utils/Images.swift index 2ad0991b..0909bef6 100644 --- a/Projects/Shared/DesignSystem/Sources/Utils/Images.swift +++ b/Projects/Shared/DesignSystem/Sources/Utils/Images.swift @@ -87,5 +87,9 @@ public enum Images { public static let timeLineBlue = UIImage(named: "time.line.blue", in: Bundle.module, with: nil) public static let feedback = UIImage(named: "feedback", in: Bundle.module, with: nil) + + // Widget + public static let scanCircle = UIImage(named: "scan.circle.gray", in: Bundle.module, with: nil) + public static let mongCoin = UIImage(named: "mong.coin", in: Bundle.module, with: nil) }